2015-03-31 32 views
0

我需要重構我的應用程序以支持國際化。如何以非編程方式國際化HTML文本

我發現https://github.com/jquery-i18n-properties/jquery-i18n-properties,但它似乎只支持使用jQuery編程翻譯文本。

但也有我的JSP/HTML文件中的大量硬編碼的文字,所以我希望找到一種方式,ALSO支持國際化的靜態html文本,如:自動

<title>@{title_here}<title> 
<div>@{label}</div> 

頁面會在閱讀正確的屬性文件之後,將這些值替換爲正確的值,而不用像$(....)。text(read_from_properties)那樣設置每個文本。

有沒有辦法做到這一點?

+0

@AlvaroMontoro,是的,抱歉的錯字 – Jaskey 2015-03-31 13:35:47

+0

我不知道是否有一個真正的非程序化的解決方案。正如你所說,HTML是靜態的,所以總會有一些代碼/程序底層的做法,並取代值 – 2015-03-31 13:50:43

+0

我不確定這個問題是否適合於stackoverflow。 – Sumurai8 2015-03-31 15:29:00

回答

0

由於html是靜態的,你不能只是拋出一個數據文件,並期望它抽出正確的語言。

如果您在JSP文件中有硬編碼的文本,我會在服務器端實現i18n。

如果你有一個單頁面的應用程序,你可能會使用一些模板引擎(作爲MV *框架的一部分,或獨立)來呈現html。過去使用polyglot效果良好。

無論哪種方式,您都需要更改所有當前的靜態文本。

0

我不知道這是否是你在尋找什麼,但是當我看到你想要什麼我腦子裏浮現的第一件事就是handlebars expressions

<script id="myTemplate" type="text/x-handlebars-template"> 
    <div>{{welcome}}</div> 
    <div>{{name}}</div> 
    <div>{{time}}</div> 
</script> 
<div id="generated"></div> 

你最好還是需要一點點代碼將語言從一個變爲另一個,但沒有什麼困難。你可以看到一個例子運行在這裏:http://jsfiddle.net/gj9hbhwj/1/

function changeLanguage(lang) { 
    var templateSource = document.getElementById('myTemplate').innerHTML; 
    var template = Handlebars.compile(templateSource); 
    var generatedHolder = document.getElementById('generated'); 
    generatedHolder.innerHTML = template(int[lang]); 
} 

在個人和小型項目/應用程序,我用一個簡單的jQuery/JSON的組合,需要的代碼,只需幾行和工程就像一個魅力:

/** ON A SEPARATE FILE **/ 
int = { 
    "en": { 
     "#welcome": "Welcome to my site", 
     "#name": "My name is...", 
     "#time": "It's 8 o'clock" 
    }, 
    "es": { 
     "#welcome": "Bienvenido a mi web", 
     "#name": "Mi nombre es...", 
     "#time": "Son las 8 en punto" 
    } 
} 

/** ON MAIN SCRIPT **/ 
function changeLanguage(target_lang) { 
    if (int[target_lang]) { 
     $.each(int[target_lang], function (index, value) { 
      $(index).text(value); 
     }); 
    } 
} 

鍵是我想要修改的元素的CSS選擇器,值是不同語言中的文本。使用$.each()我可以很快修改所有字符串,只需3行代碼(與要替換的短語數量無關)。你可以看到它在這裏運行:http://jsfiddle.net/4y5j0gr7/