rag-flex

Public

Forked from yongwei/rag-flex

docs / I18N.md

RAG-Flex Internationalization System

繁體中文 | 日本語

🌍 Dual-Layer Language Mechanism

RAG-Flex uses a dual-layer language mechanism to provide a truly multilingual experience:

1️⃣ Configuration UI Language (System Auto-detected)

Determined by system language

  • 🔍 Auto-detection: Automatically detects system language when plugin starts
  • 🎨 UI Display: All configuration labels use the detected language
  • 🔄 How to Switch: Change your operating system language settings, then restart the plugin

Examples:

  • System language is Traditional Chinese → Configuration UI displays in Chinese
  • System language is English → Configuration UI displays in English

2️⃣ Message Language (User Selectable)

Selected by user in settings

  • ⚙️ Configurable: Choose "Message Language" in plugin settings
  • 💬 Scope: All runtime status messages, error messages, and LLM system prompts
  • 🔄 Immediate Effect: Changes apply immediately to new operations

Examples:

  • System is English, but select "繁體中文 (zh-TW)"
    • Configuration UI: English ✅
    • Runtime messages: Traditional Chinese ✅

📊 Language Scope Comparison

ComponentLanguage UsedHow to SwitchWhen Applied
Configuration UI LabelsSystem LanguageChange system language + restart pluginPlugin startup
Message Language SelectorSystem LanguageChange system language + restart pluginPlugin startup
Other Config LabelsSystem LanguageChange system language + restart pluginPlugin startup
Status MessagesMessage LanguageSelect in settingsImmediately
Error MessagesMessage LanguageSelect in settingsImmediately
LLM System PromptsMessage LanguageSelect in settingsImmediately

🎯 Use Cases

Scenario 1: Fully Monolingual Environment

Situation: System is Traditional Chinese, want full Chinese experience

Setup:

  • ✅ System Language: Traditional Chinese
  • ✅ Message Language: Select "繁體中文 (zh-TW)"

Result:

  • Configuration UI: Traditional Chinese
  • Runtime Messages: Traditional Chinese

Scenario 2: Mixed Language Environment

Situation: System is English, but want Chinese messages

Setup:

  • ✅ System Language: English
  • ✅ Message Language: Select "繁體中文 (zh-TW)"

Result:

  • Configuration UI: English
  • Runtime Messages: Traditional Chinese

Scenario 3: Learning Mode

Situation: Want to see Chinese-English side-by-side for learning technical terms

Setup:

  • ✅ System Language: Any
  • ✅ Message Language: Switch to observe different language expressions

Result:

  • Can switch message language anytime for comparative learning

🔧 Technical Details

Why Can't Configuration UI Switch Dynamically?

This is an LM Studio SDK limitation, not a design flaw:

// Plugin lifecycle
export async function main(context: PluginContext) {
    // 1. Detect system language
    const systemLang = detectSystemLanguage();

    // 2. Generate configuration UI (using system language)
    const config = createDynamicConfig(models, systemLang);

    // 3. Register with LM Studio (configuration UI is now fixed)
    context.withConfigSchematics(config);
    //                          ↑
    //                    Cannot be changed after this
}

SDK Limitations:

  • withConfigSchematics() can only be called once
  • Cannot dynamically update configuration UI after registration
  • No API provided for "configuration UI re-rendering"

Our Solution:

  • ✅ Configuration UI: Follows system language (true localization)
  • ✅ Runtime Messages: User selectable (flexibility)
  • ✅ Combined: Achieves optimal user experience

🌐 System Language Detection Mechanism

Detection Order

  • Environment variable LANG (most common)
  • Environment variable LANGUAGE (fallback)
  • Environment variable LC_ALL (locale override)

Detection Logic

export function detectSystemLanguage(): SupportedLanguage {
    const envLang = process.env.LANG ||
                    process.env.LANGUAGE ||
                    process.env.LC_ALL || "";

    // Traditional Chinese (Taiwan, Hong Kong, Macau)
    if (envLang.includes("zh_TW") ||
        envLang.includes("zh-TW") ||
        envLang.includes("zh_HK")) {
        return "zh-TW";
    }

    // Japanese
    if (envLang.includes("ja") ||
        envLang.includes("jp")) {
        return "ja";
    }

    // Simplified Chinese (temporarily mapped to Traditional, future support)
    if (envLang.includes("zh_CN") ||
        envLang.includes("zh-CN")) {
        return "zh-TW";  // TODO: Add zh-CN support
    }

    // Default to English
    return "en";
}

