SlideShare une entreprise Scribd logo
1  sur  9
An Approach to Design .net
core Translation Tables
資料庫多語系設計
About
這篇文在做什麼?
To solve i18n requirements of database.
解決資料庫表格若有多語系需求,應如何實作的問題?
reference:Separate translation table approach
Concept
概念
資料表以最小異動的幅度,以「擴充」的概念新增某功能的語系擴充表,讓原
本的功能擁有多語系的資料集。
Using the idea of “extent” the original table to minimize the mofification of
original data.
Final Result using API
指定適當語系,相對應的資源
(如API) 回傳對應語系的內容
By specifing language code to
retrieve the contents in correct
language.
Table design
.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 回預設語系
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
後端程式設計 - 將語系作為查詢條件的一部分
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; }
}
後端程式設計 - 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()
};
}

Contenu connexe

Similaire à An Approach to Design .net core Translation Tables

resume-jbarr-linkedin-2016
resume-jbarr-linkedin-2016resume-jbarr-linkedin-2016
resume-jbarr-linkedin-2016
Jason Barr
 
AI-SDV 2021 - Holger Keibel; Daniele Puccinelli - Leveraging pre-trained lang...
AI-SDV 2021 - Holger Keibel; Daniele Puccinelli - Leveraging pre-trained lang...AI-SDV 2021 - Holger Keibel; Daniele Puccinelli - Leveraging pre-trained lang...
AI-SDV 2021 - Holger Keibel; Daniele Puccinelli - Leveraging pre-trained lang...
Dr. Haxel Consult
 
Multilingual Improvements for Drupal 8
Multilingual Improvements for Drupal 8Multilingual Improvements for Drupal 8
Multilingual Improvements for Drupal 8
Acquia
 
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdfconceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
SahajShrimal1
 
Unit1 principle of programming language
Unit1 principle of programming languageUnit1 principle of programming language
Unit1 principle of programming language
Vasavi College of Engg
 
Create a program using any of the following languages- Python- ASP-NET.pdf
Create a program using any of the following languages- Python- ASP-NET.pdfCreate a program using any of the following languages- Python- ASP-NET.pdf
Create a program using any of the following languages- Python- ASP-NET.pdf
BlakegclKerrx
 

Similaire à An Approach to Design .net core Translation Tables (20)

resume-jbarr-linkedin-2016
resume-jbarr-linkedin-2016resume-jbarr-linkedin-2016
resume-jbarr-linkedin-2016
 
Government Polytechnic Arvi-1.pptx
Government Polytechnic Arvi-1.pptxGovernment Polytechnic Arvi-1.pptx
Government Polytechnic Arvi-1.pptx
 
Shivam PPT.pptx
Shivam PPT.pptxShivam PPT.pptx
Shivam PPT.pptx
 
MichaelDeMar-2015_a
MichaelDeMar-2015_aMichaelDeMar-2015_a
MichaelDeMar-2015_a
 
Building Applications using Apache Hadoop
Building Applications using Apache HadoopBuilding Applications using Apache Hadoop
Building Applications using Apache Hadoop
 
Product Update: Customization with Rosette
Product Update: Customization with RosetteProduct Update: Customization with Rosette
Product Update: Customization with Rosette
 
Everything multilingual in Drupal 8 (2015 November)
Everything multilingual in Drupal 8 (2015 November)Everything multilingual in Drupal 8 (2015 November)
Everything multilingual in Drupal 8 (2015 November)
 
hadoop_module
hadoop_modulehadoop_module
hadoop_module
 
Hibernate(H8) In Action
Hibernate(H8) In ActionHibernate(H8) In Action
Hibernate(H8) In Action
 
Product internationalization
Product internationalizationProduct internationalization
Product internationalization
 
