如何制作多语言网站

时间:2010-03-21 13:17:00

标签: php mysql internationalization multilingual

任何机构都可以告诉我如何在PHP和MySQL中创建动态多语言网站吗?我不知道。我在谷歌搜索并没有找到任何好的解决方案。

任何人都可以为我提供一步一步的指导吗?如果可能的话,为多语言网站制作一个演示。或者,请参阅我解释其详细信息的任何链接。

5 个答案:

答案 0 :(得分:68)

答案 1 :(得分:10)

答案 2 :(得分:7)

我一直使用的解决方案是创建一个包含所有可能消息的数据库表。对于每条消息,我使用代码(缩写)来查找它。例如:

lang  id        message
en    login     Login
en    lostpass  Lost your password?
de    login     Anmelden
de    lostpass  Paswort vergessen?
nl    login     Aanmelden
nl    lostpass  Wachtwoord vergeten?

等。通过使用MySQL查询查找翻译通常足够快,但您也可以将所有消息放在数组中并在脚本加载时将其加载到内存中。用户应始终能够设置自己喜欢的语言,不要盲目依赖Web浏览器设置的语言标题。

答案 3 :(得分:3)

您可以使用最简单的语言PHP Multi Language Class - LangQuery

您可以将语言数据保存到.ini文件,而不仅仅是通过

调用它
include("LangQuery.php");

$L=new LangQuery();

// Write Hello World
echo($L('hello_world'));

// Write Hello World Easier - In-line Echo Feature
// You don't have to write echo. Just add '>'
$L('>hello_world');

// Use in Strings
echo("Hello Universe. {$L('hello_world')} Hello Europe");

// Write my age with parameter
$L(">my_age",25);

// Write my name and age with parameters
$L(">my_name_age","Recep",25);

答案 4 :(得分:1)

我现在正在设计一个非常小的CMS,必须是多语言。

大多数人关注的一个功能是,客户可以自发决定添加或删除语言。

出于这个原因,我的目标不是设计为数据库表添加后缀,我不能(并且不想)修改表名或使用dinamic名称访问它们,也不能在每次语言时添加或删除字段定义或删除。

我也不会使用文件,因为我喜欢数据库,而且很容易保留文件。

最后,我认为有两种类型的翻译:

  1. 网络文字。
  2. 内容文字。
  3. 因此,我的设计旨在:

    • languajes 包含已定义语言的表格。
    • 翻译包含所有消息的单个表,如下所示:
      • [pk] table_name 将翻译内容的表格的名称。
      • [pk] field_name 要翻译内容的字段的名称。
      • [pk] row_id 要翻译的项目的行标识符。
      • [pk] 语言文本翻译的语言。
      • 文字翻译后的文字。

    这意味着哪些字段在单语言场景中具有内容,现在将使其内容无效,因为它将始终位于翻译表中。

    这将增加sql查询的复杂性,但它允许我开发工具来以简单的方式维护翻译。此外,只有在实现解决方案时,sql的复杂性才会存在一次。如果正确设计了该实现,则站点的维护/可扩展性不一定是主要问题。

    修改

    在与开发者朋友进行一些对话之后,我认为我在这里接受的解决方案在一张桌子上收费过高。

    我将从现在开始研究的另一种方法是为每个“可翻译表”创建一个额外的表,如下所示:

    • any_translatable_table:需要翻译其任何字段的表
    • any_translatable_table_translations:将存储翻译的表格。
      • [pk] field_name 要翻译内容的字段的名称。
      • [pk] row_id 要翻译的项目的行标识符。
      • [pk] 语言文本翻译的语言。
      • 文字翻译后的文字。

    此方案继承了第一个概念,但将每个表的内容分开。这种替代解决方案可以提高性能并隔离问题(作为索引问题)。

    每个“可翻译表格”的额外翻译表将与原始表格同时创建。

    关于sql查询,复杂性仍然相同:第一种方法需要表名搜索到翻译表,但第二种方法只是在表名中添加后缀“_translations”。