nodejs html多语言切换,利用 nodejs 自动生成 Android 语言包实现应用内切换多语言的方案...
Android 默认的多语言支持
在 Android 工程的 res 目录下,通过定义对应的语言文件夹名称就可以实现多语言支持
// 手动切换语言
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
config.locale = Locale.ENGLISH;
resources.updateConfiguration(config, dm);
支持应用内的语言自动切换(可以不依赖系统语言手动切换应用的语言包)
1.extends Resources
// Application 重写 getResources 方法
@Override
public Resources getResources() {
return MyResources.getInstance(super.getResources());
}
// 重写 getString, getStringArray, getValue, getText 等方法
public class MyResources extends Resources {
@Override
public String getString(int id) {
// 从对应语言的 sparseArray 中取出文案
String value = MyLang.getString(id);
if(value == null) {
value = super.getString(id);
}
return value;
}
}
2.使用 json 管理语言文案,通过脚本将 json 转换为 java 文件, 其中java 文件用 sparseArray 保存文案信息。
// 转换代码
/*
* 优化 SparseArray 的使用性能:
* 1.让 SparseArray 长度固定。
* 2.SparseArray 是基于二分查找,让其保持顺序可以优化查找性能。
*/
var fs = require("fs");
var translate = function (json, javaName) {
var start = '/* AUTO-GENERATED FILE. DO NOT MODIFY.*/\n\
package com.xxx.lang;\n\n\
import android.util.SparseArray;\n\
import com.xxx.R;\
\n\
\n\
class ' + javaName + ' {\n\
public static SparseArray getStringMap() {\n';
var keys = Object.keys(json);
var sortedKeys = keys.sort(function (a, b) {
return a.localeCompare(b);
});
var value = "";
var len = 0;
var mapString = "";
var mapArrayString = "";
var mapObjectString = "";
sortedKeys.forEach(function (key) {
len++;
value = json[key];
var type = objType(value);
if (type == "string") {
mapString += ' map.put(R.string.' + key + ', "' + stringify(value) + '");\r\n';
} else if (type == "array") {
mapArrayString += ' map.put(R.array.' + key + ', new String[]{' + arrayToString(value) + '});\r\n';
} else if (type == "object") {
mapObjectString += ' map.put(R.plurals.' + key + ', new String[]{' + objToString(value) + '});\r\n';
} else {
len--;
}
});
var end = ' return map;\n\
}\n\
}';
return start + " SparseArray map = new SparseArray<>(" + len + ");\n" + mapString + mapArrayString + mapObjectString + end;
};
var stringify = function (ori) {
return ori.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\\"/g, '\\"')
.replace(/\n/g, '\\n')
.replace(/\t/g, '\\t')
;
};
var arrayToString = function (arr) {
var ret = "";
var len = arr.length;
for (var i = 0; i < len; i++) {
ret += '"' + stringify(arr[i]) + '"';
if (i != len - 1) {
ret += ', ';
}
}
return ret;
};
var objToString = function (obj) {
var arr = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
arr[key | 0] = obj[key];
}
}
return arrayToString(arr);
};
var objType = function (obj) {
return obj == null/*||isNaN(obj)*/ ?
String(obj) :
(Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1] || "").toLowerCase();
};
var trans = function (path, javaName) {
var source = "", ret = "";
try {
source = require(path);
ret = translate(source, javaName);
} catch (e) {
console.error(e);
return;
}
return ret;
};
module.exports = trans;
3.让 gradle 支持 nodejs
// 创建一个 gradle 文件
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.moowork.gradle:gradle-node-plugin:0.14"
}
}
apply plugin: "com.moowork.node"
task genLang(type: NodeTask) {
script = file("scripts/gen.js")
execOverrides {
it.ignoreExitValue = true
it.workingDir = "scripts/"
}
}
node {
version = "7.2.0"
distBaseUrl = "https://nodejs.org/dist"
// distBaseUrl = "http://npm.taobao.org/mirrors/node"
// If true, it will download node using above parameters.
// If false, it will try to use globally installed node.
download = true
workDir = file("${project.buildDir}/nodejs")
npmWorkDir = file("${project.buildDir}/npm")
nodeModulesDir = file("${project.projectDir}")
}
nodejs html多语言切换,利用 nodejs 自动生成 Android 语言包实现应用内切换多语言的方案...相关推荐
- 利用Flex自动生成C语言词法分析器
利用Flex自动生成C语言词法分析器 Flex介绍 C语言词法规则 具体实现 源代码 测试代码 实验结果 Flex介绍 1975年Mike Lesk和实习生Eric Schmidt设计并实现了一个 ...
- 利用ApacheCXF自动生成webservice的客户端代码
利用ApacheCXF自动生成webservice的客户端代码 一.环境准备 1.JDK环境 2.下载apache-cxf发布包,举例版本为3.2.14,解压发布包,设置CXF_HOME,并添加%CX ...
- php开发工程师名片,PHP编程:利用PHP自动生成印有用户信息的名片
<PHP编程:利用PHP自动生成印有用户信息的名片>要点: 本文介绍了PHP编程:利用PHP自动生成印有用户信息的名片,希望对您有用.如果有疑问,可以联系我们. 前言 PHP教程无论是自己 ...
- 【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像
前言 深度学习作为人工智能的重要手段,迎来了爆发,在NLP.CV.物联网.无人机等多个领域都发挥了非常重要的作用.最近几年,各种深度学习算法层出不穷, Generative Adverarial Ne ...
- 【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像...
模型训练与在线预测服务.推荐算法四部曲.机器学习PAI实战.更多精彩,尽在 开发者分会场 [机器学习PAI实战]-- 玩转人工智能之综述 [机器学习PAI实战]-- 玩转人工智能之商品价格预测 [机器 ...
- java编程猜数字大小 (要求利用随机数自动生成一个0--100内的随机数字)
java编程猜数字(要求利用随机数自动生成一个0–100内的随机数字) public static void main(String[] args) {int num=(int)(Math.rando ...
- 自动生成Android界面,面向Android的Web Service界面自动生成技术研究
摘要: 据统计,开发人员在开发应用程序的过程中,接近一半的代码用于用户界面部分,大约一半的运行时间用于执行这一部分.所以,减少用户界面部分的开发代码和运行时间,能有效提高程序的运行效率.智能家居中,由 ...
- android 默认dimens_Android开发——自动生成Android屏幕适配的dimens.xml文件
使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...
- idea做一个日志自动生成的jar包,并用flume做生产者,采集日志数据,用kafka做消费者来消费日志数据
前提:先将四台机器的zookeeper和kafka服务开启. 小任务:先准备好日志自动生成的jar包.并将其放入虚拟机master01中. 1.新建一个maven项目,命名为logmaker. pom ...
- python乘法符号手写_利用Python自动生成小学生加减乘除口算考试题卷,不再为手写算术题烦恼!...
还在为给孩子抄各种各样的口算题而烦恼?孩子上小学一年级之后,加减乘除的口算就要开始练习了,老师肯定会让家长出题.所以我们当家长的,要提前准备一下,就利用Python开发了一套自动生成小学生口算题的小应 ...
最新文章
- HTTP Referer 防外链
- firefox和chrome中 JQuery的ajax组件执行差异
- 牛客多校2 - Just Shuffle(置换群的幂)
- LeetCode Number Complement
- php 设置统一处理错误,统一的PHP错误处理理论
- 小样本点云深度学习库_合成鲁棒的对抗样本来欺骗深度学习分类器
- sicily 1156 ——虽然Wrong error(原因尚未查明),但温习了一下基础知识
- MySQL在Docker环境下运行基础
- Java和JavaScript中使用Json方法大全
- Python零基础爬虫速成②:批量爬取微信公众号图片(基于beautifulsoup爬取吉他谱)
- windows远程控制服务器
- 跳楼机[DP+spfa]
- Android各厂商自启动管理界面
- 服务器受美国保护网站,该网站服务器受美国保护
- 修复黯淡的夜拍照片!
- 说一说刚拿下BIRTV推荐的中国8K摄像机新品
- OPPO A59m刷机包|OPPO A59m官方线刷包救砖
- 2020计算机二级题库第14word,2020年新版全国计算机等级考试二级MSoffice选择题题库.docx...
- mysql越权漏洞_Fortify漏洞之Access Control: Database(数据越权)(示例代码)
- 京东智能供应链平台应急场景实践
热门文章
- VBA自动获取二级文件夹目录
- VLC Web插件踩坑记录
- 苹果8plus优点和不足_2020年双十一有哪些苹果手机值得购买?
- pycharm使用anaconda
- 单片机控制电机正反转
- CAD日照分析教程:CAD软件中地理位置命令怎么用?
- 浙江大学计算机学院最权威的老师,浙江大学计算机科学与技术专业导师介绍:郑能干...
- html打印A4长宽设置
- PPT转成html视频无法播放,绝对实用 将PPT文档转换成Flash/HTML
- 安装包制作软件 Inno Setup 5.5.4 汉化版(简体中文定制版)