2009-12-18 108 views
1
<?LANG(no_download, 'you are not allowed to download') 

代替更多描述性語言字符串佔位符?

$lang[no_download] 

我有什麼,我認爲是在模板中嵌入語言字符串的更好方法。

在幾乎所有的PHP應用程序中,主要的語言佔位符格式如<?=$lang['no_download']?>{{no_download}}。其他設計人員/開發人員/翻譯人員很難在不參考語言文件的情況下解讀佔位符代表的內容。

爲了使語言佔位符更具描述性,爲什麼我們不包含原始字符串和佔位符? 例如

<?=lang('no_download' , 'You are not allowed to download this file because you have exceeded your quota')?> 

第二個參數是一個啞元,因此lang()函數沒有對它做任何處理。

乍看之下,人們可能會認爲它太冗長了,給模板標記添加混亂。 但在我看來,它不是一個有效的參數,因爲如果語言字符串沒有語言意識,它將佔用佔位符的空間。

我想聽聽你對此的想法。

回答

1

編輯沒有看到這個標籤爲Smarty。無視我的答案,如果你想要一個Smarty的具體答案。

我不同意以爲主的佔位符格式。一般來說,格式取決於您如何處理翻譯,而且可能會有所不同。

除此之外,提供默認語言字符串作爲翻譯標籤並不少見。例如,在Zend Framework手冊中,這是它們的usage example的一部分。如果你的翻譯適配器支持,那沒什麼問題。如果它需要ID,那麼它不是一個選項。

就個人而言,我更喜歡ID並嘗試根據它們在應用程序中的使用來命名它們,例如, form.label.login.username或cart.checkout或flashmessage.notice。

使用ID還提供了另一層分離。鑑於發短信可能不屬於開發人員或模板設計人員的責任,最好在模板中添加ID。

1

我認爲,爲您的條目設置很棒的描述性「鍵」會更明智... 您的「no_download」鍵沒有很好地描述消息,因爲它沒有動詞。

鍵必須以良好的命名規則命名,以及變量和函數。

你的關鍵應該是,例如:

{{user_quota_exeeded}} 

{{user_quota_exeeded_alert}} 

從長遠來看,如果你的「真正的字符串」模板被改變,「啞參數」沒有按」噸,它會愚弄你的一些同事/客戶/ ...

此外,它迫使你鍵入你的消息兩次。

更多關於wikipedia的命名約定。

0

Gettext已經這樣做了。它是這樣的:

_('Gettext does this already. It goes something like this:'); 
0

這些都是偉大的答案,偉大的見解,傢伙。

阿諾,我很清楚命名約定。 我的例子語言關鍵是確實不是很恰當地命名,但它只是這樣做,作爲一個例子。在我的web應用程序的整個翻譯過程中,我遇到了很難用幾個字符串來概括/描述的字符串,因此我們想到將默認語言字符串作爲翻譯標籤。我敢肯定,如果你有足夠的翻譯,你會遇到這種情況。

無論如何,看到Zend & Gettext已經採用這種方法是令人欣慰的。

那突然出現在我的腦海另一個問題是性能損失。

將使用函數調用,例如, LANG()比僅僅打印$ lang []數組佔用更多的資源?

什麼dya認爲?