0

現在、いくつかの言語で使用されるインターフェイスの GUI の作成に取り組んでいます。

私が取り組んでいる環境は、Unity 4.2 with Mono C# です。アプリケーションは、プラットフォーム間の互換性を維持する必要があります (Web、iOS、Linux、Windows を含む)。

私が達成しようとしているのは、複数の言語を処理する優れた方法であり、追加の言語または追加のフィールドを簡単に追加できるようにすることです。Ruby または Python で作業していた場合、これはまともな解決策になると思います。

class RegionalDB:
    def __init__(self):
        # Maybe connect to a data source such as a db, or files

    def set_language(self, lang):
        # Verify we have this lang, error if not
        # Set an attribute on self for every field entry in this language

text = RegionalDB()
text.set_language('de')

print text.exit_button

上記の方法により、実行時にメンバーを動的に割り当てることができる Python オブジェクトの強力な機能を使用できるようになります。上記のコードは、データ ソースの「exit_button」フィールドにあるテキストをドイツ語で出力します。Ruby でも同様のことができます。または、メモリ内のすべての変数を一度にオブジェクトに割り当てる代わりに、attribute_missing 関数を使用してデータ ソースを直接クエリすることもできます。

残念ながら、C# の Reflection コードは、上記のスクリプトほど洗練されていません。だから私の問題は次のとおりです。

  1. コンパイルされた厳密に型指定された言語で、エレガントで保守可能な地域化ツールを作成します。
  2. Unityを使用して効果的な方法で言語のデータを保存する

問題 1 については、設計パターン、または正直なところ多くの情報を見つけることができませんでした。

問題 2. Unity エディター プログラミングで解決できると思いますが、このトピックにはあまり触れておらず、提案を受け付けています。

質問形式で。

  1. 地域化のためにC#でうまく機能する設計パターンを知っている人はいますか
  2. Unity エディターのインターフェイス/ストレージ メカニズムを前進させるための提案

ありがとう。

PS 実行時に言語を変更できる必要があります

4

1 に答える 1

2

すでに l10n をサポートしている C# アプリはたくさんあります。

私はそれらを3つのタイプに分けます:

  1. リソースベースの国際化: テキストは XML ファイルに保存されます。これがマイクロソフトのやり方です。
  2. PO ベースの国際化:元のテキストと翻訳の更新に対処するための多くの Unixy ツールを含む、長い間確立されたgettextテクノロジを使用します。Mono デスクトップ アプリ ( Bansheeなど)のコードを見て、Mono.Posix アセンブリをリンクされた参照として使用する Catalog.GetString() 呼び出しを探すことで、これがどのように機能するかを確認できます。
  3. 言語ベースの国際化: モバイル アプリで使用され、各モバイル プラットフォームのローカリゼーションの詳細を抽象化し、すべてに共通の方法を使用します。

私の個人的な意見では、最善かつ最も現代的な方法は後者です。しかし、デスクトップ アプリをターゲットにしている場合は、この目的に合わせて新しい Vernacular バックエンドを作成/提供できると思います。

于 2013-08-24T13:29:11.580 に答える