mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-23 11:46:41 +02:00
style: auto-format codebase with Prettier
Applied formatting to 1487+ files using pnpm format:write - TypeScript/JavaScript files - Svelte components - Astro pages - JSON configs - Markdown docs 13 files still need manual review (Astro JSX comments)
This commit is contained in:
parent
0241f5554c
commit
d36b321d9d
3952 changed files with 661498 additions and 739751 deletions
|
|
@ -6,154 +6,220 @@
|
|||
* Supported language codes
|
||||
*/
|
||||
export type LanguageCode =
|
||||
| 'en' | 'de' | 'fr' | 'es' | 'it' | 'pt' | 'nl' | 'pl' | 'ru' | 'ja'
|
||||
| 'ko' | 'zh' | 'ar' | 'hi' | 'bn' | 'ur' | 'id' | 'fa' | 'vi' | 'th'
|
||||
| 'tr' | 'uk' | 'cs' | 'da' | 'fi' | 'sv' | 'nb' | 'el' | 'hu' | 'ro'
|
||||
| 'bg' | 'hr' | 'sk' | 'sl' | 'sr' | 'lt' | 'lv' | 'et' | 'mt' | 'ga'
|
||||
| 'tl' | 'ms' | 'he' | 'af' | 'pt-BR' | 'es-MX';
|
||||
| 'en'
|
||||
| 'de'
|
||||
| 'fr'
|
||||
| 'es'
|
||||
| 'it'
|
||||
| 'pt'
|
||||
| 'nl'
|
||||
| 'pl'
|
||||
| 'ru'
|
||||
| 'ja'
|
||||
| 'ko'
|
||||
| 'zh'
|
||||
| 'ar'
|
||||
| 'hi'
|
||||
| 'bn'
|
||||
| 'ur'
|
||||
| 'id'
|
||||
| 'fa'
|
||||
| 'vi'
|
||||
| 'th'
|
||||
| 'tr'
|
||||
| 'uk'
|
||||
| 'cs'
|
||||
| 'da'
|
||||
| 'fi'
|
||||
| 'sv'
|
||||
| 'nb'
|
||||
| 'el'
|
||||
| 'hu'
|
||||
| 'ro'
|
||||
| 'bg'
|
||||
| 'hr'
|
||||
| 'sk'
|
||||
| 'sl'
|
||||
| 'sr'
|
||||
| 'lt'
|
||||
| 'lv'
|
||||
| 'et'
|
||||
| 'mt'
|
||||
| 'ga'
|
||||
| 'tl'
|
||||
| 'ms'
|
||||
| 'he'
|
||||
| 'af'
|
||||
| 'pt-BR'
|
||||
| 'es-MX';
|
||||
|
||||
/**
|
||||
* Language metadata
|
||||
*/
|
||||
export interface LanguageInfo {
|
||||
/** Native name of the language */
|
||||
nativeName: string;
|
||||
/** English name of the language */
|
||||
englishName: string;
|
||||
/** Flag emoji */
|
||||
emoji: string;
|
||||
/** RTL language */
|
||||
rtl?: boolean;
|
||||
/** Native name of the language */
|
||||
nativeName: string;
|
||||
/** English name of the language */
|
||||
englishName: string;
|
||||
/** Flag emoji */
|
||||
emoji: string;
|
||||
/** RTL language */
|
||||
rtl?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete language definitions
|
||||
*/
|
||||
export const LANGUAGES: Record<LanguageCode, LanguageInfo> = {
|
||||
// Major languages
|
||||
en: { nativeName: 'English', englishName: 'English', emoji: '🇬🇧' },
|
||||
de: { nativeName: 'Deutsch', englishName: 'German', emoji: '🇩🇪' },
|
||||
fr: { nativeName: 'Français', englishName: 'French', emoji: '🇫🇷' },
|
||||
es: { nativeName: 'Español', englishName: 'Spanish', emoji: '🇪🇸' },
|
||||
it: { nativeName: 'Italiano', englishName: 'Italian', emoji: '🇮🇹' },
|
||||
pt: { nativeName: 'Português', englishName: 'Portuguese', emoji: '🇵🇹' },
|
||||
nl: { nativeName: 'Nederlands', englishName: 'Dutch', emoji: '🇳🇱' },
|
||||
pl: { nativeName: 'Polski', englishName: 'Polish', emoji: '🇵🇱' },
|
||||
ru: { nativeName: 'Русский', englishName: 'Russian', emoji: '🇷🇺' },
|
||||
// Major languages
|
||||
en: { nativeName: 'English', englishName: 'English', emoji: '🇬🇧' },
|
||||
de: { nativeName: 'Deutsch', englishName: 'German', emoji: '🇩🇪' },
|
||||
fr: { nativeName: 'Français', englishName: 'French', emoji: '🇫🇷' },
|
||||
es: { nativeName: 'Español', englishName: 'Spanish', emoji: '🇪🇸' },
|
||||
it: { nativeName: 'Italiano', englishName: 'Italian', emoji: '🇮🇹' },
|
||||
pt: { nativeName: 'Português', englishName: 'Portuguese', emoji: '🇵🇹' },
|
||||
nl: { nativeName: 'Nederlands', englishName: 'Dutch', emoji: '🇳🇱' },
|
||||
pl: { nativeName: 'Polski', englishName: 'Polish', emoji: '🇵🇱' },
|
||||
ru: { nativeName: 'Русский', englishName: 'Russian', emoji: '🇷🇺' },
|
||||
|
||||
// Asian languages
|
||||
ja: { nativeName: '日本語', englishName: 'Japanese', emoji: '🇯🇵' },
|
||||
ko: { nativeName: '한국어', englishName: 'Korean', emoji: '🇰🇷' },
|
||||
zh: { nativeName: '中文', englishName: 'Chinese', emoji: '🇨🇳' },
|
||||
vi: { nativeName: 'Tiếng Việt', englishName: 'Vietnamese', emoji: '🇻🇳' },
|
||||
th: { nativeName: 'ไทย', englishName: 'Thai', emoji: '🇹🇭' },
|
||||
id: { nativeName: 'Bahasa Indonesia', englishName: 'Indonesian', emoji: '🇮🇩' },
|
||||
ms: { nativeName: 'Bahasa Melayu', englishName: 'Malay', emoji: '🇲🇾' },
|
||||
tl: { nativeName: 'Filipino', englishName: 'Filipino', emoji: '🇵🇭' },
|
||||
// Asian languages
|
||||
ja: { nativeName: '日本語', englishName: 'Japanese', emoji: '🇯🇵' },
|
||||
ko: { nativeName: '한국어', englishName: 'Korean', emoji: '🇰🇷' },
|
||||
zh: { nativeName: '中文', englishName: 'Chinese', emoji: '🇨🇳' },
|
||||
vi: { nativeName: 'Tiếng Việt', englishName: 'Vietnamese', emoji: '🇻🇳' },
|
||||
th: { nativeName: 'ไทย', englishName: 'Thai', emoji: '🇹🇭' },
|
||||
id: { nativeName: 'Bahasa Indonesia', englishName: 'Indonesian', emoji: '🇮🇩' },
|
||||
ms: { nativeName: 'Bahasa Melayu', englishName: 'Malay', emoji: '🇲🇾' },
|
||||
tl: { nativeName: 'Filipino', englishName: 'Filipino', emoji: '🇵🇭' },
|
||||
|
||||
// South Asian languages
|
||||
hi: { nativeName: 'हिन्दी', englishName: 'Hindi', emoji: '🇮🇳' },
|
||||
bn: { nativeName: 'বাংলা', englishName: 'Bengali', emoji: '🇧🇩' },
|
||||
ur: { nativeName: 'اردو', englishName: 'Urdu', emoji: '🇵🇰', rtl: true },
|
||||
// South Asian languages
|
||||
hi: { nativeName: 'हिन्दी', englishName: 'Hindi', emoji: '🇮🇳' },
|
||||
bn: { nativeName: 'বাংলা', englishName: 'Bengali', emoji: '🇧🇩' },
|
||||
ur: { nativeName: 'اردو', englishName: 'Urdu', emoji: '🇵🇰', rtl: true },
|
||||
|
||||
// Middle Eastern languages
|
||||
ar: { nativeName: 'العربية', englishName: 'Arabic', emoji: '🇦🇪', rtl: true },
|
||||
fa: { nativeName: 'فارسی', englishName: 'Persian', emoji: '🇮🇷', rtl: true },
|
||||
he: { nativeName: 'עברית', englishName: 'Hebrew', emoji: '🇮🇱', rtl: true },
|
||||
tr: { nativeName: 'Türkçe', englishName: 'Turkish', emoji: '🇹🇷' },
|
||||
// Middle Eastern languages
|
||||
ar: { nativeName: 'العربية', englishName: 'Arabic', emoji: '🇦🇪', rtl: true },
|
||||
fa: { nativeName: 'فارسی', englishName: 'Persian', emoji: '🇮🇷', rtl: true },
|
||||
he: { nativeName: 'עברית', englishName: 'Hebrew', emoji: '🇮🇱', rtl: true },
|
||||
tr: { nativeName: 'Türkçe', englishName: 'Turkish', emoji: '🇹🇷' },
|
||||
|
||||
// Nordic languages
|
||||
sv: { nativeName: 'Svenska', englishName: 'Swedish', emoji: '🇸🇪' },
|
||||
da: { nativeName: 'Dansk', englishName: 'Danish', emoji: '🇩🇰' },
|
||||
fi: { nativeName: 'Suomi', englishName: 'Finnish', emoji: '🇫🇮' },
|
||||
nb: { nativeName: 'Norsk', englishName: 'Norwegian', emoji: '🇳🇴' },
|
||||
// Nordic languages
|
||||
sv: { nativeName: 'Svenska', englishName: 'Swedish', emoji: '🇸🇪' },
|
||||
da: { nativeName: 'Dansk', englishName: 'Danish', emoji: '🇩🇰' },
|
||||
fi: { nativeName: 'Suomi', englishName: 'Finnish', emoji: '🇫🇮' },
|
||||
nb: { nativeName: 'Norsk', englishName: 'Norwegian', emoji: '🇳🇴' },
|
||||
|
||||
// Eastern European languages
|
||||
uk: { nativeName: 'Українська', englishName: 'Ukrainian', emoji: '🇺🇦' },
|
||||
cs: { nativeName: 'Čeština', englishName: 'Czech', emoji: '🇨🇿' },
|
||||
hu: { nativeName: 'Magyar', englishName: 'Hungarian', emoji: '🇭🇺' },
|
||||
ro: { nativeName: 'Română', englishName: 'Romanian', emoji: '🇷🇴' },
|
||||
bg: { nativeName: 'Български', englishName: 'Bulgarian', emoji: '🇧🇬' },
|
||||
hr: { nativeName: 'Hrvatski', englishName: 'Croatian', emoji: '🇭🇷' },
|
||||
sk: { nativeName: 'Slovenčina', englishName: 'Slovak', emoji: '🇸🇰' },
|
||||
sl: { nativeName: 'Slovenščina', englishName: 'Slovenian', emoji: '🇸🇮' },
|
||||
sr: { nativeName: 'Српски', englishName: 'Serbian', emoji: '🇷🇸' },
|
||||
// Eastern European languages
|
||||
uk: { nativeName: 'Українська', englishName: 'Ukrainian', emoji: '🇺🇦' },
|
||||
cs: { nativeName: 'Čeština', englishName: 'Czech', emoji: '🇨🇿' },
|
||||
hu: { nativeName: 'Magyar', englishName: 'Hungarian', emoji: '🇭🇺' },
|
||||
ro: { nativeName: 'Română', englishName: 'Romanian', emoji: '🇷🇴' },
|
||||
bg: { nativeName: 'Български', englishName: 'Bulgarian', emoji: '🇧🇬' },
|
||||
hr: { nativeName: 'Hrvatski', englishName: 'Croatian', emoji: '🇭🇷' },
|
||||
sk: { nativeName: 'Slovenčina', englishName: 'Slovak', emoji: '🇸🇰' },
|
||||
sl: { nativeName: 'Slovenščina', englishName: 'Slovenian', emoji: '🇸🇮' },
|
||||
sr: { nativeName: 'Српски', englishName: 'Serbian', emoji: '🇷🇸' },
|
||||
|
||||
// Baltic languages
|
||||
lt: { nativeName: 'Lietuvių', englishName: 'Lithuanian', emoji: '🇱🇹' },
|
||||
lv: { nativeName: 'Latviešu', englishName: 'Latvian', emoji: '🇱🇻' },
|
||||
et: { nativeName: 'Eesti', englishName: 'Estonian', emoji: '🇪🇪' },
|
||||
// Baltic languages
|
||||
lt: { nativeName: 'Lietuvių', englishName: 'Lithuanian', emoji: '🇱🇹' },
|
||||
lv: { nativeName: 'Latviešu', englishName: 'Latvian', emoji: '🇱🇻' },
|
||||
et: { nativeName: 'Eesti', englishName: 'Estonian', emoji: '🇪🇪' },
|
||||
|
||||
// Other European languages
|
||||
el: { nativeName: 'Ελληνικά', englishName: 'Greek', emoji: '🇬🇷' },
|
||||
mt: { nativeName: 'Malti', englishName: 'Maltese', emoji: '🇲🇹' },
|
||||
ga: { nativeName: 'Gaeilge', englishName: 'Irish', emoji: '🇮🇪' },
|
||||
// Other European languages
|
||||
el: { nativeName: 'Ελληνικά', englishName: 'Greek', emoji: '🇬🇷' },
|
||||
mt: { nativeName: 'Malti', englishName: 'Maltese', emoji: '🇲🇹' },
|
||||
ga: { nativeName: 'Gaeilge', englishName: 'Irish', emoji: '🇮🇪' },
|
||||
|
||||
// African languages
|
||||
af: { nativeName: 'Afrikaans', englishName: 'Afrikaans', emoji: '🇿🇦' },
|
||||
// African languages
|
||||
af: { nativeName: 'Afrikaans', englishName: 'Afrikaans', emoji: '🇿🇦' },
|
||||
|
||||
// Regional variants
|
||||
'pt-BR': { nativeName: 'Português (Brasil)', englishName: 'Portuguese (Brazil)', emoji: '🇧🇷' },
|
||||
'es-MX': { nativeName: 'Español (México)', englishName: 'Spanish (Mexico)', emoji: '🇲🇽' },
|
||||
// Regional variants
|
||||
'pt-BR': { nativeName: 'Português (Brasil)', englishName: 'Portuguese (Brazil)', emoji: '🇧🇷' },
|
||||
'es-MX': { nativeName: 'Español (México)', englishName: 'Spanish (Mexico)', emoji: '🇲🇽' },
|
||||
};
|
||||
|
||||
/**
|
||||
* Get list of all language codes
|
||||
*/
|
||||
export function getLanguageCodes(): LanguageCode[] {
|
||||
return Object.keys(LANGUAGES) as LanguageCode[];
|
||||
return Object.keys(LANGUAGES) as LanguageCode[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get language info by code
|
||||
*/
|
||||
export function getLanguageInfo(code: string): LanguageInfo | undefined {
|
||||
return LANGUAGES[code as LanguageCode];
|
||||
return LANGUAGES[code as LanguageCode];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a language code is supported
|
||||
*/
|
||||
export function isLanguageSupported(code: string): code is LanguageCode {
|
||||
return code in LANGUAGES;
|
||||
return code in LANGUAGES;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a language is RTL
|
||||
*/
|
||||
export function isRTL(code: string): boolean {
|
||||
const info = LANGUAGES[code as LanguageCode];
|
||||
return info?.rtl === true;
|
||||
const info = LANGUAGES[code as LanguageCode];
|
||||
return info?.rtl === true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get display name for a language (native name with emoji)
|
||||
*/
|
||||
export function getLanguageDisplayName(code: string): string {
|
||||
const info = LANGUAGES[code as LanguageCode];
|
||||
if (!info) return code;
|
||||
return `${info.emoji} ${info.nativeName}`;
|
||||
const info = LANGUAGES[code as LanguageCode];
|
||||
if (!info) return code;
|
||||
return `${info.emoji} ${info.nativeName}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Common locale groups for filtering
|
||||
*/
|
||||
export const LOCALE_GROUPS = {
|
||||
/** European Union official languages */
|
||||
eu: ['en', 'de', 'fr', 'es', 'it', 'pt', 'nl', 'pl', 'cs', 'da', 'fi', 'sv', 'el', 'hu', 'ro', 'bg', 'hr', 'sk', 'sl', 'lt', 'lv', 'et', 'mt', 'ga'] as LanguageCode[],
|
||||
/** Major world languages */
|
||||
major: ['en', 'de', 'fr', 'es', 'it', 'pt', 'ru', 'ja', 'ko', 'zh', 'ar'] as LanguageCode[],
|
||||
/** DACH region (German-speaking) */
|
||||
dach: ['de'] as LanguageCode[],
|
||||
/** Nordic countries */
|
||||
nordic: ['sv', 'da', 'fi', 'nb'] as LanguageCode[],
|
||||
/** RTL languages */
|
||||
rtl: ['ar', 'fa', 'he', 'ur'] as LanguageCode[],
|
||||
/** European Union official languages */
|
||||
eu: [
|
||||
'en',
|
||||
'de',
|
||||
'fr',
|
||||
'es',
|
||||
'it',
|
||||
'pt',
|
||||
'nl',
|
||||
'pl',
|
||||
'cs',
|
||||
'da',
|
||||
'fi',
|
||||
'sv',
|
||||
'el',
|
||||
'hu',
|
||||
'ro',
|
||||
'bg',
|
||||
'hr',
|
||||
'sk',
|
||||
'sl',
|
||||
'lt',
|
||||
'lv',
|
||||
'et',
|
||||
'mt',
|
||||
'ga',
|
||||
] as LanguageCode[],
|
||||
/** Major world languages */
|
||||
major: ['en', 'de', 'fr', 'es', 'it', 'pt', 'ru', 'ja', 'ko', 'zh', 'ar'] as LanguageCode[],
|
||||
/** DACH region (German-speaking) */
|
||||
dach: ['de'] as LanguageCode[],
|
||||
/** Nordic countries */
|
||||
nordic: ['sv', 'da', 'fi', 'nb'] as LanguageCode[],
|
||||
/** RTL languages */
|
||||
rtl: ['ar', 'fa', 'he', 'ur'] as LanguageCode[],
|
||||
};
|
||||
|
||||
/**
|
||||
* Get languages by group
|
||||
*/
|
||||
export function getLanguagesByGroup(group: keyof typeof LOCALE_GROUPS): LanguageCode[] {
|
||||
return LOCALE_GROUPS[group];
|
||||
return LOCALE_GROUPS[group];
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue