如何开发一个易于本地化的webapp系统?

时间:2011-10-10 13:15:56

标签: php web-applications localization

我正在构建一些网络应用程序,我正在考虑为其添加一些本地化,因此人们可以在语言之间轻松切换,也许将来可以为应用程序添加自己的本地化,像Facebook的语言或uservoice。

我知道我应该有一个模板,例如:

<element>[string1]</element>

基本上,[string1]将替换为正确的字符串,但我在哪里存储它?数据库?静态文件?每次从数据库中获取字符串的数据是不是“昂贵”?以及如何处理它?使用输出缓冲区,还是有一些我不知道的更好的方法。

如果有人能以正确的思维方式指导我,我会很感激。

5 个答案:

答案 0 :(得分:2)

有许多开源翻译套件系统可以让您更好地了解DO和DON'Ts(例如pottlepoeditvirtaal

如果您决定采用自己的方式 - 我建议将所有翻译键和值存储在数据库中。在编辑,搜索,缺少翻译等方面,你会更好。

您可以每24小时或每次新/翻译后生成完整的翻译列表,然后将其存储在JSON或PHP序列化格式的静态文件中。这将使您免于MYSQL选择。

我建议的另一件事是选择KEYS + KEY TRANSLATIONS的格式。应在第一次调用时将KEYS插入数据库以获取翻译。这将引导您“缺少翻译”,这是使用第三方或您的网站访问者进行本地化翻译的好方法。

答案 1 :(得分:1)

当我必须本地化我的应用程序时,我通常会创建一个 translations / 目录,然后创建每个文化的子目录。例如,我可以在里面有以下文件夹:

  • zh-CN / - 包含来自美国用户的翻译。
  • zh-CN / - 包含来自英国的用户的翻译。
  • en / - 包含后备,通用英语翻译。

然后我这样得到语言环境:

<?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)

Wordpress使用gettext库,这可能对您有用。