我正在构建一些网络应用程序,我正在考虑为其添加一些本地化,因此人们可以在语言之间轻松切换,也许将来可以为应用程序添加自己的本地化,像Facebook的语言或uservoice。
我知道我应该有一个模板,例如:
<element>[string1]</element>
基本上,[string1]将替换为正确的字符串,但我在哪里存储它?数据库?静态文件?每次从数据库中获取字符串的数据是不是“昂贵”?以及如何处理它?使用输出缓冲区,还是有一些我不知道的更好的方法。
如果有人能以正确的思维方式指导我,我会很感激。
答案 0 :(得分:2)
有许多开源翻译套件系统可以让您更好地了解DO和DON'Ts(例如pottle,poedit,virtaal)
如果您决定采用自己的方式 - 我建议将所有翻译键和值存储在数据库中。在编辑,搜索,缺少翻译等方面,你会更好。
您可以每24小时或每次新/翻译后生成完整的翻译列表,然后将其存储在JSON或PHP序列化格式的静态文件中。这将使您免于MYSQL选择。
我建议的另一件事是选择KEYS + KEY TRANSLATIONS的格式。应在第一次调用时将KEYS插入数据库以获取翻译。这将引导您“缺少翻译”,这是使用第三方或您的网站访问者进行本地化翻译的好方法。
答案 1 :(得分:1)
当我必须本地化我的应用程序时,我通常会创建一个 translations / 目录,然后创建每个文化的子目录。例如,我可以在里面有以下文件夹:
然后我这样得到语言环境:
<?php
$default_locale = 'en';
$parts = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$sub_parts = explode('-', $parts[0]);
if (is_dir("languages/{$parts[0]}")) {
$locale = $parts[0];
}
elseif (is_dir("languages/{$sub_parts[0]}")) {
$locale = $sub_parts[0];
}
else {
$locale = $default_locale;
}
请注意,您应该对 $ _ SERVER ['HTTP_ACCEPT_LANGUAGE'] 变量执行检查,以避免尝试LFI(本地文件包含)。只需检查区域设置是否包含在 languages / 目录中。
答案 2 :(得分:0)
在PHP中执行此操作的常用方法是将所有字符串存储在PHP文件中的PHP数组中。
答案 3 :(得分:0)
我建议你看看Gettext for PHP。 gettext函数实现了一个NLS(本地语言支持)API,可用于国际化您的PHP应用程序。
Gettext是linux / unix系统本地化的事实标准,也广泛用于PHP应用程序(例如,Wordpress使用它)。有关更深入的解释,示例等,请查看上面PHP手册中的Gettext部分,或者您可以访问original gettext manual以获得有关gettext工具,绑定等的更广泛讨论。
答案 4 :(得分:0)