mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-18 18:01:23 +02:00
Projects included: - maerchenzauber (NestJS backend + Expo mobile + SvelteKit web + Astro landing) - manacore (Expo mobile + SvelteKit web + Astro landing) - manadeck (NestJS backend + Expo mobile + SvelteKit web) - memoro (Expo mobile + SvelteKit web + Astro landing) This commit preserves the current state before monorepo restructuring. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
94 lines
No EOL
7.2 KiB
TypeScript
94 lines
No EOL
7.2 KiB
TypeScript
/**
|
|
* Supported languages for Gemini 2.0 Flash translation
|
|
* Based on official Google documentation: https://ai.google.dev/gemini-api/docs/models
|
|
* Last updated: 2025-01-22
|
|
*/
|
|
|
|
import { LANGUAGES } from '~/features/i18n';
|
|
|
|
// Gemini 2.0 Flash supported languages for translation
|
|
export const GEMINI_TRANSLATION_LANGUAGES = {
|
|
'ar': { nativeName: LANGUAGES.ar?.nativeName || 'العربية', emoji: LANGUAGES.ar?.emoji || '🇸🇦' },
|
|
'bn': { nativeName: LANGUAGES.bn?.nativeName || 'বাংলা', emoji: LANGUAGES.bn?.emoji || '🇧🇩' },
|
|
'bg': { nativeName: LANGUAGES.bg?.nativeName || 'Български', emoji: LANGUAGES.bg?.emoji || '🇧🇬' },
|
|
'zh': { nativeName: LANGUAGES.zh?.nativeName || '中文', emoji: LANGUAGES.zh?.emoji || '🇨🇳' },
|
|
'hr': { nativeName: LANGUAGES.hr?.nativeName || 'Hrvatski', emoji: LANGUAGES.hr?.emoji || '🇭🇷' },
|
|
'cs': { nativeName: LANGUAGES.cs?.nativeName || 'Čeština', emoji: LANGUAGES.cs?.emoji || '🇨🇿' },
|
|
'da': { nativeName: LANGUAGES.da?.nativeName || 'Dansk', emoji: LANGUAGES.da?.emoji || '🇩🇰' },
|
|
'nl': { nativeName: LANGUAGES.nl?.nativeName || 'Nederlands', emoji: LANGUAGES.nl?.emoji || '🇳🇱' },
|
|
'en': { nativeName: LANGUAGES.en?.nativeName || 'English', emoji: LANGUAGES.en?.emoji || '🇺🇸' },
|
|
'et': { nativeName: LANGUAGES.et?.nativeName || 'Eesti', emoji: LANGUAGES.et?.emoji || '🇪🇪' },
|
|
'fi': { nativeName: LANGUAGES.fi?.nativeName || 'Suomi', emoji: LANGUAGES.fi?.emoji || '🇫🇮' },
|
|
'fr': { nativeName: LANGUAGES.fr?.nativeName || 'Français', emoji: LANGUAGES.fr?.emoji || '🇫🇷' },
|
|
'de': { nativeName: LANGUAGES.de?.nativeName || 'Deutsch', emoji: LANGUAGES.de?.emoji || '🇩🇪' },
|
|
'el': { nativeName: LANGUAGES.el?.nativeName || 'Ελληνικά', emoji: LANGUAGES.el?.emoji || '🇬🇷' },
|
|
'iw': { nativeName: LANGUAGES.he?.nativeName || 'עברית', emoji: LANGUAGES.he?.emoji || '🇮🇱' }, // Hebrew - Gemini uses 'iw' code
|
|
'hi': { nativeName: LANGUAGES.hi?.nativeName || 'हिन्दी', emoji: LANGUAGES.hi?.emoji || '🇮🇳' },
|
|
'hu': { nativeName: LANGUAGES.hu?.nativeName || 'Magyar', emoji: LANGUAGES.hu?.emoji || '🇭🇺' },
|
|
'id': { nativeName: LANGUAGES.id?.nativeName || 'Bahasa Indonesia', emoji: LANGUAGES.id?.emoji || '🇮🇩' },
|
|
'it': { nativeName: LANGUAGES.it?.nativeName || 'Italiano', emoji: LANGUAGES.it?.emoji || '🇮🇹' },
|
|
'ja': { nativeName: LANGUAGES.ja?.nativeName || '日本語', emoji: LANGUAGES.ja?.emoji || '🇯🇵' },
|
|
'ko': { nativeName: LANGUAGES.ko?.nativeName || '한국어', emoji: LANGUAGES.ko?.emoji || '🇰🇷' },
|
|
'lv': { nativeName: LANGUAGES.lv?.nativeName || 'Latviešu', emoji: LANGUAGES.lv?.emoji || '🇱🇻' },
|
|
'lt': { nativeName: LANGUAGES.lt?.nativeName || 'Lietuvių', emoji: LANGUAGES.lt?.emoji || '🇱🇹' },
|
|
'no': { nativeName: LANGUAGES.nb?.nativeName || 'Norsk', emoji: LANGUAGES.nb?.emoji || '🇳🇴' }, // Norwegian
|
|
'pl': { nativeName: LANGUAGES.pl?.nativeName || 'Polski', emoji: LANGUAGES.pl?.emoji || '🇵🇱' },
|
|
'pt': { nativeName: LANGUAGES.pt?.nativeName || 'Português', emoji: LANGUAGES.pt?.emoji || '🇵🇹' },
|
|
'ro': { nativeName: LANGUAGES.ro?.nativeName || 'Română', emoji: LANGUAGES.ro?.emoji || '🇷🇴' },
|
|
'ru': { nativeName: LANGUAGES.ru?.nativeName || 'Русский', emoji: LANGUAGES.ru?.emoji || '🇷🇺' },
|
|
'sr': { nativeName: LANGUAGES.sr?.nativeName || 'Српски', emoji: LANGUAGES.sr?.emoji || '🇷🇸' },
|
|
'sk': { nativeName: LANGUAGES.sk?.nativeName || 'Slovenčina', emoji: LANGUAGES.sk?.emoji || '🇸🇰' },
|
|
'sl': { nativeName: LANGUAGES.sl?.nativeName || 'Slovenščina', emoji: LANGUAGES.sl?.emoji || '🇸🇮' },
|
|
'es': { nativeName: LANGUAGES.es?.nativeName || 'Español', emoji: LANGUAGES.es?.emoji || '🇪🇸' },
|
|
'sw': { nativeName: LANGUAGES.sw?.nativeName || 'Kiswahili', emoji: LANGUAGES.sw?.emoji || '🇰🇪' },
|
|
'sv': { nativeName: LANGUAGES.sv?.nativeName || 'Svenska', emoji: LANGUAGES.sv?.emoji || '🇸🇪' },
|
|
'th': { nativeName: LANGUAGES.th?.nativeName || 'ไทย', emoji: LANGUAGES.th?.emoji || '🇹🇭' },
|
|
'tr': { nativeName: LANGUAGES.tr?.nativeName || 'Türkçe', emoji: LANGUAGES.tr?.emoji || '🇹🇷' },
|
|
'uk': { nativeName: LANGUAGES.uk?.nativeName || 'Українська', emoji: LANGUAGES.uk?.emoji || '🇺🇦' },
|
|
'vi': { nativeName: LANGUAGES.vi?.nativeName || 'Tiếng Việt', emoji: LANGUAGES.vi?.emoji || '🇻🇳' }
|
|
} as const;
|
|
|
|
// Additional languages that were in the original TranslateLanguageModal but not officially listed by Gemini
|
|
// These might work but are not guaranteed
|
|
export const ADDITIONAL_TRANSLATION_LANGUAGES = {
|
|
'af': { nativeName: LANGUAGES.af?.nativeName || 'Afrikaans', emoji: LANGUAGES.af?.emoji || '🇿🇦' },
|
|
'sq': { nativeName: LANGUAGES.sq?.nativeName || 'Shqip', emoji: LANGUAGES.sq?.emoji || '🇦🇱' },
|
|
'am': { nativeName: LANGUAGES.am?.nativeName || 'አማርኛ', emoji: LANGUAGES.am?.emoji || '🇪🇹' },
|
|
'hy': { nativeName: LANGUAGES.hy?.nativeName || 'Հայերեն', emoji: LANGUAGES.hy?.emoji || '🇦🇲' },
|
|
'as': { nativeName: LANGUAGES.as?.nativeName || 'অসমীয়া', emoji: LANGUAGES.as?.emoji || '🇮🇳' },
|
|
'az': { nativeName: LANGUAGES.az?.nativeName || 'Azərbaycan', emoji: LANGUAGES.az?.emoji || '🇦🇿' },
|
|
'eu': { nativeName: LANGUAGES.eu?.nativeName || 'Euskara', emoji: LANGUAGES.eu?.emoji || '🇪🇸' },
|
|
'be': { nativeName: LANGUAGES.be?.nativeName || 'Беларуская', emoji: LANGUAGES.be?.emoji || '🇧🇾' },
|
|
'bs': { nativeName: LANGUAGES.bs?.nativeName || 'Bosanski', emoji: LANGUAGES.bs?.emoji || '🇧🇦' },
|
|
'ca': { nativeName: LANGUAGES.ca?.nativeName || 'Català', emoji: LANGUAGES.ca?.emoji || '🇪🇸' },
|
|
'ceb': { nativeName: 'Cebuano', emoji: '🇵🇭' },
|
|
'co': { nativeName: 'Corsu', emoji: '🇫🇷' },
|
|
'dv': { nativeName: 'ދިވެހި', emoji: '🇲🇻' },
|
|
'eo': { nativeName: 'Esperanto', emoji: '🌍' },
|
|
'tl': { nativeName: LANGUAGES.tl?.nativeName || 'Filipino', emoji: LANGUAGES.tl?.emoji || '🇵🇭' },
|
|
'ga': { nativeName: LANGUAGES.ga?.nativeName || 'Gaeilge', emoji: LANGUAGES.ga?.emoji || '🇮🇪' },
|
|
'mt': { nativeName: LANGUAGES.mt?.nativeName || 'Malti', emoji: LANGUAGES.mt?.emoji || '🇲🇹' },
|
|
'fa': { nativeName: LANGUAGES.fa?.nativeName || 'فارسی', emoji: LANGUAGES.fa?.emoji || '🇮🇷' },
|
|
'ur': { nativeName: LANGUAGES.ur?.nativeName || 'اردو', emoji: LANGUAGES.ur?.emoji || '🇵🇰' }
|
|
} as const;
|
|
|
|
// Combined list of all supported languages (Gemini official + additional)
|
|
export const ALL_TRANSLATION_LANGUAGES = {
|
|
...GEMINI_TRANSLATION_LANGUAGES,
|
|
...ADDITIONAL_TRANSLATION_LANGUAGES
|
|
} as const;
|
|
|
|
// Type definitions
|
|
export type GeminiLanguageCode = keyof typeof GEMINI_TRANSLATION_LANGUAGES;
|
|
export type AdditionalLanguageCode = keyof typeof ADDITIONAL_TRANSLATION_LANGUAGES;
|
|
export type TranslationLanguageCode = keyof typeof ALL_TRANSLATION_LANGUAGES;
|
|
|
|
// Helper function to check if a language is officially supported by Gemini
|
|
export const isOfficiallySupported = (languageCode: string): boolean => {
|
|
return languageCode in GEMINI_TRANSLATION_LANGUAGES;
|
|
};
|
|
|
|
// Helper function to get language info
|
|
export const getTranslationLanguageInfo = (languageCode: string) => {
|
|
return ALL_TRANSLATION_LANGUAGES[languageCode as TranslationLanguageCode] || null;
|
|
}; |