目前我的php应用程序运行在英语上。我们现在必须迎合其他一些语言。我们注意到有些人对所有表单进行了整套翻译,并根据翻译的语言添加了新的文件夹标签。这是一种优化方法吗?
答案 0 :(得分:2)
您应该使用包含您的句子(或使用数据库)的文件,并根据所选语言包含它们。
例如:
<强> Language_FR.txt:强>
hello = 'Salut'
delete='Supprimer'
<强> Language_EN.txt:强>
hello = 'Hello !'
delete='Delete'
答案 1 :(得分:1)
这取决于翻译的数量。您可以为所有语言使用一个php include文件,或将每种语言分成单独的文件。
$lang['en']['submit'] = 'submit';//english
$lang['fr']['submit'] = 'soumettre';//french
$lang['es']['submit'] = 'presentar';//spanish
以及基于占位符的html with
<?php
$lang = 'fr'; //set the language somewhere
<button><?=$tang[$lang]['submit'];?></button>
?>
这会输出<button>soumettre</button>
不要制作整个网站的副本,否则编辑将意味着每次您想要进行更改时编辑翻译次数。
答案 2 :(得分:1)
大多数实现基本上都使用由该语言编制索引的查找表 (在数据库或文本文件中)。
然后在代码中,只要显示用户界面元素,就会有一个函数可以查找要显示的语言的正确字符串。
一种非常简单的方法可能是根据语言包含正确的文件。
在你的文本文件中(我们称之为'de.php'),例如:
$ lang [] = ['你确定吗?'] ['Sind Sie sicher?'];
$ lang [] = ['取消'] ['Abbrechen'];
然后您的代码可以:
//加载适当的语言
包括($ userLang。 “PHP”);
...
echo $ lang ['你确定吗?'];
答案 3 :(得分:1)
我仍然是为了数据库的想法。
假设您有输入字段,旁边有英文的“用户名”,默认值为“输入您的用户名”。你可以有类似的东西:
<td><?=$obj->translate('username');?></td>
<td><input type="text" name="username" value="<?=$obj->translate('enter_username');?>" /></td>
所以你在你的数据库表translations
中有...:
id | placeholder | en | pl |
-------------------------------------------------------------------------
1 | username | Username | Nazwa użytkownika |
2 | enter_username | Enter your username | Wprowadź nazwę użytkownika |
所以你的客户很光彩,你设置他$_SESSION['language'] = 'pl'
构建函数/方法translate(),它返回当前的语言翻译。
public function translate($word) {
$sql = "SELECT $_SESSION['language'] FROM translations WHERE placeholder = '$word';";
$this->db->query($sql);
return $this->db->result();
}
基本上,当您为波兰语客户端运行$obj->translate('enter_username');
时,您可以进行以下查询:
SELECT pl FROM translations WHERE placeholder = 'enter_username';
返回'Wprowadźnawwęüżytkownika'
每当您需要打印某些内容时,您必须在数据库中插入它的占位符,稍后或立即将其翻译。
如果您需要并通过javascript提示错误,例如,对于错误的用户名,您在数据库中添加占位符,即“wrong_username_from_login_form”,最近用英语翻译为“您输入了错误的用户名”。请回去再试一次“。
你可以:
<script>
alert("<?=$obj->translate('wrong_username_from_login_form');?>");
</script>
如果您的客户是英语,他会在屏幕上发出警告:“您输入了错误的用户名。请返回并重试”
答案 4 :(得分:0)
您永远不应该尝试在数据库中存储用户界面元素的翻译(让我们称之为'静态')。而是使用适合您的技术的本地化文件格式。使用PHP时,这可能是Gettext(PO),CSV或只是一个简单的PHP数组文件。
优点: - 您可以将文件发送到翻译/翻译服务,而无需从数据库中提取 - 您不必为应用程序的开发/暂存版本提供数据库转储 - 您可以非常轻松地将翻译用于其他技术 - 速度:在PHP中解析CSV / Ini文件比在每个页面上执行n个查询更快
我认为Andy Gee和FaceOfJock很好地展示了您的解决方案应该是什么样子。