Allow plugins to set short translation locale

pull/4000/head
Chocobozzz 2021-04-20 16:14:09 +02:00
parent 24a792404c
commit 67baf6478a
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
3 changed files with 10 additions and 8 deletions

View File

@ -23,6 +23,7 @@ import { PluginLibrary, RegisterServerAuthExternalOptions, RegisterServerAuthPas
import { ClientHtml } from '../client-html'
import { RegisterHelpers } from './register-helpers'
import { installNpmPlugin, installNpmPluginFromDisk, removeNpmPlugin } from './yarn'
import { getCompleteLocale } from '@shared/core-utils'
export interface RegisteredPlugin {
npmName: string
@ -444,10 +445,12 @@ export class PluginManager implements ServerHook {
const path = translationPaths[locale]
const json = await readJSON(join(this.getPluginPath(plugin.name, plugin.type), path))
if (!this.translations[locale]) this.translations[locale] = {}
this.translations[locale][npmName] = json
const completeLocale = getCompleteLocale(locale)
logger.info('Added locale %s of plugin %s.', locale, npmName)
if (!this.translations[completeLocale]) this.translations[completeLocale] = {}
this.translations[completeLocale][npmName] = json
logger.info('Added locale %s of plugin %s.', completeLocale, npmName)
}
}

View File

@ -75,9 +75,9 @@ export function isDefaultLocale (locale: string) {
}
export function peertubeTranslate (str: string, translations?: { [ id: string ]: string }) {
// FIXME: remove disable rule when the client is upgraded to typescript 3.7
// eslint-disable-next-line
return translations && translations[str] ? translations[str] : str
if (!translations || !translations[str]) return str
return translations[str]
}
const possiblePaths = POSSIBLE_LOCALES.map(l => '/' + l)

View File

@ -744,7 +744,7 @@ If you want to translate strings of your plugin (like labels of your registered
{
...,
"translations": {
"fr-FR": "./languages/fr.json",
"fr": "./languages/fr.json",
"pt-BR": "./languages/pt-BR.json"
},
...
@ -752,7 +752,6 @@ If you want to translate strings of your plugin (like labels of your registered
```
The key should be one of the locales defined in [i18n.ts](https://github.com/Chocobozzz/PeerTube/blob/develop/shared/models/i18n/i18n.ts).
You **must** use the complete locales (`fr-FR` instead of `fr`).
Translation files are just objects, with the english sentence as the key and the translation as the value.
`fr.json` could contain for example: