mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 21:29:40 +02:00
Move inactive projects out of active workspace: - bauntown (community website) - maerchenzauber (AI story generation) - memoro (voice memo app) - news (news aggregation) - nutriphi (nutrition tracking) - reader (reading app) - uload (URL shortener) - wisekeep (AI wisdom extraction) Update CLAUDE.md documentation: - Add presi to active projects - Document archived projects section - Update workspace configuration Archived apps can be re-activated by moving back to apps/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
97 lines
7.1 KiB
TypeScript
97 lines
7.1 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;
|
|
};
|