managarten/memoro/apps/mobile/config/translationLanguages.ts
Till-JS e7f5f942f3 chore: initial commit - consolidate 4 projects into monorepo
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>
2025-11-22 23:38:24 +01:00

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;
};