次の方法で共有


方法: アプリケーションをローカライズする

このチュートリアルでは、LocBaml ツールを使用してローカライズされたアプリケーションを作成する方法について説明します。

手記

LocBaml ツールは、運用環境に対応したアプリケーションではありません。 これは、ローカライズ API の一部を使用するサンプルとして提供され、ローカライズ ツールを記述する方法を示しています。

概要

この記事では、アプリケーションをローカライズするための段階的なアプローチについて説明します。 まず、翻訳されるテキストを抽出できるように、アプリケーションを準備します。 テキストが翻訳されたら、翻訳されたテキストを元のアプリケーションの新しいコピーにマージします。

サンプル アプリケーションを作成する

この手順では、ローカライズ用にアプリを準備します。 Windows Presentation Foundation (WPF) のサンプルでは、この説明のコード例に使用する HelloApp サンプルが提供されています。 このサンプルを使用する場合は、LocBaml ツール サンプルから Extensible Application Markup Language (XAML) ファイルをダウンロードします。

  1. ローカライズを開始する時点までアプリケーションを開発します。

  2. MSBuild がメイン アセンブリとサテライト アセンブリ (.resources.dll 拡張子を持つファイル) を生成してニュートラル言語リソースを格納するように、プロジェクト ファイルで開発言語を指定します。 HelloApp サンプルのプロジェクト ファイルは HelloApp.csproj です。 そのファイルには、開発言語が次のように識別されます。

    <UICulture>en-US</UICulture>

  3. UID を XAML ファイルに追加します。 Uid は、ファイルへの変更を追跡し、翻訳する必要がある項目を識別するために使用されます。 Uid をファイルに追加するには、プロジェクト ファイルで updateuid を実行します。

    msbuild -t:updateuid helloapp.csproj

    Uid が見つからないか重複していないかどうかを確認するには、次 checkuid実行します。

    msbuild -t:checkuid helloapp.csproj

    updateuidを実行した後、ファイルに Uid が含まれている必要があります。 たとえば、HelloApp の Pane1.xaml ファイルには、次のものが表示されます。

    <StackPanel x:Uid="StackPanel_1">
      <TextBlock x:Uid="TextBlock_1">Hello World</TextBlock>
      <TextBlock x:Uid="TextBlock_2">Goodbye World</TextBlock>
    </StackPanel>
    

ニュートラル言語リソースサテライト アセンブリを作成する

ニュートラル言語のリソース サテライト アセンブリを生成するようにアプリケーションを構成したら、アプリケーションをビルドします。 これにより、メイン アプリケーション アセンブリと、ローカリゼーションに LocBaml で必要なニュートラル言語リソースサテライト アセンブリが生成されます。

アプリケーションをビルドするには:

  1. HelloApp をコンパイルしてダイナミック リンク ライブラリ (DLL) を作成します。

    msbuild helloapp.csproj

  2. 新しく作成されたメイン アプリケーション アセンブリ (HelloApp.exe) は、C:\HelloApp\Bin\Debug フォルダーに作成

  3. 新しく作成されたニュートラル言語リソースサテライト アセンブリ (HelloApp.resources.dll) は、C:\HelloApp\Bin\Debug\ フォルダーに作成en-US

