2021-03-26 04:17:02 +04:30
|
|
|
/*
|
|
|
|
|
* Copyright (C) Contributors to the Suwayomi project
|
|
|
|
|
*
|
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
2021-03-09 16:44:09 +03:30
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
2023-03-23 13:59:32 +01:00
|
|
|
import { t } from 'i18next';
|
2021-03-09 16:44:09 +03:30
|
|
|
|
2023-04-21 00:27:42 +02:00
|
|
|
export enum DefaultLanguage {
|
|
|
|
|
ALL = 'all',
|
|
|
|
|
OTHER = 'other',
|
|
|
|
|
LOCAL_SOURCE = 'localsourcelang',
|
|
|
|
|
}
|
2021-09-18 00:48:48 +04:30
|
|
|
|
2023-04-21 00:27:42 +02:00
|
|
|
export const ISOLanguages = [
|
2021-03-09 18:05:34 +03:30
|
|
|
// full list: https://github.com/meikidd/iso-639-1/blob/master/src/data.js
|
2021-03-09 16:44:09 +03:30
|
|
|
{ code: 'en', name: 'English', nativeName: 'English' },
|
|
|
|
|
{ code: 'ca', name: 'Catalan; Valencian', nativeName: 'Català' },
|
|
|
|
|
{ code: 'de', name: 'German', nativeName: 'Deutsch' },
|
|
|
|
|
{ code: 'es', name: 'Spanish; Castilian', nativeName: 'Español' },
|
2021-08-10 03:39:18 +04:30
|
|
|
{ code: 'es-419', name: 'Spanish; Castilian', nativeName: 'Español (Latinoamérica)' },
|
2021-03-09 16:44:09 +03:30
|
|
|
{ code: 'fr', name: 'French', nativeName: 'Français' },
|
|
|
|
|
{ code: 'id', name: 'Indonesian', nativeName: 'Indonesia' },
|
|
|
|
|
{ code: 'it', name: 'Italian', nativeName: 'Italiano' },
|
|
|
|
|
{ code: 'pt', name: 'Portuguese', nativeName: 'Português' },
|
2021-08-10 03:39:18 +04:30
|
|
|
{ code: 'pt-pt', name: 'Portuguese', nativeName: 'Português (Portugal)' },
|
|
|
|
|
{ code: 'pt-br', name: 'Portuguese; Brasil', nativeName: 'Português (Brasil)' },
|
2021-03-09 16:44:09 +03:30
|
|
|
{ code: 'vi', name: 'Vietnamese', nativeName: 'Tiếng Việt' },
|
|
|
|
|
{ code: 'tr', name: 'Turkish', nativeName: 'Türkçe' },
|
|
|
|
|
{ code: 'ru', name: 'Russian', nativeName: 'русский' },
|
|
|
|
|
{ code: 'ar', name: 'Arabic', nativeName: 'العربية' },
|
|
|
|
|
{ code: 'hi', name: 'Hindi', nativeName: 'हिन्दी' },
|
|
|
|
|
{ code: 'th', name: 'Thai', nativeName: 'ไทย' },
|
|
|
|
|
{ code: 'zh', name: 'Chinese', nativeName: '中文' },
|
2021-08-10 03:39:18 +04:30
|
|
|
{ code: 'zh-hans', name: 'Chinese', nativeName: '中文 (HANS)' },
|
|
|
|
|
{ code: 'zh-hant', name: 'Chinese', nativeName: '中文 (HANT)' },
|
|
|
|
|
{ code: 'zh-rhk', name: 'Chinese', nativeName: '中文 (RHK)' },
|
|
|
|
|
{ code: 'zh-rtw', name: 'Chinese', nativeName: '中文 (RTW)' },
|
|
|
|
|
|
2021-03-09 16:44:09 +03:30
|
|
|
{ code: 'ja', name: 'Japanese', nativeName: '日本語' },
|
|
|
|
|
{ code: 'ko', name: 'Korean', nativeName: '한국어' },
|
2021-03-09 18:05:34 +03:30
|
|
|
{ code: 'zu', name: 'Zulu', nativeName: 'isiZulu' },
|
|
|
|
|
{ code: 'xh', name: 'Xhosa', nativeName: 'isiXhosa' },
|
|
|
|
|
{ code: 'uk', name: 'Ukrainian', nativeName: 'Українська' },
|
|
|
|
|
{ code: 'ro', name: 'Romanian', nativeName: 'Română' },
|
|
|
|
|
{ code: 'bg', name: 'Bulgarian', nativeName: 'български' },
|
|
|
|
|
{ code: 'cs', name: 'Czech', nativeName: 'čeština' },
|
|
|
|
|
{ code: 'pl', name: 'Polish', nativeName: 'polski' },
|
|
|
|
|
{ code: 'no', name: 'Norwegian', nativeName: 'Norsk' },
|
|
|
|
|
{ code: 'nl', name: 'Dutch', nativeName: 'Nederlands' },
|
|
|
|
|
{ code: 'my', name: 'Burmese', nativeName: 'ဗမာစာ' },
|
|
|
|
|
{ code: 'ms', name: 'Malay', nativeName: 'Malaysia' },
|
|
|
|
|
{ code: 'mn', name: 'Mongolian', nativeName: 'Монгол' },
|
|
|
|
|
{ code: 'ml', name: 'Malayalam', nativeName: 'മലയാളം' },
|
|
|
|
|
{ code: 'ku', name: 'Kurdish', nativeName: 'Kurdî' },
|
|
|
|
|
{ code: 'hu', name: 'Hungarian', nativeName: 'Magyar' },
|
|
|
|
|
{ code: 'hr', name: 'Croatian', nativeName: 'Hrvatski' },
|
|
|
|
|
{ code: 'he', name: 'Hebrew', nativeName: 'עברית' },
|
|
|
|
|
{ code: 'fil', name: 'Filipino', nativeName: 'Filipino' },
|
|
|
|
|
{ code: 'fi', name: 'Finnish', nativeName: 'suomi' },
|
|
|
|
|
{ code: 'fa', name: 'Persian', nativeName: 'فارسی' },
|
|
|
|
|
{ code: 'eu', name: 'Basque', nativeName: 'euskara' },
|
|
|
|
|
{ code: 'el', name: 'Greek', nativeName: 'Ελληνικά' },
|
|
|
|
|
{ code: 'da', name: 'Danish', nativeName: 'dansk' },
|
2021-08-10 02:04:02 +04:30
|
|
|
{ code: 'bn', name: 'Bengali', nativeName: 'বাংলা' },
|
|
|
|
|
{ code: 'lt', name: 'Lithuanian', nativeName: 'lietuvių kalba' },
|
|
|
|
|
{ code: 'sh', name: 'Serbo-Croatian', nativeName: 'srpskohrvatski' },
|
2021-08-10 03:39:18 +04:30
|
|
|
|
|
|
|
|
{ code: 'af', name: 'Afrikaans', nativeName: 'Afrikaans' },
|
|
|
|
|
{ code: 'am', name: 'Amharic', nativeName: 'አማርኛ' },
|
|
|
|
|
{ code: 'az', name: 'Azerbaijani', nativeName: 'Azərbaycan' },
|
|
|
|
|
{ code: 'be', name: 'Belarusian', nativeName: 'беларуская' },
|
|
|
|
|
{ code: 'bs', name: 'Bosnian', nativeName: 'bosanski' },
|
|
|
|
|
{ code: 'sv', name: 'Swedish', nativeName: 'svenska' },
|
2021-08-10 02:04:02 +04:30
|
|
|
{ code: 'sv', name: 'Swedish', nativeName: 'svenska' },
|
2021-03-09 16:44:09 +03:30
|
|
|
];
|
|
|
|
|
|
|
|
|
|
export function langCodeToName(code: string): string {
|
2021-03-09 18:05:34 +03:30
|
|
|
const whereToCut = code.indexOf('-') !== -1 ? code.indexOf('-') : code.length;
|
|
|
|
|
|
|
|
|
|
const proccessedCode = code.toLocaleLowerCase().substring(0, whereToCut);
|
2023-03-23 13:59:32 +01:00
|
|
|
let result = t('global.language.label.language_with_code', { code });
|
2021-03-09 18:05:34 +03:30
|
|
|
|
2021-03-09 16:44:09 +03:30
|
|
|
for (let i = 0; i < ISOLanguages.length; i++) {
|
2023-02-08 18:19:26 +01:00
|
|
|
if (ISOLanguages[i].code === proccessedCode || ISOLanguages[i].code === code.toLocaleLowerCase()) {
|
2021-08-10 03:39:18 +04:30
|
|
|
result = ISOLanguages[i].nativeName;
|
|
|
|
|
}
|
2021-03-09 18:05:34 +03:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
2021-03-09 16:44:09 +03:30
|
|
|
}
|
|
|
|
|
|
2021-10-18 14:02:51 +03:30
|
|
|
function defaultNativeLang() {
|
|
|
|
|
return 'en'; // TODO: infer from the browser
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function extensionDefaultLangs() {
|
2023-04-21 00:27:42 +02:00
|
|
|
return [defaultNativeLang(), DefaultLanguage.ALL];
|
2021-10-18 14:02:51 +03:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function sourceDefualtLangs() {
|
2023-04-21 00:27:42 +02:00
|
|
|
return [defaultNativeLang(), DefaultLanguage.LOCAL_SOURCE];
|
2021-10-18 14:02:51 +03:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function sourceForcedDefaultLangs(): string[] {
|
2023-04-21 00:27:42 +02:00
|
|
|
return [DefaultLanguage.LOCAL_SOURCE];
|
2021-03-09 16:44:09 +03:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const langSortCmp = (a: string, b: string) => {
|
|
|
|
|
// puts english first for convience
|
|
|
|
|
const aLang = langCodeToName(a);
|
|
|
|
|
const bLang = langCodeToName(b);
|
|
|
|
|
|
|
|
|
|
if (a === 'en') return -1;
|
|
|
|
|
if (b === 'en') return 1;
|
2023-04-21 00:27:42 +02:00
|
|
|
if (a === DefaultLanguage.LOCAL_SOURCE) return 1;
|
|
|
|
|
if (b === DefaultLanguage.LOCAL_SOURCE) return -1;
|
2021-09-18 00:48:48 +04:30
|
|
|
|
2021-03-09 16:44:09 +03:30
|
|
|
return aLang > bLang ? 1 : -1;
|
|
|
|
|
};
|