本地化:Php和Javascript
我正在考虑将我的网站本地化的最佳方法。我正在使用Laravel,它已经有了一个php本地化类,但我还需要翻译一些javascript字符串 理想情况下,我会使用一个库或翻译文件,可以通过Poedit进行编辑,可以用于javascript和php,但我找不到解决方案。甚至不必创建一个全新的代码库也可以吗 到目前为止,我所想到的解决方案还远远不够理想:本地化:Php和Javascript,javascript,php,laravel,localization,language-translation,Javascript,Php,Laravel,Localization,Language Translation,我正在考虑将我的网站本地化的最佳方法。我正在使用Laravel,它已经有了一个php本地化类,但我还需要翻译一些javascript字符串 理想情况下,我会使用一个库或翻译文件,可以通过Poedit进行编辑,可以用于javascript和php,但我找不到解决方案。甚至不必创建一个全新的代码库也可以吗 到目前为止,我所想到的解决方案还远远不够理想: 对php字符串使用php本地化类 对javascript使用javascript本地化库 将语言存储在两端都可以读取的cookie中 保留两个单
- 对php字符串使用php本地化类
- 对javascript使用javascript本地化库
- 将语言存储在两端都可以读取的cookie中
您对此有何想法?您可以始终让Javascript文件在每次请求时由PHP生成,这意味着您仍然可以使用PHP本地化库来实现这两个目的 我可以想象,这对于在浏览器中缓存javascript文件可能不是很好,但您可以始终使用一个PHP脚本来生成javascript文件,为每种语言创建不同的文件,然后在需要更新它们的任何时候,只需再次运行PHP脚本来覆盖它们
我从未从事过本地化工作,但我想它涉及到一个文件,该文件匹配每种语言的单词/短语?如果是这样,您可以设置一个cron作业来检查上次更新该文件的时间,然后运行PHP脚本生成Javascript文件?这样,您就不必担心每次手动运行它了,因为我们已经面临这个问题一段时间了。如果你在Github上搜索,你会在那里找到一些项目,但是这些项目中的任何一个都可以解决问题,正如你所说的,维护两个文件根本不是一个好的选择。因此,我们找到的解决这个问题的方法是:
/**
* i18n for JS
*/
var i18n = (function() {
return {
stringOne: "{{trans('yourStringOneKeyFromPhp')}}",
stringTwo: "{{trans('yourStringTwoKeyFromPhp')}}"
}
}());
对于中小型网站,我会创建一个翻译表,如
table: translations
en_gb, de, fr
--------------------------------
Text, Text (in de), Text (in fr)
然后,您将通过url识别当前区域设置,并仅获取当前区域设置的数据,例如
if locale == de, get en_gb and de fields.
然后构建阵列:
$translations = ['en_gb' => 'de'];
一旦获得了数组,就可以通过php翻译任何静态内容
现在可以将数组传递给javascript
var translations = json_encode($translations);
现在,您还可以访问一个javascript对象:
translations['English text']
将返回反翻译
在页面加载/刷新时,只需查询数据库一次,并且这些表将使其易于维护