2012-12-03 51 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」) –

    相關問題