我有一个主要用 PHP 编写的应用程序。翻译是使用 gettext() 完成的。
有一个小的 JavaScript 部分也包含要翻译的字符串。
我使用 XMLHttpRequest 编写了这个简单但有效的方法:
function gettext(string_to_translate) {
var filename = get_php_script_folder() + 'gettext.php?string_to_translate=' + string_to_translate;
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", filename, false);
xmlhttp.send();
if (xmlhttp.status === 200) {
var translated_string = xmlhttp.responseText;
return translated_string;
} else {
console.log("Error while translating " + string_to_translate + " Status " + xmlhttp.status);
return string_to_translate; //Just give the original string.
}
}
php 文件也很简单:
require_once '../../default.php'; //configures gettext, session management, etc.
//TODO: support for ngettext might be added.
$string_to_translate = filter_input(INPUT_GET, 'string_to_translate', FILTER_SANITIZE_STRING);
$translated_string = gettext($string_to_translate);
echo $translated_string;
在 JavaScript 中我只是调用:
var input_box_form_default_reason = gettext("Vacation");
document.getElementById('input_box_form_reason').value = input_box_form_default_reason;
如果我同步调用此函数 [xmlhttp.open("GET", filename, false);] Firefox/Chrome 会警告我:
[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
因此,尽管此方法有效,但它可能随时停止。
但是,如果我运行异步代码 [xmlhttp.open("GET", filename, true);],那么下一行将在结果出现之前执行。该值将是未定义的。
使异步 XMLHttpRequest 在这种情况下工作是否可行?我是否应该坚持同步获取值,直到编写出一些巧妙的 API 为止?
我应该用 PHP 编写 JS 文件吗? (我希望不是。)
PS:
我不使用任何像 jQuery 这样的框架。那是“宗教”的事情。我想自己完全理解和维护整个代码库。
-
我读了以下问题,但没有回答我的问题:
JavaScript 中的翻译就像 PHP 中的 gettext 一样? https://stackoverflow.com/questions/2400106/translation-in-javascript-like-gettext-in-php
JavaScript 中的 PHP Gettext,不适用于外部 JS 文件 https://stackoverflow.com/questions/41612768/php-gettext-in-javascript-not-working-in-extern-js-file
在Poedit中提取javascript gettext? https://stackoverflow.com/questions/35406246/extract-javascript-gettext-in-poedit
如何将 gettext 字典中的术语输入 JavaScript? https://stackoverflow.com/questions/21008743/how-do-i-feed-terms-from-a-gettext-dictionary-into-javascript
带有 gettext 和 .po 文件的 javascript i18n https://stackoverflow.com/questions/10151284/javascript-i18n-with-gettext-and-po-files(断开的链接)