6. .net core - 設定支援的語系及預設語系
Supported Language and Default Language
public Startup(IConfiguration configuration)
{
Configuration = configuration;
_defaultCulture = new RequestCulture("en", "en");
_supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("zh-CN"),
new CultureInfo("zh-TW"),
new CultureInfo("vi")
};
}
● 若相關資源找無對應語系,將rollback 回預設語系
7. Setup dotnet core localization
public void ConfigureServices(IServiceCollection services)
{
#region Localization
// Add the localization services to the services container
services.AddLocalization();
services.Configure<RequestLocalizationOptions>(
opts =>
{
/* your configurations*/
opts.DefaultRequestCulture = _defaultCulture;
// Formatting numbers, dates, etc.
opts.SupportedCultures = _supportedCultures;
// UI strings that we have localized.
opts.SupportedUICultures = _supportedCultures;
// Add Route provider to enable language selection via URL
opts.RequestCultureProviders.Insert(0, new RouteCultureProvider(_defaultCulture));
});
#endregion
}
● RouteCultureProvider 讓localization 機制可在網址列直接指定語系,如 /zh-TW/api
8. 後端程式設計 - 將語系作為查詢條件的一部分
Language Code as Part of the Searching Criteria
/// <summary>
/// 設定檔的查詢條件
/// </summary>
public class ConfigCriteria :SearchCriteria
{
/// <summary>
/// 主設定檔的ID;可用來識別如多語系設定檔會有多個設定時,其上層的主設定檔為何。
/// </summary>
public string ConfigId { get; set; }
/// <summary>
/// 語系代碼
/// </summary>
public string Language { get; set; }
}
9. 後端程式設計 - repository 針對語系進行查詢
Implement Query Predications
/// <summary>
/// 搜尋設定檔
/// </summary>
/// <param name="criteria"></param>
/// <returns></returns>
public IQueryable<Config> Search(ConfigCriteria criteria)
{
if (criteria == null)
return null;
IQueryable<Config> entities = this.GetAll();
if (!string.IsNullOrWhiteSpace(criteria.ConfigId))
entities = entities.Where(o => o.Id == criteria.ConfigId);
if (!string.IsNullOrWhiteSpace(criteria.Language))
{
var translations = this._Context.ConfigTranslation.Where(o => o.Lang.Equals(criteria.Language,
StringComparison.CurrentCultureIgnoreCase));
entities = from config in entities
select new Config
{
Id = config.Id,
Key = config.Key,
Value = config.Value,
Translations = translations.Where(t => t.ConfigId == config.Id).ToList()
};
}