1

我正在嘗試爲用戶定義輸入構建一個localization。例如:用戶可以用多種語言定義足球類別。用戶定義輸入的國際化

模型實體可以有一個申請是這樣的:

@ManyToMany  
    @MapKeyColumn(name = "locale", insertable = false, updatable = false)  
    public Map<String, L18n> titles; 

我想存儲本地化的字符串是這樣的:

@Entity 
public class L18n { 

    @Id 
    @Constraints.Required 
    @Formats.NonEmpty 
    public Integer id; 

    public String key; 

    public String locale; 

    @Column(columnDefinition = "TEXT") 
    public String text; 

} 

我們使用YAML存儲TESTDATA :

category: 

     - !!models.Category 
       ... 
       titles: 
        - !!models.L18n 
         key: soccer 


    l18n: 

     - !!models.L18n 
       key: soccer 
       locale: de-CH 
       text: fdfdfsee 

     - !!models.L18n 
       key: soccer 
       locale: fr-CH 
       text: dlfkjsdlfj 

有了這個解決方案我getti ng這個錯誤:

[error] Caused by: org.yaml.snakeyaml.error.YAMLException: No suitable constructor with 1 arguments found for interface java.util.Map 
    [error]  at org.yaml.snakeyaml.constructor.Constructor$ConstructSequence.construct(Constructor.java:574) 
    [error]  at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) 
    [error]  at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:296) 
    [error]  ... 65 more 

回答

0

我認爲問題是你已經定義標題作爲一個映射,但不使用YAML映射語法來定義它。 YAML Collections

我認爲冠軍的語法應該像這裏的例子使用漢語語言:YAML Dictionary Example

titles: 
    soccer: - !!models.L18n 
       key: soccer 
       locale: de-CH 
       text: fdfdfsee 
    football: - !!models.L18n 
       ... 

如果您改變.yml文件的格式,從而L18n實例限定的第一和使用引用, YAML規範稱它們爲Alias Nodes,你可以讓你的標題看起來更精簡:

l18n: 

    - &soccerDE !!models.L18n 
      key: soccer 
      locale: de-CH 
      text: fdfdfsee 

    - &soccerFR !!models.L18n 
      key: soccer 
      locale: fr-CH 
      text: dlfkjsdlfj 

category: 

    - !!models.Category 
      ... 
      titles: 
       soccerDE: *soccerDE 
       soccerFR: *soccerFR 
+0

嘿,謝謝你的回答!我實施了某種解決方法,但當我有時間時我會檢查出來。 – myborobudur

+0

沒問題。我絕不是一個yaml專家:我花了更多的時間詛咒,恕我直言,無益的錯誤消息和語法,而不是有效地寫或調試,但我幾周前做了類似的事情。 – 2manyprojects