🔄 How to Change System Language

Windows

  • SettingsTime & LanguageLanguage
  • Add language or set as default
  • Restart application

Environment Variable Setup (Advanced):

set LANG=zh_TW.UTF-8
set LANG=en_US.UTF-8
set LANG=ja_JP.UTF-8

macOS

  • System PreferencesLanguage & Region
  • Add or reorder preferred languages
  • Restart application

Terminal Setup:

export LANG=zh_TW.UTF-8
export LANG=en_US.UTF-8
export LANG=ja_JP.UTF-8

Linux

Temporary Setup (Current Session):

export LANG=zh_TW.UTF-8
lms dev

Permanent Setup:

# Edit ~/.bashrc or ~/.zshrc
echo 'export LANG=zh_TW.UTF-8' >> ~/.bashrc
source ~/.bashrc

📝 Message Language Settings

In LM Studio

  • Open LM Studio
  • Go to Plugin Settings
  • Find RAG-Flex plugin
  • First setting:
    • English system: "Message Language"
    • Chinese system: "訊息語言"
    • Japanese system: "メッセージ言語"
  • Select desired language:
    • English (en)
    • 繁體中文 (zh-TW)
    • 日本語 (ja)

✅ Testing Language Switching

Test Configuration UI Language

  • Switch System Language (Windows/macOS/Linux)
  • Restart Plugin:
    lms dev
    
  • Check Configuration UI: All labels should use system language

Test Message Language

  • In LM Studio: Select different "Message Language"
  • Upload Test File
  • Observe Status Messages:

Select English (en):

Loading embedding model: bge-m3...
Retrieving relevant citations...
Retrieved 5 citations (threshold: 0.4)

Select 繁體中文 (zh-TW):

載入 Embedding 模型: bge-m3...
正在檢索相關片段...
成功檢索到 5 個相關片段 (門檻: 0.4)

Select 日本語 (ja):

埋め込みモデルを読み込み中: bge-m3...
ユーザーのクエリに関連する引用を取得中...
5 件の関連引用を取得しました (しきい値: 0.4)

🎓 Best Practice Recommendations

For General Users

Recommended Configuration:

  • System Language = Message Language
  • Keep both consistent for unified experience

For Bilingual Users

Recommended Configuration:

  • System Language = Primary working language
  • Message Language = Flexible switching based on current task

Advantages:

  • Stable configuration UI
  • Runtime messages can switch as needed
  • Learn Chinese-English technical terms side-by-side

For Developers

Testing Recommendations:

  • Test all system language environments
  • Test all message language options
  • Verify configuration UI displays correctly
  • Verify runtime messages switch correctly

🆘 FAQ

Q: Why doesn't the configuration UI change after switching "Message Language"?

A: This is designed behavior, not a bug.

  • Configuration UI: Determined by system language (fixed at plugin startup)
  • Runtime Messages: Determined by message language (switchable anytime)

To change configuration UI language, change system language and restart plugin.


Q: How do I get a full Chinese experience?

A: Two-step setup:

  • System Language: Set to Traditional Chinese
  • Message Language: Select "繁體中文 (zh-TW)"

After restarting plugin, all content will be in Chinese.


Q: Is Simplified Chinese supported?

A: Not yet, but planned for future versions.

  • Currently supported: English, Traditional Chinese, Japanese
  • Planned support: Simplified Chinese, Korean

For contributing Simplified Chinese translations, see src/locales/README.md.


Q: Can I add other languages?

A: Yes! See:

  • Detailed Guide: src/locales/README.md
  • Traditional Chinese: src/locales/README.zh-TW.md
  • Japanese: src/locales/README.ja.md

Adding a new language takes only 5 steps. Contributions welcome!



💡 Design Philosophy

This dual-layer language mechanism is designed based on these principles:

  • Respect System Settings: Configuration UI follows system language
  • Provide Flexibility: Runtime messages are user-selectable
  • True Localization: Avoid mixed-language interfaces
  • User-Friendly: Clearly explain what each setting does

🙏 Acknowledgments

Thanks to the LM Studio team for providing an excellent plugin SDK that enables us to build this multilingual system.


Last Updated: 2026-01-03 Version: v1.1.0