2011-06-10 79 views
0

我需要对我的网站本地化系统解决方案发表评论。PHP中的语言本地化

内容

Field Type Null Key Default Extra 
id int(11) NO PRI NULL auto_increment 
Page varchar(30) YES  NULL  
Locale varchar(10) YES  NULL  
Data longtext YES  NULL 

我的想法是存储每个页面,每个区域设置到内容表中。例如:

index.php en_GB {data} 
index.php de_DE {data} 

数据字段将包括一个json_encoded阵列,其中每个页面元素的文本将被存储的。例如:

$data['Headline1'] = 'The Headline'; 
$data['Welcome'] = 'The welcome text.'; 

我还没有实现它,但我打算使用的memcached以提高性能 - 和小我知道这是一个完美的数据种类上使用它,因为它是不容易经常更新。

这是好还是坏,是否应该全部报废?请评论!

+0

最近我已经用poedit来实现gettext(与wordpress使用的解决方案相同),它不是很难构建 – Dalen 2011-06-10 08:37:36

回答

1

一些注意事项:

  1. 不要每页店的翻译,这会导致很多冗余数据的一些翻译将出现OM多个页面。
  2. 我反对将所有翻译引入数据库中的一个字段,为每个翻译后的句子添加一个条目。
  3. 将locale(varchar)替换为unsigned tinyint并在其上创建索引,请在语言环境表中使用语言环境。

沿东西的喜欢:

translationId | localeId | translationKey | translationText 
+0

该网站将承受非常沉重的负载。我想将查询次数保持在最小,这就是为什么我选择一次性为某个特定区域设置整个页面的原因。你对此有何想法? locale => int的想法很好,我会用它。 – Mattis 2011-06-10 11:17:14

2

如果你想要做的本地化在PHP中使用gettext,你将有时间就实现其他的功能也一样,而不是建立自己的定位系统。

不要担心速度,php gettext扩展比使用字符串数组运行得更快。

+0

我不会使用任何依赖于设置区域设置的东西。 – 2011-06-10 08:42:49

+0

我不愿意使用额外的插件,因为我想完全控制数据。我会让我的用户将网站翻译成他们各自的语言,并且实现显然将由我编码。我将不得不阅读gettext(并且我也看到了一些关于Zend插件的内容)。如果它跟你说的一样快,它肯定听起来很有希望。 – Mattis 2011-06-10 11:14:11