2011-10-10 27 views
2

我正在構建一些網絡應用程序,我正在考慮爲其添加一些本地化功能,這樣人們就可以輕鬆地在各種語言之間進行切換,並且可能在未來也能夠爲應用程序添加自己的本地化,如Facebook的語言或用戶發言。如何開發一個易於本地化的webapp系統?

我明白了,我應該有一個模板,像這樣:

<element>[string1]</element> 

,基本上,是[字符串1]將與正確的字符串替換,但我在哪裏存放呢?數據庫?靜態文件?每次從數據庫獲取字符串數據是不是「昂貴」?我如何處理它?使用輸出緩衝區,還是有一些我不知道的更好的方法。

如果有人能指導我正確的思維方式,我會很感激。

回答

0

的常用方法在PHP做,這是由您的所有字符串,存儲在PHP數組的PHP文件中。

0

我建議你看一看Gettext for PHP。 gettext函數實現了一個NLS(本地語言支持)API,可用於將PHP應用程序國際化。

Gettext的是用於在Linux/Unix系統定位的事實上的標準,並且被廣泛用於PHP應用太(WordPress的,例如,使用它)。有關更深入的解釋,示例等,請參閱上文PHP手冊中的Gettext部分,或者您可以訪問original gettext manual以獲得關於gettext工具,綁定等的更廣泛討論。

2

有許多開放源代碼翻譯工具包系統可以讓您更好地瞭解DO和DON'Ts(例如:pottle,poedit,virtaal)。

如果你決定走你的路 - 我建議存儲數據庫中的所有翻譯鍵和值。你會好起來的,當涉及到編輯,搜索,越來越缺少翻譯等

您可以生成翻譯的完整列表,每24小時或每一個新的/編輯翻譯,這將被存儲在靜態文件在後JSON或PHP序列化格式。這將爲您節省MYSQL選擇。

我建議的另一件事是選擇一種格式的鍵+鍵翻譯。應在第一次調用時將KEYS插入數據庫以獲取翻譯。這會導致您「缺少翻譯」,這是使用第三方或您的網站訪問者進行本地化翻譯的好方法。

1

當我必須本地化我的應用程序時,我通常會創建一個譯文/目錄,然後是每個文化的子目錄。例如,我可以有內部的以下文件夾:

  • EN-US/ - 包含來自美國的用戶翻譯。
  • zh-CN/ - 包含英國用戶的翻譯。
  • EN/ - 包含後備,通用英語翻譯。

然後我得到的語言環境是這樣的:

<?php 
$default_locale = 'en'; 

$parts  = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); 
$sub_parts = explode('-', $parts[0]); 

if (is_dir("languages/{$parts[0]}")) { 
    $locale = $parts[0]; 
} 
elseif (is_dir("languages/{$sub_parts[0]}")) { 
    $locale = $sub_parts[0]; 
} 
else { 
    $locale = $default_locale; 
} 

請注意,您應該執行的$ _ SERVER [「HTTP_ACCEPT_LANGUAGE」]變量進行檢查,以避免LFI(本地文件包含)的嘗試。只需檢查語言環境是否包含在languages/目錄中。

相關問題