|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
1. 相关知识 1.1 Java编程语言是从一开始就支持软件本地化的第一个编程语言。 所有的字符串都使用Unicode 1.2 要本地化的内容: 数字 123,456.78 英国 ; 123.456,78 德国 货币 日期 3/22/61 美国 ; 22.03.1961 德国 March 22,1961 ; 英文 22. Marz 1961 德语 ; 1961年3月22日 中文 时间 文本 -> 图形用户界面(集中以上情况) 1.3 Locale类 locale, 简朴来说是指语言和区域进行特别组合的一个标志 语言、国家和变体(language_country_variant) 预定义Locale对象 getDefault, getAvailableLoacles 1.4 信息格式化 java.text.MessageFormat 2. 资源包 2.1 资源包的载入 ResourceBundle currentResources = ResourceBundle.getBundle("ProgramResources", currentLocal); getBundle 将设法加载下面这些类之一,直到加载成功为止: ProgramResources_language_country_variant ProgramResources_language_country ProgramResources_language ProgramResources 不成功,将用default loacal 来代替 currentLocal 进行重新加载 假如还不成功,将抛出 MissingResourceException 非常 getBundle 找到一个类,将继承寻找下一个类,建立起资源层次结构。 资源层次结构中的每个层次不一定都要存在 2.2 资源的检索 String buttonLabel = currentResources.getString("addButton"); 某个资源在子类中没有检索到,将从建立起的资源层次结构中的父类中进行检索 2.3 资源的分类 可以根据资源检索时候的参数来分类,也可以将不同的资源放到不同的资源包中 同时,资源对象可以存放任何类型的对象,不仅是字符串 Color backColor = (Color)currentResources.getObject("backColor"); 对此的处理参考2.4.2 2.4 资源包的建立 2.4.1 建立自己的资源包类 必须继续于 ResourceBundle , 并要实现下面2个方式: Enumeration getKeys(); Object handleGetObject(Stirng key); 示例: public class ProgramResources extends ResourceBundle // place getKeys method in common superclass { public Enumeration getKeys() { return Collections.enumeration(Arrays.asList(keys)); } private String[] keys = { "button", "backColor", "defaultSie" }; } public class ProgramResources_de extends ProgramResources { public Object handleGetObject(Stirng key) { if (key.equals("button")) return "Rechnen"; else if (key.equals("backColor")) return Color.black; else if (key.equals("defaultSie")) return new double[] {210, 297}; } } public class ProgramResources_en_US extends ProgramResources { public Object handleGetObject(Stirng key) { if (key.equals("button")) return "Compute"; else if (key.equals("backColor")) return Color.blue; else if (key.equals("defaultSie")) return new double[] {216, 279}; } } 为每个资源包编写这种代码是相称烦琐的。可以采取以下方式。 2.4.2 JDK提供的类 ListResourceBundle和PropertityResourceBundle 使用ListResourceBundle类,你可以将自己的所有资源放入一个对象数组中,然后它能够为你进行资源的查找: public class ProgramResources_de extends ListResourceBundle { public Object [][] getContents() {return contents; } private static final Object[][] contents { {"button", "Rechnen"}, {"backColor", Color.black}, {"defaultSie", double[] {210, 297}} } } public class ProgramResources_en_US extends ListResourceBundle { public Object [][] getContents() {return contents; } private static final Object[][] contents { {"button", "Compute"}, {"backColor", Color.blue}, {"defaultSie", double[] {216, 279}} } } 假如你的全部设置都是字符串型,那么你就可以使用更发布的PropertityResourceBundle机制: 将全部字符串放入一个属性文件,每行都是一对要害字/值对 button=Rechnen backColor=black defaultSie=210X297 button=Compute backColor=blue defaultSie=216X279 并按以下格式命名属性文件 ProgramStrings.properties ProgramStrings_de.properties ProgramStrings_en_US.properties 像下面这样装载资源 ResourceBundle bundle = ResourceBundle.getBundle("ProgramStrings", local); getBundle找出相似的属性文件,并将它转变成PropertityResourceBundle。不用直接使用PropertityResourceBundle 不足之处: 需要在程序中对各个字符串进行分析 最好的解决办法: 将字符串资源放入到属性文件,并且将ListResourceBundle用于那些不是字符串的资源对象。 注重事项: 转变: 用于存储属性的文件通常是7位的ASCII文件,需要用native2ascii根据来转变位Unicode字符 default: ProgramStrings.properties中放置美式英语字符串和信息 以便在装载本地资源文件失败后装载入default资源都能看得懂 3. 图形用户界面的本地化需要注重的事情 不要对标签Label进行判定 对资源包中不同语言的字符串的长度要考虑 4. 我们的封装 基本类:XStringManager 字符串治理器类,从资源文件中获取字符串 扩展:其他用到字符串的地方 XResourceManager:用以获取指定资源,包括:URL和对象等 XComponentBuilder:统一创建可视组件对象 XErrorManager:根据错误代码获取错误信息 返回类别: 教程 上一教程: 初探Java类加载机制 下一教程: Java Reflection (JAVA反射) 您可以阅读与"Java软件开发学习笔记(二)"相关的教程: · Java软件开发学习笔记(三) · Java学习笔记(一)--认识开发环境 · 《Effective Java》学习笔记(4) · Java的“对象思想”学习笔记[二] · java学习笔记7--Polymorphism |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |