私はasp.netローカリゼーションに関するgoogチュートリアルを探しています。 公式ドキュメントでは、説明は.resxファイルであり、jsonファイルを使用することはできません。Asp.net jsonファイルのコアローカライズ
誰かが良いチュートリアルを書いている場合は、それを行うための独自のミドルウェアです。
おかげ
私はasp.netローカリゼーションに関するgoogチュートリアルを探しています。 公式ドキュメントでは、説明は.resxファイルであり、jsonファイルを使用することはできません。Asp.net jsonファイルのコアローカライズ
誰かが良いチュートリアルを書いている場合は、それを行うための独自のミドルウェアです。
おかげ
は、いくつかの調査の後、私は最終的にASP /ローカリゼーションのGitHubの例を見つけます。
私はここで、既定のカルチャープロバイダーを壊さずにフラットjsonを使用することを望んでいない人々に提供します。
データ:
平坦JSON:
[
{
"Key": "Hello",
"LocalizedValue" : {
"fr-FR": "Bonjour",
"en-US": "Hello"
}
}
]
C#のモデル:
class JsonLocalization
{
public string Key { get; set; }
public Dictionary<string, string> LocalizedValue = new Dictionary<string, string>();
}
ミドルウェア
工場
これはただのCultureInfoへのアクセス権を持っていることですがStringLocalizerです。
public class JsonStringLocalizerFactory : IStringLocalizerFactory
{
public IStringLocalizer Create(Type resourceSource)
{
return new JsonStringLocalizer();
}
public IStringLocalizer Create(string baseName, string location)
{
return new JsonStringLocalizer();
}
}
ローカライザー
あなたが基本的なIStringLocalizerを使用することができます。このソリューションによりJSONファイル
public class JsonStringLocalizer : IStringLocalizer
{
List<JsonLocalization> localization = new List<JsonLocalization>();
public JsonStringLocalizer()
{
//read all json file
JsonSerializer serializer = new JsonSerializer();
localization = JsonConvert.DeserializeObject<List<JsonLocalization>>(File.ReadAllText(@"localization.json"));
}
public LocalizedString this[string name]
{
get
{
var value = GetString(name);
return new LocalizedString(name, value ?? name, resourceNotFound: value == null);
}
}
public LocalizedString this[string name, params object[] arguments]
{
get
{
var format = GetString(name);
var value = string.Format(format ?? name, arguments);
return new LocalizedString(name, value, resourceNotFound: format == null);
}
}
public IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures)
{
return localization.Where(l => l.LocalizedValue.Keys.Any(lv => lv == CultureInfo.CurrentCulture.Name)).Select(l => new LocalizedString(l.Key, l.LocalizedValue[CultureInfo.CurrentCulture.Name], true));
}
public IStringLocalizer WithCulture(CultureInfo culture)
{
return new JsonStringLocalizer();
}
private string GetString(string name)
{
var query = localization.Where(l => l.LocalizedValue.Keys.Any(lv => lv == CultureInfo.CurrentCulture.Name));
var value = query.FirstOrDefault(l => l.Key == name);
return value.LocalizedValue[CultureInfo.CurrentCulture.Name];
}
}
からデータを取得するためのロジックあなたViewsおよびコントローラ。もちろん
あなたは大きなJSONファイルを持っている場合は、パフォーマンスを向上させるためにIMemoryCacheまたはIDistributedMemoryCacheを使用することができます。
EDIT:あなたは、グローバリゼーションの好みをしたいとあなたが設定することができた後
services.AddSingleton<IStringLocalizerFactory, JsonStringLocalizerFactory>();
services.AddSingleton<IStringLocalizer, JsonStringLocalizer>();
services.AddLocalization(options => options.ResourcesPath = "Resources");
:スタートアップは独自の実装を使用するには、この行を追加したアプリケーションで
。
EDIT 2:ここ
パッケージのリンク: https://www.nuget.org/packages/Askmethat.Aspnet.JsonLocalizer/
はここを見てください、私はそれを自分自身を試していませんでしたが、それは有望に見えます。
http://ronaldwildenberg.com/asp-net-core-localization-with-json-resource-files/
が指定してくださいすることができ - スタートアップで、このミドルウェアをimpementか? – Jenan
@Jenan私はスタートアップコンフィギュレーション – OrcusZ
グレートを追加するために私のポストを編集し、あなたは偉大なポイントを与える - 私は「JsonStringLocalizerFactory」となど良い仕事のためのgit respositoriesから完璧な結果を得ます。 – Jenan