mirror of https://github.com/Chocobozzz/PeerTube
Remove unused files
parent
350131cbaf
commit
cd1d6c23da
|
@ -1,12 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
for i in $(seq 1 10); do
|
|
||||||
# Zanata does not support inner elements in <source>, so we hack these special elements
|
|
||||||
# This regex translate the converted elements to initial Angular elements
|
|
||||||
perl -pi -e 's|<x id=(.+?)/>([^"])|<x id=\1/>\2|g' client/src/locale/target/*.xml
|
|
||||||
done
|
|
||||||
|
|
||||||
npm run i18n:xliff2json
|
|
||||||
|
|
|
@ -1,179 +0,0 @@
|
||||||
import { registerTSPaths } from '../../server/helpers/register-ts-paths'
|
|
||||||
registerTSPaths()
|
|
||||||
|
|
||||||
import * as xliff12ToJs from 'xliff/xliff12ToJs'
|
|
||||||
import { readFileSync, readJSON, unlink, writeFile, writeJSON, existsSync, exists, pathExists } from 'fs-extra'
|
|
||||||
import { join } from 'path'
|
|
||||||
import { buildFileLocale, I18N_LOCALES, isDefaultLocale } from '../../shared/models/i18n/i18n'
|
|
||||||
import { eachSeries } from 'async'
|
|
||||||
|
|
||||||
const sources: string[] = []
|
|
||||||
const l = [
|
|
||||||
'ar-001',
|
|
||||||
'ca-ES',
|
|
||||||
'cs-CZ',
|
|
||||||
'da-DK',
|
|
||||||
'de-DE',
|
|
||||||
'el-GR',
|
|
||||||
'en-GB',
|
|
||||||
'en-US',
|
|
||||||
'eo',
|
|
||||||
'es-ES',
|
|
||||||
'eu-ES',
|
|
||||||
'fa-IR',
|
|
||||||
'fi-FI',
|
|
||||||
'fr-FR',
|
|
||||||
'gd',
|
|
||||||
'gl-ES',
|
|
||||||
'hu-HU',
|
|
||||||
'it-IT',
|
|
||||||
'ja-JP',
|
|
||||||
'jbo',
|
|
||||||
'ko-KR',
|
|
||||||
'lt-LT',
|
|
||||||
'nb-NO',
|
|
||||||
'nl-NL',
|
|
||||||
'oc',
|
|
||||||
'pl-PL',
|
|
||||||
'pt-BR',
|
|
||||||
'pt-PT',
|
|
||||||
'ru-RU',
|
|
||||||
'sk-SK',
|
|
||||||
'sl-SI',
|
|
||||||
'sv-SE',
|
|
||||||
'ta',
|
|
||||||
'th-TH',
|
|
||||||
'tr-TR',
|
|
||||||
'uk-UA',
|
|
||||||
'vi-VN',
|
|
||||||
'zh-Hans-CN',
|
|
||||||
'zh-Hant-TW'
|
|
||||||
]
|
|
||||||
|
|
||||||
const availableLocales = l.filter(l => isDefaultLocale(l) === false)
|
|
||||||
.map(l => buildFileLocale(l))
|
|
||||||
|
|
||||||
for (const file of [ 'player', 'server', 'iso639' ]) {
|
|
||||||
for (const locale of availableLocales) {
|
|
||||||
sources.push(join(__dirname, '../../../client/src/locale/target/', `${file}_${locale}.xml`))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
eachSeries(sources, (source, cb) => {
|
|
||||||
xliffFile2JSON(source, cb)
|
|
||||||
}, err => {
|
|
||||||
if (err) return handleError(err)
|
|
||||||
|
|
||||||
mergeISO639InServer(err => {
|
|
||||||
if (err) return handleError(err)
|
|
||||||
|
|
||||||
injectMissingTranslations().then(() => process.exit(0))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
function handleError (err: any) {
|
|
||||||
console.error(err)
|
|
||||||
process.exit(-1)
|
|
||||||
}
|
|
||||||
|
|
||||||
function xliffFile2JSON (filePath: string, cb) {
|
|
||||||
const fileTarget = filePath.replace('.xml', '.json')
|
|
||||||
|
|
||||||
if (!existsSync(filePath)) {
|
|
||||||
console.log('No file %s exists.', filePath)
|
|
||||||
return cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the two first lines our xliff module does not like
|
|
||||||
let fileContent = readFileSync(filePath).toString()
|
|
||||||
fileContent = removeFirstLine(fileContent)
|
|
||||||
fileContent = removeFirstLine(fileContent)
|
|
||||||
|
|
||||||
xliff12ToJs(fileContent, (err, res) => {
|
|
||||||
if (err) return cb(err)
|
|
||||||
|
|
||||||
const json = createJSONString(res)
|
|
||||||
writeFile(fileTarget, json, err => {
|
|
||||||
if (err) return cb(err)
|
|
||||||
|
|
||||||
return unlink(filePath, cb)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function mergeISO639InServer (cb) {
|
|
||||||
eachSeries(availableLocales, (locale, eachCallback) => {
|
|
||||||
const serverPath = join(__dirname, '../../../client/src/locale/target/', `server_${locale}.json`)
|
|
||||||
const iso639Path = join(__dirname, '../../../client/src/locale/target/', `iso639_${locale}.json`)
|
|
||||||
|
|
||||||
if (!existsSync(serverPath)) {
|
|
||||||
console.log('No file %s exists.', serverPath)
|
|
||||||
return cb()
|
|
||||||
}
|
|
||||||
if (!existsSync(iso639Path)) {
|
|
||||||
console.log('No file %s exists.', iso639Path)
|
|
||||||
return cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
const resServer = readFileSync(serverPath).toString()
|
|
||||||
const resISO639 = readFileSync(iso639Path).toString()
|
|
||||||
|
|
||||||
const jsonServer = JSON.parse(resServer)
|
|
||||||
const jsonISO639 = JSON.parse(resISO639)
|
|
||||||
|
|
||||||
Object.assign(jsonServer, jsonISO639)
|
|
||||||
const serverString = JSON.stringify(jsonServer)
|
|
||||||
|
|
||||||
writeFile(serverPath, serverString, err => {
|
|
||||||
if (err) return eachCallback(err)
|
|
||||||
|
|
||||||
return unlink(iso639Path, eachCallback)
|
|
||||||
})
|
|
||||||
}, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeFirstLine (str: string) {
|
|
||||||
return str.substring(str.indexOf('\n') + 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
function createJSONString (obj: any) {
|
|
||||||
const res: any = {}
|
|
||||||
const strings = obj.resources['']
|
|
||||||
|
|
||||||
Object.keys(strings).forEach(k => res[k] = strings[k].target)
|
|
||||||
|
|
||||||
return JSON.stringify(res)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function injectMissingTranslations () {
|
|
||||||
const baseServer = await readJSON(join(__dirname, '../../../client/src/locale/server.en-US.json'))
|
|
||||||
Object.keys(baseServer).forEach(k => baseServer[k] = '')
|
|
||||||
|
|
||||||
for (const locale of availableLocales) {
|
|
||||||
const serverPath = join(__dirname, '../../../client/src/locale/target/', `server_${locale}.json`)
|
|
||||||
if (!await pathExists(serverPath)) {
|
|
||||||
console.log('No file exists to inject missing translations: %s.', serverPath)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
let serverJSON = await readJSON(serverPath)
|
|
||||||
|
|
||||||
serverJSON = Object.assign({}, baseServer, serverJSON)
|
|
||||||
await writeJSON(serverPath, serverJSON)
|
|
||||||
}
|
|
||||||
|
|
||||||
const basePlayer = await readJSON(join(__dirname, '../../../client/src/locale/player.en-US.json'))
|
|
||||||
Object.keys(basePlayer).forEach(k => basePlayer[k] = '')
|
|
||||||
for (const locale of availableLocales) {
|
|
||||||
const serverPath = join(__dirname, '../../../client/src/locale/target/', `player_${locale}.json`)
|
|
||||||
if (!await pathExists(serverPath)) {
|
|
||||||
console.log('No file exists to inject missing translations: %s.', serverPath)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
let serverJSON = await readJSON(serverPath)
|
|
||||||
|
|
||||||
serverJSON = Object.assign({}, basePlayer, serverJSON)
|
|
||||||
await writeJSON(serverPath, serverJSON)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +1,19 @@
|
||||||
# Translation
|
# Translation
|
||||||
|
|
||||||
We use [Zanata](http://zanata.org/) as translation platform.
|
We use [Weblate](https://weblate.org) as translation platform.
|
||||||
Please do not edit xml files directly from Git, you have to use Zanata!
|
Please do not edit translation files directly from Git, you have to use Weblate!
|
||||||
|
|
||||||
If you don't see your locale in the platform, please [create an issue](https://github.com/Chocobozzz/PeerTube/issues) so we add it!
|
If you don't see your locale in the platform you can add it directly in the Weblate interface.
|
||||||
|
Then, if you think there are enough translated strings, please [create an issue](https://github.com/Chocobozzz/PeerTube/issues) so we add the new locale in PeerTube!
|
||||||
|
|
||||||
|
|
||||||
## How to
|
## How to
|
||||||
|
|
||||||
* Create an account: https://trad.framasoft.org/account/register
|
* Create an account: https://weblate.framasoft.org/accounts/register/
|
||||||
* Join a language team: https://trad.framasoft.org/languages
|
* Validate your email and follow the link sent
|
||||||
* Go to the PeerTube page https://trad.framasoft.org/iteration/view/peertube/develop
|
* Create your password (keep the `Current password` field empty) and setup your account
|
||||||
* Choose the locale and begin to translate PeerTube!
|
* Go to the PeerTube page https://weblate.framasoft.org/projects/peertube/
|
||||||
|
* Choose the file and the locale you want to translate
|
||||||
|
|
||||||
|
|
||||||
## Files
|
## Files
|
||||||
|
@ -20,10 +22,10 @@ There are 4 files:
|
||||||
* **angular**: contains client strings
|
* **angular**: contains client strings
|
||||||
* **player**: contains player strings.
|
* **player**: contains player strings.
|
||||||
Most of the strings come from VideoJS, so you can help yourself by using [video.js JSON files](https://github.com/videojs/video.js/tree/master/lang)
|
Most of the strings come from VideoJS, so you can help yourself by using [video.js JSON files](https://github.com/videojs/video.js/tree/master/lang)
|
||||||
* **server**: contains server strings (privacies, licences...)
|
* **server**: contains server strings (privacies, licences...) and iso639 (languages) strings used by PeerTube to describe the audio language of a particular video.
|
||||||
* **iso639**: contains iso639 (languages) strings used by PeerTube to describe the audio language of a particular video.
|
|
||||||
It's the reason why these strings should be translated too. There are many strings so do not hesitate to translate only main audio languages.
|
It's the reason why these strings should be translated too. There are many strings so do not hesitate to translate only main audio languages.
|
||||||
|
|
||||||
|
|
||||||
## Tips
|
## Tips
|
||||||
|
|
||||||
### Special tags
|
### Special tags
|
||||||
|
@ -39,7 +41,7 @@ should be in french
|
||||||
|
|
||||||
### Singular/plural
|
### Singular/plural
|
||||||
|
|
||||||
For singular/plural translations, you must translate values inside `{` and `}`.
|
For singular/plural translations, you must translate values inside `{` and `}`. **Please don't translate the word *other***
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
|
|
15
zanata.xml
15
zanata.xml
|
@ -1,15 +0,0 @@
|
||||||
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
|
|
||||||
<config xmlns="http://zanata.org/namespace/config/">
|
|
||||||
<url>https://trad.framasoft.org/</url>
|
|
||||||
<project>peertube</project>
|
|
||||||
<project-version>develop</project-version>
|
|
||||||
<project-type>xliff</project-type>
|
|
||||||
<src-dir>./client/src/locale/source</src-dir>
|
|
||||||
<trans-dir>./client/src/locale/target</trans-dir>
|
|
||||||
|
|
||||||
<hooks>
|
|
||||||
<hook command="pull">
|
|
||||||
<after>./scripts/i18n/pull-hook.sh</after>
|
|
||||||
</hook>
|
|
||||||
</hooks>
|
|
||||||
</config>
|
|
Loading…
Reference in New Issue