AI-SDV 2021 - Holger Keibel; Daniele Puccinelli - Leveraging pre-trained lang...
AI-SDV 2021 - Holger Keibel; Daniele Puccinelli - Leveraging pre-trained lang...AI-SDV 2021 - Holger Keibel; Daniele Puccinelli - Leveraging pre-trained lang...
AI-SDV 2021 - Holger Keibel; Daniele Puccinelli - Leveraging pre-trained lang...
 
Multilingual Improvements for Drupal 8
Multilingual Improvements for Drupal 8Multilingual Improvements for Drupal 8
Multilingual Improvements for Drupal 8
 
Hadoop Frameworks Panel__HadoopSummit2010
Hadoop Frameworks Panel__HadoopSummit2010Hadoop Frameworks Panel__HadoopSummit2010
Hadoop Frameworks Panel__HadoopSummit2010
 
What's New With Azure AI
What's New With Azure AIWhat's New With Azure AI
What's New With Azure AI
 
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdfconceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
conceptsinobjectorientedprogramminglanguages-12659959597745-phpapp02.pdf
 
Language Server Protocol - Why the Hype?
Language Server Protocol - Why the Hype?Language Server Protocol - Why the Hype?
Language Server Protocol - Why the Hype?
 
Unit1 principle of programming language
Unit1 principle of programming languageUnit1 principle of programming language
Unit1 principle of programming language
 
Create a program using any of the following languages- Python- ASP-NET.pdf
Create a program using any of the following languages- Python- ASP-NET.pdfCreate a program using any of the following languages- Python- ASP-NET.pdf
Create a program using any of the following languages- Python- ASP-NET.pdf
 
The OpenText Translator for Content Suite Platform by Cassia
The OpenText Translator for Content Suite Platform by CassiaThe OpenText Translator for Content Suite Platform by Cassia
The OpenText Translator for Content Suite Platform by Cassia
 
Shiv shakti resume
Shiv shakti resumeShiv shakti resume
Shiv shakti resume
 

Dernier

Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
mbmh111980
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
Alluxio, Inc.
 
JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)
Max Lee
 

Dernier (20)

Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
 
Crafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationCrafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM Integration
 
Breaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdfBreaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdf
 
Studiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting softwareStudiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting software
 
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdfMicrosoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
 
5 Reasons Driving Warehouse Management Systems Demand
5 Reasons Driving Warehouse Management Systems Demand5 Reasons Driving Warehouse Management Systems Demand
5 Reasons Driving Warehouse Management Systems Demand
 
Agnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in KrakówAgnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in Kraków
 
APVP,apvp apvp High quality supplier safe spot transport, 98% purity
APVP,apvp apvp High quality supplier safe spot transport, 98% purityAPVP,apvp apvp High quality supplier safe spot transport, 98% purity
APVP,apvp apvp High quality supplier safe spot transport, 98% purity
 
The Impact of PLM Software on Fashion Production
The Impact of PLM Software on Fashion ProductionThe Impact of PLM Software on Fashion Production
The Impact of PLM Software on Fashion Production
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf
 
JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
 
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with StrimziStrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
 
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdfImplementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
 
A Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data MigrationA Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data Migration
 
KLARNA - Language Models and Knowledge Graphs: A Systems Approach
KLARNA -  Language Models and Knowledge Graphs: A Systems ApproachKLARNA -  Language Models and Knowledge Graphs: A Systems Approach
KLARNA - Language Models and Knowledge Graphs: A Systems Approach
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
iGaming Platform & Lottery Solutions by Skilrock
iGaming Platform & Lottery Solutions by SkilrockiGaming Platform & Lottery Solutions by Skilrock
iGaming Platform & Lottery Solutions by Skilrock
 

An Approach to Design .net core Translation Tables

  • 1. An Approach to Design .net core Translation Tables 資料庫多語系設計
  • 2. About 這篇文在做什麼? To solve i18n requirements of database. 解決資料庫表格若有多語系需求,應如何實作的問題? reference:Separate translation table approach
  • 4. Final Result using API 指定適當語系,相對應的資源 (如API) 回傳對應語系的內容 By specifing language code to retrieve the contents in correct language.
  • 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() }; }