2009-10-27 56 views
1

我有一個小Grails應用程序,它具有以下領域:本地化數據庫字符串

class Meal { 
    String name 
    String description 
    String allergyNote 
} 

對於定位的目的三根弦現在應該在多種語言。例如,當一個英文用戶看到name =「Steak」時,西班牙用戶應該在輸出中看到name =「Filete」。我想執行以下操作:

class Language { 
    String isoCode 
    String languageName 
} 

class TranslatedString { 
    Language language 
    String translation 
} 

,但我不知道如何將餐,因爲它是用於三個成員TranslatedStrings鏈接,我也想將其用於其他類(不只是膳食)(或者我是否需要分離表,即MealNameTranslated,MealDescriptionTranslated等表?)。我知道這可能是一個愚蠢的問題,但我是一個初學者,一直沒能算出這個:-(

+0

感謝您的評論澄清我的答案。我刪除了它,因爲它不是你要找的。你可能想把你在評論中的例子放入問題本身來幫助澄清。 – 2009-10-27 20:32:48

+0

謝謝,已添加示例(牛排 - >文件) – Steve 2009-10-27 20:35:51

回答

1

TranslatedString類是不完整的,因爲沒有辦法知道它是什麼一個。你需要翻譯到這裏多了一個實體,它提供了某種標識爲字符串:

// object/record identity is used as key 
class StringKey { 
    String keyName // purely descriptive, not actually used at runtime 
} 

class TranslatedString { 
    // the following 2 form a primary key 
    StringKey key 
    Language language 

    String translation 
} 

class Meal { 
    StringKey name 
    StringKey description 
    StringKey allergyNote 
} 

然後你可以看一下translation給出keylanguage

+0

謝謝,這是有道理的。至於我的問題的其他部分:如果我刪除了膳食,理想情況下翻譯的字符串也應該刪除。然而,如果我使用StringKey/TranslatedString作爲除膳食之外的其他對象,則sime「static belongsTo」(可能)將不起作用... – Steve 2009-10-28 08:39:52

1

您也應該檢查article on Graeme Rocher's blog (他是頭SpringSource的Grails開發)文章解釋瞭如何將標準的靜態Grails i18n翻譯屬性文件移動到數據庫中。它還包含緩存支持。