flex i18n多语言国际化方案.ppt

合集下载

编写多语言国际化配置文件

编写多语言国际化配置文件

编写多语⾔国际化配置⽂件在项⽬的类路径resources下创建名称为i18n的⽂件夹,并在该⽂件夹中根据需要编写对应的多语⾔国际化⽂件login.properties、login_zh_CN.properties和login_en_US.properties⽂件login.properties```propertieslogin.tip=请登录ername=⽤户名login.password=密码login.rememberme=记住我login.button=登录```login_zh_CN.properties```propertieslogin.tip=请登录ername=⽤户名login.password=密码login.rememberme=记住我login.button=登录```login_en_US.properties```propertieslogin.tip=Please sign inername=Usernamelogin.password=Passwordlogin.rememberme=Remember melogin.button=Login```l ogin.properties为⾃定义默认语⾔配置⽂件,login_zh_CN.properties为⾃定义中⽂国际化⽂件,login_en_US.properties为⾃定义英⽂国际化⽂件需要说明的是,Spring Boot默认识别的语⾔配置⽂件为类路径resources下的messages.properties;其他语⾔国际化⽂件的名称必须严格按照“⽂件前缀名_语⾔代码_国家代码.properties”的形式命名本⽰例中,在项⽬类路径resources下⾃定义了⼀个i18n包⽤于统⼀配置管理多语⾔配置⽂件,并将项⽬默认语⾔配置⽂件名⾃定义为login.properties,因此,后续还必须在项⽬全局配置⽂件中进⾏国际化⽂件基础名配置,才能引⽤⾃定义国际化⽂件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~刚学了拉勾教育的《Java⼯程师⾼薪训练营》,看到刚学到的点就回答了。

完美的Flex多语言支持解决方案

完美的Flex多语言支持解决方案

完美的Flex多语⾔⽀持解决⽅案通过多番查阅资料和研究Flex下的组件编写、ResourceManager的使⽤,终于实现了Flex下国际化/多语⾔⽀持的完美解决⽅案:* 很容易实现编译时类型检查* ⽀持运⾏时实例化注⼊(延迟创建)* 可注⼊参数化的值 (参看 account.email)* ⽀持属性链* 模型的更新可以使⽤当前的本地化值触发更新* ⽀持⽪肤和嵌⼊资源(图像,声⾳)--⽬前未提供,可⾃⾏修改⽅法getResourceManagerChain来扩充最开始准备使⽤参考⽂献中的amazing-i18n-solutions,发现引⽤了很多包、⽂件,略显繁琐,参考后实现了⾃⼰的⽅案,个⼈感觉更完美。

实现思路1.最开始经典实现思路,可参考Tour de Flex中的例⼦ Localization,进⾏如下操作设置编译参数-locale=zh_CN,en_US -source-path=locale/{locale}建⽴资源⽂件:example.propertiesFIRST_NAME=First NameLAST_NAME=Last NameADDRESS=AddressCITY=CityZIP=ZipDOB=Date of BirthSAVE=SaveSELECT_LANGUAGE=Select a languageLOGO=Embed("assets/logo_en.png")DATE_FORMAT=MM/DD/YYYY如果是Flex3,⽀持中⽂时还需要⽣成本地资源。

Flex4跳过Open a Command prompt/shell, navigate to the bin directory of your Flex SDK (for example:C:\Program Files\Adobe\Flex Builder 3 Plug-in\sdks\3.0.1\bin), and execute the following command:copylocale en_US zh_CN添加资源引⽤<fx:Metadata><!-- 引⽤的资源:注意参数,必须与example.properties对应 -->[ResourceBundle("example")]</fx:Metadata>将需要显⽰⽂字的地⽅,改⽤ResourceManager⽅法<!-- 不再使⽤这种⽅式 --><mx:Button id="btnLogin" label="登录" /><!-- 使⽤ResourceManager⽅法绑定 --><mx:Button id="btnLogin" label="{resourceManager.getString('example', 'SELECT_LANGUAGE')}" />需要切换语⾔时,执⾏下⾯语⾔resourceManager.localeChain = [ "zh_CN" ];//["en_US"]2.上述⽅法已经可以达到实时切换语⾔的操作,但是仍然有⼏个不太⽅便的地⽅设计视图基本上不可⽤了,开发⼈员并不知道到底显⽰的标签是什么内容,⽽是⼀堆resoureManager.get...,“就像⼀滩滩的鸽⼦粪”……对已经开发完成的应⽤添加国际化⽀持时,需要修改⼤量的代码为此希望能够能够简化⼀些3.⾸先实现了⼀个⽅法public static function injection(target:Object,bundleName:String=null):void,这个⽅法能够⾃动读取指定资源⽂件名(bundleName)的资源,并将键值属性绑定到相关的属性上,从⽽实现国际化⽀持的⾃动注⼊4.资源⽂件的编写⽅式:原来的资源⽂件类似与传统ini⽂件,key=value,使⽤injection⽅法注⼊时,需要注意key的编写⽅式,需要提供属性链式的⽅式。

