mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-20 01:34:24 +08:00
use the macro language tag to match the i18n file when the browser language tag cannot match any i18n files
This commit is contained in:
+66
-23
@@ -235,41 +235,64 @@ export function useI18n() {
|
|||||||
return DEFAULT_LANGUAGE;
|
return DEFAULT_LANGUAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ALL_LANGUAGES[browserLanguage]) {
|
// try to match the full browser language tag with full language tag in i18n file
|
||||||
const languageKey = getLanguageKeyFromLanguageAlias(browserLanguage);
|
if (ALL_LANGUAGES[browserLanguage]) {
|
||||||
|
return browserLanguage;
|
||||||
if (languageKey) {
|
|
||||||
browserLanguage = languageKey;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ALL_LANGUAGES[browserLanguage] && browserLanguage.split('-').length > 1) { // maybe language-script-region
|
// try to match the full browser language tag with language alias tags in i18n file
|
||||||
const languageTagParts = browserLanguage.split('-');
|
let alternativeLanguage = getLanguageKeyFromLanguageAlias(browserLanguage);
|
||||||
|
|
||||||
|
if (alternativeLanguage && ALL_LANGUAGES[alternativeLanguage]) {
|
||||||
|
return alternativeLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
const languageTagParts = browserLanguage.split('-');
|
||||||
|
|
||||||
|
// maybe browser language is language-script-region format
|
||||||
|
if (languageTagParts.length > 2) {
|
||||||
|
// fallback to use language tag with language-script / language-region format
|
||||||
browserLanguage = languageTagParts[0] + '-' + languageTagParts[1];
|
browserLanguage = languageTagParts[0] + '-' + languageTagParts[1];
|
||||||
|
|
||||||
if (!ALL_LANGUAGES[browserLanguage]) {
|
// try to match language tag in language-script / language-region format with full language tag in i18n file
|
||||||
const languageKey = getLanguageKeyFromLanguageAlias(browserLanguage);
|
if (ALL_LANGUAGES[browserLanguage]) {
|
||||||
|
return browserLanguage;
|
||||||
if (languageKey) {
|
|
||||||
browserLanguage = languageKey;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ALL_LANGUAGES[browserLanguage]) {
|
// try to match language tag in language-script / language-region format with language alias tags in i18n file
|
||||||
browserLanguage = languageTagParts[0];
|
alternativeLanguage = getLanguageKeyFromLanguageAlias(browserLanguage);
|
||||||
const languageKey = getLanguageKeyFromLanguageAlias(browserLanguage);
|
|
||||||
|
|
||||||
if (languageKey) {
|
if (alternativeLanguage && ALL_LANGUAGES[alternativeLanguage]) {
|
||||||
browserLanguage = languageKey;
|
return alternativeLanguage;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ALL_LANGUAGES[browserLanguage]) {
|
// fallback to use marco language tag
|
||||||
return DEFAULT_LANGUAGE;
|
if (languageTagParts.length > 1) {
|
||||||
|
browserLanguage = languageTagParts[0];
|
||||||
|
|
||||||
|
// try to match marco language tag with full language tag in i18n file
|
||||||
|
if (ALL_LANGUAGES[browserLanguage]) {
|
||||||
|
return browserLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// try to match marco language tag with language alias tags in i18n file
|
||||||
|
alternativeLanguage = getLanguageKeyFromLanguageAlias(browserLanguage);
|
||||||
|
|
||||||
|
if (alternativeLanguage && ALL_LANGUAGES[alternativeLanguage]) {
|
||||||
|
return alternativeLanguage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return browserLanguage;
|
// fallback to match marco language tag with marco language tag in i18n file
|
||||||
|
alternativeLanguage = getLanguageKeyFromMarcoLanguageTag(browserLanguage);
|
||||||
|
|
||||||
|
if (alternativeLanguage && ALL_LANGUAGES[alternativeLanguage]) {
|
||||||
|
return alternativeLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fallback to use the default language
|
||||||
|
return DEFAULT_LANGUAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLanguageKeyFromLanguageAlias(alias: string): string | null {
|
function getLanguageKeyFromLanguageAlias(alias: string): string | null {
|
||||||
@@ -299,6 +322,26 @@ export function useI18n() {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getLanguageKeyFromMarcoLanguageTag(languageTag: string): string | null {
|
||||||
|
for (const languageKey in ALL_LANGUAGES) {
|
||||||
|
if (!Object.prototype.hasOwnProperty.call(ALL_LANGUAGES, languageKey)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (languageKey.indexOf('-') < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const marcoLanguageTag = languageKey.split('-')[0];
|
||||||
|
|
||||||
|
if (marcoLanguageTag.toLowerCase() === languageTag.toLowerCase()) {
|
||||||
|
return languageKey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function getLocalizedError(error: ErrorResponse): LocalizedError {
|
function getLocalizedError(error: ErrorResponse): LocalizedError {
|
||||||
if (error.errorCode === KnownErrorCode.ApiNotFound && SPECIFIED_API_NOT_FOUND_ERRORS[error.path]) {
|
if (error.errorCode === KnownErrorCode.ApiNotFound && SPECIFIED_API_NOT_FOUND_ERRORS[error.path]) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user