2010-03-03 79 views
1

我在Python初學者。我的問題很簡單。我有一個字符串包含參數的Python應用程序本地化:參數進行本地化

print _('Hello dear user, your name is ') + params['first_name'] + ' ' + params['last_name'] + _(' and blah blah blah') 

這實際上做的工作,但也算不上什麼,我會叫一個很好的辦法做到這一點。更不用說,例如,某些語言會要求在姓名之前顯示姓氏。

有沒有更好的辦法做到這一點?我想過在翻譯字符串中放置{{fn}}或{{ln}}這樣的自定義標籤,並在顯示字符串之前將其替換爲實際值。但它似乎不是更令人愉快。

感謝,

皮埃爾

+0

「」「要求在名字」「」顯示相當程度的術語混淆之前顯示姓氏。也許「給定名稱」和「姓氏」可能會更好。你如何處理名字中只有一個單詞的人?哦,順便說一下,考慮參數化稱呼; 「親愛的用戶,您好」會在我的語言環境中遇到嘲笑的笑聲:-) – 2010-03-03 13:36:45

+0

對不起。我還沒有真正走入英語的高級班:)這個例子確實不是最好的,但很簡單。例如,問題與HTML文本中間的鏈接相同。但是,當我看着......哼哼...讓我們說Facebook,他們的註冊表格要求我輸入我的名字和姓氏。我認爲他們的英語水平可能比我的要好。 :) – Pierre 2010-03-03 15:52:04

回答

3

我建議

print 'Hello dear user, your name is %(first_name)s %(last_name)s' % params 
+0

按預期做這項工作。我的解決方案看起來更像是「pythonic」。我很高興在下次我不得不將自己的代碼展示給其他開發人員時,我不會在地獄中腐爛。 :) – Pierre 2010-03-03 10:45:26

0

我想過把自定義的標籤,如{{FN}}或{{LN}}在翻譯字符串,並顯示它們之前的實際值替換它們。

這就是我會做。在每個語言版本的正確位置放置佔位符應該完成這項工作。

有一點要提的是,在一些語言民族名稱必須修改依賴於所使用的地方在一個句子,以及他們如何。您需要了解每種特定語言才能正確執行。

一個可能的解決方案:保留「中的一個句子中間的」案件降到最低。保持可分離的本地化資源。

而不是Hello dear user, your name is {{UserName}}

使用User name: {{UserName}}

+0

謝謝你的精確度。我會照顧你的建議。 但有時,當客戶需要這樣的事情要做,我是一個好男孩,我只是做:) 和其他一些時候,你真的沒有選擇。例如,在生成帶有指向文本中間的動態URI的鏈接的HTML時。 – Pierre 2010-03-03 10:39:47

1

像這樣的東西應該做的伎倆:

print _('Hello dear user, your name is %s %s and blah blah blah') % (params['first_name'], params['last_name']) 
+0

如果參數的順序需要改變,這將會失敗。 – 2010-03-03 10:39:05

+0

剛試過解決方案。事實上,我無法改變字符串的順序。但是謝謝你的解決方案。我將在應用程序的其他部分使用它。 – Pierre 2010-03-03 10:43:35

1

我會去的模板,如果我是你。這將讓你爲每種語言都有一個單獨的模板。例如:

from string import Template 
s_en = Template('Hello dear user, your name is $first_name $last_name and blah blah blah') 
s_sco = Template('Hello, $first_name of the clan Mac$last_name...') 

user = {'last_name': 'Duncan', 'first_name': 'Leod'} 

print(s_en.substitute(user)) 
print(s_sco.substitute(user)) 
+0

是的,謝謝。我從來沒有聽說過這個解決方案,它也會很有用。 但在我的情況下,由於'模板'已經由i18n模塊和gettext函數提供,並且執行這個技巧,所以我並不真正瞭解增益。 – Pierre 2010-03-03 10:56:41