我正在尝试使用支持多种语言的php和javascript(jquery)开发一个网站。我正试图获得以下内容:
问题是:我的javascript代码动态生成DOM中的各种元素,需要打印语言文件中的一些字符串。
我的实际解决方案是,在php中使用gettext,在文档中打印javascript必须使用的字符串:
<?php
... some kind of gettext initialization ...
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo _("My page Title"); ?></title>
...
</head>
<body>
...
<script type="text/javascript">
var LANG = {
"string1" : "<?php echo _("string1"); ?>",
"string2" : "<?php echo _("string2"); ?>",
"string3" : "<?php echo _("string3"); ?>",
...
};
</script>
</body>
</html>
然后我在我的js来源中访问LANG
,但我不认为这是最好的解决方案......
我的问题是:
gettext
库的效率如何?在生成的页面上实现某种形式的缓存机制可能很有用吗?答案 0 :(得分:2)
gettext
被许多行业标准应用程序使用。它没有任何根本性的错误,除了我认为它处理得不好(因为它往往依赖于安装在系统上的语言环境和类似的垃圾)。
更复杂但也更灵活的替代方案可以Zend_Translate可以连接到不同的字典后端 - .po / mo文件,如gettext(这很棒,因为你有一整套编辑工具供所有人使用)平台),还有数据库。
你展示的方法(将字典送入主文档中的JavaScript)很好,因为据说你应该已经在那时使用PHP进行动态处理,而且JavaScript文件可以保持静态,这很棒。
如果您有一个庞大的字典,那么HTML文件可能会有点沉重,因为您要在每个请求上传输所有数据。在这种情况下,您应该考虑外部JavaScript资源。您有两种选择:
提供PHP生成的JavaScript文件 - 包含所有字典定义的文件。使用某种形式的If-modified-since
caching,因此只有在实际发生了某些变化时才需要重新呈现字典,或者发送具有较长生命周期的缓存标题。
或:每当字典更新时,运行PHP脚本(自动或手动),生成包含所有字典定义的静态JavaScript文件。这可能是两个世界中最好的。
答案 1 :(得分:1)
我使用定义,语言php文件和会话来说明要显示的语言。
index.php
<?php
session_start();
if (isset($_SESSION['lang'])){
require('language/' . $_SESSION['lang'] . '.php');
}else{
require('language/english.php');
}
<html>
<?= HELLO_WORLD ; ?>
</html>
然后制作这样的语言文件。
language/english.php
define("HELLO_WORLD", "Hello world!");
答案 2 :(得分:0)
你应该查看Poedit,据我所知它是最好的本地化软件,它广泛用于wordpress等。你也可以将所有不同的翻译存储在数据库中,并根据地理位置提供服务。