diff --git a/README.fr.md b/README.fr.md
index eccecf71d..485f36887 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -227,33 +227,33 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio
| Langage | Progression | |
| - | - | - |
-| Čeština (cs) | ■■■■■■■■・・ 83% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Deutsch (de) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Ελληνικά (el) | ■■■・・・・・・・ 38% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Čeština (cs) | ■■■■■■■■・・ 82% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Deutsch (de) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Ελληνικά (el) | ■■■・・・・・・・ 37% | [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) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
-| فارسی (fa) | ■■■■■■■■■・ 92% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Español (es) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
+| فارسی (fa) | ■■■■■■■■■・ 91% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
| Suomi (fi) | ■■■■■■■■■・ 94% | [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) | ■■■■・・・・・・ 42% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Magyar (hu) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
+| עברית (he) | ■■■■・・・・・・ 41% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Magyar (hu) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
| Bahasa Indonesia (id) | ■■■■■■■■■・ 91% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Italiano (it) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 日本語 (ja) | ■■■■■■■■■・ 90% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 한국어 (ko) | ■■■■■■■■・・ 83% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Latviešu (lv) | ■■■■■■■・・・ 77% | [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) | ■■■■■■■・・・ 76% | [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) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Italiano (it) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 日本語 (ja) | ■■■■■■■■・・ 89% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 한국어 (ko) | ■■■■■■■■・・ 82% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Latviešu (lv) | ■■■■■■■・・・ 76% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Nederlands (nl) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Occitan (oc) | ■■■■■■■・・・ 75% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Polski (pl) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Brasil) (pt-BR) | ■■■■■■■■■・ 98% | [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) | ■■■■■■■■・・ 82% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Русский (ru) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Slovenčina (sk) | ■■■■■■■■・・ 83% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Türkçe (tr) | ■■■■■■■■■・ 91% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Русский (ru) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Slovenčina (sk) | ■■■■■■■■・・ 82% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Türkçe (tr) | ■■■■■■■■■・ 90% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
| Українська (uk) | ■■■■■■■■■・ 93% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 简体中文 (zh-CN) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 正體中文 (zh-TW) | ■■■■■■■■・・ 83% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 简体中文 (zh-CN) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 正體中文 (zh-TW) | ■■■■■■■■・・ 82% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) |
diff --git a/README.md b/README.md
index 6c25a8037..8f60dde56 100644
--- a/README.md
+++ b/README.md
@@ -123,33 +123,33 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E
| Language | Progress | |
| - | - | - |
-| Čeština (cs) | ■■■■■■■■・・ 83% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Deutsch (de) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Ελληνικά (el) | ■■■・・・・・・・ 38% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Čeština (cs) | ■■■■■■■■・・ 82% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Deutsch (de) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Ελληνικά (el) | ■■■・・・・・・・ 37% | [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) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
-| فارسی (fa) | ■■■■■■■■■・ 92% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Español (es) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
+| فارسی (fa) | ■■■■■■■■■・ 91% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
| Suomi (fi) | ■■■■■■■■■・ 94% | [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) | ■■■■・・・・・・ 42% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Magyar (hu) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
+| עברית (he) | ■■■■・・・・・・ 41% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Magyar (hu) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
| Bahasa Indonesia (id) | ■■■■■■■■■・ 91% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Italiano (it) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 日本語 (ja) | ■■■■■■■■■・ 90% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 한국어 (ko) | ■■■■■■■■・・ 83% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Latviešu (lv) | ■■■■■■■・・・ 77% | [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) | ■■■■■■■・・・ 76% | [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) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Italiano (it) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 日本語 (ja) | ■■■■■■■■・・ 89% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 한국어 (ko) | ■■■■■■■■・・ 82% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Latviešu (lv) | ■■■■■■■・・・ 76% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Nederlands (nl) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Occitan (oc) | ■■■■■■■・・・ 75% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Polski (pl) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Brasil) (pt-BR) | ■■■■■■■■■・ 98% | [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) | ■■■■■■■■・・ 82% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Русский (ru) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Slovenčina (sk) | ■■■■■■■■・・ 83% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Türkçe (tr) | ■■■■■■■■■・ 91% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Русский (ru) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Slovenčina (sk) | ■■■■■■■■・・ 82% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Türkçe (tr) | ■■■■■■■■■・ 90% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
| Українська (uk) | ■■■■■■■■■・ 93% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 简体中文 (zh-CN) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 正體中文 (zh-TW) | ■■■■■■■■・・ 83% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 简体中文 (zh-CN) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 正體中文 (zh-TW) | ■■■■■■■■・・ 82% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) |
diff --git a/app/Controllers/updateController.php b/app/Controllers/updateController.php
index e29ce754d..9a1fd0fb9 100644
--- a/app/Controllers/updateController.php
+++ b/app/Controllers/updateController.php
@@ -361,30 +361,32 @@ class FreshRSS_update_Controller extends FreshRSS_ActionController {
/**
* Check database is well-installed.
*
- * @return array of tested values.
+ * @return array|bool> of tested values.
*/
private static function check_install_database(): array {
$status = [
'connection' => true,
'tables' => false,
- 'categories' => false,
- 'feeds' => false,
- 'entries' => false,
- 'entrytmp' => false,
- 'tag' => false,
- 'entrytag' => false,
+ 'table' => [
+ 'categories' => false,
+ 'feeds' => false,
+ 'entries' => false,
+ 'entrytmp' => false,
+ 'tag' => false,
+ 'entrytag' => false,
+ ],
];
try {
$dbDAO = FreshRSS_Factory::createDatabaseDAO();
$status['tables'] = $dbDAO->tablesAreCorrect();
- $status['categories'] = $dbDAO->categoryIsCorrect();
- $status['feeds'] = $dbDAO->feedIsCorrect();
- $status['entries'] = $dbDAO->entryIsCorrect();
- $status['entrytmp'] = $dbDAO->entrytmpIsCorrect();
- $status['tag'] = $dbDAO->tagIsCorrect();
- $status['entrytag'] = $dbDAO->entrytagIsCorrect();
+ $status['table']['categories'] = $dbDAO->categoryIsCorrect();
+ $status['table']['feeds'] = $dbDAO->feedIsCorrect();
+ $status['table']['entries'] = $dbDAO->entryIsCorrect();
+ $status['table']['entrytmp'] = $dbDAO->entrytmpIsCorrect();
+ $status['table']['tag'] = $dbDAO->tagIsCorrect();
+ $status['table']['entrytag'] = $dbDAO->entrytagIsCorrect();
} catch (Minz_PDOConnectionException $e) {
$status['connection'] = false;
}
diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php
index f98803537..ab8c2cca7 100644
--- a/app/Models/DatabaseDAO.php
+++ b/app/Models/DatabaseDAO.php
@@ -91,29 +91,44 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo {
return $res == null ? [] : $this->listDaoToSchema($res);
}
- /** @param array $schema */
- public function checkTable(string $table, array $schema): bool {
- $columns = $this->getSchema($table);
- if (count($columns) === 0 || count($schema) === 0) {
+ /**
+ * Verify that database table has at least the given columns
+ *
+ * @param string $table
+ * @param array $expectedColumns
+ */
+ public function checkTable(string $table, array $expectedColumns): bool {
+ $columnInfo = $this->getSchema($table);
+ $exististingColumns = array_column($columnInfo, 'name');
+ if (count($exististingColumns) === 0 || count($expectedColumns) === 0) {
return false;
}
- $ok = count($columns) === count($schema);
- foreach ($columns as $c) {
- $ok &= in_array($c['name'], $schema, true);
+ //allow for extensions adding additional columns
+ $ok = count($exististingColumns) >= count($expectedColumns);
+ foreach ($expectedColumns as $name) {
+ $ok &= in_array($name, $exististingColumns, true);
}
return (bool)$ok;
}
public function categoryIsCorrect(): bool {
- return $this->checkTable('category', ['id', 'name']);
+ return $this->checkTable('category', [
+ 'id',
+ 'name',
+ 'kind',
+ 'lastUpdate',
+ 'error',
+ 'attributes',
+ ]);
}
public function feedIsCorrect(): bool {
return $this->checkTable('feed', [
'id',
'url',
+ 'kind',
'category',
'name',
'website',
@@ -131,12 +146,34 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo {
}
public function entryIsCorrect(): bool {
+ $entryDAO = FreshRSS_Factory::createEntryDao();
return $this->checkTable('entry', [
'id',
'guid',
'title',
'author',
- 'content_bin',
+ $entryDAO::isCompressed() ? 'content_bin' : 'content',
+ 'link',
+ 'date',
+ 'lastSeen',
+ 'lastUserModified',
+ 'hash',
+ 'is_read',
+ 'is_favorite',
+ 'id_feed',
+ 'tags',
+ 'attributes',
+ ]);
+ }
+
+ public function entrytmpIsCorrect(): bool {
+ $entryDAO = FreshRSS_Factory::createEntryDao();
+ return $this->checkTable('entrytmp', [
+ 'id',
+ 'guid',
+ 'title',
+ 'author',
+ $entryDAO::isCompressed() ? 'content_bin' : 'content',
'link',
'date',
'lastSeen',
@@ -145,12 +182,7 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo {
'is_favorite',
'id_feed',
'tags',
- ]);
- }
-
- public function entrytmpIsCorrect(): bool {
- return $this->checkTable('entrytmp', [
- 'id', 'guid', 'title', 'author', 'content_bin', 'link', 'date', 'lastSeen', 'hash', 'is_read', 'is_favorite', 'id_feed', 'tags'
+ 'attributes',
]);
}
diff --git a/app/Models/DatabaseDAOPGSQL.php b/app/Models/DatabaseDAOPGSQL.php
index 1ead69192..ff6fd2fa0 100644
--- a/app/Models/DatabaseDAOPGSQL.php
+++ b/app/Models/DatabaseDAOPGSQL.php
@@ -13,7 +13,7 @@ class FreshRSS_DatabaseDAOPGSQL extends FreshRSS_DatabaseDAOSQLite {
#[\Override]
public function tablesAreCorrect(): bool {
$db = FreshRSS_Context::systemConf()->db;
- $sql = 'SELECT * FROM pg_catalog.pg_tables where tableowner=:tableowner';
+ $sql = 'SELECT tablename FROM pg_catalog.pg_tables where tableowner=:tableowner';
$res = $this->fetchAssoc($sql, [':tableowner' => $db['user']]);
if ($res == null) {
return false;
diff --git a/app/Models/DatabaseDAOSQLite.php b/app/Models/DatabaseDAOSQLite.php
index 661c669dc..517633275 100644
--- a/app/Models/DatabaseDAOSQLite.php
+++ b/app/Models/DatabaseDAOSQLite.php
@@ -44,20 +44,6 @@ class FreshRSS_DatabaseDAOSQLite extends FreshRSS_DatabaseDAO {
return [];
}
- #[\Override]
- public function entryIsCorrect(): bool {
- return $this->checkTable('entry', [
- 'id', 'guid', 'title', 'author', 'content', 'link', 'date', 'lastSeen', 'hash', 'is_read', 'is_favorite', 'id_feed', 'tags',
- ]);
- }
-
- #[\Override]
- public function entrytmpIsCorrect(): bool {
- return $this->checkTable('entrytmp', [
- 'id', 'guid', 'title', 'author', 'content', 'link', 'date', 'lastSeen', 'hash', 'is_read', 'is_favorite', 'id_feed', 'tags'
- ]);
- }
-
/**
* @param array $dao
* @return array{'name':string,'type':string,'notnull':bool,'default':mixed}
diff --git a/app/Models/View.php b/app/Models/View.php
index 6b44c0816..fa1b2760a 100644
--- a/app/Models/View.php
+++ b/app/Models/View.php
@@ -59,7 +59,7 @@ class FreshRSS_View extends Minz_View {
/** @var array */
public array $status_php;
public bool $update_to_apply;
- /** @var array */
+ /** @var array|bool> */
public array $status_database;
public bool $is_release_channel_stable;
diff --git a/app/i18n/cs/install.php b/app/i18n/cs/install.php
index eb7e059ea..640b13432 100644
--- a/app/i18n/cs/install.php
+++ b/app/i18n/cs/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Zkontrolujte oprávnění adresáře %1$s pro uživatele %2$s. Server HTTP musí mít oprávnění pro zápis.',
'ok' => 'Oprávnění adresáře data jsou v pořádku.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Nelze nalézt požadovanou knihovnu pro procházení DOM.',
'ok' => 'Máte požadovanou knihovnu pro procházení DOM.',
diff --git a/app/i18n/de/install.php b/app/i18n/de/install.php
index 0417da943..2e327bfef 100644
--- a/app/i18n/de/install.php
+++ b/app/i18n/de/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses %s. Der HTTP-Server muss Schreibrechte besitzen.',
'ok' => 'Die Berechtigungen des Verzeichnisses %s sind in Ordnung.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Ihnen fehlt eine benötigte Bibliothek um DOM zu durchstöbern.',
'ok' => 'Sie haben die benötigte Bibliothek um DOM zu durchstöbern.',
diff --git a/app/i18n/el/install.php b/app/i18n/el/install.php
index ff8dc28bc..09649f267 100644
--- a/app/i18n/el/install.php
+++ b/app/i18n/el/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Ελέγξτε τα δικαιώματα στον κατάλογο %1$s για τον χρήστη %2$s. Ο διακομιστής HTTP πρέπει να έχει δικαίωμα εγγραφής.',
'ok' => 'Τα δικαιώματα στον κατάλογο δεδομένων (data) είναι εντάξει.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Δεν βρέθηκε η απαιτούμενη βιβλιοθήκη για περιήγηση στο DOM.',
'ok' => 'Βρέθηκε η απαιτούμενη βιβλιοθήκη για περιήγηση στο DOM.',
diff --git a/app/i18n/en-US/install.php b/app/i18n/en-US/install.php
index 9e7298308..e7f748b59 100644
--- a/app/i18n/en-US/install.php
+++ b/app/i18n/en-US/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.',
'ok' => 'Permissions on the data directory are good.', // IGNORE
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // IGNORE
+ 'ok' => 'Database connection is good.', // IGNORE
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // IGNORE
+ 'ok' => 'Database table "%s" is good.', // IGNORE
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // IGNORE
+ 'ok' => 'All database tables exist.', // IGNORE
+ ),
+ 'database-title' => 'Database', // IGNORE
'dom' => array(
'nok' => 'Cannot find the required library to browse the DOM.', // IGNORE
'ok' => 'You have the required library to browse the DOM.', // IGNORE
diff --git a/app/i18n/en/install.php b/app/i18n/en/install.php
index 5d00816e3..4f0099af0 100644
--- a/app/i18n/en/install.php
+++ b/app/i18n/en/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permission.',
'ok' => 'Permissions on the data directory are good.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.',
+ 'ok' => 'Database connection is good.',
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.',
+ 'ok' => 'Database table "%s" is good.',
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.',
+ 'ok' => 'All database tables exist.',
+ ),
+ 'database-title' => 'Database',
'dom' => array(
'nok' => 'Cannot find the required library to browse the DOM.',
'ok' => 'You have the required library to browse the DOM.',
diff --git a/app/i18n/es/install.php b/app/i18n/es/install.php
index 08c38ef96..602a1304a 100644
--- a/app/i18n/es/install.php
+++ b/app/i18n/es/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Comprueba los permisos del directorio %s. El servidor HTTP debe contar con permisos de escritura.',
'ok' => 'Los permisos del directorio data son correctos.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'No se ha podido localizar la librería necesaria para explorar la DOM.',
'ok' => 'Dispones de la librería necesaria para explorar la DOM.',
diff --git a/app/i18n/fa/install.php b/app/i18n/fa/install.php
index 94ccfd198..526ba757e 100644
--- a/app/i18n/fa/install.php
+++ b/app/i18n/fa/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'مجوزهای دایرکتوری %1$s را برای کاربر %2$s بررسی کنید. سرور HTTP باید مجوز نوشتن داشته باشد.',
'ok' => 'مجوزهای مربوط به دایرکتوری داده خوب است.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'کتابخانه مورد نیاز برای مرور DOM را نمیتوان پیدا کرد.',
'ok' => 'شما کتابخانه مورد نیاز برای مرور DOM را دارید.',
diff --git a/app/i18n/fi/install.php b/app/i18n/fi/install.php
index aa67de894..898bbdb92 100644
--- a/app/i18n/fi/install.php
+++ b/app/i18n/fi/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Tarkista käyttäjän %2$s oikeudet hakemistoon %1$s. HTTP-palvelimella on oltava kirjoitusoikeus.',
'ok' => 'Data-hakemiston oikeudet ovat oikein.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'DOM-rakenteen selaamiseen tarvittavaa kirjastoa ei löydy.',
'ok' => 'DOM-rakenteen selaamiseen tarvittava kirjasto löytyy.',
diff --git a/app/i18n/fr/install.php b/app/i18n/fr/install.php
index 21a3f74cd..eb6fe72c6 100644
--- a/app/i18n/fr/install.php
+++ b/app/i18n/fr/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Veuillez vérifier les droits de l’utilisateur %2$s sur le répertoire %1$s. Le serveur HTTP doit être capable d’écrire dedans.',
'ok' => 'Les droits sur le répertoire de data sont bons.',
),
+ 'database-connection' => array(
+ 'nok' => 'Erreur de connexion à la base de données.',
+ 'ok' => 'La connexion à la base de données est bonne.',
+ ),
+ 'database-table' => array(
+ 'nok' => 'La table de la base de données "%s" est incomplète.',
+ 'ok' => 'La table de la base de données "%s" est correcte.',
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Certaines tables de la base de données sont manquantes.',
+ 'ok' => 'Toutes les tables de la base de données existent.',
+ ),
+ 'database-title' => 'Base de données',
'dom' => array(
'nok' => 'Impossible de trouver la librairie requise pour parcourir le DOM.',
'ok' => 'Vous disposez de la librairie requise pour parcourir le DOM.',
@@ -59,8 +72,8 @@ return array(
'ok' => 'Les droits sur le répertoire des favicons sont bons.',
),
'fileinfo' => array(
- 'nok' => 'Vous ne disposez pas de la librairie recommendée php-fileinfo.',
- 'ok' => 'Vous disposez de la librairie recommendée php-fileinfo.',
+ 'nok' => 'Vous ne disposez pas de la librairie recommandéee php-fileinfo.',
+ 'ok' => 'Vous disposez de la librairie recommandéee php-fileinfo.',
),
'files' => 'Installation des fichiers',
'intl' => array(
diff --git a/app/i18n/he/install.php b/app/i18n/he/install.php
index b8f972e05..5d5616458 100644
--- a/app/i18n/he/install.php
+++ b/app/i18n/he/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.',
'ok' => 'ההרשאות בתיקיית הדאטא תקינות',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'הספרייה הנדרשת לסיור ב DOM אינה מותקנת (php-xml package)',
'ok' => 'הספרייה הנדרשת לסיור ב DOM מותקנת',
diff --git a/app/i18n/hu/install.php b/app/i18n/hu/install.php
index 6596b36dd..f1c2a4cec 100644
--- a/app/i18n/hu/install.php
+++ b/app/i18n/hu/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Ellenőrizd a(z) %1$s könyvtáron a(z) %2$s felhasználónak. A HTTP szervernek szüksége van írási jogosultságra.',
'ok' => 'A data könyvtár jogosultságai rendben vannak.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'A DOM böngészéséhez nem található a könyvtár.',
'ok' => 'A DOM böngészésére való könyvtár telepítve van.',
diff --git a/app/i18n/id/install.php b/app/i18n/id/install.php
index 2f86b4ae6..cde661eed 100644
--- a/app/i18n/id/install.php
+++ b/app/i18n/id/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Periksa izin direktori %1$s untuk pengguna %2$s. Peladen HTTP harus memiliki izin menulis di direktori tersebut.',
'ok' => 'Izin untuk direktori data sudah bagus.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Tidak dapat menemukan pustaka yang diperlukan untuk menelusuri DOM.',
'ok' => 'Anda memiliki pustaka yang diperlukan untuk menelusuri DOM.',
diff --git a/app/i18n/it/install.php b/app/i18n/it/install.php
index c7272b7ea..e4ca36ed8 100644
--- a/app/i18n/it/install.php
+++ b/app/i18n/it/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Verifica i permessi sulla cartella %s. Il server HTTP deve avere i permessi per scriverci dentro.',
'ok' => 'I permessi sulla cartella data sono corretti.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Manca una libreria richiesta per leggere DOM.',
'ok' => 'Libreria richiesta per leggere DOM presente.',
diff --git a/app/i18n/ja/install.php b/app/i18n/ja/install.php
index 7b1b33fb9..860cf7666 100644
--- a/app/i18n/ja/install.php
+++ b/app/i18n/ja/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'この %1$s ディレクトリの %2$s ユーザーのアクセス権限を確認してください。HTTPサーバーは編集権限を必要としています。',
'ok' => 'ディレクトリのパーミッションは正しく設定されています。',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'DOMを検索するライブラリが見つかりませんでした。',
'ok' => 'DOMを検索するライブラリが見つかりました。',
diff --git a/app/i18n/ko/install.php b/app/i18n/ko/install.php
index 95b6e81c4..f2bd7a233 100644
--- a/app/i18n/ko/install.php
+++ b/app/i18n/ko/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => '%s 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다',
'ok' => 'data 디렉토리의 권한이 올바르게 설정되었습니다.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'DOM을 다룰 수 있는 라이브러리를 찾을 수 없습니다 (php-xml 패키지).',
'ok' => 'DOM을 다룰 수 있는 라이브러리가 설치되어 있습니다.',
diff --git a/app/i18n/lv/install.php b/app/i18n/lv/install.php
index 343f1392c..6466837cb 100644
--- a/app/i18n/lv/install.php
+++ b/app/i18n/lv/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Pārbaudiet atļaujas %1$s mapē priekš lietotāja %2$s. HTTP serverim jābūt piešķirtām rakstīšanas atļaujām.',
'ok' => 'Ar datu mapes atļaujām viss ir kārtībā.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Nevar atrast nepieciešamo bibliotēku, lai pārlūkotu DOM (php-xml pakete).',
'ok' => 'Jums ir nepieciešamā bibliotēka, lai pārlūkotu DOM.',
diff --git a/app/i18n/nl/install.php b/app/i18n/nl/install.php
index dc6ba99f6..2af2d7b1e 100644
--- a/app/i18n/nl/install.php
+++ b/app/i18n/nl/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Controleer permissies van de %s map. HTTP server moet rechten hebben om er in te kunnen schrijven.',
'ok' => 'Permissies van de data map zijn goed.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'U mist een benodigde bibliotheek om te bladeren in de DOM.',
'ok' => 'U hebt de benodigde bibliotheek om te bladeren in de DOM.',
diff --git a/app/i18n/oc/install.php b/app/i18n/oc/install.php
index 442b0fc61..8c9e4f314 100644
--- a/app/i18n/oc/install.php
+++ b/app/i18n/oc/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Volgatz verificar los dreches sul repertòri %s. Lo servidor HTTP deu poder escriure dedins.',
'ok' => 'Los dreches sul repertòri data son bons.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Impossible de trobar una bibliotèca per percórrer lo DOM.',
'ok' => 'Avètz la bibliotèca per percórrer lo DOM.',
diff --git a/app/i18n/pl/install.php b/app/i18n/pl/install.php
index 788dfcf5b..59c09dafa 100644
--- a/app/i18n/pl/install.php
+++ b/app/i18n/pl/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Sprawdź uprawnienia użytkownika %2$s dla katalogu %1$s. Użytkownik serwera WWW musi mieć uprawnienia do zapisu.',
'ok' => 'Uprawnienia dla katalogu danych się zgadzają.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Nie znaleziono wymaganej biblioteki do korzystania z DOM-u.',
'ok' => 'Znaleziono wymaganą bibliotekę do korzystania z DOM-u.',
diff --git a/app/i18n/pt-BR/install.php b/app/i18n/pt-BR/install.php
index 5a3670437..905d8d598 100644
--- a/app/i18n/pt-BR/install.php
+++ b/app/i18n/pt-BR/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Verifique as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.',
'ok' => 'Permissões no diretório data estão corretos.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Não foi possível encontrar uma biblioteca necessária para navegar pelo DOM (php-xml).',
'ok' => 'Você tem a biblioteca necessária para navegar pelo DOM.',
diff --git a/app/i18n/pt-PT/install.php b/app/i18n/pt-PT/install.php
index 5aa0989a2..10215222f 100644
--- a/app/i18n/pt-PT/install.php
+++ b/app/i18n/pt-PT/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Verifique as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.',
'ok' => 'Permissões no diretório data estão corretos.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Não foi possível encontrar uma biblioteca necessária para navegar pelo DOM (php-xml).',
'ok' => 'Tem a biblioteca necessária para navegar pelo DOM.',
diff --git a/app/i18n/ru/install.php b/app/i18n/ru/install.php
index 9814e91ee..f7f0c9584 100644
--- a/app/i18n/ru/install.php
+++ b/app/i18n/ru/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Проверьте права доступа к папке %s . Веб-сервер должен иметь право на запись в эту папку.',
'ok' => 'Права на ./data/ в порядке.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'У вас не установлена необходимая библиотека для просмотра DOM (пакет php-xml).',
'ok' => 'У вас установлена необходимая библиотека для просмотра DOM.',
diff --git a/app/i18n/sk/install.php b/app/i18n/sk/install.php
index 567f7ad42..4640c1eee 100644
--- a/app/i18n/sk/install.php
+++ b/app/i18n/sk/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Skontrolujte oprávnenia prístupu do priečinku %s. HTTP server musí mať právo doň zapisovať.',
'ok' => 'Oprávnenia prístupu do priečinku údajov sú OK.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Nepodarilo sa nájsť požadovanú knižnicu na prehliadanie DOM.',
'ok' => 'Našla sa požadovaná knižnica na prehliadanie DOM.',
diff --git a/app/i18n/tr/install.php b/app/i18n/tr/install.php
index fbc05b4cf..f697d81d4 100644
--- a/app/i18n/tr/install.php
+++ b/app/i18n/tr/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => '%2$s kullanıcısı için %1$s dizinindeki izinleri kontrol edin. HTTP sunucusunun yazma izni olmalı.',
'ok' => 'Veri dizinindeki izinler uygun.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'DOM’u taramak için gerekli kütüphane bulunamadı.',
'ok' => 'DOM’u taramak için gerekli kütüphaneniz var.',
diff --git a/app/i18n/uk/install.php b/app/i18n/uk/install.php
index 055e32007..1977de405 100644
--- a/app/i18n/uk/install.php
+++ b/app/i18n/uk/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => 'Перевірте доступ до каталога %1$s для користувача %2$s. HTTP-серверу потрібен дозвіл на запис.',
'ok' => 'Доступ до каталога даних працює.',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => 'Не вдалося знайти необхідну бібліотеку роботи з DOM.',
'ok' => 'У вас є необхідна бібліотека роботи з DOM.',
diff --git a/app/i18n/zh-CN/install.php b/app/i18n/zh-CN/install.php
index 708d74245..c5a51d5c9 100644
--- a/app/i18n/zh-CN/install.php
+++ b/app/i18n/zh-CN/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。',
'ok' => 'data 目录权限正常',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => '找不到用于浏览 DOM 的库(php-xml 包)',
'ok' => '已找到用于浏览 DOM 的库',
diff --git a/app/i18n/zh-TW/install.php b/app/i18n/zh-TW/install.php
index c7b2e17f3..37c2564aa 100644
--- a/app/i18n/zh-TW/install.php
+++ b/app/i18n/zh-TW/install.php
@@ -50,6 +50,19 @@ return array(
'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。',
'ok' => 'data 目錄權限正常',
),
+ 'database-connection' => array(
+ 'nok' => 'Database connection error.', // TODO
+ 'ok' => 'Database connection is good.', // TODO
+ ),
+ 'database-table' => array(
+ 'nok' => 'Database table "%s" is incomplete.', // TODO
+ 'ok' => 'Database table "%s" is good.', // TODO
+ ),
+ 'database-tables' => array(
+ 'nok' => 'Some database tables are missing.', // TODO
+ 'ok' => 'All database tables exist.', // TODO
+ ),
+ 'database-title' => 'Database', // TODO
'dom' => array(
'nok' => '找不到用於瀏覽 DOM 的庫(php-xml)',
'ok' => '已找到用於瀏覽 DOM 的庫',
diff --git a/app/views/update/checkInstall.phtml b/app/views/update/checkInstall.phtml
index 6c1b5f69d..470b2dc5e 100644
--- a/app/views/update/checkInstall.phtml
+++ b/app/views/update/checkInstall.phtml
@@ -27,14 +27,18 @@
- = _t('install.check.database') ?>
+ = _t('install.check.database-title') ?>
status_database as $key => $status) { ?>
-
- = _t('install.check.' . $key . '.' . ($status === 'ok' ? 'ok' : 'nok')) ?>
+
+
+ = _t('install.check.database-' . $key . '.' . ($status === true ? 'ok' : 'nok')) ?>
+
+
+ status_database['table'] as $key => $status) { ?>
+
+ = sprintf(_t('install.check.database-table.' . ($status === true ? 'ok' : 'nok')), $key) ?>
- */ ?>