Merge remote-tracking branch 'fj/main'
# Conflicts: # docs/config.md
This commit is contained in:
commit
0b8266b6e9
4 changed files with 68 additions and 16 deletions
|
|
@ -80,6 +80,10 @@ instead. See **[Compiled plugins](https://orbit.tchatou.fr/docs/compiled-plugins
|
|||
| `orbit.irc.list()` | request the channel list |
|
||||
| `orbit.themes.current()/list()/set(id)` | read/set the theme |
|
||||
| `orbit.storage.get(key, def)/set(key, val)` | namespaced persistence |
|
||||
| `orbit.config()` | the resolved runtime config (branding, features, …) |
|
||||
| `orbit.i18n.language()` | current UI language code (e.g. `es`, `pt-BR`) |
|
||||
| `orbit.i18n.t(key, opts?)` | translate an app locale key (supports `{{interpolation}}`) |
|
||||
| `orbit.i18n.pick(table)` | pick a string from a `{ lang: text }` table by the current language |
|
||||
| `orbit.addUi(slot, render)` | add UI to a slot (returns a remover) |
|
||||
| `orbit.addSettingsSection({label, icon?, render})` | add a whole Settings section |
|
||||
| `orbit.addMessageDecorator(m => …)` | inline UI after every message's text; `m` = `{id, nick, text, raw, kind, ts, mine}` (`text` is formatting-stripped, `raw` keeps mIRC codes) |
|
||||
|
|
@ -109,6 +113,28 @@ to reply/react. Every contributed slot, action and decorator renders inside its
|
|||
own error boundary, so a crashing plugin renders nothing instead of taking down
|
||||
the app.
|
||||
|
||||
### Localization (i18n)
|
||||
|
||||
The UI ships in 10 languages — keep your plugin in step so it isn't stuck in one. Two ways:
|
||||
|
||||
- **Self-contained** — carry a `{ lang: text }` table and let Orbit pick the current language:
|
||||
|
||||
```js
|
||||
const LABEL = { en: 'Copy', fr: 'Copier', de: 'Kopieren' };
|
||||
orbit.html`<button title=${orbit.i18n.pick(LABEL)}>⧉</button>`;
|
||||
```
|
||||
|
||||
- **Interpolated** — `orbit.i18n.t('key', { name })` resolves an app locale key with
|
||||
`{{placeholders}}`, so word order is correct per language. The four bundled plugins
|
||||
(clock, copy, invite, games) use this.
|
||||
|
||||
Read the string **at render time**, not once at load: plugin UI re-renders when the language
|
||||
changes, so the text follows automatically. `orbit.i18n.language()` returns the current code
|
||||
if you need to branch.
|
||||
|
||||
> `orbit.i18n` and `orbit.config()` were added in **`apiVersion` 4** — guard with
|
||||
> `if (orbit.apiVersion >= 4)` if your plugin must run on older builds.
|
||||
|
||||
## Trust & security
|
||||
|
||||
Plugins are **operator-controlled**: a deployment lists them in `config.json`, so
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue