woaru
Version:
Universal Project Setup Autopilot - Analyze and automatically configure development tools for ANY programming language
151 lines β’ 4.57 kB
JavaScript
import i18next from 'i18next';
import { ConfigManager } from './ConfigManager.js';
import { bundledTranslations, } from '../generated/translations.js';
export const SUPPORTED_LANGUAGES = Object.keys(bundledTranslations);
export const LANGUAGE_NAMES = {
en: 'πΊπΈ English',
de: 'π©πͺ Deutsch',
};
// Track initialization state
let isI18nInitialized = false;
/**
* Initialize i18next synchronously with embedded translations
* This function is now synchronous and uses pre-bundled translations
*/
export function initializeI18n() {
// Skip initialization if already initialized
if (isI18nInitialized) {
return;
}
try {
// Get user's preferred language synchronously
const userLanguage = getUserLanguageSync();
// Initialize i18next synchronously with embedded translations
i18next.init({
lng: userLanguage,
fallbackLng: 'en',
debug: false,
// Namespace configuration
ns: ['translation'],
defaultNS: 'translation',
// Interpolation options
interpolation: {
escapeValue: false,
},
// Use the pre-bundled translations
resources: bundledTranslations,
});
isI18nInitialized = true;
}
catch (error) {
console.error('[i18n] Failed to initialize i18next:', error);
// Fall back to English and continue
i18next.init({
lng: 'en',
fallbackLng: 'en',
debug: false,
ns: ['translation'],
defaultNS: 'translation',
interpolation: {
escapeValue: false,
},
resources: {
en: bundledTranslations.en || { translation: {} },
},
});
isI18nInitialized = true;
}
}
/**
* Get the user's preferred language from configuration (synchronous)
*/
function getUserLanguageSync() {
try {
// For now, we'll use a simple fallback to English
// In the future, we could implement synchronous config reading if needed
// For most use cases, English as default is fine until user explicitly sets language
return 'en';
}
catch {
// If anything fails, fall back to English
}
return 'en'; // Default fallback
}
/**
* Get the user's preferred language from configuration (async version for compatibility)
*/
export async function getUserLanguage() {
try {
const configManager = ConfigManager.getInstance();
const userConfig = await configManager.loadUserConfig();
if (userConfig &&
userConfig.language &&
SUPPORTED_LANGUAGES.includes(userConfig.language)) {
return userConfig.language;
}
}
catch {
// If config doesn't exist or is invalid, fall back to English
}
return 'en'; // Default fallback
}
/**
* Set the user's preferred language and save to configuration
*/
export async function setUserLanguage(language) {
if (!SUPPORTED_LANGUAGES.includes(language)) {
throw new Error(`Unsupported language: ${language}`);
}
const configManager = ConfigManager.getInstance();
await configManager.setUserLanguage(language);
// Change the current i18next language
await i18next.changeLanguage(language);
}
/**
* Check if this is the first time WOARU is being run
*/
export async function isFirstRun() {
try {
const configManager = ConfigManager.getInstance();
const userConfig = await configManager.loadUserConfig();
// If user config exists and has language set, it's not first run
return !userConfig || !userConfig.language;
}
catch {
// If config can't be loaded, assume it's first run
return true;
}
}
/**
* Get translation function (shorthand)
*/
export function t(key, options) {
if (!isI18nInitialized) {
// Initialize if not done yet
initializeI18n();
}
const result = i18next.t(key, options);
return result;
}
/**
* Get current language
*/
export function getCurrentLanguage() {
if (!isI18nInitialized) {
initializeI18n();
}
return i18next.language;
}
/**
* Check if i18next is initialized
*/
export function isInitialized() {
return isI18nInitialized && i18next.isInitialized;
}
/**
* Get language instruction for AI prompts
*/
export function getAILanguageInstruction() {
return t('ai_prompts.language_instruction');
}
//# sourceMappingURL=i18n.js.map