123 lines
3.3 KiB
Go
123 lines
3.3 KiB
Go
package i18n
|
||
|
||
import "strings"
|
||
|
||
const DefaultLang = "TR"
|
||
|
||
var supported = map[string]struct{}{
|
||
"TR": {},
|
||
"EN": {},
|
||
"DE": {},
|
||
"IT": {},
|
||
"ES": {},
|
||
"RU": {},
|
||
"AR": {},
|
||
}
|
||
|
||
func NormalizeLangCode(raw string) string {
|
||
lang := strings.ToUpper(strings.TrimSpace(raw))
|
||
if _, ok := supported[lang]; ok {
|
||
return lang
|
||
}
|
||
return DefaultLang
|
||
}
|
||
|
||
func ResolveLangCode(queryLangCode, acceptLanguage string) string {
|
||
if lang := NormalizeLangCode(queryLangCode); lang != DefaultLang || strings.EqualFold(strings.TrimSpace(queryLangCode), DefaultLang) {
|
||
return lang
|
||
}
|
||
|
||
header := strings.TrimSpace(acceptLanguage)
|
||
if header == "" {
|
||
return DefaultLang
|
||
}
|
||
first := strings.Split(header, ",")[0]
|
||
first = strings.TrimSpace(strings.Split(first, ";")[0])
|
||
if len(first) < 2 {
|
||
return DefaultLang
|
||
}
|
||
return NormalizeLangCode(first[:2])
|
||
}
|
||
|
||
func T(langCode, key string) string {
|
||
for _, lang := range fallbackLangs(langCode) {
|
||
if val, ok := dict[lang][key]; ok {
|
||
return val
|
||
}
|
||
}
|
||
return key
|
||
}
|
||
|
||
func fallbackLangs(langCode string) []string {
|
||
lang := NormalizeLangCode(langCode)
|
||
switch lang {
|
||
case "TR":
|
||
return []string{"TR"}
|
||
case "EN":
|
||
return []string{"EN", "TR"}
|
||
default:
|
||
return []string{lang, "EN", "TR"}
|
||
}
|
||
}
|
||
|
||
var dict = map[string]map[string]string{
|
||
"TR": {
|
||
"pdf.report_title": "Cari Hesap Raporu",
|
||
"pdf.date": "Tarih",
|
||
"pdf.customer": "Cari",
|
||
"pdf.date_range": "Tarih Aralığı",
|
||
"pdf.page": "Sayfa",
|
||
"pdf.ending_balance": "Son Bakiye",
|
||
"pdf.currency_prefix": "Para Birimi",
|
||
"pdf.balance_prefix": "Bakiye",
|
||
"pdf.main.doc_no": "Belge No",
|
||
"pdf.main.date": "Tarih",
|
||
"pdf.main.due_date": "Vade",
|
||
"pdf.main.operation": "İşlem",
|
||
"pdf.main.description": "Açıklama",
|
||
"pdf.main.currency": "Para",
|
||
"pdf.main.debit": "Borç",
|
||
"pdf.main.credit": "Alacak",
|
||
"pdf.main.balance": "Bakiye",
|
||
"pdf.detail.main_group": "Ana Grup",
|
||
"pdf.detail.sub_group": "Alt Grup",
|
||
"pdf.detail.waiter": "Garson",
|
||
"pdf.detail.fit": "Fit",
|
||
"pdf.detail.content": "İçerik",
|
||
"pdf.detail.product": "Ürün",
|
||
"pdf.detail.color": "Renk",
|
||
"pdf.detail.qty": "Adet",
|
||
"pdf.detail.price": "Fiyat",
|
||
"pdf.detail.total": "Tutar",
|
||
},
|
||
"EN": {
|
||
"pdf.report_title": "Customer Account Report",
|
||
"pdf.date": "Date",
|
||
"pdf.customer": "Customer",
|
||
"pdf.date_range": "Date Range",
|
||
"pdf.page": "Page",
|
||
"pdf.ending_balance": "Ending Balance",
|
||
"pdf.currency_prefix": "Currency",
|
||
"pdf.balance_prefix": "Balance",
|
||
"pdf.main.doc_no": "Document No",
|
||
"pdf.main.date": "Date",
|
||
"pdf.main.due_date": "Due Date",
|
||
"pdf.main.operation": "Operation",
|
||
"pdf.main.description": "Description",
|
||
"pdf.main.currency": "Curr.",
|
||
"pdf.main.debit": "Debit",
|
||
"pdf.main.credit": "Credit",
|
||
"pdf.main.balance": "Balance",
|
||
"pdf.detail.main_group": "Main Group",
|
||
"pdf.detail.sub_group": "Sub Group",
|
||
"pdf.detail.waiter": "Waiter",
|
||
"pdf.detail.fit": "Fit",
|
||
"pdf.detail.content": "Content",
|
||
"pdf.detail.product": "Product",
|
||
"pdf.detail.color": "Color",
|
||
"pdf.detail.qty": "Qty",
|
||
"pdf.detail.price": "Price",
|
||
"pdf.detail.total": "Total",
|
||
},
|
||
}
|