I18n
13 pages.
A message with a whole-number hole (`$"{n} items"`) may take one text per plural category of its language — CLDR's `zero`, `one`, `two`, `few`…
A timeline, an audit trail or a "why is this here" list is read long after it is written, by readers in other languages. Store WHAT happened — its…
A project's translations are checked-in source: one `locales/<language>.osy` per language, a `translations sv { }` block of `role "source" =>…
The time zones and cultures an app names are a declared, closed set: a `zones { }` and a `cultures { }` block in any model file (not in `app.osy`)…
An app that speaks more than one language tells search engines where each page lives in each one, with nothing written in its source: every public…
A language written right to left (Arabic, Hebrew, Persian, Urdu) mirrors the whole page: every horizontal side a style prop names is a START or END…
`use Osysharp.Localization@0;` gives an app a translator's desk: its words and its `[Translatable]` data in each language it speaks, what is not…
A reader's language is, in order: their explicit choice (a `/sv/` address prefix or a language switch), their own `[PreferredCulture]`, the browser's…
You write your app's words where they belong, in ordinary strings. The compiler finds every one a reader can see — by where it goes, not by what it…
Where the platform names a field itself (a report's field picker, a column heading, a filter read back as a sentence), it says the field's…
`[Translatable]` on a stored `string` member keeps a translation per language, in a table beside its entity. Code reads, filters, sorts and writes…
`app.SourceLanguage = "es";` says the app's own text is written in Spanish. The page's `<html lang>` then says `es` when no translation is served…
There is no platform model. `osy translate --to sv,de` brings `locales/sv.osy` and `locales/de.osy` in step with the source and writes…