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

Php 如何开发一个易于本地化的webapp系统?,php,web-applications,localization,Php,Web Applications,Localization,我正在开发一些web应用程序,我正在考虑为其添加一些本地化功能,这样人们就可以轻松地在不同语言之间切换,也许在将来,可以为该应用程序添加自己的本地化功能,比如Facebook的语言或用户语音 我知道我应该有一个模板,比如: <element>[string1]</element> [string1] 基本上,[string1]将被替换为正确的字符串,但我应该将其存储在哪里?数据库静态文件?每次从数据库中获取字符串的数据不是很“昂贵”吗?我如何处理它?使用输出缓冲区,或

我正在开发一些web应用程序,我正在考虑为其添加一些本地化功能,这样人们就可以轻松地在不同语言之间切换,也许在将来,可以为该应用程序添加自己的本地化功能,比如Facebook的语言或用户语音

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

<element>[string1]</element>
[string1]
基本上,[string1]将被替换为正确的字符串,但我应该将其存储在哪里?数据库静态文件?每次从数据库中获取字符串的数据不是很“昂贵”吗?我如何处理它?使用输出缓冲区,或者有没有更好的方法,我不知道


如果有人能告诉我正确的想法,我将不胜感激。

在PHP中,通常的做法是将所有字符串存储在PHP数组中,存储在PHP文件中。

我建议您看看。gettext函数实现了一个NLS(本地语言支持)API,可用于对PHP应用程序进行国际化


Gettext实际上是linux/unix系统上的本地化标准,在PHP应用程序中也广泛使用(例如Wordpress就使用它)。要获得更深入的解释、示例等,请查看上面PHP手册中的Gettext部分,或者您可以访问,以更广泛地讨论Gettext工具、绑定等。

有许多可用的开源翻译工具包系统,可以让您更好地了解应做和不应做的事情(例如)

如果您决定按自己的方式进行,我建议将所有翻译键和值存储在数据库中。当涉及到编辑、搜索、获取丢失的翻译等时,你会过得更好

您可以每24小时或在每次新的/编辑的翻译之后生成完整的翻译列表,然后以JSON或PHP序列化格式存储在静态文件中。这会将您从MYSQL中解救出来


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

当我必须本地化我的应用程序时,我通常会创建一个翻译/目录,然后为每个区域性创建一个子目录。例如,我可以在其中包含以下文件夹:

  • en US/-包含美国用户的翻译
  • en GB/-包含英国用户的翻译
  • 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;
}
使用库,这可能对您有用