PHPコードで使用gettext
していますが、大きな問題があります。私のすべてのJavaScriptファイルは翻訳の影響を受けません。選択した言語の翻訳をJavaScriptに変換する簡単な方法を誰かに教えてもらえますか。
8 に答える
最も簡単な方法は、PHP ファイルで変換gettext
を JavaScript 変数に書き込むことです。
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"); ?>"
そしてそれを含めます:
<script type="text/javascript" src="js_lang.php"></script>
また、S.Mark が言及している翻訳プラグイン (非常に興味深いものです!) と組み合わせてこの方法をお勧めします。
外部ファイルを含めずに、現在のページのヘッダーで辞書を定義することもできますが、その方法では、ページの読み込みごとにデータを検索して送信する必要があります。辞書はめったに変更されない傾向があるため、まったく不要です。
私は通常、JavaScript 構造で翻訳をエクスポートします。
var app = {};
var app.translations = {
en: {
hello: "Hello, World!",
bye: "Goodbye!"
},
nl: {
hello: "Hallo, Wereld!",
bye: "Tot ziens!"
}
};
ページ テキストの現在の言語は、次を使用して定義できます。<html xml:lang="en" lang="nl">
これは JavaScript で読むことができます:
var currentLanguage = document.documentElement.lang || "en";
app.lang = app.translations[ currentLanguage ] || app.translations.en;
そして、次のようなコードを書くことができます:
alert( app.lang.hello );
オプションで、i18n()
またはgettext()
関数は、キーが存在しない場合にデフォルトのテキストを返すために、ある程度のインテリジェンスをもたらすことができます)。例えば:
function gettext( key )
{
return app.lang[ key ] || app.translations.en[ key ] || "{translation key not found: " + key + "}";
}
jQuery i18nまたはjQuery ローカリゼーションを試してください
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'));
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 コード
window.onload = function init(){
var gt = new Gettext({ 'domain' : 'messages' });
alert(gt.gettext('Hello world'));
}
参考までに、以下のリンクを見つけてください。.js ファイルを .php に変換しなくても問題なく動作しています。
コードで文字列リテラルを使用する悪い習慣を取り除くと、作業がずっと楽になります。つまり、代わりに
alert("Some message")
使用する
alert($("#some_message_id").text())
ここで、「#some_message_id」は、サーバー側で生成された非表示の div またはスパンです。
さらにヒントとして、.po ファイルから json を生成する po2json という perl スクリプトがあります。