2

アイコンを設定した Windows フォーム Form1 があるとします。Visual Studio は、アイコンを Form1.resx ($this.Icon) に保存します。

ここで、アプリケーションを N 言語にローカライズすることを決定したので、Localizable を True に設定し、Language オプションから最初の言語を選択し、テキストを翻訳して、次の言語に進みます (別の言語を選択して翻訳する) までの手順を繰り返しますN. 結果は、元のアイコンを持つ $this.Icon エントリを含む N 個の .resx ファイルになります。

次に、フォーム アイコンを更新する必要があることに気付いたので、Language を "(Default)" に設定し、新しいアイコンを設定します。驚いたことに、N 個の .resx ファイルが更新されていないことがわかりました。

N 個の .resx ファイルを手動で更新する必要がありますか? カスケード更新のようなものはありますか? この場合、N個のアイコンを更新しないようにするにはどうしますか?

4

2 に答える 2

1

Program.Main にコードを追加して、すべてのソリューション .resx ファイルを変更して Form.Icon を削除しました。

    try
    {
        string solutionDirPath = @"path\to\solution";
        string[] resxFilePaths = Directory.GetFiles(solutionDirPath, "*.resx", SearchOption.AllDirectories);
        foreach (string resxFilePath in resxFilePaths)
        {
            XDocument xdoc = XDocument.Load(resxFilePath);
            var iconElement = xdoc.Root.Elements("data").SingleOrDefault(el => (string)el.Attribute("name") == "$this.Icon");
            if (iconElement != null)
            {
                iconElement.Remove();
                xdoc.Save(resxFilePath);
            }
        }
    }
    catch (Exception ex)
    {

    }
    finally
    {

    }

そして、私のビンのサイズはほぼ2倍になりました!

また、すべてのフォームで、アプリの実行可能ファイルのアイコンを使用します

Icon.ExtractAssociatedIcon(Application.ExecutablePath)
于 2017-03-23T13:48:23.983 に答える
-1

正直なところ、すべての resx で同じアイコンを使用する理由はありません。

ResX ファイルは、最も具体的な言語リソースから最も少ない言語リソースまで、言語に基づいてカスケードします。

デフォルト以外のすべての resx ファイルからアイコンを削除すると、そのアイコンが常に使用されます。

特定の言語に別のアイコンが必要な場合は、別のアイコンをその resx ファイルに追加するだけです。

これは自分で簡単に確認できます。フォームにラベルを追加し、'test' と呼ばれるキーの値に基づいて入力します (コードで 'GetLocalResourceObject("test")' を呼び出してこれを行うことができます)。

キーと値のペア 'test'-'Hello' を resx ファイルに追加します。あなたのresxが「foo.resx」と呼ばれているとしましょう。言語固有のファイル (「foo.fr.resx」など) に「test」-「Bonjour」を追加します。プログラムをフランス語以外の言語で実行すると「Hello」が表示されますが、フランス語に切り替えると「Bonjour」が表示されます。

アイコンと同じように機能します。ベース resx で設定でき、すべての言語で表示されます。その後、別のリソース ファイルでオーバーライドできます。

于 2013-03-11T14:16:16.530 に答える