aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Inverle <inverle@proton.me> 2025-10-02 23:00:16 +0200
committerGravatar GitHub <noreply@github.com> 2025-10-02 23:00:16 +0200
commitbe49726ebb700aca030004d367c029082cfc6427 (patch)
tree7e85b4e3440349b02a19b88a3c0e3419da3dd91a
parent128c375fc9de5119b1963d92dc9cd3e423053111 (diff)
Replace translation status flags with text section (#7842)
* Replace translation status flags with text section * make fix-all * Update README.md Co-authored-by: maTh <1645099+math-GH@users.noreply.github.com> * Improve with suggestions * Improve with further suggestions * fix headers * BCP 47 https://developer.mozilla.org/en-US/docs/Glossary/BCP_47_language_tag * en-US: `TODO` -> `IGNORE` * i18n: fr * i18n: fr * i18n: fr * Links --------- Co-authored-by: maTh <1645099+math-GH@users.noreply.github.com> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
-rw-r--r--README.fr.md45
-rw-r--r--README.md45
-rw-r--r--app/i18n/cs/gen.php6
-rw-r--r--app/i18n/de/gen.php6
-rw-r--r--app/i18n/el/gen.php6
-rw-r--r--app/i18n/en-us/api.php8
-rw-r--r--app/i18n/en-us/gen.php6
-rw-r--r--app/i18n/en/gen.php6
-rw-r--r--app/i18n/es/gen.php6
-rw-r--r--app/i18n/fa/gen.php6
-rw-r--r--app/i18n/fi/gen.php6
-rw-r--r--app/i18n/fr/gen.php6
-rw-r--r--app/i18n/he/gen.php6
-rw-r--r--app/i18n/hu/gen.php6
-rw-r--r--app/i18n/id/gen.php6
-rw-r--r--app/i18n/it/gen.php6
-rw-r--r--app/i18n/ja/gen.php6
-rw-r--r--app/i18n/ko/gen.php6
-rw-r--r--app/i18n/lv/gen.php6
-rw-r--r--app/i18n/nl/gen.php6
-rw-r--r--app/i18n/oc/gen.php6
-rw-r--r--app/i18n/pl/gen.php6
-rw-r--r--app/i18n/pt-br/gen.php6
-rw-r--r--app/i18n/pt-pt/gen.php6
-rw-r--r--app/i18n/ru/gen.php6
-rw-r--r--app/i18n/sk/gen.php6
-rw-r--r--app/i18n/tr/gen.php6
-rw-r--r--app/i18n/uk/gen.php6
-rw-r--r--app/i18n/zh-cn/gen.php6
-rw-r--r--app/i18n/zh-tw/gen.php6
-rw-r--r--cli/README.md4
-rwxr-xr-xcli/check.translation.php116
-rw-r--r--docs/i18n/flags/README.md5
-rw-r--r--docs/i18n/flags/gen/cs.svg7
-rw-r--r--docs/i18n/flags/gen/de.svg7
-rw-r--r--docs/i18n/flags/gen/el.svg7
-rw-r--r--docs/i18n/flags/gen/en-us.svg7
-rw-r--r--docs/i18n/flags/gen/en.svg7
-rw-r--r--docs/i18n/flags/gen/es.svg7
-rw-r--r--docs/i18n/flags/gen/fa.svg7
-rw-r--r--docs/i18n/flags/gen/fi.svg7
-rw-r--r--docs/i18n/flags/gen/fr.svg7
-rw-r--r--docs/i18n/flags/gen/he.svg7
-rw-r--r--docs/i18n/flags/gen/hu.svg7
-rw-r--r--docs/i18n/flags/gen/id.svg7
-rw-r--r--docs/i18n/flags/gen/it.svg7
-rw-r--r--docs/i18n/flags/gen/ja.svg7
-rw-r--r--docs/i18n/flags/gen/ko.svg7
-rw-r--r--docs/i18n/flags/gen/lv.svg7
-rw-r--r--docs/i18n/flags/gen/nl.svg7
-rw-r--r--docs/i18n/flags/gen/oc.svg10
-rw-r--r--docs/i18n/flags/gen/pl.svg7
-rw-r--r--docs/i18n/flags/gen/pt-br.svg7
-rw-r--r--docs/i18n/flags/gen/pt-pt.svg7
-rw-r--r--docs/i18n/flags/gen/ru.svg7
-rw-r--r--docs/i18n/flags/gen/sk.svg7
-rw-r--r--docs/i18n/flags/gen/tr.svg7
-rw-r--r--docs/i18n/flags/gen/uk.svg7
-rw-r--r--docs/i18n/flags/gen/zh-cn.svg7
-rw-r--r--docs/i18n/flags/gen/zh-tw.svg7
-rw-r--r--docs/i18n/flags/oc.svg1
61 files changed, 256 insertions, 322 deletions
diff --git a/README.fr.md b/README.fr.md
index 39daac0f2..84cc14285 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -1,12 +1,5 @@
[![Dons Liberapay](https://img.shields.io/liberapay/receives/FreshRSS.svg?logo=liberapay)](https://liberapay.com/FreshRSS/donate)
-<translations>
-<!-- This section is automatically generated by `cli/check.translation.php -g` -->
-
-[![cs](./docs/i18n/flags/gen/cs.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) [![de](./docs/i18n/flags/gen/de.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) [![el](./docs/i18n/flags/gen/el.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) [![en](./docs/i18n/flags/gen/en.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) [![en-us](./docs/i18n/flags/gen/en-us.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) [![es](./docs/i18n/flags/gen/es.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) [![fa](./docs/i18n/flags/gen/fa.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) [![fi](./docs/i18n/flags/gen/fi.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) [![fr](./docs/i18n/flags/gen/fr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) [![he](./docs/i18n/flags/gen/he.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) [![hu](./docs/i18n/flags/gen/hu.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) [![id](./docs/i18n/flags/gen/id.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) [![it](./docs/i18n/flags/gen/it.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) [![ja](./docs/i18n/flags/gen/ja.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) [![ko](./docs/i18n/flags/gen/ko.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) [![lv](./docs/i18n/flags/gen/lv.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) [![nl](./docs/i18n/flags/gen/nl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) [![oc](./docs/i18n/flags/gen/oc.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) [![pl](./docs/i18n/flags/gen/pl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-br](./docs/i18n/flags/gen/pt-br.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-pt](./docs/i18n/flags/gen/pt-pt.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) [![ru](./docs/i18n/flags/gen/ru.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) [![sk](./docs/i18n/flags/gen/sk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) [![tr](./docs/i18n/flags/gen/tr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) [![uk](./docs/i18n/flags/gen/uk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-cn](./docs/i18n/flags/gen/zh-cn.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-tw](./docs/i18n/flags/gen/zh-tw.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F)
-
-</translations>
-
* Lire ce document sur [github.com/FreshRSS/FreshRSS/](https://github.com/FreshRSS/FreshRSS/blob/edge/README.md) pour avoir les images et liens corrects.
* [English version](README.md)
@@ -14,7 +7,7 @@
FreshRSS est un agrégateur de flux RSS à auto-héberger.
-Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable.
+Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable, et [traduit](#internationalisation--20-langues-statut-des-traductions) en nombreuses langues.
Il permet de gérer plusieurs utilisateurs, dispose d’un mode de lecture anonyme, et supporte les étiquettes personnalisées.
Il y a une API pour les clients (mobiles), ainsi qu’une [interface en ligne de commande](cli/README.md).
@@ -226,6 +219,42 @@ Le processus d’import/export à l’aide d’une base de données SQLite est u
FreshRSS permet l’ajout d’extensions en plus des fonctionnalités natives.
Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensions).
+# Internationalisation : 20+ langues. Statut des traductions
+
+<translations>
+<!-- This section is automatically generated by `./cli/check.translation.php -g` -->
+
+| Langage | Progression | |
+| - | - | - |
+| Čeština (cs) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Deutsch (de) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Ελληνικά (el) | ■■・・・・・・・・ 22% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) |
+| English (en) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) |
+| English (United States) (en-US) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Español (es) | ■■■■■■■■■・ 91% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
+| فارسی (fa) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Suomi (fi) | ■■■■■■■■■・ 92% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Français (fr) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) |
+| עברית (he) | ■■■■・・・・・・ 45% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Magyar (hu) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Bahasa Indonesia (id) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Italiano (it) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 日本語 (ja) | ■■■■■■■■■・ 95% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 한국어 (ko) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Latviešu (lv) | ■■■■■■■■・・ 82% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Nederlands (nl) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Occitan (oc) | ■■■■■■■■・・ 81% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Polski (pl) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Brasil) (pt-BR) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Portugal) (pt-PT) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Русский (ru) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Slovenčina (sk) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Türkçe (tr) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Українська (uk) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 简体中文 (zh-CN) | ■■■■■■■■■・ 90% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 正體中文 (zh-TW) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F) |
+
+</translations>
# APIs et applications natives
diff --git a/README.md b/README.md
index a24054a19..9db0748a0 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,5 @@
[![Liberapay donations](https://img.shields.io/liberapay/receives/FreshRSS.svg?logo=liberapay)](https://liberapay.com/FreshRSS/donate)
-<translations>
-<!-- This section is automatically generated by `cli/check.translation.php -g` -->
-
-[![cs](./docs/i18n/flags/gen/cs.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) [![de](./docs/i18n/flags/gen/de.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) [![el](./docs/i18n/flags/gen/el.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) [![en](./docs/i18n/flags/gen/en.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) [![en-us](./docs/i18n/flags/gen/en-us.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) [![es](./docs/i18n/flags/gen/es.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) [![fa](./docs/i18n/flags/gen/fa.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) [![fi](./docs/i18n/flags/gen/fi.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) [![fr](./docs/i18n/flags/gen/fr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) [![he](./docs/i18n/flags/gen/he.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) [![hu](./docs/i18n/flags/gen/hu.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) [![id](./docs/i18n/flags/gen/id.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) [![it](./docs/i18n/flags/gen/it.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) [![ja](./docs/i18n/flags/gen/ja.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) [![ko](./docs/i18n/flags/gen/ko.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) [![lv](./docs/i18n/flags/gen/lv.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) [![nl](./docs/i18n/flags/gen/nl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) [![oc](./docs/i18n/flags/gen/oc.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) [![pl](./docs/i18n/flags/gen/pl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-br](./docs/i18n/flags/gen/pt-br.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-pt](./docs/i18n/flags/gen/pt-pt.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) [![ru](./docs/i18n/flags/gen/ru.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) [![sk](./docs/i18n/flags/gen/sk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) [![tr](./docs/i18n/flags/gen/tr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) [![uk](./docs/i18n/flags/gen/uk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-cn](./docs/i18n/flags/gen/zh-cn.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-tw](./docs/i18n/flags/gen/zh-tw.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F)
-
-</translations>
-
* Read this document on [github.com/FreshRSS/FreshRSS/](https://github.com/FreshRSS/FreshRSS/blob/edge/README.md) to get the correct links and pictures.
* [Version française](README.fr.md)
@@ -14,7 +7,7 @@
FreshRSS is a self-hosted RSS feed aggregator.
-It is lightweight, easy to work with, powerful, and customizable.
+It is lightweight, easy to work with, powerful, customizable, and has been [translated](#internationalization-20-languages-translation-progress) into many languages.
It is a multi-user application with an anonymous reading mode. It supports custom tags.
There is an API for (mobile) clients, and a [Command-Line Interface](cli/README.md).
@@ -124,6 +117,42 @@ More detailed information about installation and server configuration can be fou
FreshRSS supports further customizations by adding extensions on top of its core functionality.
See the [repository dedicated to those extensions](https://github.com/FreshRSS/Extensions).
+# Internationalization: 20+ languages. Translation progress
+
+<translations>
+<!-- This section is automatically generated by `./cli/check.translation.php -g` -->
+
+| Language | Progress | |
+| - | - | - |
+| Čeština (cs) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Deutsch (de) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Ελληνικά (el) | ■■・・・・・・・・ 22% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) |
+| English (en) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) |
+| English (United States) (en-US) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Español (es) | ■■■■■■■■■・ 91% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
+| فارسی (fa) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Suomi (fi) | ■■■■■■■■■・ 92% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Français (fr) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) |
+| עברית (he) | ■■■■・・・・・・ 45% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Magyar (hu) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Bahasa Indonesia (id) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Italiano (it) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 日本語 (ja) | ■■■■■■■■■・ 95% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 한국어 (ko) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Latviešu (lv) | ■■■■■■■■・・ 82% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Nederlands (nl) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Occitan (oc) | ■■■■■■■■・・ 81% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Polski (pl) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Brasil) (pt-BR) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Portugal) (pt-PT) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Русский (ru) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Slovenčina (sk) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Türkçe (tr) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Українська (uk) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 简体中文 (zh-CN) | ■■■■■■■■■・ 90% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 正體中文 (zh-TW) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F) |
+
+</translations>
# APIs & native apps
diff --git a/app/i18n/cs/gen.php b/app/i18n/cs/gen.php
index 15f6db117..c615008e4 100644
--- a/app/i18n/cs/gen.php
+++ b/app/i18n/cs/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Včera',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇨🇿',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'O FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'týdnů',
'years' => 'let',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Známé základní stránky',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php
index 1bb34e4fc..ea41d7b10 100644
--- a/app/i18n/de/gen.php
+++ b/app/i18n/de/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Gestern',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇩🇪',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'Über FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'Wochen',
'years' => 'Jahre',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Known-Seite (https://withknown.com)',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php
index 023ef8c49..35245ce7a 100644
--- a/app/i18n/el/gen.php
+++ b/app/i18n/el/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Yesterday', // TODO
),
'dir' => 'ltr', // TODO
- 'flag' => '🇬🇷',
'freshrss' => array(
'_' => 'FreshRSS', // TODO
'about' => 'About FreshRSS', // TODO
@@ -217,6 +216,11 @@ return array(
'weeks' => 'weeks', // TODO
'years' => 'years', // TODO
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Known based sites', // TODO
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/en-us/api.php b/app/i18n/en-us/api.php
index 48ab908ea..3e1ba55ed 100644
--- a/app/i18n/en-us/api.php
+++ b/app/i18n/en-us/api.php
@@ -14,10 +14,10 @@ return array(
'information' => array(
'address' => 'Your API address:', // IGNORE
'output' => array(
- 'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!', // TODO
- 'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php', // TODO
- 'pass' => '✔️ PASS', // TODO
- 'unknown-error' => '❌ ', // TODO
+ 'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!', // IGNORE
+ 'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php', // IGNORE
+ 'pass' => '✔️ PASS', // IGNORE
+ 'unknown-error' => '❌ ', // IGNORE
),
'test' => array(
'fever' => 'Fever API configuration test:', // IGNORE
diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php
index 85bfd0dbe..e4fb41e0d 100644
--- a/app/i18n/en-us/gen.php
+++ b/app/i18n/en-us/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Yesterday', // IGNORE
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇺🇸',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'About FreshRSS', // IGNORE
@@ -217,6 +216,11 @@ return array(
'weeks' => 'weeks', // IGNORE
'years' => 'years', // IGNORE
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Known based sites', // IGNORE
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php
index 7c2f4229b..42beb0a03 100644
--- a/app/i18n/en/gen.php
+++ b/app/i18n/en/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Yesterday',
),
'dir' => 'ltr',
- 'flag' => '🇬🇧',
'freshrss' => array(
'_' => 'FreshRSS',
'about' => 'About FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'weeks',
'years' => 'years',
),
+ 'readme' => array(
+ 'contribute' => 'contribute',
+ 'language' => 'Language',
+ 'translated' => 'Progress',
+ ),
'share' => array(
'Known' => 'Known based sites',
'archiveIS' => 'archive.is',
diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php
index dbe04ea5b..d16f2f07c 100644
--- a/app/i18n/es/gen.php
+++ b/app/i18n/es/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Ayer',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇪🇸',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'Acerca de FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'semanas',
'years' => 'años',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Sitios basados en conocidos',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php
index fe582f8d0..65ae9645a 100644
--- a/app/i18n/fa/gen.php
+++ b/app/i18n/fa/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => ' دیروز',
),
'dir' => 'rtl',
- 'flag' => '🇮🇷',
'freshrss' => array(
'_' => ' FreshRSS',
'about' => 'درباره FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => ' هفته',
'years' => ' سال',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => ' سایت های مبتنی بر شناخته شده',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/fi/gen.php b/app/i18n/fi/gen.php
index aad6458e3..eb1babb2d 100644
--- a/app/i18n/fi/gen.php
+++ b/app/i18n/fi/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Eilen',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇫🇮',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'Tietoja FreshRSS-sovelluksesta',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'viikkoa',
'years' => 'vuotta',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Known-sivustot',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php
index b3967379c..46dda0d5c 100644
--- a/app/i18n/fr/gen.php
+++ b/app/i18n/fr/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Hier',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇫🇷',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'À propos de FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'semaines',
'years' => 'années',
),
+ 'readme' => array(
+ 'contribute' => 'contribuer',
+ 'language' => 'Langage',
+ 'translated' => 'Progression',
+ ),
'share' => array(
'Known' => 'Sites basés sur Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php
index 55c706cfd..0da616b8e 100644
--- a/app/i18n/he/gen.php
+++ b/app/i18n/he/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'אתמול',
),
'dir' => 'rtl',
- 'flag' => '🇮🇱',
'freshrss' => array(
'_' => 'FreshRSS', // TODO
'about' => 'אודות FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'weeks', // TODO
'years' => 'years', // TODO
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Known based sites', // TODO
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/hu/gen.php b/app/i18n/hu/gen.php
index adccaf0b3..117a8e333 100644
--- a/app/i18n/hu/gen.php
+++ b/app/i18n/hu/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Tegnap',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇭🇺',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'FreshRSS névjegy',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'hét',
'years' => 'év',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Ismert weboldalak',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php
index e9ba0b3f5..19035c401 100644
--- a/app/i18n/id/gen.php
+++ b/app/i18n/id/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Kemarin',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇮🇩',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'Tentang FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'minggu',
'years' => 'tahun',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Situs berbasis Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php
index 7d4223800..b68a6cf3c 100644
--- a/app/i18n/it/gen.php
+++ b/app/i18n/it/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Ieri',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇮🇹',
'freshrss' => array(
'_' => 'Feed RSS Reader',
'about' => 'Informazioni',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'settimane',
'years' => 'anni',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Siti basati su Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php
index 0c2d69936..d0a44b615 100644
--- a/app/i18n/ja/gen.php
+++ b/app/i18n/ja/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => '昨日',
),
'dir' => 'ディレクトリ',
- 'flag' => '🇯🇵',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'FreshRSSについて',
@@ -217,6 +216,11 @@ return array(
'weeks' => '週間',
'years' => '年間',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'よく使われるサイト',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php
index ce7ec12a5..683d7f1b2 100644
--- a/app/i18n/ko/gen.php
+++ b/app/i18n/ko/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => '어제',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇰🇷',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => '정보',
@@ -217,6 +216,11 @@ return array(
'weeks' => '주',
'years' => '년',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Known based sites', // IGNORE
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php
index cdcc7aa8d..2752eaf47 100644
--- a/app/i18n/lv/gen.php
+++ b/app/i18n/lv/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Vakar',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇱🇻',
'freshrss' => array(
'_' => 'FreshRSS', // TODO
'about' => 'Par FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'nedēļas',
'years' => 'gadi',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Zināmas vietnes',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php
index 8b4c029c4..191cbed94 100644
--- a/app/i18n/nl/gen.php
+++ b/app/i18n/nl/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Gisteren',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇳🇱',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'Over FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'weken',
'years' => 'jaren',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Known-gebaseerde sites',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php
index 15f649809..abe430a0a 100644
--- a/app/i18n/oc/gen.php
+++ b/app/i18n/oc/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Ièr',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🏴󠁦󠁲󠁯󠁣󠁣󠁿',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'A prepaus de FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'setmanas',
'years' => 'ans',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Sites basats sus Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php
index 59c0b6072..a35987c02 100644
--- a/app/i18n/pl/gen.php
+++ b/app/i18n/pl/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Wczorajsze',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇵🇱',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'O oprogramowaniu FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'tygodnie',
'years' => 'lata',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Strony bazujące na usłudze Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php
index d2ea1249a..b2d263554 100644
--- a/app/i18n/pt-br/gen.php
+++ b/app/i18n/pt-br/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Ontem',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇧🇷',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'Sobre FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'semanas',
'years' => 'anos',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Sites no Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/pt-pt/gen.php b/app/i18n/pt-pt/gen.php
index d3b611b62..705789dc5 100644
--- a/app/i18n/pt-pt/gen.php
+++ b/app/i18n/pt-pt/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Ontem',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇵🇹',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'Sobre FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'semanas',
'years' => 'anos',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Sites no Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php
index 846daa6f7..9a9459b19 100644
--- a/app/i18n/ru/gen.php
+++ b/app/i18n/ru/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Вчера',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇷🇺',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'О FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'недель',
'years' => 'лет',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Сайты на Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php
index 576e1cf9a..3e907404f 100644
--- a/app/i18n/sk/gen.php
+++ b/app/i18n/sk/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Včera',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇸🇰',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'O FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'týždne',
'years' => 'roky',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Stránky založené na Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php
index 834cee531..3b96ebd54 100644
--- a/app/i18n/tr/gen.php
+++ b/app/i18n/tr/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Dün',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇹🇷',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'FreshRSS Hakkında',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'hafta',
'years' => 'yıl',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => 'Bilinen tabanlı siteler',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/uk/gen.php b/app/i18n/uk/gen.php
index 91d681a2e..fd7eeca35 100644
--- a/app/i18n/uk/gen.php
+++ b/app/i18n/uk/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => 'Вчора',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇺🇦',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => 'Про FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => 'тижд',
'years' => 'р.',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // TODO
+ 'language' => 'Language', // TODO
+ 'translated' => 'Progress', // TODO
+ ),
'share' => array(
'Known' => 'Сайти на Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php
index dc307bd6e..71fdc1416 100644
--- a/app/i18n/zh-cn/gen.php
+++ b/app/i18n/zh-cn/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => '昨天',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇨🇳',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => '关于 FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => '周',
'years' => '年',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => '基于 Known 的站点',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php
index 1dd6182b6..24442f281 100644
--- a/app/i18n/zh-tw/gen.php
+++ b/app/i18n/zh-tw/gen.php
@@ -136,7 +136,6 @@ return array(
'yesterday' => '昨天',
),
'dir' => 'ltr', // IGNORE
- 'flag' => '🇹🇼',
'freshrss' => array(
'_' => 'FreshRSS', // IGNORE
'about' => '關於 FreshRSS',
@@ -217,6 +216,11 @@ return array(
'weeks' => '週',
'years' => '年',
),
+ 'readme' => array(
+ 'contribute' => 'contribute', // IGNORE
+ 'language' => 'Language', // IGNORE
+ 'translated' => 'Progress', // IGNORE
+ ),
'share' => array(
'Known' => '基於 Known 的站點',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/cli/README.md b/cli/README.md
index 4d6ba62fe..47f28a7f7 100644
--- a/cli/README.md
+++ b/cli/README.md
@@ -149,13 +149,13 @@ cd /usr/share/FreshRSS
# -r, --revert revert the action (only used with ignore action).
# -o, --origin-language selects the origin language (only used with add language action).
-./cli/check-translation.php [ ---display-result --help --language fr --display-report --generate-readme ]
+./cli/check.translation.php [ ---display-result --help --language fr --display-report --generate-readme ]
# Check if translation files have missing keys or missing translations.
# -d, --display-result display results of check.
# -h, --help display help text and exit.
# -l, --language set the language check.
# -r, --display-report display completion report.
-# -g, --generate-readme generate readme for translation status.
+# -g, --generate-readme generate translation progress section in readme.
```
## Note about cron
diff --git a/cli/check.translation.php b/cli/check.translation.php
index b4c7e6850..5c0873099 100755
--- a/cli/check.translation.php
+++ b/cli/check.translation.php
@@ -74,7 +74,22 @@ if ($cliOptions->displayReport) {
}
}
-function writeToReadme(string $readmePath, string $markdownImgStr): void {
+function writeToReadme(string $readmePath, string $markdownTable): void {
+ $language = explode('.', $readmePath)[1];
+ // expecting `README.md` for `en` or `README.fr.md` for `fr`
+ if ($language === 'md') {
+ $language = 'en';
+ }
+ Minz_Translate::init($language);
+ $placeholders = [];
+ if (preg_match_all('/__.*?__/', $markdownTable, $placeholders) === false) {
+ echo 'Error: Fail while matching translation placeholders', PHP_EOL;
+ exit(1);
+ }
+ foreach (array_unique($placeholders[0]) as $_ => $placeholder) {
+ $markdownTable = str_replace($placeholder, _t('gen.readme.' . substr($placeholder, 2, -2)), $markdownTable);
+ }
+
$readme = file_get_contents($readmePath);
if ($readme === false) {
echo 'Error: Unable to open ' . $readmePath, PHP_EOL;
@@ -82,9 +97,9 @@ function writeToReadme(string $readmePath, string $markdownImgStr): void {
}
if (file_put_contents($readmePath, preg_replace('/<translations>(.*?)<\/translations>/s', <<<EOF
<translations>
- <!-- This section is automatically generated by `cli/check.translation.php -g` -->
+ <!-- This section is automatically generated by `./cli/check.translation.php -g` -->
- $markdownImgStr
+ $markdownTable
</translations>
EOF, $readme)) === false) {
@@ -94,90 +109,41 @@ function writeToReadme(string $readmePath, string $markdownImgStr): void {
echo 'Successfully written translation status into ' . $readmePath, PHP_EOL;
}
-function embedSvg(string $contents): string {
- return preg_replace(
- '/<svg\s+(?:(?:[^>]*?)(xmlns=["\'][^"\']+["\']))?(?:(?:[^>]*?)(viewBox=["\'][^"\']+["\']))?(?:[^>]*?)>/i',
- '<svg \1 \2 width="16" height="16" x="9" y="2">',
- $contents
- ) ?? '';
-}
-
if ($cliOptions->generateReadme) {
- $supportedFormats = ['txt', 'svg'];
- $flagsDir = dirname(__DIR__) . '/docs/i18n/flags';
+ $markdownTable = <<<EOF
+ | __language__ | __translated__ | |
+ | - | - | - |
+ EOF;
+ $markdownTable .= "\n";
- $markdownImgStr = '';
foreach ($percentage as $lang => $value) {
$percentageInt = intval(rtrim($value, '%'));
- $color = 'green';
- if ($percentageInt < 90) {
- $color = 'gold';
- }
- if ($percentageInt < 70) {
- $color = 'darkred';
- }
- $svgFile = $flagsDir . '/' . $lang . '.svg';
- $svg = '';
- if (file_exists($svgFile)) {
- $svg = file_get_contents($svgFile);
- if ($svg === false) {
- echo 'Error: Unable to open ' . $svgFile, PHP_EOL;
- exit(1);
- }
- }
+ $completed = intval($percentageInt / 10);
+ $uncompleted = intval(ceil((100 - $percentageInt) / 10));
+ $progressBar = str_repeat('■', $completed) . str_repeat('・', $uncompleted);
$ghSearchUrl = 'https://github.com/search?q=' . urlencode("repo:FreshRSS/FreshRSS path:app/i18n/$lang /(TODO|DIRTY)$/");
- $genPath = $flagsDir . '/gen/' . $lang . '.svg';
- $template = '<!-- This file is automatically generated by `cli/check.translation.php -g` -->' . "\n";
-
- if ($svg === '') {
- $i18nGen = include dirname(__DIR__) . "/app/i18n/$lang/gen.php";
- if (!is_array($i18nGen) || !is_string($i18nGen['flag'] ?? null)) {
- echo 'Error: No Unicode flag found for language ' . $lang, PHP_EOL;
- exit(1);
- }
- $unicodeFlag = $i18nGen['flag'];
- if ($lang !== 'en' && $unicodeFlag === '🇬🇧') {
- echo 'Error: Wrong Unicode flag for language ' . $lang, PHP_EOL;
- exit(1);
- }
- $value = $unicodeFlag . ' ' . $percentageInt . '%';
- $template .= <<<EOF
- <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="$color" />
- <text x="34" y="14">$value</text>
- </g>
- </svg>
- EOF;
- } else {
- // An SVG file is available to override the Unicode flag
- $value = $percentageInt . '%';
- $contents = embedSvg($svg);
- $template .= <<<EOF
- <svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="$color" />
- <!-- embedded SVG -->
- $contents
- <!-- end of embedded SVG -->
- <text x="43" y="14">$value</text>
- </g>
- </svg>
- EOF;
- }
- if (file_put_contents($genPath, $template) === false) {
- echo 'Error: Fail while writing to ' . $genPath, PHP_EOL;
- exit(1);
+
+ // BCP 47 / ISO 3166: Uppercase the last (region) subtag if any (e.g. pt-pt -> pt-PT)
+ $bcp47 = $lang;
+ if (str_contains($bcp47, '-')) {
+ $parts = explode('-', $bcp47);
+ $parts[count($parts) - 1] = strtoupper($parts[count($parts) - 1]);
+ $bcp47 = implode('-', $parts);
}
- $markdownImgStr .= "[![$lang](./docs/i18n/flags/gen/$lang.svg)]($ghSearchUrl) ";
+
+ $markdownTable .= '| ' . implode(' | ', [
+ _t('gen.lang.' . $lang) . " ($bcp47)",
+ $progressBar . ' ' . $percentageInt . '%',
+ "[__contribute__]($ghSearchUrl)",
+ ]) . " |\n";
}
// In case we're located in ./cli/
if (!file_exists('constants.php')) {
chdir('..');
}
foreach (array_merge(['README.md'], glob('README.*.md') ?: []) as $readmePath) {
- writeToReadme($readmePath, rtrim($markdownImgStr));
+ writeToReadme($readmePath, rtrim($markdownTable));
}
exit();
}
@@ -233,7 +199,7 @@ DESCRIPTION
-h, --help display this help and exit.
-l, --language=LANG filter by LANG.
-r, --display-report display completion report.
- -g, --generate-readme generate readme for translation status.
+ -g, --generate-readme generate translation progress section in readme.
HELP;
exit();
diff --git a/docs/i18n/flags/README.md b/docs/i18n/flags/README.md
deleted file mode 100644
index 10443f0d9..000000000
--- a/docs/i18n/flags/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Used by [check.translation.php](../../../cli/check.translation.php)
-
-See also the translation key `gen.flag` for Unicode flags.
-
-Put an SVG here when the Unicode flag does not exist or does not have sufficient implementation support.
diff --git a/docs/i18n/flags/gen/cs.svg b/docs/i18n/flags/gen/cs.svg
deleted file mode 100644
index 638de7e04..000000000
--- a/docs/i18n/flags/gen/cs.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <text x="34" y="14">🇨🇿 88%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/de.svg b/docs/i18n/flags/gen/de.svg
deleted file mode 100644
index 3d73ff3d1..000000000
--- a/docs/i18n/flags/gen/de.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇩🇪 99%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/el.svg b/docs/i18n/flags/gen/el.svg
deleted file mode 100644
index 99d090aeb..000000000
--- a/docs/i18n/flags/gen/el.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="darkred" />
- <text x="34" y="14">🇬🇷 22%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/en-us.svg b/docs/i18n/flags/gen/en-us.svg
deleted file mode 100644
index 78a4b9076..000000000
--- a/docs/i18n/flags/gen/en-us.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇺🇸 99%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/en.svg b/docs/i18n/flags/gen/en.svg
deleted file mode 100644
index 96dca892e..000000000
--- a/docs/i18n/flags/gen/en.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇬🇧 100%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/es.svg b/docs/i18n/flags/gen/es.svg
deleted file mode 100644
index e9ed3f3e7..000000000
--- a/docs/i18n/flags/gen/es.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇪🇸 91%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/fa.svg b/docs/i18n/flags/gen/fa.svg
deleted file mode 100644
index f9a273509..000000000
--- a/docs/i18n/flags/gen/fa.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇮🇷 97%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/fi.svg b/docs/i18n/flags/gen/fi.svg
deleted file mode 100644
index 98ccc4e86..000000000
--- a/docs/i18n/flags/gen/fi.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇫🇮 92%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/fr.svg b/docs/i18n/flags/gen/fr.svg
deleted file mode 100644
index 315726e5c..000000000
--- a/docs/i18n/flags/gen/fr.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇫🇷 100%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/he.svg b/docs/i18n/flags/gen/he.svg
deleted file mode 100644
index ff45b2a3c..000000000
--- a/docs/i18n/flags/gen/he.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="darkred" />
- <text x="34" y="14">🇮🇱 45%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/hu.svg b/docs/i18n/flags/gen/hu.svg
deleted file mode 100644
index d09d601e5..000000000
--- a/docs/i18n/flags/gen/hu.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇭🇺 99%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/id.svg b/docs/i18n/flags/gen/id.svg
deleted file mode 100644
index 16eb76b21..000000000
--- a/docs/i18n/flags/gen/id.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇮🇩 97%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/it.svg b/docs/i18n/flags/gen/it.svg
deleted file mode 100644
index 8b62b3a77..000000000
--- a/docs/i18n/flags/gen/it.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇮🇹 96%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/ja.svg b/docs/i18n/flags/gen/ja.svg
deleted file mode 100644
index 001a08553..000000000
--- a/docs/i18n/flags/gen/ja.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇯🇵 95%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/ko.svg b/docs/i18n/flags/gen/ko.svg
deleted file mode 100644
index 9939c5484..000000000
--- a/docs/i18n/flags/gen/ko.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <text x="34" y="14">🇰🇷 88%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/lv.svg b/docs/i18n/flags/gen/lv.svg
deleted file mode 100644
index 9fabb834f..000000000
--- a/docs/i18n/flags/gen/lv.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <text x="34" y="14">🇱🇻 82%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/nl.svg b/docs/i18n/flags/gen/nl.svg
deleted file mode 100644
index b1330d183..000000000
--- a/docs/i18n/flags/gen/nl.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇳🇱 99%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/oc.svg b/docs/i18n/flags/gen/oc.svg
deleted file mode 100644
index 950bc44b9..000000000
--- a/docs/i18n/flags/gen/oc.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <!-- embedded SVG -->
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 797.96 530.973" width="16" height="16" x="9" y="2"><path fill="#d4001c" d="M0 0h797.96v530.973H0z"/><g fill="#fddd00"><path d="m184.195 267 9.126 7.138c14.632 11.443 38.501 35.909 45.015 77.3l1.721 10.924 8.361-7.312c14.038-12.277 55.754-44.434 116.757-53.224-8.792 61.003-40.948 102.718-53.224 116.756l-7.313 8.361 10.924 1.721c41.392 6.515 65.857 30.383 77.301 45.015l7.137 9.126 7.138-9.126c11.443-14.632 35.908-38.5 77.3-45.015l10.924-1.721-7.313-8.361c-12.276-14.038-44.432-55.753-53.224-116.756 61.003 8.79 102.719 40.947 116.757 53.224l8.361 7.312 1.72-10.924c6.515-41.391 30.384-65.857 45.015-77.3l9.127-7.138-9.127-7.138c-14.631-11.443-38.5-35.908-45.015-77.299l-1.72-10.925-8.361 7.312c-14.038 12.277-55.754 44.434-116.757 53.225 8.792-61.003 40.948-102.719 53.224-116.756l7.313-8.362-10.924-1.72c-41.392-6.516-65.857-30.384-77.3-45.016L400 51.195l-7.137 9.126c-11.444 14.632-35.909 38.5-77.301 45.016l-10.924 1.72 7.313 8.362c12.276 14.037 44.432 55.753 53.224 116.756-61.003-8.791-102.719-40.948-116.757-53.225l-8.361-7.312-1.721 10.925c-6.514 41.391-30.383 65.856-45.015 77.299zm35.126 0c27.829-25.798 34.255-54.425 34.255-54.425 40.626 34.242 103.986 41.96 135.665 43.666-1.707-31.679-9.424-95.039-43.666-135.666 0 0 28.626-6.425 54.425-34.255 25.799 27.83 54.425 34.255 54.425 34.255-34.242 40.627-41.959 103.987-43.666 135.666 31.679-1.706 95.039-9.424 135.665-43.666 0 0 6.426 28.627 34.255 54.425-27.829 25.799-34.255 54.425-34.255 54.425-40.626-34.242-103.986-41.96-135.665-43.666 1.707 31.679 9.424 95.039 43.666 135.666 0 0-28.626 6.425-54.425 34.255-25.799-27.83-54.425-34.255-54.425-34.255 34.242-40.627 41.959-103.987 43.666-135.666-31.679 1.706-95.039 9.424-135.665 43.666 0 0-6.426-28.626-34.255-54.425"/><circle cx="176.775" cy="267" r="18"/><circle cx="237.575" cy="164.576" r="18"/><circle cx="237.575" cy="369.425" r="18"/><circle cx="297.576" cy="104.575" r="18"/><circle cx="297.576" cy="429.426" r="18"/><circle cx="400" cy="43.774" r="18"/><circle cx="400" cy="490.226" r="18"/><circle cx="502.424" cy="104.575" r="18"/><circle cx="502.424" cy="429.426" r="18"/><circle cx="562.425" cy="164.576" r="18"/><circle cx="562.425" cy="369.425" r="18"/><circle cx="623.226" cy="267" r="18"/></g></svg>
- <!-- end of embedded SVG -->
- <text x="43" y="14">81%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/pl.svg b/docs/i18n/flags/gen/pl.svg
deleted file mode 100644
index 53c88bf8f..000000000
--- a/docs/i18n/flags/gen/pl.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇵🇱 100%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/pt-br.svg b/docs/i18n/flags/gen/pt-br.svg
deleted file mode 100644
index 8e2c5e007..000000000
--- a/docs/i18n/flags/gen/pt-br.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <text x="34" y="14">🇧🇷 88%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/pt-pt.svg b/docs/i18n/flags/gen/pt-pt.svg
deleted file mode 100644
index 00718c072..000000000
--- a/docs/i18n/flags/gen/pt-pt.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <text x="34" y="14">🇵🇹 88%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/ru.svg b/docs/i18n/flags/gen/ru.svg
deleted file mode 100644
index 24766b4b2..000000000
--- a/docs/i18n/flags/gen/ru.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <text x="34" y="14">🇷🇺 88%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/sk.svg b/docs/i18n/flags/gen/sk.svg
deleted file mode 100644
index b0a410ce5..000000000
--- a/docs/i18n/flags/gen/sk.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <text x="34" y="14">🇸🇰 88%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/tr.svg b/docs/i18n/flags/gen/tr.svg
deleted file mode 100644
index bad76bc56..000000000
--- a/docs/i18n/flags/gen/tr.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇹🇷 96%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/uk.svg b/docs/i18n/flags/gen/uk.svg
deleted file mode 100644
index 1b1a583ed..000000000
--- a/docs/i18n/flags/gen/uk.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇺🇦 99%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/zh-cn.svg b/docs/i18n/flags/gen/zh-cn.svg
deleted file mode 100644
index 27e539722..000000000
--- a/docs/i18n/flags/gen/zh-cn.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="green" />
- <text x="34" y="14">🇨🇳 90%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/gen/zh-tw.svg b/docs/i18n/flags/gen/zh-tw.svg
deleted file mode 100644
index e171cdce4..000000000
--- a/docs/i18n/flags/gen/zh-tw.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This file is automatically generated by `cli/check.translation.php -g` -->
-<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20">
- <g fill="white" font-size="12" font-family="Verdana" text-anchor="middle">
- <rect rx="3" width="70" height="20" fill="gold" />
- <text x="34" y="14">🇹🇼 88%</text>
- </g>
-</svg> \ No newline at end of file
diff --git a/docs/i18n/flags/oc.svg b/docs/i18n/flags/oc.svg
deleted file mode 100644
index e7ddfed8e..000000000
--- a/docs/i18n/flags/oc.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="797.96" height="530.973" viewBox="0 0 797.96 530.973"><path fill="#d4001c" d="M0 0h797.96v530.973H0z"/><g fill="#fddd00"><path d="m184.195 267 9.126 7.138c14.632 11.443 38.501 35.909 45.015 77.3l1.721 10.924 8.361-7.312c14.038-12.277 55.754-44.434 116.757-53.224-8.792 61.003-40.948 102.718-53.224 116.756l-7.313 8.361 10.924 1.721c41.392 6.515 65.857 30.383 77.301 45.015l7.137 9.126 7.138-9.126c11.443-14.632 35.908-38.5 77.3-45.015l10.924-1.721-7.313-8.361c-12.276-14.038-44.432-55.753-53.224-116.756 61.003 8.79 102.719 40.947 116.757 53.224l8.361 7.312 1.72-10.924c6.515-41.391 30.384-65.857 45.015-77.3l9.127-7.138-9.127-7.138c-14.631-11.443-38.5-35.908-45.015-77.299l-1.72-10.925-8.361 7.312c-14.038 12.277-55.754 44.434-116.757 53.225 8.792-61.003 40.948-102.719 53.224-116.756l7.313-8.362-10.924-1.72c-41.392-6.516-65.857-30.384-77.3-45.016L400 51.195l-7.137 9.126c-11.444 14.632-35.909 38.5-77.301 45.016l-10.924 1.72 7.313 8.362c12.276 14.037 44.432 55.753 53.224 116.756-61.003-8.791-102.719-40.948-116.757-53.225l-8.361-7.312-1.721 10.925c-6.514 41.391-30.383 65.856-45.015 77.299zm35.126 0c27.829-25.798 34.255-54.425 34.255-54.425 40.626 34.242 103.986 41.96 135.665 43.666-1.707-31.679-9.424-95.039-43.666-135.666 0 0 28.626-6.425 54.425-34.255 25.799 27.83 54.425 34.255 54.425 34.255-34.242 40.627-41.959 103.987-43.666 135.666 31.679-1.706 95.039-9.424 135.665-43.666 0 0 6.426 28.627 34.255 54.425-27.829 25.799-34.255 54.425-34.255 54.425-40.626-34.242-103.986-41.96-135.665-43.666 1.707 31.679 9.424 95.039 43.666 135.666 0 0-28.626 6.425-54.425 34.255-25.799-27.83-54.425-34.255-54.425-34.255 34.242-40.627 41.959-103.987 43.666-135.666-31.679 1.706-95.039 9.424-135.665 43.666 0 0-6.426-28.626-34.255-54.425"/><circle cx="176.775" cy="267" r="18"/><circle cx="237.575" cy="164.576" r="18"/><circle cx="237.575" cy="369.425" r="18"/><circle cx="297.576" cy="104.575" r="18"/><circle cx="297.576" cy="429.426" r="18"/><circle cx="400" cy="43.774" r="18"/><circle cx="400" cy="490.226" r="18"/><circle cx="502.424" cy="104.575" r="18"/><circle cx="502.424" cy="429.426" r="18"/><circle cx="562.425" cy="164.576" r="18"/><circle cx="562.425" cy="369.425" r="18"/><circle cx="623.226" cy="267" r="18"/></g></svg> \ No newline at end of file