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 @@
[](https://liberapay.com/FreshRSS/donate)
-
-
-
-[](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F)
-
-
-
* 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
+
+
+
+
+| 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) |
+
+
# 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 @@
[](https://liberapay.com/FreshRSS/donate)
-
-
-
-[](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) [](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F)
-
-
-
* 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
+
+
+
+
+| 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) |
+
+
# 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 %2F 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 %2F 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>/s', <<
-
+
- $markdownImgStr
+ $markdownTable
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(
- '/
- EOF;
+ // 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);
}
- if (file_put_contents($genPath, $template) === false) {
- echo 'Error: Fail while writing to ' . $genPath, PHP_EOL;
- exit(1);
- }
- $markdownImgStr .= "[]($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 @@
-
-
-
-
- 🇨🇿 88%
-
-
\ 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 @@
-
-
-
-
- 🇩🇪 99%
-
-
\ 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 @@
-
-
-
-
- 🇬🇷 22%
-
-
\ 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 @@
-
-
-
-
- 🇺🇸 99%
-
-
\ 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 @@
-
-
-
-
- 🇬🇧 100%
-
-
\ 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 @@
-
-
-
-
- 🇪🇸 91%
-
-
\ 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 @@
-
-
-
-
- 🇮🇷 97%
-
-
\ 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 @@
-
-
-
-
- 🇫🇮 92%
-
-
\ 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 @@
-
-
-
-
- 🇫🇷 100%
-
-
\ 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 @@
-
-
-
-
- 🇮🇱 45%
-
-
\ 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 @@
-
-
-
-
- 🇭🇺 99%
-
-
\ 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 @@
-
-
-
-
- 🇮🇩 97%
-
-
\ 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 @@
-
-
-
-
- 🇮🇹 96%
-
-
\ 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 @@
-
-
-
-
- 🇯🇵 95%
-
-
\ 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 @@
-
-
-
-
- 🇰🇷 88%
-
-
\ 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 @@
-
-
-
-
- 🇱🇻 82%
-
-
\ 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 @@
-
-
-
-
- 🇳🇱 99%
-
-
\ 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 @@
-
-
-
-
-
-
-
- 81%
-
-
\ 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 @@
-
-
-
-
- 🇵🇱 100%
-
-
\ 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 @@
-
-
-
-
- 🇧🇷 88%
-
-
\ 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 @@
-
-
-
-
- 🇵🇹 88%
-
-
\ 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 @@
-
-
-
-
- 🇷🇺 88%
-
-
\ 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 @@
-
-
-
-
- 🇸🇰 88%
-
-
\ 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 @@
-
-
-
-
- 🇹🇷 96%
-
-
\ 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 @@
-
-
-
-
- 🇺🇦 99%
-
-
\ 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 @@
-
-
-
-
- 🇨🇳 90%
-
-
\ 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 @@
-
-
-
-
- 🇹🇼 88%
-
-
\ 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 @@
-
\ No newline at end of file