4

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

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

4

3 回答 3

0

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

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

此外,您可以在 app.js 中使用文件的要求,并将此变量设置为 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 变量。

于 2014-08-25T18:09:16.493 回答
0

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

正确的方法是:

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

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

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

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

于 2014-09-04T13:19:56.670 回答
-1

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

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

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

R

于 2014-08-25T20:05:00.397 回答