本地化:Php 和 Javascript
Localization: Php and Javascript
我正在考虑本地化网站的最佳方法。我正在使用Laravel,它已经有一个php本地化类,但我还需要翻译一些javascript字符串
理想情况下,我会使用可以通过 Poedit 编辑的库或翻译文件,并且可以用于 javascript 和 php,但我找不到解决方案。甚至不必创建全新的代码库就可以吗?
到目前为止,我想到的解决方案远非理想:
- 对 php 字符串使用 php 本地化类
- 使用 JavaScript 本地化库进行 JavaScript
- 将语言存储在两端都可以读取的cookie中。
保留两个单独的语言文件(一个用于 php,一个用于 javascript(的想法似乎不是一个优雅的解决方案。
我看到了一些用于 laravel 的 javascript 库,但它们要求你在每次更新内容时将库编译成 javascript 数组文件,这将使它不是很动态且冗余,因为大多数 php 字符串不会在 javascript 中使用,反之亦然。
对此有什么想法吗?
你总是可以让你的Javascript文件是每个请求的PHP生成的,这意味着你仍然可以对两者使用PHP本地化库。
我想这对于在浏览器中缓存javascript文件可能不是很好,但是您始终可以使用生成javascript文件的PHP脚本,为每种语言创建不同的文件,然后每当您需要更新它们时,只需再次运行PHP脚本即可覆盖它们
我从未从事过本地化工作,但我想它涉及一个匹配每种语言的单词/短语的文件?如果是这样,您可以设置一个 cron 作业来检查上次更新此文件的时间,然后运行 PHP 脚本以生成 Javascript 文件?然后,您不必担心每次都手动运行它
我们已经面临这个问题一段时间了。如果你在Github上搜索,你会发现那里有一些项目,但这些项目中的任何一个都可以解决问题,正如你所说,维护两个文件根本不是一个好的选择。因此,我们发现解决此问题的方法是:
-
在每个页面上,在javascript上声明一个变量,您将使用php设置该变量,这样它也将在JS端可用。它一点也不优雅,但解决了这个问题。所以它会是这样的:
/** * i18n for JS */ var i18n = (function() { return { stringOne: "{{trans('yourStringOneKeyFromPhp')}}", stringTwo: "{{trans('yourStringTwoKeyFromPhp')}}" } }());
-
另一方面,更好的解决方案是正如 Adi 指出的那样,通过创建实际上用作 javascript 文件的虚假视图,您将在其中解决控制器上的 i18n 变量。这是一个更优雅的解决方案,但它违背了缓存,所以我想这是一个权衡问题,你选择哪种方式实现。也许,一个好方法是使用此插件并更新 json 文件,如前所述。
对于中小型网站,我会创建一个翻译表,例如
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']
将返回 de 翻译。
您只会在页面加载/刷新时查询数据库一次,并且表将使其易于维护。
- AJAX Post的奇怪Javascript/PHP行为
- 带有输入参数的Javascript/PHP中的XMLHTTPrequests
- 用Javascript/PHP创建字典
- 如何记录用户'使用Javascript/PHP的语音
- fetch data from db using javascript & php
- onClick按钮不工作javascript/php/jquery mobile
- 通过Javascript(PHP循环)添加类
- Javascript php onclick
- Interfacing html, javascript, php and mysql
- Javascript/PHP Validation
- JavaScript/PHP 刷新取代了 HTML 元素类
- Cross-domain javascript <-> php
- 设置计时器并使用javascript/PHP进行检查
- Javascript/Php聊天-输入is'不能在一个文本框中工作
- AJAX (JavaScript / PHP), FormData not sending
- Javascript/PHP中的HTML转义/编码
- 我想在Iframe Javascript PHP的帮助下,将单个ajax上传器脚本转换为多个上传器
- javascript/php中的批量打印
- Javascript/PHP,使用文本文件作为数据库,并将内容组织到阵列表中
- JavaScript/PHP函数不会发布到其他页面