1

私のアプリでは、音声コマンド (たとえば Cortana 経由) でライトのオンとオフを切り替える機会をユーザーに提供したいと考えています。私は VCD の概念を理解しており、とても気に入っていますが、自分のコードでさまざまな言語を処理する方法がわかりません。

2 つの言語 (英語とドイツ語) があるとします。

<CommandSet xml:lang="en" Name="LightSwitch_en">
    <CommandPrefix>Switch the light</CommandPrefix>
    <Example>Switch the light on.</Example>
    <Command Name="switchLight">
        <Example>on</Example>
        <ListenFor>{status}</ListenFor>
        <Feedback>Light will be switched {status}.</Feedback>
        <Navigate />
    </Command>
    <PhraseList Label="status">
        <Item>on</Item>
        <Item>off</Item>
    </PhraseList>        
</CommandSet>

<CommandSet xml:lang="de" Name="LightSwitch_de">
    <CommandPrefix>Schalte das licht</CommandPrefix>
    <Example>Schalte das Licht ein.</Example>
    <Command Name="switchLight">
        <Example>ein</Example>
        <ListenFor>{status}</ListenFor>
        <Feedback>Licht wird {status}geschaltet.</Feedback>
        <Navigate />
    </Command>
    <PhraseList Label="status">
        <Item>ein</Item>
        <Item>aus</Item>
    </PhraseList>        
</CommandSet>

アプリを音声コマンドで起動すると、話し言葉を簡単に抽出してstatusパラメーターにアクセスできます。しかし、これは文字列であるため、ユーザーが話している言語によって異なる結果が得られます。

したがって、ユーザーが英語を話す場合、文字列は"on"になりますが、ドイツ語を話す場合、文字列は になります"ein"。では、アプリ内でどの文字列をリッスンする必要があるかを知るにはどうすればよいでしょうか? 私はこのようなものをターゲットにしています:

if (arg.Equals("on"))
    Light.On();
else if (arg.Equals("off"))
    Light.Off();

しかし、これはドイツ語ではなく英語でのみ機能します。すべての言語ですべての異なる文字列をチェックすることに憤りを感じていますが、それは正しい方法ではありません。<Item>残念ながら、タグは単なる文字列であるため、タグに追加の属性を与えることもできません。

次のようなこともできif (arg.Equals("on") || arg.Equals("ein")) Light.On();ますが、ご覧のとおり、これは本当に醜く、何かを変更するたびに調整する必要があります。チェックする言語が約 15 あると想像してみてください...

よりスマートなソリューションを知っていますか?

4

2 に答える 2

2

Cortana は組み込みアプリのローカライズ方法と同じローカライズを使用するため、すべての文字列をリソース ファイルに入れ、返された文字列をローカライズされたリソースと比較することはできませんか?

于 2015-11-25T15:10:49.300 に答える