Silverlight中本地化的實現

作者: Ringgo.Yao  來源: 博客園  發布時間: 2010-08-22 14:05  閱讀: 1256 次  推薦: 0   原文鏈接   [收藏]  
摘要:對于本地化這個功能我個人一直覺得在需求階段就要確定該項目需不需要實行本地化,這樣后面就可以減輕許多工作量,Sl中對本地化功能的支持與 ASP.NET中一樣,主要使用CultureInfo類來完成的。

  對于本地化這個功能我個人一直覺得在需求階段就要確定該項目需不需要實行本地化,這樣后面就可以減輕許多工作量,Sl中對本地化功能的支持與ASP.NET中一樣,主要使用CultureInfo類來完成的。

  下面來看實現本地化的具體流程,先來看一看我的項目結構:  捕獲

  這里我是把資源文件放入單獨的項目中,這樣結構上也比較的清晰。

  第一步:先在Languages項目下添加幾個資源文件,這里對于資源的命名要遵循.NET命名規范,比如說當前文化是中文的話,系統就會自動到Localization.zh-CN.resx中獲取相關的字符。這里如果對多語言的文化的命名不熟悉的話,可以查看.NET全球化,我們設置一個簡單的值:

捕獲捕獲

  我們這里定義了一個Country字段,在中文和英文兩種文化中值分別為中國與China。

  第二步:建立值轉化類AppResource.cs。

 
namespace Languages
{

public class AppResource:IValueConverter
{

public readonly static ResourceManager manager = new ResourceManager("Languages.Localization", typeof(Localization).Assembly);
private static CultureInfo culture = Thread.CurrentThread.CurrentCulture;
public static CultureInfo UICultrue
{

get { return culture; }
set { culture = value; }
}

public string Get(string resource)
{

return manager.GetString(resource, UICultrue);
}

public static string GetValue(string resource)
{

return manager.GetString(resource, UICultrue);
}

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var reader
=(AppResource)value;
return reader.Get((string)parameter);
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{

throw new NotImplementedException();
}
}
}

  這個類主要使用了ResourceManager對象對本地化進行操作的。

  第三步:編譯之后,我們在LocalilizationInSilverlight項目中引入Languages.dll , 在App.xaml中我們引入這個dll,并且將其設為資源。

 
<Application
x:Class="LocalilizationInSilverlight.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:local="clr-namespace:Languages;assembly=Languages"
>
<Application.Resources>
<local:AppResource x:Key="Localization"></local:AppResource>
</Application.Resources>
 </Application> 

  第四步:這里有一點需要注意的是,當你編譯解決方案時,vs并未將資源文件打包至xap中,需要手動修改一下LocalilizationInSilverlight.csproj中的SupporttedCultures節點。

 
<SupportedCultures>zh-CN,en-GB</SupportedCultures>

  引入資源后,我們就在頁面中使用它了:

 
<TextBlock Height="23"
Name="textBlock1"
Text="{Binding ConverterParameter=Country,
Converter={StaticResource Localization},Source={StaticResource Localization}}
"
Width="90" />

  運行之后我們就可以看到界面上出現中國二字,我們可以改當前文化來測試一下。

 
public MainPage()
{
AppResource.UICultrue
= new CultureInfo("en-GB");
InitializeComponent();
}

  這樣,我們在頁面InitializeComponent()之前修改當前文化為en-GB,這時候TextBlock就會出現China這個值了,擴展:對DataGrid的Headers屬性應用本地化功能,那么這里我們可以首先在AppResource.cs中添加簡單的方法。

 
public static string GetValue(string resource)
{

return manager.GetString(resource, UICultrue);
}

  然后UI上添加一個DataGrid:

 
<data:DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid1" Width="200">
<data:DataGrid.Columns>
<data:DataGridTextColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" />
</data:DataGrid.Columns>
</data:DataGrid>

  C#代碼只要對標題設置一下即可:

 
this.dataGrid1.Columns[0].Header = AppResource.GetValue("Country");

  代碼下載:本地化DemoVS2010+SL3

0
0
 
標簽:Silverlight
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()