国际化的实现i18n--错误码国际化以及在springboot项目中使用

国际化的实现i18n--错误码国际化以及在springboot项目中使用

国际化的实现i18n--错误码国际化以及在springboot项⽬中使⽤国际化,英⽂叫 internationalization 单词太长,⼜被简称为 i18n(取头取尾中间有18个字母);主要涉及3个类: Locale⽤来设置定制的语⾔和国家代码 ResourceBundle ⽤来加载国际化资源⽂件 MessageFormat ⽤来格式化占位符//先看结构:在创建国际化资源⽂件时,如我在resources⽂件下建了⼀个i18n⽂件夹,下放了3个资源⽂件,idea⾃动会⽣成⼀个Resource Bundle 'messages'⽂件夹,这个⽂件夹不是真实存在的,打开项⽬所在⽂件夹后,找不到它的;如图:资源⽂件的命名格式:前缀+"_"+"语⾔代码"+地区代码+".properites";(Locale[] locales = Locale.getAvailableLocales();//获取世界可⽤的语⾔地区表⽰)如上图所⽰,我定义了3个资源⽂件夹,其中⼀个没有语⾔代码和地区代码的那个是默认资源,也就是要找的资源⽂件都不存在时,就会去那⾥找;查找顺序,如果你指定Locale locale=new Locale("en_US"),那它就会找到messages_en_US.properties,如果你写错了⼀个单词Locale locale=new Locale("en_USAA");找不到的话,它就会找本地的语⾔(Locale locale2 = Locale.getDefault(); //获取默认语⾔地区),如我们在中国就会找本地的中国语⾔包messages_zh_CN.properties,如果没有本地的语⾔包messages_zh_CN.properties,就会去messages.properties这⾥找资源⽂件的内容格式为:key=value,其中value值可以含有占位符,格式{数字},例如" 你的订单号{0}的订单,⾦额{1}元";key和value值在properties⽂件中都不⽤加双引号注意:资源⽂件中的所有字符都必须是 ascll 码,不能保存为中⽂的,Java 中提供了 native2ascll ⼯具⽤于将中⽂转化为 ascll 码。

i18n本地化国际化对照表

i18n本地化国际化对照表

i18n本地化国际化对照表1. i18n(国际化),是指将软件设计成适应不同语言和文化的过程。

2. l10n(本地化),是指将软件适应特定地区或国家的语言和文化的过程。

3. UI(用户界面),是指用户与软件进行交互的界面。

4. API(应用程序接口),是指不同软件之间进行通信和交互的接口。

5. HTML(超文本标记语言),是一种用于创建网页的标记语言。

6. CSS(层叠样式表),是一种用于定义网页样式和布局的语言。

7. JSON(JavaScript对象表示法),是一种轻量级的数据交换格式。

