2010-01-20 83 views
2

有沒有人在Silverlight中有任何最佳實踐或本地化經驗。 MSDN recommends資源綁定到XAML,但結果是相當混亂:Silverlight本地化最佳實踐?

<TextBlock Text="{Binding Path=Resource1.HelloText, Source={StaticResource LocalizedStrings }}"/> 

的一個頁面將會使XAML不可讀!

任何快捷方式?

回答

2

我問了一個類似但更復雜的問題而回(silverlight paramterised resource values for internationalisation

MSDN上給出的例子是嚴重本地化真的不夠,它假定每個字符串是完全存在,並且沒有參數,但現實是你將具有希望在字符串中嵌入的值,但需要佔位符在字符串中標記該變量的位置,以便翻譯人員可以在翻譯時移動標記。你可以實現一個更高級的機制,通過自己實現多個綁定到Silverlight - Colin Eberhardt做了一個很好的實現(silverlight multibindings how to attached mutiple bindings to a single property) - 調整了一下並與MultiValue Converter結合,你可以執行多個綁定,允許第一個綁定是語言文件,後續綁定是要嵌入的參數。

這是一個相當痛苦的事情,但本地化故事只是缺乏明顯缺乏 - 甚至在PDC09上通過silverlight3/4聊天,目前確實沒有一個很好的途徑 - 如果WPF多重綁定使它跨越SL4,稍微簡單一點,但除了從ViewModel輸出所有字符串的人之外,我還沒有看到一個好的替代實現 - 這對於'設計者'來說似乎是錯誤的。

+0

是的,我認爲你是對的。不幸。 – 2010-01-25 12:45:06

0

我同意微軟對Silverlight(以及WPF和Windows Phone)本地化的建議是非常基本的。它有幾個問題。是

  1. 很難編輯最重要的是主要維持兩個獨立的文件:XAML和RESX
  2. 當你從XAML將它移動到RESX
  3. XAML的字符串內容你鬆很大一部分變得更難閱讀並保持

這樣做的原因是,微軟的工具如Visual Studio,提供任何本地化XAML。這裏的一個簡單的選擇是本地化XAML,並將本地化的XAML和本地化的RESX一起包含到衛星程序集文件中。

<TextBlock Text="Hello World"/> 

更容易查看,編輯和維護比

<TextBlock Text="{Binding Path=Resource1.HelloText, Source={StaticResource LocalizedString }}"/> 

+ 

    <data name="LocalizedString" xml:space="preserve"> 
    <value>Hello World</value> 
    </data> 

你需要做的就是保持硬編碼字符串轉換成XAML和本地化XAML本身。沒有一個好的工具,這變得非常困難。這就是爲什麼我建議您使用可以定位XAML的本地化工具。僅這一點是不夠的,因爲如果你有本地化的XAML,你仍然需要將它們編譯成衛星裝配文件,最後在你的XAP文件中包含衛星。

您需要有一個工具可以本地化RESX和XAML,並編譯本地化的衛星程序集文件。有一些工具可以做到這一點(例如Sisulizer)。

如果你只想使用Visual Studio,那麼你必須堅持微軟的最佳實踐。