2013-10-29 67 views
0

我正在開發使用以下CakePHP的功能的網站在CTP文件靜態字符串CakePHP的翻譯 - 如何引用語言

  • .po文件
  • 轉換爲數據庫存儲的字符串
  • 行爲

即使我已閱讀文檔,我不確定的一件事是如何統一引用不同地方的語言。

以德國爲例,什麼將取代下面?

設置位置,這樣的CakePHP知道要使用的PO文件

Configure::write('Config.language', '?'); 

我的猜測是申

po文件的路徑

/app/locale/?/LC_MESSAGES/default.po 

我的猜測是在特定的語言申

節能

As per the docs.

$this->Post->locale = '?'; 

這一個混淆了我的例子顯示de_DE這個。這是否會自動映射到我的Config.language

如果是這樣,我在哪裏可以找到這些映射?

+1

請務必提及您的確切CakePHP版本! – ndm

回答

1

在蛋糕1.3,我已經使用

Configure::write ('Config.language', 'ger'); 

期待此/locale/ger/LC_MESSAGES/default.po;事後看來,這是錯誤的,正如你所指出的那樣,德語的「官方」編碼是'deu'。但是,我認爲只要它在適當的子目錄中,您就可以使用您的語言的任何標識符。

setlocale (LC_TIME, 'de_DE'); 
    setlocale (LC_MONETARY, 'de_DE'); 

然而,在http://php.net/manual/en/function.setlocale.php聽從警告有關使用的setlocale:

有趣的部分,當你想與使用locale()函數來格式化數字,日期等情況。

--- Amendement

你必須記住,一個區域是東西比語言完全不同。語言環境指定如何格式化數字,時間,金錢,比較字符串並對它們進行排序。當然,語言環境也有用於翻譯的LC_MESSAGES類別。但是聽我說。

一種語言可以在很多國家使用,所以你會認爲你可以在所有這些國家使用你的翻譯。但你很快遇到問題。例如,英國,英國,美國,加拿大以及其他許多國家有細微的差別。但是打印日期是另一回事。美國使用月/日/年格式,而英國使用日/月/年。有些國家在字段之間使用斜線,其他國家使用破折號或點;有些使用月份的名稱而不是數字。等等。

所以,定位是用於特定國家,而不是語言。但是,有些國家會講多種語言。這就是爲什麼一個本地化字符串有兩部分:第一部分是語言,第二部分是國家(例如de_BE,fr_BE,nl_BE,甚至是wa_BE)。

IMO令人困惑的部分是消息翻譯也是語言環境的一部分。對於某些語言而言,這是有道理的,例如葡萄牙語和葡萄牙語均使用葡萄牙語,但足以區分不同的翻譯文件(pt_PT vs pt_BR)。另一方面,就我所知,法語在世界各地都是99.99%,但爲法國,加拿大,瑞士,比利時和盧森堡複製相同的語言文件將會相當麻煩。因此,大多數程序員在構建多語言網站時將「語言」文件決定在一起,並將各個國家推到一起。 CakePHP有一個類似的halfbaked(如果你原諒雙關語......)方法:語言文件和本地化。

要回到您的文章:如果有關於本地化的討論,您應該使用'de_DE'風格字符串。當僅僅談論一種語言時,來自ISO 639:2的3個字母代碼應該起作用....它也可以幫助保持兩者不同。

+0

謝謝你的回答。特別是對語言環境和語言區分的澄清。 – timstermatic