【问题标题】:how to re-use a language file in multiple languages without doubling of files with Titanium如何在不使用 Titanium 文件的情况下重复使用多种语言的语言文件
【发布时间】:2014-08-25 14:38:54
【问题描述】:

所以我使用 Titanium 中的语言文件来提供 TSS 属性,我想在不同位置的整个应用程序中重复使用这些属性。这些语言文件变量应在主题文件夹(或任何其他 TSS 文件)中使用。

目前它适用于一种语言,但我的应用程序有多种语言。但我不想复制所有语言的语言文件。我可以以多种语言重复使用同一个文件,而不必将文件复制到某个地方吗?

【问题讨论】:

    标签: internationalization titanium appcelerator tss


    【解决方案1】:

    ISO 639-1 使用 i18n 文件 表示。

    该文件允许您使用任何语言并将每个“标签”与Ti.Locale.getString() 一起使用。

    另外,您可以在 app.js 中使用文件的 require 并将此变量设置为 global。

    language.js(例如):

    var language = (function() {
    
        var self = {
            currentLanguage: 'en' // by default
        };
    
        var labels = {
            msgHello: {
                en: 'Hello World',
                es: 'Hola Mundo'
            }
        };
    
        self.changeLanguage = function changeLanguage(newLanguage){
            self.currentLanguage = newLanguage;
        };
    
        self.getLabel = function getLabel(key, language){
             if(typeof language !== 'undefined') {
                 return labels[key][language];
             }
             else return labels[key][self.currentLanguage];
        };
    
        return self;
    
    }());
    
    module.exports = language;
    

    app.js(例如):

    var appLanguage = require('language.js');
    
    (function() {
    
        Ti.API.info("Language: "+appLanguage.currentLanguage);
        Ti.API.info("MSG Hello World (English): "+appLanguage.getLabel(msgHello));
        Ti.API.info("MSG Hello World (Spanish): "+appLanguage.getLabel(msgHello, es));
    
    }());
    

    您可以直接在任何文件上使用 appLanguage 变量。

    【讨论】:

    • 我明白这一点,但这并不能回答我的问题
    • 这会覆盖 Titanium 中的 L('var') 内置吗?
    • 不。这种方法是另一种形式。您可以通过函数更改语言,例如在language.js中将self更改为changeLanguage(newLanguage),并获取appLanguage(变量)的标签和其他信息。
    • 感谢您的建议,但我已经想出了一个正确的实现,所以我自己回答了
    【解决方案2】:

    似乎无法在不将语言文件复制到所有语言的情况下重复使用它。但是,为要在 TSS 文件中使用的参数创建全局访问的最佳解决方案是在 config.json 文件中添加一个部分。

    正确的做法是:

    "global": {
        "design": {
            "primaryColor": "red"
        }
    },
    

    这可以通过访问Alloy.CFG.design.primaryColor来使用。

    使用config.json 文件的好处是您还可以为文件设置主题,如Fokke Zandbergen 所述。

    这样,它甚至比使用语言文件更好,因为它们不能被主题化。

    【讨论】:

      【解决方案3】:

      不,但您可以使用默认字符串,例如:

      L('my_string','my default for this string');
      

      在此示例中,“my_string”是您的语言文件中的字符串。如果您只提供英文文件,您将获得所有其他语言的默认设置。

      R

      【讨论】:

      • 谢谢,但这违背了语言文件的全部目的,如果我必须在任何地方定义我特别想要动态的默认值
      • 正确的做法是在您希望支持的语言文件夹中创建文件。如果您有该语言的语言文件,那么 Titanium 将使用它。如果您不支持用户选择的语言,它将显示默认文本。
      • 如果您正确阅读了我的问题,您会发现我的问题不是关于语言字符串,而是关于 TSS 文件的属性。 “默认”应该是来自文件的那个。在 L() 函数中提供默认值会破坏我尝试创建的功能的目的。因此,复制文件比使用默认值更容易。我的问题是如何避免复制文件,而是使用后备文件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      相关资源
      最近更新 更多