簡體   English   中英

用Poedit翻譯JS的方法

[英]A way to translate JS with Poedit

我正在用Gettext和Poedit軟件在PHP中翻譯字符串。 我也想在JavaScript中使用轉換后的字符串,但不要將代碼內聯到HTML文檔中,而要放在外部文件中。 內聯在HTML文檔中,這沒問題,因為內聯JS代碼也已呈現。 一個例子:

var hello = <?=_("hello");?>

譯者應使用與php代碼相同的翻譯表(因為字符串重復)。

所以我的想法是用PHP“編譯” JavaScript文件。 例如,在外部JS文件中的代碼是:

if (window.confirm("_translate('are_you_sure')")) {
location.href = this.href;
}

一個php腳本在上面讀取此代碼,並在_translate()找到所有字符串。 該代碼將用翻譯后的字符串替換_translate('are_you_sure') 它可以工作,但是永遠不會翻譯,因為即使我將_translate添加到源代碼的鍵中,Poedit軟件也不會在_translate()找到字符串。 因此,沒有要翻譯的翻譯字符串。

所以我的問題是如何告訴Poedit他應該在javascript文件中使用_translate()讀取字符串?

您可以包含一個php腳本,該腳本在javascript文件中進行翻譯

$js = $_GET['js'];

// security check
if (preg_match('~[^a-z0-9_-]~', $js)) {
    die("invalid js");
}

$content = file_get_contents('path_to_js/' . $js . '.js');
preg_match_all('~_translate\(\'([^\']+)\'\)~', $content, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
    $content = str_replace($match[0], _($match[1]), $content);
}
echo $content;

所以你必須包括代替yourscript.js PHP文件script.php?js=yourscript

所以我的問題是如何告訴Poedit他應該在javascript文件中使用_translate()讀取字符串?

_translate關鍵字(對於JS是非默認關鍵字)添加到關鍵字列表中,並將路徑添加到您的.js文件。 而已。 Poedit / xgettext現在已經支持JavaScript相當一段時間了。

但是,您誤診了您的問題,並非是Poedit的JS支持。 真正的問題是您期望Poedit / xgettext解析一個恰好包含一些代碼的字符串文字 在上面的示例中, "_translate('are_you_sure')"不是JavaScript代碼(xgettext可以在其​​中找到_translate函數),而是一個字符串! 而且您要的是Confirm confirm()函數顯示包含“ _translate”位的它,這沒有任何意義。

這樣的代碼不會有這個問題:

msg = _translate('are_you_sure');
if (window.confirm(msg)) {
  location.href = this.href;
}

(當然,您必須確保客戶端 JS gettext部署,包括訪問MO文件,然后再在PHP端翻譯字符串,這是更多工作。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM