问题 在php或mysql中翻译网站?


我需要用多种语言翻译我的网站。我正在考虑使用一个名为language的数据库并将翻译放在那里。

database : translation
tables:  language
column: id, english, french, german, italian, spanish

或者我正在考虑像以下的PHP解决方案:

english.php
french.php
german.php
italian.php
spanish.php

所以你只需要包含你需要的文件。

现在,我可以看到两者的利弊,我想知道的是业内标准是做什么样的事情?


1502
2017-12-05 02:23


起源

创建每个页面更容易和更优雅:en.php,fr.php ...每次查询数据库更好 - amrfaissal
你能告诉我为什么吗? - Adam
我只是发现这个网站可维护!如果你需要改变一个单词的翻译,你需要去DB并改变它!假设中国人喜欢您的网站,他们需要翻译以获得更好的体验,您需要转到数据库并再次更改,这是不合适的。 - amrfaissal


答案:


您可以使用 gettext的,此功能是针对此功能提出的,不是“标准”,而是足够快。

使用带有大数组的PHP文件的第二个选项(对于每个字符串来说真的很大),这是最常见的解决方案。

对于数据库内容(这里的大问题,不要忘记),如果所有内容都必须有翻译,每种语言一列,否则在数据库上使用每行语言标记。


12
2017-12-05 02:34



+1关于gettext最好的事情之一就是有很多很棒的翻译工具可以用适当的格式创建文件,如果你将来需要专业的翻译,它也很容易提交给几个在线服务。 - Michael Mior


没有行业标准。我已经看到(并实现了)使用平面文件,XML,PHP代码,数据库和gettext文件来存储本地化字符串的解决方案。这是一个更适合的问题

我的PHP的首选方法就是包含字符串数组的文件

en.php

return array (
    'How are you?' => 'How are you?',
    'Goodbye' => 'Goodbye',
);

de.php

return array (
    'How are you?' => 'Wie gehts?',
    'Goodbye' => 'Auf wiedersehen',
);

这可以以合理的粒度集成到应用程序中(可以有许多这样的文件,例如每个组件一个)和控制(如果你没有找到字符串,你可以轻松地回退到任何其他语言)并且它也非常无需特殊工具即可轻松修改。

我最喜欢的PHP框架(警予)和我曾经参与的一个巨大的开源项目(Moodle的)也使用这种方法。


2
2017-12-05 02:28



我已成功使用不同的语言数组,我发现它在我现有的项目中实现起来最简单(非常大)。还记得只在开始时加载你需要的数组而不是加载它们然后选择一个,我发现它的速度要快得多。 - Luke


这两种解决方案中没有一个对我来说似乎很棒。从长远来看,你应该考虑一个解决方案。

如果您选择使用与您认为的俄语或中文不同的其他语言翻译您的网站,该怎么办?在第一种情况下,您必须添加越来越多的列,在第二种情况下,您需要创建越来越多的文件。另一个缺点是,如果你翻译意大利语和西班牙语的页面但尚未用法语翻译?

我认为好的方面是拥有基于数据库的解决方案和主要语言。现在你可以这样做:

  • 创建一个表'page'(id,title,...),你将以主语言存储页面,你也可以在那里获得翻译页面的信息
  • 创建表'翻译'(idsource,idtranslation,language)
  • 每次检查可用的翻译并将其提供给用户

2
2017-12-05 02:31



一个很好的解决方案,虽然你的解释对于那些没有完成数据库工作的人来说可能有点不清楚。 - RonLugge


在数据库本地化中,您有四个主要策略。每个都有特定的优点和缺点。从长远来看,我肯定会推荐克隆。您可以在以下链接中看到以下四种方法:

http://www.sisulizer.com/localization/software/server-desktop-database.shtml

您希望确保实施两个主要想法。首先,请确保您正在整合某种形式的翻译记忆库。您的语言供应商应该指导您如何执行此操作并可能为您执行此操作。

第二种,对于您定位的每种其他语言,您的数据将至少复杂2倍。当你前进时,请记住这一点。不仅是您的数据,还有您的文件集,管理等。

希望有所帮助。如果您还有其他问题,请与我们联系。 罗素


0
2017-12-05 14:34