在PHP中翻译多种语言

时间:2008-11-06 17:42:15

标签: php internationalization translation user-input

我正在开发一个小型解析器,它应该接受多种语言的输入。我将有50个字符串作为解析输入的关键字/锚点。在PHP中,组织这些翻译关键字的最佳方法是什么?

我想到的一个可能的解决方案是使用关联数组。像这样:

$lang = array('us' => array('totalDebt' => 'Total Debt', 'color' => 'Color'),
              'gb' => array('totalDebt' => 'Total Debt', 'color' => 'Colour'))

然后我可以使用以下内容访问:

$langCode = 'en';
$debtPos = strpos($lang[$langCode]['totalDebt']);

有没有更好的,经过验证的方法来处理一堆翻译成一堆语言的短字符串?

5 个答案:

答案 0 :(得分:2)

要获得完整的翻译解决方案,您可以查看gettext等解决方案。

对于小词典,你的解决方案足够好(快速,资源便宜)。 我不明白你试图用strpos()函数做什么。

如果您要翻译的术语在语言中不存在,请不要忘记使用某种后备,通常后备是英语。

答案 1 :(得分:0)

通常人们在他们的应用程序中使用l10n(或类似的东西),因为它通过添加本地化文件允许其他语言,这意味着程序员不必更改代码。但如果它是一个简单的脚本,那么full on localization将是矫枉过正的。

答案 2 :(得分:0)

我已经看到您的解决方案在其他OS项目中使用,但$lang数组通常在不同的文件中构建。例如:

<?php // lang.us.php
$LANG['us'] = array(
                    'totalDebt' => 'Total Debt',
                    'color' => 'Color',
                   );

以及lang.gb.php,lang.de.php等等。

答案 3 :(得分:0)

正如彼得所说,你有正确的想法,但将你的语言分成不同的文件。这意味着PHP不必在每种语言中存储每个单词的数组。因为您一次只能加载一种语言,所以您也可以跳过$lang['us']嵌套级别。

你甚至可以“扩展”语言:

<?php // lang.en-gb.php
$lang = array(
    'color' => "Colour",
    'totalDebt' => "Total Debt",
    ...
);
?>

<?php // lang.en-us.php
include('lang.en-gb.php');

$lang['color'] = "Color";
// don't need to redefine "totalDebt"
?>

您甚至可以考虑创建一个基本类来处理所有这些:检测语言环境,选择正确的文件,处理“错误”,如果没有用特定语言定义术语等等。

答案 4 :(得分:0)

您可能不希望'totaldebt'=&gt; “总债务”最终将使代码混淆,并且比仅将“总债务”存储为散列密钥要慢。 gettext的处理方式是将字符串包装在函数中。

所以而不是:

echo "Color";

你这样做:

echo t("Color");

t()函数将查看全局定义的语言,并在可能的情况下进行替换。在某些时候,您可能希望使用gettext并以这种方式执行它将是兼容的。