以前の記事で、
Windows 8.1用の数独を
開発する方法について説明しましたが、この記事では、アプリケーションをWindows Phone 8に移植し、複数の言語でローカライズする方法を説明します。

最初に、Windows Phoneテンプレートプロジェクトを作成します

このソリューションでは、必要なコントロールをWindows 8.1プロジェクトからWindows Phoneプロジェクトにコピーしました。 このソリューションは最適ではありませんが、最速です。 次の記事では、クロスプラットフォームソリューションの作成方法を示します。
ここで、アプリケーションの移植に戻ります。 電話でのゲームでは、ページネーションを行うことが決定されました。 4ページ作成:

ゲームは
GamePageページから
始まります。 保存されたゲームがない場合は、新しいゲームを作成するための画面にユーザーを送信する必要があります。
ソースコードprotected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); GameState game = SettingsProvider.LoadSavedGame(); if (game == null) { NavigationService.Navigate(new Uri("/Pages/NewGame.xaml", UriKind.Relative)); } else {
Windows 8.1でファイルとセッションを操作する
Windows 8.1テンプレートでは、セッション保存メカニズムを実装する
SuspensionManager
クラスが自動的に作成されます。 次に、ページクラスで、
NavigationHelperSaveState
メソッドと
NavigationHelperSaveState
メソッドを定義する必要があります。
NavigationHelperLoadState
コードを以下に示します。状態の保存は同様の方法で行われます。
ソースコード private async void NavigationHelperLoadState(object sender, LoadStateEventArgs e) { try { if (SuspensionManager.SessionState.ContainsKey("game-data")) { string previousGame = SuspensionManager.SessionState["game-data"] as string; if (!string.IsNullOrEmpty(previousGame)) { GameStateModel game = GameStateModel.FromJson(previousGame); if (game != null) { LoadGameToBoard(game.ToGameState()); } } } } catch (FileNotFoundException fileNotFound) { } catch (Exception) { } }
Windows Phone 8でファイルとセッションを操作する
電話では、ファイルの操作は少し異なります。 IsolatedStorageSettingsなどの概念があります。 この概念は、Silverlightバージョン2から生まれました。名前が示すように、このタイプは、ファイルとデータをローカルファイルシステムに分離して格納するように設計されています。 これは、自分以外のアプリケーションがこのデータにアクセスできないことを意味します。
ゲームデータダウンロードコード public static GameState LoadSavedGame() { try { IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; if (settings.Contains(SavedGame)) { string previousGame = settings[SavedGame] as string; if (!string.IsNullOrEmpty(previousGame)) { GameStateModel game = GameStateModel.FromJson(previousGame); if (game != null) { return game.ToGameState(); } } } } catch (Exception exception) { } return null; }
見つかった機能
Windows Phone 8では、xamlリソースにフォントを保存できません。 WP8プラットフォーム上のこのようなコードは無効です。
<FontFamily x:Key="ThemeFontFamily">Segoe UI Light</FontFamily> <FontWeight x:Key="ThemeFontWeight">SemiLight</FontWeight>
したがって、リソースファイルを分割し、WP8から余分なものを削除する必要がありました。
マークアップを使用する
マークアップを使用した作業に非常に満足しました。 まず、Win 8.1(Full、Filled、Snapped)のように3種類のアプリケーションのレイアウトを作成する必要はありません。 画面全体のレイアウトを正しく作成することが重要です。 数独では、画面の垂直位置のみがサポートされます(水平は99%でサポートされません)。
オブジェクトのレイアウト、スタイル、サイズを調整した後、さまざまなデバイスと画面でテストする必要があります。

アプリケーション名のローカリゼーション
Windows 8.1とは異なり、アプリケーションの説明は、パブリケーションのセットアップ時にhttps://dev.windowsphone.comサイトで行われます。 そして、名前はアプリケーションに保存されます。 しかし、それほど単純ではありません:)
表示名や
タイルタイトルなどがあります。 最初のものは、市場と電話のアプリケーションのリストで使用されます。 このオプションが選択されている場合、2番目はタイルの碑文として使用されます。
MSDNの「Windows Phoneのアプリタイトルのローカライズ方法(最後のリンク)」で説明したように、タイルの名前とタイトルの2つのフィールドを含むリソースファイルがあるC ++ DLLを作成する必要があります。 言語ごとに、独自のdllを作成する必要があります。 はい、これは悲しいです。 しかし、
WP8 Localizeプロジェクトが
助けになります。 ツールをダウンロードし、フィールドに入力して、必要なすべての言語のdllを自動的に作成します。 確かに数時間節約できました。
すべてのdllを作成した後、それらをプロジェクトに追加する必要があります。 それらをすべて別のフォルダに入れる方が便利です。 私は彼女のラングを呼び出して、すべてをそこに置きました。
BuildAction = Contentを変更することを忘れないでください。

WPAppManifest.xmlファイルで、名前とタイルをそれぞれ
@ Langs / AppResLib.dll -100および
@ Langs / AppResLib.dll -200に変更します。

この段階で、アプリケーション名とタイルのローカライズが完了しました。 アプリケーションコンテンツの言語を変更します。
Xamlローカリゼーション
Windows Phone 8では、ローカライズツールはバージョン7よりもはるかに優れています。 LocalizedStringsクラスを作成または検索します。
プロジェクトにResourcesフォルダーを作成します。 サポートされている言語ごとに、AppResources.LOCALE.resxリソースファイル(たとえば、
AppResources.resxおよび
AppResources.ru.resx )を作成します。 2番目のステップは、App.xamlファイルにリソースを作成することです。
<Application.Resources> <winPhone8:LocalizedStrings xmlns:local="clr-namespace:Oxozle.Sudoku.WinPhone8" x:Key="LocalizedStrings"/> </Application.Resources>
したがって、xamlでバインドする機会を与えます。

ファイル自体は次のとおりです。

重要な違いは、ここでは特にオブジェクトではなくテキストリソースのファイルであることです。 なぜなら バインディング(バインディング)およびリソースコードの生成が発生します-ドット区切り文字は使用できません。 次に、大量のテキスト要素をリソースに設定する必要があります。
<TextBlock Text="{Binding LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}" Style="{StaticResource PhoneTextNormalStyle}"/>
新しいゲームページの場合:

ローカリゼーションはレイアウトモードでもサポートされています(Expression Blendですべてが正しく選択されます)
コードからのローカライズ
ApplicationBarは、バインダーのローカライズをサポートしていません。 これを行うには、プロジェクトを作成するときに、
BuildLocalizedApplicationBar
メソッドのコードをコメントアウトして
BuildLocalizedApplicationBar
ます。 しかし、アプリケーションメニューを作成するために数行を書くのは難しいことではありません。
BuildLocalizedApplicationBar private void BuildLocalizedApplicationBar() {
ローカライズを有効にする
Windows 8.1とは異なり、ローカライズを手動で有効にする必要があります。 これを行うには、Appメソッドのapp.xaml.csで、
InitializeLanguage
メソッドへの呼び出しを追加します。
AssemblyInfoで、デフォルトのカルチャを指定します。
[assembly: NeutralResourcesLanguageAttribute("en-US")]
[
パッケージング ]タブの
WPAppManifest.xmlファイルで、アプリケーション設定を指定します:サポートされている言語のリスト、デフォルトの言語。

結論
一部の場所でのWindows Phone 8アプリケーションのローカライズは、Windows 8.1の同じローカリゼーションと根本的に異なります。 ただし、これについて複雑なことは何もありません。 ローカライズを作成したり、新しい言語のサポートを追加したりする前に、完全な指示があることが重要です。 この記事が多言語アプリケーションの作成に役立つことを願っています。 ここで結果を見ることができます:

ソース