Skip to main content
World Monitor supports 16 languages with fully localized UI, region-specific news feeds, and native right-to-left (RTL) layout support.

Supported Languages

World Monitor is translated into:

🇬🇧 English

Primary language, always loaded

🇫🇷 French

Français

🇪🇸 Spanish

Español

🇩🇪 German

Deutsch

🇮🇹 Italian

Italiano

🇵🇱 Polish

Polski

🇵🇹 Portuguese

Português

🇳🇱 Dutch

Nederlands

🇸🇪 Swedish

Svenska

🇷🇺 Russian

Русский

🇸🇦 Arabic

العربية (RTL)

🇨🇳 Chinese

中文 (Simplified)

🇯🇵 Japanese

日本語

🇹🇷 Turkish

Türkçe

🇹🇭 Thai

ไทย

🇻🇳 Vietnamese

Tiếng Việt

Changing Language

The language selector is located in the header bar (top-right corner):
1

Click the language flag icon

Example: 🇬🇧 (English)
2

Select a language from the dropdown

Languages are listed with native names (e.g., “Français” not “French”).
3

Page reloads with new language

The app reloads to apply the new language across all components.
4

Preference is saved

Your language choice is stored in localStorage and persists across sessions.
Language preference is detected automatically on first load from your browser’s Accept-Language header. You can override this by manually selecting a language.

Lazy Loading

To minimize bundle size, World Monitor uses lazy loading for language files:
  • English is always bundled (fallback language)
  • All other languages are fetched on demand when selected
This means:
  • Initial page load only downloads English (~30KB)
  • Switching to French fetches fr.json (~32KB) dynamically
  • Only the active language is ever loaded
Performance:
  • Language switch: ~100–200ms (network fetch + parse)
  • Subsequent switches: instant (cached in localStorage)

Right-to-Left (RTL) Support

World Monitor has native RTL layout support for:
  • Arabic (ar)
  • Hebrew (planned, not yet implemented)

What Changes in RTL Mode

When you select Arabic:

Text Direction

All text flows right-to-left:
  • Headlines
  • Panel content
  • Button labels
  • Tooltips

Layout Mirroring

UI elements flip horizontally:
  • Navigation menus
  • Panel order
  • Icon positions
  • Scroll bars

Map Controls

Globe controls mirror:
  • Zoom buttons swap sides
  • Layer toggles reposition
  • Legend moves to left

Chart Labels

D3.js charts adapt:
  • Y-axis moves to right
  • X-axis labels flip
  • Legends reposition

Technical Implementation

RTL is applied via the HTML dir attribute:
<!-- LTR (default) -->
<html lang="en">
  ...
</html>

<!-- RTL (Arabic) -->
<html lang="ar" dir="rtl">
  ...
</html>
CSS uses logical properties for automatic mirroring:
/* Instead of: */
margin-left: 10px; /* Doesn't flip in RTL */

/* Use: */
margin-inline-start: 10px; /* Flips to margin-right in RTL */
All World Monitor components use logical CSS properties (inline-start, inline-end, block-start, block-end) for automatic RTL support.

Localized News Feeds

When you change the UI language, World Monitor automatically loads region-specific RSS feeds:

Language-Specific Feed Sets

Seven locales have dedicated native-language news sources:
  • Le Monde
  • Jeune Afrique
  • France24
  • RFI (Radio France Internationale)
  • Ouest-France
Other languages (English, Italian, Dutch, Swedish, Chinese, Japanese) continue to load English-language international feeds (BBC, Reuters, AP, etc.).

AI Translation

World Monitor includes LLM-powered translation for headlines and summaries:
1

News arrives in source language

RSS feeds provide headlines in their original language (English, Arabic, French, etc.).
2

User changes UI language

Example: Switch from English to Spanish.
3

Translation request is sent to LLM

Headlines are batched and sent to your configured LLM provider (Ollama → Groq → OpenRouter).
4

Translated headlines appear in UI

Original: “Russia launches missile strikes”
Translated: “Rusia lanza ataques con misiles”
Caching: Translations are cached for 24 hours to reduce API costs.
AI translation requires a configured LLM provider (Ollama, Groq, or OpenRouter). Without one, headlines appear in their original source language.

World Brief Localization

The AI-generated World Brief adapts to your selected language:
WORLD BRIEF | March 1, 2026

Russia has escalated military operations in Ukraine...
The Federal Reserve signaled potential rate cuts...
Taiwan reported increased PLAAF activity...
The LLM prompt instructs the model to generate summaries in the active UI language.

Date & Number Formatting

World Monitor uses Intl APIs for locale-aware formatting:

Date Formatting

  • March 1, 2026
  • 3/1/2026 2:30 PM
  • 2 hours ago

Number Formatting

  • 1,234,567.89
  • $1,234.56
  • 73.2%
Implementation:
// Automatic locale-aware formatting
const formatter = new Intl.NumberFormat(locale, {
  style: 'currency',
  currency: 'USD'
});

formatter.format(1234.56);
// en-US: "$1,234.56"
// de-DE: "1.234,56 $"
// ar-SA: "١٬٢٣٤٫٥٦ US$"

Language Detection

On first load, World Monitor detects your preferred language using:
  1. localStorage (if you’ve previously selected a language)
  2. Browser Accept-Language header (browser/OS language)
  3. Fallback to English (if detection fails)
Example detection:
  • Browser reports Accept-Language: fr-FR, fr;q=0.9, en;q=0.8
  • World Monitor extracts fr and loads French
  • If French fails to load, falls back to English
Language preference is per-device. If you set French on your laptop, your phone will still default to its own browser language.

Translation Coverage

All UI text is localized, including:
  • ✅ Panel headers and labels
  • ✅ Button text and tooltips
  • ✅ Error messages and warnings
  • ✅ Settings dialogs
  • ✅ Command palette (Cmd+K)
  • ✅ Country names (via Intl.DisplayNames)
  • ✅ Time-relative labels (“2 hours ago”)
  • ❌ News headlines (unless AI translation is enabled)
  • ❌ External content (YouTube captions, Polymarket contracts)

Troubleshooting

The language selector only appears on screens ≥ 768px wide. On mobile, the selector is hidden — language is auto-detected from browser settings.
World Monitor requires a full page reload to apply the new language (i18n limitation). If the reload fails:
  • Check browser console for errors
  • Ensure JavaScript is enabled
  • Try manually reloading (Cmd+R / Ctrl+R)
This indicates missing translation keys. Possible causes:
  • The translation file (fr.json, ar.json, etc.) is incomplete
  • A component isn’t using the t() translation function
  • External content (news headlines) doesn’t support translation
Workaround: Report missing translations via GitHub issues.
RTL mode requires CSS logical properties. If the layout breaks:
  • Check if your browser supports inline-start/inline-end (IE11 doesn’t)
  • Try force-reloading (Cmd+Shift+R / Ctrl+Shift+R)
  • Check browser zoom is 100%
Workaround: Use a modern browser (Chrome 89+, Firefox 68+, Safari 12.1+).
Ensure:
  • You have a configured LLM provider (Ollama, Groq, or OpenRouter)
  • Your API key is valid (check Settings → LLMs)
  • The LLM provider supports your target language
Test: Generate a World Brief — if it’s in English regardless of UI language, translation is failing.
Localized feeds require specific language codes. Check:
  • Your language is one of the 7 with native feeds (French, Arabic, German, Spanish, Turkish, Polish, Russian, Thai, Vietnamese)
  • RSS sources are not blocked by your network/firewall
  • Browser console for CORS or network errors
Workaround: Switch to English to load international feeds.

Build docs developers (and LLMs) love