8. YAML(YAML Ain't Markup Language),是一种人类可读的数据序列化格式。

9. PO(Portable Object),是一种用于存储本地化文本的文件格式。

10. POT(Portable Object Template),是用于生成PO文件的模板文件。

11. gettext,是一种用于国际化和本地化的工具和库。

12. Locale(区域设置),是指特定地区或国家的语言和文化设置。

13. 文本翻译,将软件中的文本从一种语言翻译成另一种语言。

14. 日期格式化,将日期和时间按照特定的格式显示。

15. 货币格式化,将货币按照特定的格式显示。

16. 数字格式化,将数字按照特定的格式显示。

17. 字符编码,是一种将字符映射到数字的方式,常见的编码包括UTF-8、UTF-16等。

18. 字体,用于显示文本的字形和样式。

19. 时区,描述地球上不同区域的时间差异。

20. 键盘布局,不同地区使用的键盘上字符的排列方式。

这些术语和缩写在国际化和本地化的过程中经常会被使用到,了解它们的含义可以帮助开发人员更好地理解和应用国际化和本地化的技术。

i18n 用法

i18n 用法

i18n 用法
在软件开发领域,i18n(internationalization,国际化)指的是为了
使软件能够适应不同的语言和文化环境,而采用的一系列技术和策略。

以下是关于 i18n 的一些用法和实践方法。

1. 字符集编码处理
要实现 i18n,首先要处理好字符集编码。

不同的语言和文化使用的字
符集编码可能不同,我们需要确保软件支持应用最广泛的字符集编码,如 Unicode(UTF-8)。

2. 多语言资源文件
为了支持不同的语言,我们需要将所有文本字符串、日期、货币格式
等本地化信息单独存放在外部的资源文件中。

这样的资源文件不仅包
含源文本(默认语言的文字),还会包含所有可用的翻译版本。

这种
方法可以使得翻译团队更容易翻译和更新翻译。

3. 本地化文本消息
在软件中使用本地化文本消息的方式自然地实现了多语言支持。

对于
不同语言的用户,我们使用对应的本地化文本将他们需要的信息进行输出。

4. 本地化日期和编码
除了要处理本地化文本消息,还需要确保日期、货币等信息也能够适应不同的文化和语言。

这些信息的格式可能因地区而异,我们需要使用适当的本地化格式,比如不同国家的日期格式可能不同。

总之,i18n 实践的关键是保持软件的可扩展性和可维护性。

通过使用多语言资源文件和本地化信息,构建能够适应多种语言和文化环境的软件。

当我们在不同的地区和用户之间做出区分时,不仅可以满足不同的文化需求,同时还可以拓展我们的市场并增加软件的用户体验。

i18N-网页网站国际化和动态内容国际化

i18N-网页网站国际化和动态内容国际化

I18N与网站动态国际化网站国际化一般都是会有语言的按钮,对不同语言用户的切换选择,例如以下部分,是三种语言的连接。

国际化主要分为系统国际化和内容国际化。

一般这两中国际化是同步的。

内容国际化很简单主要是根据语言来区分往数据库中去什么语言的值。

那我做的这个例子来说。

我使用SSH2框架写的公司网站。

当用户点击语言切换的时候,在超链接中执行一个action.并且传递一个参数:在后台判断这个status的值,然后根据不同的状态,拼写hql语句即可:并且将设定的状态值写到session中。

在方法的地方获取:这样将根据语言查询的内容国际化就读取出来了。

最重要的一点就是网站的国际化。

这个需要一种资源文件.property 文件;资源文件命名规则为message + en_US >English; message+””+zh_CN > 中文。

里面写对应的key value;在struts.xml 文件中配置国际化<!-- 设置Web应用的默认Locale为en_US 英文--><constant name="struts.locale" value="en_US" /><!-- 利用i18n来管理国际化-- ><constant name="struts.custom.i18n.resources" value="messageResource"/>如果不默认Local,那么网站国际化将根据浏览器的语言来自动选择使用那用国际化;这样。

网站的自动国际化就可以实现了。

当然。

我们做的是动态的国际化。

看似很复杂,其实很简单。

你只要在刚才执行的语言切换action中加入以下代码即可:首先声明一个locale,并默认一种语言Locale locale=new Locale("zh","CN"); 我们当前来默认成中文然后根据你传过来的status 状态来胜定locale的状态Locale locale=new Locale("en","US");if(getStatus()==null||getStatus().equals("")){languagebase = "2";locale=new Locale("en","US");}else if(getStatus().equals("1")){languagebase = "1";locale=new Locale("zh","CN");}else if(getStatus().equals("2")){languagebase = "2";locale=new Locale("en","US");}else if(getStatus().equals("3")){languagebase = "3";locale=new Locale("ru","RU");}然后加入这句话//struts2 i18n会自动拦截session中的WW_TRANS_I18N_LOCALE 的值,作为local的状态ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale); 这样浏览器会自动获取WW_TRANS….现在基本上可以实现动态链接切换中英文了,不过,还有个小问题,需要解决,那就是,需要点击2下中文才能切换到中文,英文同样也是;这样只需要写一个拦截器就可以了:/*** i18n 拦截器** */public class Locals extends AbstractInterceptor {private String locale;@Overridepublic String intercept(ActionInvocation arg0) throws Exception { if(getLocale()!=null){String loc[]=getLocale().split("_");Locale locale=new Locale(loc[0],loc[1]);ServletActionContext.getRequest().getSession().setAttribute("WW_T RANS_I18N_LOCALE", locale);}return arg0.invoke();}public String getLocale() {return locale;}public void setLocale(String locale) {this.locale = locale;}}在struts.xml 中配置拦截器:首先要在<package>中加入这句话<interceptors><interceptor-stack name="local"><interceptor-ref name="defaultStack"><paramname="params.excludeParams">com.ruijian.meilinweb.filter.*</param>//f ilter路径</interceptor-ref></interceptor-stack></interceptors>配置action<action name="languagelocale"class="languageAction"method="languageLocale"><interceptor-ref name="local"></interceptor-ref>//到页面前执行拦截<result name="login">/mei.jsp</result></action><action name="language" class="languageAction"><!—先执行这里。

Python中国际化(i18n)完整指南

Python中国际化(i18n)完整指南

Python中国际化(i18n)完整指南这是⼀个完整的指南,展⽰了如何为⼀个Python应⽤程序进⾏国际化(i18n)。

当我在handroll项⽬中添加i18n时,我很难找到⽀持其他语⾔的明确建议。

这是我个⼈的⼀点经验,解释了我是如何做到这⼀点的。

⽬录:标记字符串提取主列表获得其他语⾔的翻译打包在⼀起测试包问题?概述要使代码国际化,您必须以⼀种特定的⽅式处理⽤户⽂本字符串。

所有的⽂本字符串都必须⽤⼀个特殊的函数调⽤来包装。

这个特殊的函数将字符串标记为需要翻译的东西。

⼀旦所有的字符串都被标记之后,i18n⼯具就可以扫描您的代码,⽣成⼀个包含所有内容的主列表。

有了主列表,翻译器就可以为每种需要的语⾔⽣成⼀个翻译后的字符串列表。

翻译后的字符串被添加回Python代码中,这些字符串都被打包成⼀个很好的翻译后的最终产品。

然后您可能就想测试⼀下。

这牵扯到很多东西,但是我将详细解释这个过程的每⼀部分。

出于本指南的⽬的,我的所有⽰例代码都将引⽤handroll包。

如果这是您的Python代码,请⽤您的顶级Python包的名称替换handroll。

标记字符串我在概述中提到的特殊函数看起来像_('Hello World')。

这个函数来⾃gettext模块。

Python使⽤GNU gettext进⾏翻译,所以让我们看看在handroll/i18n.py中创建_函数的handroll代码。

这⼀⼩段代码使⽤locale⽬录作为已翻译字符串的源来创建⼀个翻译对象。

您的locale⽬录还不存在,但它是您的应⽤程序在运⾏时查找译⽂的地⽅。

从translation对象中,我为translation.gettext创建了⼀个_ 别名。

这个下划线并不是特别特殊,但是,它是Python社区所使⽤的这个函数的常见名称。

我希望现在这⾥有⾜够的内容来帮助我们去理解运⾏时将发⽣什么。

重要的是,“Hello World”就像⼀个键。

i18n国际化

i18n国际化

i18n国际化i18n国际化internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化),简称L10n。

⼀般⼀语⼀_地区的形式表⼀⼀种语⼀,如 zh_CN, zh_TW.常见的有:zh_cn: 简体中⼀zh_hk: 繁体中⼀(中国⼀港)zh_tw: 繁体中⼀(中国台湾地区)en-hk: 英语(⼀港)en_us: 英语(美国)en_gb: 英语(英国)en_ww: 英语(全球)ja_jp: ⼀语(⼀本)ko_kr: 韩⼀(韩国)在Android⼀程的res⼀录下,通过定义特殊的⼀件夹名称就可以实现多语⼀⼀持。

⼀如我们的程序兼容简体中⼀、英⼀,在values⼀件夹中建⼀默认strings.xml,再建⼀values-zh-rCN⼀件夹。

在每个⼀件夹⼀放置⼀个strings.xml,strings.xml⼀是各种语⼀字符串。

如果涉及到参数配置类xml⼀件夹名称也要改成xml-zh、xml。

这样在android的系统中进⼀语⼀切换,所开发的程序也会跟着切换语⼀。

Java代码1. Resources resources = getResources();//获得res资源对象2. Configuration config = resources.getConfiguration();//获得设置对象3. DisplayMetrics dm = resources .getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。

4. config.locale = Locale.SIMPLIFIED_CHINESE; //简体中⼀5. resources.updateConfiguration(config, dm);。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<mx:Metadata> [ResourceBundle(“interface")]
</mx:Metadata>
本地化资源中使用绑定
• @Resource指令
<mx:Label text=“@Resource(key=‘key’, bundle=‘interface’)” />
• AS代码绑定
[Bindable]
•}
• .jpFont{

fontFamily: jpFont;
•}
• </mx:Style>
# /locale/en_US/Font.properties fonsty=ENFont# /locale/ja_JP/Font.properties fontsty=JPFont
<mx:Text styleName="{resourceManager.getString('Font', ‘fontsty')}"/>
• 添加新的本地化支持-sdk的bin目录下,运行命令: copylocale en_US zh_CN(需安装java runtime)
• 默认的语言资源文件D:\Program Files\Adobe\Flex Builder 3\sdks\3.2.0\frameworks\projects\framework\bundles
使用.properties文件实现国际化
• interface.properties 。
Key=value (utf-8 键-值) pic=Embed(“demo.gif") swf=Embed(“demo.swf")
• resourceManager • [ResourceBundle]元数据标签绑定
加载资源
• ResourceManager的loadResourceModule() //异 步
• var eventDispatcher:IEventDispatcher = resourceManager.loadResourceModule(resourc eModuleURL);
• UIComponent 类 resourcesChanged()
• \Adobe\Flex Builder 3\sdks\3.2.0\frameworks\flash-
unicode-table.xml • unicodeRange=‘U+0020-U+002F”标记可以标记字符嵌
入范围ቤተ መጻሕፍቲ ባይዱ
引用本地字体
var fontLibrary:Class=event.target.applicationDomain.getDefinition("em bedFont_localFont") as Class;
本地化字体
• <mx:Style>
• @font-face {src: url(“en.ttf"); fontFamily:enFont;}
• @font-face {src: url(“jp.ttf"); fontFamily: jpFont;}
• .enFont{

fontFamily: enFont;
private var _as:String;
_as=resourceManager.getString(interface',‘key');
运行时改变资源包
• 绑定
<mx:Text text="{resourceManager.getString('source','')}“
• 编译参数 locale en_US zh_CN
FLASH IDE动态嵌入字体
– 字型建立fontlib.swf运行库共享导出 继承font 类名fontlib
– 动态调用 fontlib.swf运行库共享导入 继承font 类名fontlib
– 问题:无法同时兼容中日字符 – 发现字符实际存在,但无法显示,未得到渲

FLEX IDE
– 建立AS工程 flexFont(主类)
实际应用
1)渲染标准组件字体(Label的public 属性textField:TextField进行设置)

c.textField.embedFonts = true;

c.textField.setTextFormat(tf);

c.textField.x=10;

c.textField.width=160;
本地化编译-编译不同的语言版本
• 创建项目的语言资源文件 1)多语言包目录-copylocale original_locale new_locale
2)资源文件(.properties)
• 配置语言包 -locale=en_US
1) sourcepath+=e:\resource\locale\{locale} 2)添加source path 3) SDK的默认语言包资源
Flex国际化I18N
Make You Flex Pro Internationalization
沪江网-尹星军
Flex使用.properties文件实现国际化,环境配 置
• 在Flex中默认只支持en_US , ja_JP这两种本地化 (D:\Program Files\Adobe\Flex Builder 3\sdks\3.2.0\frameworks\locale)
• [Embed(source="C:/WINDOWS/Fonts/verdana.TTF",fontName= “verdana,mimeType="application/x-font")]
• • public var testFont:Class; • /////////////////////////////////
谢谢大家
不周之处,请多包含
trace(fontLibrary); Font.registerFont(fontLibrary); }
function test() {
var _embeddedFonts:Array = new Array(); _embeddedFonts = Font.enumerateFonts(false); trace(_embeddedFonts); trace((_embeddedFonts[0])
• sdks\3.2.0\frameworks\locale • compc 编译语言包
compc -locale=zh_CN -sourcepath=..\frameworks\projects\framework\bundles\zh_CN\src -includeresourcebundles=collections,containers,controls,core,effects,formatters,loggi ng,SharedResources,skins,states,styles,validators -
output=..\frameworks/locale/zh_CN/framework_rb.swc
资源模块化
• 命令行编译指定资源 • mxmlc -locale=en_US
-source-path=locale/{locale} //相对于FLEX的目录,使用绝对路径
-include-resource-bundles=interface,interface1 -output en_US_ResourceModule.swf • mxmlc -locale=zh_CN -source-path=locale/{locale} -include-resource-bundles=interface,interface1 -output zh_CN_ResourceModule.swf

c.textField.height=40;
2) 渲染动态/输入文本框:
• var tx:TextField=new TextField(); tx.type="input";// 自行改正 tx.embedFonts=true;
var txt:TextFormat = new
TextFormat(_embeddedFonts[0].fontName,20,0xFF0000);; txt.size = 28; StyleManager.setStyle("textFormat", txt);
• 改变语言资源
resourceManager.localeChain=[locale];//en_US zh_CN
ResourceManager 调度 "change"
UICompoment.resourceChange()
SDK语言资源Framework_rb.swc
• \sdks\3.2.0\frameworks\projects\framework\bundles\en_ US\src
相关文档
最新文档