LocBaml ツールをビルドする

  1. LocBaml のビルドに必要なすべてのファイルは、WPF サンプルにあります。 LocBaml ツール サンプルから C# ファイルをダウンロードします。

  2. コマンド ラインからプロジェクト ファイル (locbaml.csproj) を実行して、ツールをビルドします。

    msbuild locbaml.csproj

  3. Bin\Release ディレクトリに移動して、新しく作成された実行可能ファイル (locbaml.exe) を見つけます。 例: C:\LocBaml\Bin\Release\locbaml.exe

  4. LocBaml の実行時に指定できるオプションは次のとおりです。

    オプション 説明
    parse または -p Baml、リソース、または DLL ファイルを解析して、.csv または .txt ファイルを生成します。
    generate または -g 翻訳されたファイルを使用してローカライズされたバイナリ ファイルを生成します。
    out または -o {ファイルディレクトリ] 出力ファイル名。
    culture または -cul {culture] 出力アセンブリのロケール。
    translation または -trans {translation.csv} 翻訳またはローカライズされたファイル。
    asmpath または -asmpath {ファイルディレクトリ] XAML コードにカスタム コントロールが含まれている場合は、カスタム コントロール アセンブリに asmpath を指定する必要があります。
    nologo ロゴや著作権情報を表示しません。
    verbose 詳細モードの情報が表示されます。

    手記

    ツールを実行中にオプション一覧が必要な場合は、「LocBaml.exe」と入力し、その後「Enter」キー を押してください。

LocBaml を使用してファイルを解析する

LocBaml ツールを作成したら、それを使用して HelloApp.resources.dll 解析し、ローカライズされるテキスト コンテンツを抽出する準備ができました。

  1. LocBaml.exe を、メイン アプリケーション アセンブリが作成されたアプリケーションの bin\debug フォルダーにコピーします。

  2. サテライト アセンブリ ファイルを解析し、出力を .csv ファイルとして格納するには、次のコマンドを使用します。

    LocBaml.exe /parse HelloApp.resources.dll /out:Hello.csv

    手記

    入力ファイル (HelloApp.resources.dll) が同じディレクトリにない場合は、両方のファイルが同じディレクトリ内に存在するように、いずれかのファイルを移動 LocBaml.exe。

  3. LocBaml を実行してファイルを解析すると、出力はコンマ (.csv ファイル) またはタブ (.txt ファイル) で区切られた 7 つのフィールドで構成されます。 次に、HelloApp.resources.dllの解析された .csv ファイルを示します。

    解析された .csv ファイル
    HelloApp.g.en-US.resources:window1.baml,Stack1:System.Windows.Controls.StackPanel.$Content,Ignore,FALSE, FALSE,,#Text1;#Text2;
    HelloApp.g.en-US.resources:window1.baml,Text1:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Hello World
    HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Goodbye World

    7 つのフィールドは次のとおりです。

    • BAML 名。 ソース言語サテライト アセンブリに関する BAML リソースの名前。

    • リソース キー。 ローカライズされたリソース識別子。

    • カテゴリ。 値の型。 「ローカライズ属性とコメントを参照してください。

    • 読みやすさ。 ローカライザーが値を読み取ることができるかどうか。 「ローカライズ属性とコメントを参照してください。

    • 変更可能性。 ローカライザーによって値を変更できるかどうかを指定します。 「ローカライズ属性とコメントを参照してください。

    • コメント。 値のローカライズ方法を決定するのに役立つ値の追加の説明。 「ローカライズ属性とコメントを参照してください。

    • 。 目的のカルチャに翻訳するテキストの値。

    次の表は、これらのフィールドが .csv ファイルの区切り値にどのようにマップされるかを示しています。

    BAML 名 リソース キー カテゴリ 可読性 変更可能性 コメント 価値
    HelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$Content 不問に付す FALSE FALSE #Text1;#Text2
    HelloApp.g.en-US.resources:window1.baml Text1:System.Windows.Controls.TextBlock.$Content なし TRUE TRUE ハローワールド
    HelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$Content None TRUE TRUE さよならワールド

    コメント フィールドのすべての値が空であることに注意してください。フィールドに値がない場合は空です。 また、最初の行の項目は読み取りも変更もできず、Category 値として "Ignore" を持ち、値がローカライズ不可能であることを示します。

  4. 解析されたファイル (特に大きなファイル) 内のローカライズ可能なアイテムの検出を容易にするために、カテゴリ、読みやすさ、および変更可能性してアイテムを並べ替えたりフィルター処理したりできます。 たとえば、読み取り不可能な値と変更不可能な値を除外できます。

ローカライズ可能なコンテンツを翻訳する

抽出されたコンテンツを翻訳するために使用できる任意のツールを使用します。 これを行う良い方法は、リソースを .csv ファイルに書き込んで Microsoft Excel で表示し、最後の列 (値) に翻訳を変更することです。

LocBaml を使用して新しい .resources.dll ファイルを生成する

LocBaml で HelloApp.resources.dll 解析によって識別されたコンテンツは翻訳されており、元のアプリケーションにマージし直す必要があります。 generate または -g オプションを使用して、新しい .resources.dll ファイルを生成します。

  1. 新しい HelloApp.resources.dll ファイルを生成するには、次の構文を使用します。 カルチャを en-US (/cul:en-US) としてマークします。

    LocBaml.exe /generate HelloApp.resources.dll /trans:Hello.csv /out:c:\ /cul:en-US

    手記

    入力ファイル (Hello.csv) が実行可能ファイルと同じディレクトリにない場合は、LocBaml.exe、両方のファイルが同じディレクトリに存在するように、いずれかのファイルを移動します。

  2. C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll ディレクトリ内の古い HelloApp.resources.dll ファイルを、新しく作成した HelloApp.resources.dll ファイルに置き換えます。

  3. "Hello World" と "Goodbye World" をアプリケーションで翻訳する必要があります。

  4. 別のカルチャに翻訳するには、翻訳する言語のカルチャを使用します。 次の例は、フランス語とカナダ語に翻訳する方法を示しています。

    LocBaml.exe /generate HelloApp.resources.dll /trans:Hellofr-CA.csv /out:c:\ /cul:fr-CA

  5. メイン アプリケーション アセンブリと同じアセンブリで、新しいサテライト アセンブリを格納する新しいカルチャ固有のフォルダーを作成します。 フランス語とカナダの場合、フォルダーは fr-CAされます。

  6. 生成されたサテライト アセンブリを新しいフォルダーにコピーします。

  7. 新しいサテライト アセンブリをテストするには、アプリケーションを実行するカルチャを変更する必要があります。 これは、次の 2 つの方法のいずれかで行うことができます。

    • オペレーティング システムの地域設定を変更します。

    • アプリケーションで、次のコードをApp.xaml.csに追加します。

      <Application
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          x:Class="SDKSample.App"
          x:Uid="Application_1"
          StartupUri="Window1.xaml">
      </Application>
      
      using System.Windows;
      using System.Globalization;
      using System.Threading;
      
      namespace SDKSample
      {
          public partial class App : Application
          {
              public App()
              {
                  // Change culture under which this application runs
                  CultureInfo ci = new CultureInfo("fr-CA");
                  Thread.CurrentThread.CurrentCulture = ci;
                  Thread.CurrentThread.CurrentUICulture = ci;
              }
          }
      }
      
      
      Imports System.Windows
      Imports System.Globalization
      Imports System.Threading
      
      Namespace SDKSample
          Partial Public Class App
              Inherits Application
              Public Sub New()
                  ' Change culture under which this application runs
                  Dim ci As New CultureInfo("fr-CA")
                  Thread.CurrentThread.CurrentCulture = ci
                  Thread.CurrentThread.CurrentUICulture = ci
              End Sub
          End Class
      End Namespace
      

LocBaml の使用に関するヒント

  • カスタム コントロールを定義するすべての依存アセンブリは、LocBaml のローカル ディレクトリにコピーするか、GAC にインストールする必要があります。 これは、バイナリ XAML (BAML) を読み取るときに、ローカライズ API が依存アセンブリにアクセスできる必要があるために必要です。

  • メイン アセンブリが署名されている場合は、生成されたリソース DLL を読み込むためにも署名する必要があります。

  • ローカライズされたリソース DLL のバージョンは、メイン アセンブリと同期する必要があります。

関連項目