代码国际化方式
C
1、修改test.c文件,添加国际化部分内容
#include <locale.h>
#include <libintl.h>
#define PACKAGE_NAME "test"//test为mo文件的名字
#define PACKAGE_LOCALEDIR "po" //mo文件存放文件夹
#define _(x) gettext(x)
//main函数:
setlocale(LC_MESSAGES, “zh_CN.UTF-8”);//设置locale为系统默认语言环境
bindtextdomain(PACKAGE_NAME, PACKAGE_LOCALEDIR);//关联包名称及其对应的国际化翻译语言所在路径
textdomain(PACKAGE_NAME);//定义mo文件的名称
2、相关内容添加完成后 执行下列命令生成pot文件
xgettext -k --keyword=_ calculate.c -o po/zh_CN.pot
3、修改编辑pot文件 并生成最终的mo文件
cp zh_CN.pot zh_CN.po
修改po文件中的内容 charset = UTF-8
msgfmt zh_CN.po -o calculate.mo
4、将mo文件拷贝到系统可识别的国际化目录
cp calculate.mo /usr/local/zh_CN.UTF-8/LC_MESSAGES/
python
1、使用xgettext
编写internation,py,内容如下:
#-*- coding: utf-8 -*-
#!/usr/bin/env python
import gettext
import os
locale_path = './locale/'
gettext.bindtextdomain('internation', locale_path)
gettext.textdomain('internation')
_ = gettext.gettext
print (_("Hello World!"))
当前目录下执行
生成po文件 xgettext -k_ internation.py -o internation.po
‘_’为程序中指定的标记
修改po文件中 charset = UTF-8
生成mo文件 msgfmt internation.po -o internation.mo
创建本地国际化目录 mkdir -p locale/zh_CN/LC_MESSAGES/
将mo文件拷贝进目录 cp internation.mo locale/zh_CN/LC_MESSAGES/
2、在程序中获取当前系统语言环境
import gettext
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) #解决python默认输出ascii字符,此处将其修改为UTF-8
LOCALEDIR = os.path.dirname(os.path.abspath(__file__)) + '/locale'
cmd = "echo $LANG"
result = subprocess.getstatusoutput(cmd)
language = result[1].split(".",1)
language_list = ['zh_CN','en_US']
if (language[0] in language_list):
pass
else:
language[0] = 'zh_CN'
ruby
ruby + sinatra框架 web网页国际化
1、工程目录下新建i18n目录,添加文件 zh.yml并添加以下内容
mkdir i18n/
vim i18n/zh.yml
post:
Username: 用户名
Password: 密码
Login: 登陆
NODES: 节点
PERMISSIONS: 权限
同种方式添加en.yml
2、修改项目文件application.rb
require 'sinatra/r18n'
R18n.default_places = __dir__ + '/i18n/'
R18n.set('zh')
include R18n::Helpers
get '/:locale/posts/:id' do
@post = Post.find(params[:id])
haml :post
end
修改views/login.erb
<%= t.post.Username%>
js
js进行国际化
方式一 使用jquery-i18n进行国际化
本地新建i18n目录
mkdir i18n
翻译文件内容
vim i18n/sourceName_i18nLanguage_properties
Username=用户名
Password=密码
Log In=登录
加载js文件
<script src="js/jquery.js "></script>
<!-- 加载语言包文件 -->
<script src="js/jquery.i18n.properties.js"></script>
jQuery.i18n.properties({
name : sourceName, //资源文件名称
path : 'i18n/' , //资源文件路径
mode : 'map', //用Map的方式使用资源文件中的值
language : i18nLanguage, //使用语言
callback : function() {
$.i18n.prop(“Username”); //返回在翻译文件中与"Username"对应的字符串
});
jQuery查找的路径为path 文件名为name_language.properties
方式二 自己编写jquery-i18n.js
vim jquery-i18n.js
var languageType =navigator.browserLanguage?navigator.browserLanguage:navigator.language;
let lang_type = 0;
if (languageType.search("zh") != -1){
lang_type = 0;}
else{
lang_type = 1;}
let xz_lang = {
'username': [
'用户名',
'username'
],
'password': [
'密码',
'password'
]
}
function translate(name) {
let content = xz_lang[name][lang_type];
if (arguments.length > 1) { // 把占位符 {} 替换成传递的参数
for (let i = 1; i < arguments.length; i++) {
content = content.replace('{}', arguments[i]);
}
}
return content;
}
网页文件中添加翻译文件
<script src="js/jquery.js "></script>
<!-- 加载语言包文件 -->
<script src="js/jquery.i18n.properties.js"></script>
示例:
translate("username") #==>用户名