JavaScript 中的翻译就像 PHP 中的 gettext 一样?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2400106/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Translation in JavaScript like gettext in PHP?
提问by ParisNakitaKejser
I am using gettextin my PHP code, but I have a big problem. All my JavaScript files are not affected by the translation, can somebody tell me an easy way to get the translations in the chosen language into JavaScript as well.
我gettext在我的 PHP 代码中使用,但我有一个大问题。我所有的 JavaScript 文件都不受翻译的影响,有人能告诉我一种将所选语言的翻译也转换成 JavaScript 的简单方法吗?
采纳答案by Pekka
The easiest way is having a PHP file write the translations from gettextinto JavaScript variables.
最简单的方法是让 PHP 文件将翻译gettext写入 JavaScript 变量。
js_lang.php:
js_lang.php:
word_hello = "<?php echo gettext("hello"); ?>"
word_world = "<?php echo gettext("world"); ?>"
word_how_are_you = "<?php echo gettext("how_are_you"); ?>"
and then include it:
然后包括它:
<script type="text/javascript" src="js_lang.php"></script>
I would also recommend this method in conjunction with the translation plugins S.Mark mentions (which are very interesting!).
我也会推荐这种方法和 S.Mark 提到的翻译插件(非常有趣!)。
You can define the dictionary in the current page's header, too, without including an external file, but that way, you would have to look up and send the data on every page load - quite unnecessary, as a dictionary tends to change very rarely.
您也可以在当前页面的标题中定义字典,而无需包含外部文件,但那样的话,您将不得不在每次页面加载时查找并发送数据——这是非常不必要的,因为字典往往很少更改。
回答by vdboor
I generally export the translations in a JavaScript structure:
我通常以 JavaScript 结构导出翻译:
var app = {}
var app.translations = {
en: { hello: "Hello, World!"
, bye: "Goodbye!"
}
, nl: { hello: "Hallo, Wereld!"
, bye: "Tot ziens!"
}
};
The current language of the page texts can be defined using: <html xml:lang="en" lang="nl">
可以使用以下方法定义页面文本的当前语言: <html xml:lang="en" lang="nl">
This can be read in JavaScript:
这可以在 JavaScript 中读取:
var curentLanguage = document.documentElement.lang || "en";
app.lang = app.translations[ currentLanguage ] || app.translations.en;
And then you can write code like this:
然后你可以写这样的代码:
alert( app.lang.hello );
Optionally, a i18n()or gettext()function can bring some intelligence, to return the default text if the key does not exist). For example:
或者,一个i18n()或gettext()函数可以带来一些智能,如果键不存在则返回默认文本)。例如:
function gettext( key )
{
return app.lang[ key ] || app.translations.en[ key ] || "{translation key not found: " + key + "}";
}
回答by YOU
Try, jQuery i18nor jQuery localisation
An example for jQuery i18n, and of course you need to generate JSON based dictionary from language file from php
jQuery i18n 的示例,当然您需要从 php 的语言文件生成基于 JSON 的字典
var my_dictionary = {
"some text" : "a translation",
"some more text" : "another translation"
}
$.i18n.setDictionary(my_dictionary);
$('div#example').text($.i18n._('some text'));
回答by Praveen D
JSGettext(archived link) is best implementation of GNU gettext spec. First download JSGETTEXT package and include in your page /js/Gettext.js
JSGettext(存档链接)是 GNU gettext 规范的最佳实现。首先下载 JSGETTEXT 包并包含在您的页面中 /js/Gettext.js
<?php
$locale = "ja_JP.utf8";
if(isSet($_GET["locale"]))$locale = $_GET["locale"];
?>
<html>
<head>
<link rel="gettext" type="application/x-po" href="/locale/<?php echo $locale ?>/LC_MESSAGES/messages.po" />
<script type="text/javascript" src="/js/Gettext.js"></script>
<script type="text/javascript" src="/js/test.js"></script>
</head>
<body>
Test!
</body>
</html>
javascript code for example
以javascript代码为例
window.onload = function init(){
var gt = new Gettext({ 'domain' : 'messages' });
alert(gt.gettext('Hello world'));
}
For reference find below link. It's working fine without converting .js file to .php.
作为参考,请找到以下链接。无需将 .js 文件转换为 .php 即可正常工作。
回答by tnga
For JavaScript implementation of GNU gettext API these links can be also useful:
http://tnga.github.io/lib.ijs
http://tnga.github.io/lib.ijs/docs/iJS.Gettext.html
对于 GNU gettext API 的 JavaScript 实现,这些链接也很有用:
http: //tnga.github.io/lib.ijs
http://tnga.github.io/lib.ijs/docs/iJS.Gettext.html
//set the locale in which the messages will be translated
iJS.i18n.setlocale("fr_FR.utf8") ;
//add domain where to find messages data. can also be in .json or .mo
iJS.i18n.bindtextdomain("domain_po", "./path_to_locale", "po") ;
//Always do this after a `setlocale` or a `bindtextdomain` call.
iJS.i18n.try_load_lang() ; //will load and parse messages data from the setting catalog.
//now print your messages
alert( iJS.i18n.gettext("messages to be translated") ) ;
//or use the common way to print your messages
alert( iJS._("another way to get translated messages") ) ;
回答by user187291
You can make your life much easier if you get rid of bad habit to use string literals in your code. That is, instead of
如果您改掉在代码中使用字符串字面量的坏习惯,您的生活就会变得更加轻松。也就是说,而不是
alert("Some message")
use
用
alert($("#some_message_id").text())
where "#some_message_id" is a hidden div or span generated on the server side.
其中“#some_message_id”是在服务器端生成的隐藏 div 或 span。
回答by dsas
As a further hint there's a perl script called po2json which will generate json from a .po file.
作为进一步的提示,有一个名为 po2json 的 perl 脚本,它将从 .po 文件生成 json。
回答by abumalick
This library seems the best implementation of getText in javascript:
这个库似乎是 javascript 中 getText 的最佳实现:
http://messageformat.github.io/Jed/
http://messageformat.github.io/Jed/
https://github.com/messageformat/Jed
https://github.com/messageformat/Jed
example from the documentation:
文档中的示例:
<script src="jed.js"></script>
<script>
var i18n = new Jed({
// Generally output by a .po file conversion
locale_data : {
"messages" : {
"" : {
"domain" : "messages",
"lang" : "en",
"plural_forms" : "nplurals=2; plural=(n != 1);"
},
"some key" : [ "some value"]
}
},
"domain" : "messages"
});
alert( i18n.gettext( "some key" ) ); // alerts "some value"
</script>

