本节介绍另一个本地化的方法:
在项目中添加资源文件:(这个文件将包含应用程序的默认语言的资源)
将要名称和值添加进去。(作为应用程序中向用户显示字符串值).
重复上面的方法,向项目中添加更多的其它语言资源文件。(参见后面的截图)
定义默认的区域
1.在解决方案资源管理器中,右键单击项目名称,选择属性,在application选项卡中,点 程序集信息。在非特定语言列表中,选择默认区域性。此标识语言的默认资源文件
中的字符串。例如,如果默认资源文件被命名为AppResources.resx,并在该文件中的字符串支持英语,则可以选择english作为项目的中立国语言。
添加LocalizedStrings类处理资源文件:
public class LocalizedStrings{public LocalizedStrings(){}private static ApplicationBarSample.AppResources localizedresources = new ApplicationBarSample.AppResources();public ApplicationBarSample.AppResources Localizedresources { get { return localizedresources; } }}
主工程CS代码:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using System.Globalization; using System.Threading;namespace ApplicationBarSample {public partial class MainPage : PhoneApplicationPage{#region Initialization/// <summary>/// Constructor for the PhoneApplicationPage/// The ApplicationBar is initialized. Icon buttons and menu items are added/// to the ApplicationBar and event handlers are set./// </summary>public MainPage(){InitializeComponent();this.SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;ApplicationBar = new ApplicationBar();ApplicationBar.IsMenuEnabled = true;ApplicationBar.IsVisible = true;ApplicationBar.Opacity = 1.0;ApplicationBarIconButton hide = new ApplicationBarIconButton(new Uri("/Images/expand.png", UriKind.Relative));//hide.Text = "hide";hide.Text = AppResources.ButtonText;hide.Click += new EventHandler(hide_Click);ApplicationBarIconButton opacity = new ApplicationBarIconButton(new Uri("/Images/opacity.png", UriKind.Relative));//opacity.Text = "opacity";opacity.Text = AppResources.ButtonText;opacity.Click += new EventHandler(opacity_Click);ApplicationBarIconButton enabled = new ApplicationBarIconButton(new Uri("/Images/menuenabled.png", UriKind.Relative));//enabled.Text = "enabled";enabled.Text = AppResources.ButtonText;enabled.Click += new EventHandler(enabled_Click);ApplicationBar.Buttons.Add(hide);ApplicationBar.Buttons.Add(opacity);ApplicationBar.Buttons.Add(enabled);//ApplicationBarMenuItem foregroundItem = new ApplicationBarMenuItem("use foreground color");ApplicationBarMenuItem foregroundItem = new ApplicationBarMenuItem(AppResources.MenuItemText);foregroundItem.Click += new EventHandler(foregroundItem_Click);//ApplicationBarMenuItem accentItem = new ApplicationBarMenuItem("use accent color");ApplicationBarMenuItem accentItem = new ApplicationBarMenuItem(AppResources.MenuItemText);accentItem.Click += new EventHandler(accentItem_Click);ApplicationBar.MenuItems.Add(foregroundItem);ApplicationBar.MenuItems.Add(accentItem);UpdateText();}#endregion#region User Iterface/// <summary>/// Click handler for accent color menu item./// Changes the colored UI elements to the built-in PhoneAccentColor/// </summary>/// <param name="sender">The control that raised the click event.</param>/// <param name="e">An EventArgs object containing event data.</param>void accentItem_Click(object sender, EventArgs e){UpdateColor((Color)Resources["PhoneAccentColor"]);}/// <summary>/// Click handler for accent color menu item./// Changes the colored UI elements to the built-in PhoneForegroundColor/// </summary>/// <param name="sender">The control that raised the click event.</param>/// <param name="e">An EventArgs object containing event data.</param>void foregroundItem_Click(object sender, EventArgs e){UpdateColor((Color)Resources["PhoneForegroundColor"]);}/// <summary>/// Click handler for opacity icon button./// Sets the opacity value of the ApplicationBar to 0, 1, or .5/// </summary>/// <param name="sender">The control that raised the click event.</param>/// <param name="e">An EventArgs object containing event data.</param>void opacity_Click(object sender, EventArgs e){if (ApplicationBar.Opacity < .01){ApplicationBar.Opacity = 1;}else if (ApplicationBar.Opacity > .49 && ApplicationBar.Opacity < .51){ApplicationBar.Opacity = 0;}else{ApplicationBar.Opacity = .5;}UpdateText();}/// <summary>/// Click handler for hide icon button./// Changes the Visible property of the ApplicationBar to false/// And makes the "Show Application Bar" button visible/// </summary>/// <param name="sender">The control that raised the click event.</param>/// <param name="e">An EventArgs object containing event data.</param>void hide_Click(object sender, EventArgs e){ApplicationBar.IsVisible = false;showButton.Visibility = Visibility.Visible;UpdateText();}/// <summary>/// Click handler for menu enable icon button./// Changes the IsMenuEnabled property of the ApplicationBar/// When IsMenuEnabled is false, the menu will not pop up/// </summary>/// <param name="sender">The control that raised the click event.</param>/// <param name="e">An EventArgs object containing event data.</param>void enabled_Click(object sender, EventArgs e){ApplicationBar.IsMenuEnabled = !ApplicationBar.IsMenuEnabled;UpdateText();}/// <summary>/// Click handler for show button./// Sets the Visible property of the Application Bar to true/// </summary>/// <param name="sender">The control that raised the click event.</param>/// <param name="e">An EventArgs object containing event data.</param>private void showButton_Click(object sender, RoutedEventArgs e){ApplicationBar.IsVisible = true;showButton.Visibility = Visibility.Collapsed;UpdateText();}/// <summary>/// Updates the TextBlock objects to reflect the current state/// of the ApplicationBar/// </summary>void UpdateText(){VisibleLabel.Text = "Application Bar Visible ";VisibleTextBlock.Text = ApplicationBar.IsVisible ? "Yes" : "No";OpacityLabel.Text = "Application Bar Opacity ";OpacityTextBlock.Text = ApplicationBar.Opacity.ToString("0.0");MenuEnabledLabel.Text = "MenuEnabled ";MenuEnabledTextBlock.Text = ApplicationBar.IsMenuEnabled ? "Yes" : "No";}/// <summary>/// Helper method for changing the color of the UI/// </summary>/// <param name="c">The new color for the UI elements</param>void UpdateColor(Color c){SolidColorBrush brush = new SolidColorBrush(c);VisibleTextBlock.Foreground = brush;OpacityTextBlock.Foreground = brush;MenuEnabledTextBlock.Foreground = brush;((LinearGradientBrush)Resources["Gradient"]).GradientStops[1].Color = c;}private void LocList_SelectedIndexChanged(object sender, SelectionChangedEventArgs e){// Set the current culture according to the selected locale and display information such as// date, time, currency, etc in the appropriate format.string nl;string cul;nl = locList.SelectedIndex.ToString();switch (nl){case "0":cul = "es-ES";break;case "1":cul = "de-DE";break;case "2":cul = "en-US";break;default:cul = "en-US";break;}// set this thread's current culture to the culture associated with the selected localeCultureInfo newCulture = new CultureInfo(cul);Thread.CurrentThread.CurrentCulture = newCulture;CultureInfo cc, cuic;cc = Thread.CurrentThread.CurrentCulture;cuic = Thread.CurrentThread.CurrentUICulture;VisibleLabel.Text = cc.NativeName;VisibleTextBlock.Text = "";//OpacityLabel.Text = cuic.DisplayName;OpacityLabel.Text = "";OpacityTextBlock.Text = "";MenuEnabledLabel.Text = "";MenuEnabledTextBlock.Text = "";//localize icon button text if (this.ApplicationBar.Buttons != null){foreach (ApplicationBarIconButton btn in this.ApplicationBar.Buttons){btn.Text = cc.NativeName.Substring(0, cc.NativeName.ToString().Length/2);}}//localize menu buttons textif (this.ApplicationBar.MenuItems != null){foreach (ApplicationBarMenuItem itm in this.ApplicationBar.MenuItems){itm.Text = cc.NativeName;}}}#endregion} }
XAML代码:
<phone:PhoneApplicationPage x:Class="PhoneApp6.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"FontFamily="{StaticResource PhoneFontFamilyNormal}"FontSize="{StaticResource PhoneFontSizeNormal}"Foreground="{StaticResource PhoneForegroundBrush}"SupportedOrientations="Portrait" Orientation="Portrait"shell:SystemTray.IsVisible="True"><!--LayoutRoot 是包含所有页面内容的根网格--><Grid x:Name="LayoutRoot" Background="Transparent"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><!--TitlePanel 包含应用程序的名称和页标题--><StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"><TextBlock x:Name="ApplicationTitle" Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/><TextBlock x:Name="PageTitle" Text="页面名称" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/></StackPanel><!--ContentPanel - 在此处放置其他内容--><Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid></Grid><!--演示 ApplicationBar 用法的示例代码--><phone:PhoneApplicationPage.ApplicationBar><shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"><shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="按钮 1"/><shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="按钮 2"/><shell:ApplicationBar.MenuItems><shell:ApplicationBarMenuItem Text="菜单项 1"/><shell:ApplicationBarMenuItem Text="菜单项 2"/></shell:ApplicationBar.MenuItems></shell:ApplicationBar></phone:PhoneApplicationPage.ApplicationBar></phone:PhoneApplicationPage>