ASP.NETローカライズWebサイト—その場で更新
-
03-07-2019 - |
質問
これに対する解決策はあると思いますが、もっと良い方法はありますか、それとも私を壊すでしょうか?
グローバル/ローカルresxファイルを使用して、ローカライズされたWebサイトを構築しています。技術に詳しくないユーザーは、Webアプリを使用して文字列を編集し、新しい言語を追加できる必要があります。
これは非常に簡単に思えます-文字列を表示するフォームがあり、変更は次のスニペットのようなコードで保存されます:
string filename = MapPath("App_GlobalResources/strings.hu.resx");
XmlDocument xDoc = new XmlDocument();
XmlNode xNode;
xDoc.Load(filename);
xNode = xDoc.SelectSingleNode("//root/data[@name='PageTitle']/value");
xNode.InnerText = txtNewTitle.Text;
xDoc.Save(filename);
これは忙しいサイトで問題を引き起こすでしょうか?再コンパイルの瞬間的な遅延が発生する場合、それは大したことではありません。そして現実的には、このフォームは常に頻繁に使用されることはありません。コミュニティはどう思いますか?
解決
非常に基本的な「CMS」については、以前に同様の方法を使用しました。このサイトはあまり使用されていませんでしたが、問題は発生しませんでした。
resxを変更してもリサイクルされるとは思わない。
他のヒント
同様のことを行いましたが、データベースを使用してユーザーが変更した値を保存しました。次に、ローカライズされたキーのオーバーライドされた値を提供するフォールバックメカニズムを提供しました。
とはいえ、あなたの方法はうまくいくと思います。
Resourceオブジェクトの作成を検討しましたか?すべてのクライアントコードが使用する単一のオブジェクトに設定をラップする必要があります。次のようなもの:
public class GuiResources
{
public string PageTitle
{
get return _pageTitle;
}
// Fired once when the class is first created.
void LoadConfiguration()
{
// Load settings from config section
_pageTitle = // Value from config
}
}
オブジェクトを1回だけロードすることで、シングルトンまたはプロバイダーにすることができます。また、現在のスレッドを調べてカルチャ情報を取得し、返される言語を把握できるようにすることもできます。
次に、web.configファイルでを作成できます。カスタムセクションおよび restartOnExternalChanges =" true"
を設定します。そうすれば、アプリは作成時に変更されます。