2012-12-03 11 views
3

最简单的方式我是新来Dojo和国际化对于这个问题国际化道场。我正在寻找在我的应用程序中将几个作品转换为不同的语言。我已经阅读了一些文章,说实话,我觉得很多信息都会引起我的消化,而我正在为此苦苦挣扎。有人能够为我提供我可能做到的最简单的方法吗?假设我想改变'你好'这个词。在我的头它会是这样的:在我的JavaScript文件准备使用 如何使用可能

    • Dojo库我定义字符串“你好”。它有“你好”
    • 占位符文本我在我的HTML,我想说明我的网页是

    “这里指定的字符串以不同的语言显示Hello”所以这是尽管我可以从我有限的知识中吸收。我如何才能使这种设置工作?我假设我需要在我的页面上使用i18n,但我究竟如何执行此操作仍有待确定。

    任何帮助将是超一流。请记住,如果有可能,我对您的答案的知识有限,谢谢!

  • 回答

    6

    的NLS文件夹,通常是用来存放你的翻译字符串,通常是一个子目录旁边的小部件使用。

    即。如果你的widget被存储在myWidget.js一个名为应用文件夹中,然后myWidget.js你的翻译字符串存储在具有相同名称的文件(myWidget.js)目录应用/ nls

    这只是惯例,但可能是值得跟随,因为它使你的目录结构的逻辑。

    这里是myWidget.js的例子部件:

    define([ 
        "dojo/_base/declare", 
        "dijit/_WidgetBase", 
        "dijit/_TemplatedMixin", 
        "dojo/i18n!./nls/myWidget" 
    ], function(
        declare, _widget, _templated, strings, domAttr 
    ){ 
        "use strict"; 
    
        var construct = declare([_widget, _templated], { 
         "i18n": strings, 
         "templateString": "<div>${i18n.hello}</div>" 
        }); 
    
        return construct; 
    }); 
    

    这是创建了一个非常简单的小部件<DIV>(见templateString属性)在屏幕上。该<DIV>应包含翻译文件加载并分配给你好属性中的文本。

    小部件将需要nls目录创建在与相同的目录myWidget.js。在NLS目录中创建一个名为myWidget.js(即同名的母公司)其他JavaScript文件。该文件是你的根翻译文件,看起来像这样:

    define({ 
        root: ({ 
         "hello": "Hello" 
        }) 
    }); 
    

    在这里您已经分配的字符串,“你好”向物业你好。这不是非常有用,因为没有提供翻译。如果你想有一个挪威的翻译,那么你将修改它是这样的:你说

    define({ 
        root: ({ 
         "hello": "Hello" 
        }) , 
        "no": true 
    }); 
    

    这里说的还有根翻译字符串你也有一个挪威的翻译。然后您需要创建您的挪威语翻译文件并将其放置在nls的子目录。所以,你创建一个名为myWidget.js另一个文件,并将其放置在NLS/NO:

    define({ 
        "hello": "Hei" 
    }); 
    

    的翻译文件的格式是根文件略有不同。使用默认字符串,除非在当前浏览器语言中给定字符串的翻译可用(即,您不需要翻译每个字符串,只需要翻译那些字符串即可)。

    加载翻译串插件之外:

    上述实施例表明如何加载翻译文本以下的正常约定的窗口小部件。您可以在任何小部件或任何require语句中加载您想要的任何字符串集。 dojo/i18n类可以加载您指定的任何一组字符串。

    eg: 
    
    require([ 
        "dojo/i18n!<PATH TO TRANSLATION ROOT FILE YOU WANT TO LOAD>" 
    ], function(string) { 
        // translation-string are stored in the 'strings' variable for the 
        // current browser language 
    }); 
    
    +0

    感谢您的回复。我有我的main.js包含所需的项目。然后,在js/app/nls中,我有sample.js,它保存了根指定的定义。在这里,我没有如此真实。然后在js/app/nls/no中,我使用挪威语中的规范定义了sample.js。我已经指定我的区域设置为否,但没有任何反应。我试图修改的头文件保留了它在HTML中指定的默认值,并且不会更改为我在任何sample.js文件中的内容。我很茫然。你有一个样本项目或知道任何我可以看到一个实例吗? Dojo文档没有帮助。 – Creights

    +0

    我已经快速地将上述项目发布到Bitbucket(https://bitbucket.org/ssimpo/stackoverflow-13702818/src)。我已经使用Firefox 17.0.1在我的机器上测试过了。注意:我正在使用Dojo 1.8.1,不确定你使用的是哪个版本,但是认为代码应该可以在旧版本上工作(除了在data-dojo类型中将斜线改为点)。如果将浏览器语言设置为英语,则应显示Hello,如果设置为挪威语,则应显示Hei。您可以通过将Dojo SDK降级并获得更多提示,并通过您的评论来了解核心dijits(https://dojotoolkit.org/download/) –

    +0

    中的i18n如何判断,我认为您需要require/define行为“ dojo/i18n!./ nls/sample“(因为你称之为sample.js),假设代码正在运行,就像dojo可以正确映射relative-url一样。尝试一个完整的路径到你的根文件并从那里向后工作(例如“dojo/i18n!http://www.myserver.com/js/app/nls/sample.js”) –

    相关问题