Skip to content

Add German (de), French (fr) and Korean (ko) locales; refine Japanese (ja) - #475

Open
Zulfazli (fazelllyyy) wants to merge 75 commits into
microsoft:mainfrom
fazelllyyy:feat/locale-de-fr-ko
Open

Zulfazli (fazelllyyy) wants to merge 75 commits into
microsoft:mainfrom
fazelllyyy:feat/locale-de-fr-ko

Conversation

@fazelllyyy

Copy link
Copy Markdown

Summary

Adds three new frontend locales — German (de), French (fr) and Korean (ko) — following the same pattern as #436 (Hindi), #463 (Indonesian) and the Japanese locale. It also includes refinements to the existing Japanese (ja) translations. Related to #337 (International Language Support).

Changes

  • New locale bundles src/i18n/locales/de/, fr/, ko/ — all 10 domains each (common, upload, chart, model, encoding, messages, navigation, dataLoading, loader, errors) plus per-language index.ts aggregators (including the previously missing de/index.ts)
  • Registered de/fr/ko in src/i18n/locales/index.ts and in the resources map in src/i18n/index.ts (they flow automatically into SUPPORTED_UI_LANGUAGES; the DE/FR/Korean switcher labels already existed in App.tsx)
  • Extended tests/frontend/unit/app/i18nLocales.test.ts with de/fr/ko-vs-en key-parity tests
  • Refined ja translations, including restoring a dropped {{name}} placeholder in setupForm.sessionName
  • No backend change needed — "de", "fr", "ko" already exist in LANGUAGE_DISPLAY_NAMES (agent_language.py), so agent language instructions work out of the box

Translation notes

  • Translation keys untouched; all {{interpolation}} placeholders, _plural forms, and inline HTML tags preserved verbatim
  • Untranslatable identifiers kept in English per TRANSLATION_GUIDE.md (chart types, channel keys, spec values); tooltips translated instead
  • Commands, code samples, paths, profile names, collection names and example e-mail addresses inside `backticks` in loader.json kept literal (e.g. mysql -u <user> …, aws_profile: \default`, collection: `users`, [you@contoso.com]`)
  • chart.vegaLocale localized per language (day/month names, periods); no code change needed in vega-locale.ts
  • New administration / workflow / schedule / setupForm sections (added upstream after these locales were first drafted) fully translated in all three languages

Verification

  • JSON validity: all locale files parse cleanly, no duplicate keys in any file
  • Key parity across bundles (same spread-merge semantics as index.ts): all 8 UI locales resolve to exactly 2217 keys — 0 missing, 0 extra, 0 placeholder/tag/code-sample mismatches
  • New unit tests assert de/fr/ko key alignment with en
  • Note: a full vitest/tsc run was not possible in this environment (no node_modules available); please rely on CI

Add orcarouter to the built-in providers so Data Formulator users can
connect the OrcaRouter AI gateway from the model picker and via
ORCAROUTER_* environment variables, mirroring the existing ollama/openai
wiring. The client routes through LiteLLM's openai provider against the
OrcaRouter base URL, preserving the orcarouter/ model namespace.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…router-provider

feat: add OrcaRouter as a built-in model provider
Adds full Hindi translations for all 10 i18n domain files, following
the translation guide's rules (chart type identifiers, encoding channel
keys, and other computation-bound values stay in English). Registers
hi in the locale index/i18next resources and language switcher labels,
and documents AVAILABLE_LANGUAGES=en,zh,hi as opt-in in .env.template.

Relates to microsoft#337.
folderPathPlaceholder illustrates filesystem path syntax; translating
the segment words broke the example and was inconsistent with how
every other path/URL placeholder in the app is left untranslated.
Add Hindi (hi) locale for frontend i18n
The wrapper embeds user-supplied code, so on a system whose preferred
encoding is not UTF-8 (cp1252 on Windows) writing it raised
UnicodeEncodeError for any non-ASCII character, and silently transcoded
the rest -- the container reads run.py as UTF-8 either way.

Matches the explicit encoding already used elsewhere in the package,
e.g. reasoning_log.py and analyst/skills/__init__.py.
The constant table listed DEFAULT_ROW_LIMIT_EPHEMERAL in dfSlice.tsx.
That identifier does not exist anywhere in the repository, and there is
no separate ephemeral row limit in the frontend.
…istent-ephemeral-row

docs(dev-guides): drop the nonexistent DEFAULT_ROW_LIMIT_EPHEMERAL row
…box-utf8

fix(sandbox): write the docker wrapper script as utf-8
Two problems stopped the SQL Server connector from working.

Concurrent queries failed. The loader keeps one connection and builds a
new cursor for each query. mssql-python does not support MARS, so the
connection accepts only one active statement. Flask serves preview
requests on parallel threads, so the requests overlapped and failed with
"Connection is busy with results for another command". An RLock around
_read_sql, the only place that makes a cursor, makes the requests take
turns. This follows clickhouse_data_loader and mysql_data_loader.

Blank connection parameters did not get their defaults. The loader read
them with params.get(name, default). A saved connector spec holds an
empty string, not a missing key, so the default did not apply. An empty
port produced "SERVER=host,;" and the driver refused it with error 87.
The loader now reads these parameters with `or`.
…eries-and-blank-port

fix(mssql): serialize queries and default blank connection params
aiapienthusiast and others added 30 commits September 24, 2026 20:39
…erence

feat: add Cheaper Inference as a built-in model provider
Translate all 10 frontend locale domains into Bahasa Indonesia (1860 keys, full parity with en). Register the bundle in locales/index.ts and i18n/index.ts, add the 'Bahasa Indonesia' language switcher label, and cover key parity with a unit test.
Add 36 missing Hindi keys and 5 missing Simplified Chinese keys introduced by newer features (semantic model sidebar, connector groups, chart quick actions, virtual sources). All four UI locales now share the same 1860-key set.
Add Indonesian (id) locale + backfill missing hi/zh keys to full parity
Translate all 10 frontend locale domains into Japanese in polite desu/masu form (1860 keys, full parity with en). Register the bundle in locales/index.ts and i18n/index.ts, and cover key parity with a unit test. The language switcher label and backend language support for Japanese already existed, so no changes were needed there.
Calling ensure_table_keys() at the base call sites does not cover loaders that
override the tree builders. SupersetLoader overrides both list_tables_tree() and
search_catalog() and constructs its nodes by hand, and the clickhouse, mysql and
postgresql search_catalog implementations bypass the base method too.

Move the backfill into _tables_to_catalog_tree(), which every tree builder apart
from the Superset overrides funnels through, and apply the key on the Superset
side separately. That path keys on the dataset uuid in list_tables(), so the
uuid is now carried through ls(), _build_dashboard_group_metadata() and
_dataset_meta() to keep both paths producing the same key.
…e-search

fix(data-loader): backfill table_key in tree and search responses
… (ja)

Add three new frontend locale bundles (de, fr, ko), each with all 10 domains at full 2217-key parity with en. Register them in locales/index.ts and i18n/index.ts and cover key parity with unit tests. Also refine existing Japanese translations, including restoring the dropped {{name}} placeholder in setupForm.sessionName.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants