アプリケーションをローカライズするには
UX-TV: 3/7放送分 の大西さんの放送を見るのがわかりやすいです。
- プロジェクトにアセンブリ リソース ファイルを追加する
日本語リソース AppResources.resx を追加
同様に英語リソース AppResources.en-US.resx を追加
同様にスペイン語リソース AppResources.es-ES.resx を追加[アクセス修飾子] を "Public" に設定すること。この設定を忘れると、次のコンパイルエラーになります。
アクセシビリティに一貫性がありません。プロパティの型 ‘Timer.AppResources’ のアクセシビリティはプロパティ ‘….LocalizedStrings.LocalizedResources’ よりも低く設定されています。
- ニュートラル言語の確認
プロジェクトのプロパティ→[アプリケーション]→[アセンブリ情報]より、ニュートラル言語が日本語になっていることを確認する - プロジェクトにリソースを追加する
[プロジェクト]→[プロジェクトのアンロード]
[ソリューションエクスプローラ]→[プロジェクト]を右クリック→[編集]SupportedCulturesに、サポート言語を追加する。
<SupportedCultures>
en-US;es-ES;
</SupportedCultures>
[ソリューションエクスプローラ]→[プロジェクト]を右クリック→[プロジェクトの再読み込み] - クラスの追加より、LocalizedStrings.cs を追加
次のコードを追加。namespace PhoneApp123
{
public class LocalizedStrings
{
private AppResources localizedresources = new AppResources();
public AppResources LocalizedResources { get { return localizedresources; } }
}
} -
ローカライズのファイルが多い場合
Resources というフォルダーを作成して、その下にまとめるとすっきりします。その場合、LocalizedStrings.cs に、using で次のように名前空間を指定するだけで、対応することができます。using PhoneApp123.Resources;
- App.xaml
xmlns:local=”PhoneApp123” 参照を追加する。
App.xaml のApplication.Resources に次のリソースを追加する。<Application.Resources>
<local:LocalizedStrings x:Key="LocalizedStrings" />
</Application.Resources> - 画面要素にデータバインドする
<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Name="textBlock1" Text="{Binding Path=LocalizedResources.Greeting, Source={StaticResource LocalizedStrings}}" FontSize="40" />
<TextBlock Name="textBlock2" Text="{Binding Path=LocalizedResources.Farewell, Source={StaticResource LocalizedStrings}}" FontSize="40" />
</StackPanel> -
ApplicationMenu のローカライズ
ApplicationMenu, ApplicationBar のローカライズで、データバインドを行うと、XamlParseException 例外が発生し、次のようなエラーメッセージが表示されます。
Set property ‘Microsoft.Phone.Shell. ApplicationBarIconButton. Text’ threw an exception.これは、ApplicationMenu, ApplicationBar がデータバインドに対応していないためです。
対応としては、たとえば次のように、動的に追加することにより、ローカライズすることができます。
public MainPage()
{
InitializeComponent();
LocalizeApplicationBar();
}private void LocalizeApplicationBar()
{
ApplicationBarMenuItem appBarMenuItemHTP = new ApplicationBarMenuItem(AppResources.HowToMenu);
appBarMenuItemHTP.Click += new EventHandler(ApplicationBarMenuItemHowTo_Click);
ApplicationBar.MenuItems.Add(appBarMenuItemHTP);
}private void ApplicationBarMenuItemHowTo_Click(object sender, EventArgs e)
{
var res = MessageBox.Show(AppResources.HowToPlay, AppResources.Title,
MessageBoxButton.OK);
}
Windows Phone ローカリゼーションのベスト プラクティス
- 文字列の長さが、英語に必要な長さよりも約 40% 長いのが目安です。
- 文字列 "The {0} could not be synchronized" のようなパラメータは使用しない。
- 文字列を再使用しない
など、一度目を通しておいたほうが良いです。
方法: Windows Phone のアプリケーション タイトルをローカライズする
この方法だと VC++ が必要になってしまいますが、http://bit.ly/wploctool を使用すると、簡単にタイルのローカライズができます。
- リソースの作成
- リソースを組み込む
ツールで作成した AppResLib.dll.* をプロジェクトへコピー - *.mui のビルドアクションを[コンテンツ]に変更
- WMAppManifest.xml の変更
<App …中略… Title="@AppResLib.dll,-100" …後略
<Title>@AppResLib.dll,-200</Title> - ビルドして完成
C# のコードから使用するには、AppResources.Designer.cs に実装されているAppResources クラスに文字列が定義されており、例えばAppResources.Greetings でアクセスできます。
2012年4月16日 01:01 |
画面のローカライズ | C# 研究室…
素敵なエントリーの登録ありがとうございます – .NET Clipsからのトラックバック…