From b6f4276c6cc2e5a53f0a4afb1536960427fa995e Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Mon, 6 Oct 2025 15:09:01 -0400 Subject: Change regional language codes (#8065) * Change regional language codes According to `ISO-639-1` and `ISO-3166-1 alpha-2` recommendations, regional languages must be written with the language code in lowercase and the region in uppercase. For instance, we should have `en-US` instead of `en-us`. Folders have been updated to reflect those recommendations and regional language codes have been updated in the translation files. * Update README files * Fix configuration for typos * Revert language order in documentation * Remove unnecessary code * Change language configuration getter * Fix phpstan error * Fix typo * Add types * escape regex * Move language logic to avoid magic or deprecated methods * Minor fix on regex --- .typos.toml | 9 +- README.fr.md | 10 +- README.md | 10 +- app/Models/Context.php | 6 + app/i18n/cs/gen.php | 10 +- app/i18n/de/gen.php | 10 +- app/i18n/el/gen.php | 10 +- app/i18n/en-US/admin.php | 240 ++++++++++++++++++++++++ app/i18n/en-US/api.php | 33 ++++ app/i18n/en-US/conf.php | 372 ++++++++++++++++++++++++++++++++++++++ app/i18n/en-US/feedback.php | 152 ++++++++++++++++ app/i18n/en-US/gen.php | 277 ++++++++++++++++++++++++++++ app/i18n/en-US/index.php | 110 +++++++++++ app/i18n/en-US/install.php | 128 +++++++++++++ app/i18n/en-US/sub.php | 307 +++++++++++++++++++++++++++++++ app/i18n/en-US/user.php | 54 ++++++ app/i18n/en-us/admin.php | 240 ------------------------ app/i18n/en-us/api.php | 33 ---- app/i18n/en-us/conf.php | 372 -------------------------------------- app/i18n/en-us/feedback.php | 152 ---------------- app/i18n/en-us/gen.php | 277 ---------------------------- app/i18n/en-us/index.php | 110 ----------- app/i18n/en-us/install.php | 128 ------------- app/i18n/en-us/sub.php | 307 ------------------------------- app/i18n/en-us/user.php | 54 ------ app/i18n/en/gen.php | 10 +- app/i18n/es/gen.php | 10 +- app/i18n/fa/gen.php | 12 +- app/i18n/fi/gen.php | 10 +- app/i18n/fr/gen.php | 10 +- app/i18n/he/gen.php | 10 +- app/i18n/hu/gen.php | 10 +- app/i18n/id/gen.php | 10 +- app/i18n/it/gen.php | 10 +- app/i18n/ja/gen.php | 10 +- app/i18n/ko/gen.php | 10 +- app/i18n/lv/gen.php | 10 +- app/i18n/nl/gen.php | 10 +- app/i18n/oc/gen.php | 10 +- app/i18n/pl/gen.php | 10 +- app/i18n/pt-BR/admin.php | 240 ++++++++++++++++++++++++ app/i18n/pt-BR/api.php | 33 ++++ app/i18n/pt-BR/conf.php | 372 ++++++++++++++++++++++++++++++++++++++ app/i18n/pt-BR/feedback.php | 152 ++++++++++++++++ app/i18n/pt-BR/gen.php | 277 ++++++++++++++++++++++++++++ app/i18n/pt-BR/index.php | 110 +++++++++++ app/i18n/pt-BR/install.php | 128 +++++++++++++ app/i18n/pt-BR/sub.php | 307 +++++++++++++++++++++++++++++++ app/i18n/pt-BR/user.php | 54 ++++++ app/i18n/pt-PT/admin.php | 240 ++++++++++++++++++++++++ app/i18n/pt-PT/api.php | 33 ++++ app/i18n/pt-PT/conf.php | 372 ++++++++++++++++++++++++++++++++++++++ app/i18n/pt-PT/feedback.php | 152 ++++++++++++++++ app/i18n/pt-PT/gen.php | 277 ++++++++++++++++++++++++++++ app/i18n/pt-PT/index.php | 110 +++++++++++ app/i18n/pt-PT/install.php | 128 +++++++++++++ app/i18n/pt-PT/sub.php | 307 +++++++++++++++++++++++++++++++ app/i18n/pt-PT/user.php | 54 ++++++ app/i18n/pt-br/admin.php | 240 ------------------------ app/i18n/pt-br/api.php | 33 ---- app/i18n/pt-br/conf.php | 372 -------------------------------------- app/i18n/pt-br/feedback.php | 152 ---------------- app/i18n/pt-br/gen.php | 277 ---------------------------- app/i18n/pt-br/index.php | 110 ----------- app/i18n/pt-br/install.php | 128 ------------- app/i18n/pt-br/sub.php | 307 ------------------------------- app/i18n/pt-br/user.php | 54 ------ app/i18n/pt-pt/admin.php | 240 ------------------------ app/i18n/pt-pt/api.php | 33 ---- app/i18n/pt-pt/conf.php | 372 -------------------------------------- app/i18n/pt-pt/feedback.php | 152 ---------------- app/i18n/pt-pt/gen.php | 277 ---------------------------- app/i18n/pt-pt/index.php | 110 ----------- app/i18n/pt-pt/install.php | 128 ------------- app/i18n/pt-pt/sub.php | 307 ------------------------------- app/i18n/pt-pt/user.php | 54 ------ app/i18n/ru/gen.php | 10 +- app/i18n/sk/gen.php | 10 +- app/i18n/tr/gen.php | 10 +- app/i18n/uk/gen.php | 10 +- app/i18n/zh-CN/admin.php | 240 ++++++++++++++++++++++++ app/i18n/zh-CN/api.php | 33 ++++ app/i18n/zh-CN/conf.php | 372 ++++++++++++++++++++++++++++++++++++++ app/i18n/zh-CN/feedback.php | 152 ++++++++++++++++ app/i18n/zh-CN/gen.php | 277 ++++++++++++++++++++++++++++ app/i18n/zh-CN/index.php | 110 +++++++++++ app/i18n/zh-CN/install.php | 128 +++++++++++++ app/i18n/zh-CN/sub.php | 307 +++++++++++++++++++++++++++++++ app/i18n/zh-CN/user.php | 54 ++++++ app/i18n/zh-TW/admin.php | 240 ++++++++++++++++++++++++ app/i18n/zh-TW/api.php | 33 ++++ app/i18n/zh-TW/conf.php | 372 ++++++++++++++++++++++++++++++++++++++ app/i18n/zh-TW/feedback.php | 152 ++++++++++++++++ app/i18n/zh-TW/gen.php | 277 ++++++++++++++++++++++++++++ app/i18n/zh-TW/index.php | 110 +++++++++++ app/i18n/zh-TW/install.php | 128 +++++++++++++ app/i18n/zh-TW/sub.php | 307 +++++++++++++++++++++++++++++++ app/i18n/zh-TW/user.php | 54 ++++++ app/i18n/zh-cn/admin.php | 240 ------------------------ app/i18n/zh-cn/api.php | 33 ---- app/i18n/zh-cn/conf.php | 372 -------------------------------------- app/i18n/zh-cn/feedback.php | 152 ---------------- app/i18n/zh-cn/gen.php | 277 ---------------------------- app/i18n/zh-cn/index.php | 110 ----------- app/i18n/zh-cn/install.php | 128 ------------- app/i18n/zh-cn/sub.php | 307 ------------------------------- app/i18n/zh-cn/user.php | 54 ------ app/i18n/zh-tw/admin.php | 240 ------------------------ app/i18n/zh-tw/api.php | 33 ---- app/i18n/zh-tw/conf.php | 372 -------------------------------------- app/i18n/zh-tw/feedback.php | 152 ---------------- app/i18n/zh-tw/gen.php | 277 ---------------------------- app/i18n/zh-tw/index.php | 110 ----------- app/i18n/zh-tw/install.php | 128 ------------- app/i18n/zh-tw/sub.php | 307 ------------------------------- app/i18n/zh-tw/user.php | 54 ------ cli/check.translation.php | 10 +- docs/en/users/05_Configuration.md | 14 +- docs/fr/users/05_Configuration.md | 15 +- 119 files changed, 8519 insertions(+), 8507 deletions(-) create mode 100644 app/i18n/en-US/admin.php create mode 100644 app/i18n/en-US/api.php create mode 100644 app/i18n/en-US/conf.php create mode 100644 app/i18n/en-US/feedback.php create mode 100644 app/i18n/en-US/gen.php create mode 100644 app/i18n/en-US/index.php create mode 100644 app/i18n/en-US/install.php create mode 100644 app/i18n/en-US/sub.php create mode 100644 app/i18n/en-US/user.php delete mode 100644 app/i18n/en-us/admin.php delete mode 100644 app/i18n/en-us/api.php delete mode 100644 app/i18n/en-us/conf.php delete mode 100644 app/i18n/en-us/feedback.php delete mode 100644 app/i18n/en-us/gen.php delete mode 100644 app/i18n/en-us/index.php delete mode 100644 app/i18n/en-us/install.php delete mode 100644 app/i18n/en-us/sub.php delete mode 100644 app/i18n/en-us/user.php create mode 100644 app/i18n/pt-BR/admin.php create mode 100644 app/i18n/pt-BR/api.php create mode 100644 app/i18n/pt-BR/conf.php create mode 100644 app/i18n/pt-BR/feedback.php create mode 100644 app/i18n/pt-BR/gen.php create mode 100644 app/i18n/pt-BR/index.php create mode 100644 app/i18n/pt-BR/install.php create mode 100644 app/i18n/pt-BR/sub.php create mode 100644 app/i18n/pt-BR/user.php create mode 100644 app/i18n/pt-PT/admin.php create mode 100644 app/i18n/pt-PT/api.php create mode 100644 app/i18n/pt-PT/conf.php create mode 100644 app/i18n/pt-PT/feedback.php create mode 100644 app/i18n/pt-PT/gen.php create mode 100644 app/i18n/pt-PT/index.php create mode 100644 app/i18n/pt-PT/install.php create mode 100644 app/i18n/pt-PT/sub.php create mode 100644 app/i18n/pt-PT/user.php delete mode 100644 app/i18n/pt-br/admin.php delete mode 100644 app/i18n/pt-br/api.php delete mode 100644 app/i18n/pt-br/conf.php delete mode 100644 app/i18n/pt-br/feedback.php delete mode 100644 app/i18n/pt-br/gen.php delete mode 100644 app/i18n/pt-br/index.php delete mode 100644 app/i18n/pt-br/install.php delete mode 100644 app/i18n/pt-br/sub.php delete mode 100644 app/i18n/pt-br/user.php delete mode 100644 app/i18n/pt-pt/admin.php delete mode 100644 app/i18n/pt-pt/api.php delete mode 100644 app/i18n/pt-pt/conf.php delete mode 100644 app/i18n/pt-pt/feedback.php delete mode 100644 app/i18n/pt-pt/gen.php delete mode 100644 app/i18n/pt-pt/index.php delete mode 100644 app/i18n/pt-pt/install.php delete mode 100644 app/i18n/pt-pt/sub.php delete mode 100644 app/i18n/pt-pt/user.php create mode 100644 app/i18n/zh-CN/admin.php create mode 100644 app/i18n/zh-CN/api.php create mode 100644 app/i18n/zh-CN/conf.php create mode 100644 app/i18n/zh-CN/feedback.php create mode 100644 app/i18n/zh-CN/gen.php create mode 100644 app/i18n/zh-CN/index.php create mode 100644 app/i18n/zh-CN/install.php create mode 100644 app/i18n/zh-CN/sub.php create mode 100644 app/i18n/zh-CN/user.php create mode 100644 app/i18n/zh-TW/admin.php create mode 100644 app/i18n/zh-TW/api.php create mode 100644 app/i18n/zh-TW/conf.php create mode 100644 app/i18n/zh-TW/feedback.php create mode 100644 app/i18n/zh-TW/gen.php create mode 100644 app/i18n/zh-TW/index.php create mode 100644 app/i18n/zh-TW/install.php create mode 100644 app/i18n/zh-TW/sub.php create mode 100644 app/i18n/zh-TW/user.php delete mode 100644 app/i18n/zh-cn/admin.php delete mode 100644 app/i18n/zh-cn/api.php delete mode 100644 app/i18n/zh-cn/conf.php delete mode 100644 app/i18n/zh-cn/feedback.php delete mode 100644 app/i18n/zh-cn/gen.php delete mode 100644 app/i18n/zh-cn/index.php delete mode 100644 app/i18n/zh-cn/install.php delete mode 100644 app/i18n/zh-cn/sub.php delete mode 100644 app/i18n/zh-cn/user.php delete mode 100644 app/i18n/zh-tw/admin.php delete mode 100644 app/i18n/zh-tw/api.php delete mode 100644 app/i18n/zh-tw/conf.php delete mode 100644 app/i18n/zh-tw/feedback.php delete mode 100644 app/i18n/zh-tw/gen.php delete mode 100644 app/i18n/zh-tw/index.php delete mode 100644 app/i18n/zh-tw/install.php delete mode 100644 app/i18n/zh-tw/sub.php delete mode 100644 app/i18n/zh-tw/user.php diff --git a/.typos.toml b/.typos.toml index b650ed722..6d5f5db86 100644 --- a/.typos.toml +++ b/.typos.toml @@ -32,13 +32,14 @@ extend-exclude = [ "app/i18n/nl/", "app/i18n/oc/", "app/i18n/pl/", - "app/i18n/pt-br/", - "app/i18n/pt-pt/", + "app/i18n/pt-BR/", + "app/i18n/pt-PT/", "app/i18n/ru/", "app/i18n/sk/", "app/i18n/tr/", - "app/i18n/zh-cn/", - "app/i18n/zh-tw/", + "app/i18n/uk/", + "app/i18n/zh-CN/", + "app/i18n/zh-TW/", "bin/", "composer.lock", "data/", diff --git a/README.fr.md b/README.fr.md index 84cc14285..c3a132d88 100644 --- a/README.fr.md +++ b/README.fr.md @@ -230,7 +230,7 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio | 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) | +| 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) | @@ -245,14 +245,14 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio | 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) | +| 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) | +| 简体中文 (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) | diff --git a/README.md b/README.md index 9db0748a0..cd1372b45 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E | 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) | +| 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) | @@ -143,14 +143,14 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E | 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) | +| 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) | +| 简体中文 (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) | diff --git a/app/Models/Context.php b/app/Models/Context.php index 1dccff6f6..d6942fbcd 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -160,6 +160,12 @@ final class FreshRSS_Context { FreshRSS_Context::$user_conf->shortcuts = $shortcuts; FreshRSS_Context::$user_conf->save(); } + + FreshRSS_Context::$user_conf->language = preg_replace_callback( + '/-(\\w{2})$/', + static fn (array $matches): string => strtoupper($matches[0]), + FreshRSS_Context::$user_conf->language ?? Minz_Translate::DEFAULT_LANGUAGE + ) ?? Minz_Translate::DEFAULT_LANGUAGE; } /** diff --git a/app/i18n/cs/gen.php b/app/i18n/cs/gen.php index c615008e4..fe68fd80d 100644 --- a/app/i18n/cs/gen.php +++ b/app/i18n/cs/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'O aplikaci', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index ea41d7b10..3170b7bde 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Info', diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php index 35245ce7a..9719e6a4f 100644 --- a/app/i18n/el/gen.php +++ b/app/i18n/el/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'About', // TODO diff --git a/app/i18n/en-US/admin.php b/app/i18n/en-US/admin.php new file mode 100644 index 000000000..199edfe65 --- /dev/null +++ b/app/i18n/en-US/admin.php @@ -0,0 +1,240 @@ + array( + 'allow_anonymous' => 'Allow anonymous reading of the default user’s articles (%s)', // IGNORE + 'allow_anonymous_refresh' => 'Allow anonymous refresh of the articles', // IGNORE + 'api_enabled' => 'Allow API access (required for mobile apps and sharing user queries)', // IGNORE + 'form' => 'Web form (traditional, requires JavaScript)', // IGNORE + 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // IGNORE + 'none' => 'None (dangerous)', // IGNORE + 'title' => 'Authentication', // IGNORE + 'token' => 'Master authentication token', // IGNORE + 'token_help' => 'Allows access to all RSS outputs of the user as well as refreshing feeds without authentication:', // IGNORE + 'type' => 'Authentication method', // IGNORE + 'unsafe_autologin' => 'Allow unsafe automatic login using the format: ', // IGNORE + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Check permissions on ./data/cache directory. HTTP server must have write permission.', // IGNORE + 'ok' => 'Permissions on the cache directory are good.', // IGNORE + ), + 'categories' => array( + 'nok' => 'Category table is improperly configured.', // IGNORE + 'ok' => 'Category table is okay.', // IGNORE + ), + 'connection' => array( + 'nok' => 'Connection to the database cannot be established.', // IGNORE + 'ok' => 'Connection to the database is okay.', // IGNORE + ), + 'ctype' => array( + 'nok' => 'Cannot find a required library for character type checking (php-ctype).', // IGNORE + 'ok' => 'You have the required library for character type checking (ctype).', // IGNORE + ), + 'curl' => array( + 'nok' => 'Cannot find the cURL library (php-curl package).', // IGNORE + 'ok' => 'You have the cURL library.', // IGNORE + ), + 'data' => array( + 'nok' => 'Check permissions on ./data directory. HTTP server must have write permission.', // IGNORE + 'ok' => 'Permissions on the data directory are good.', // IGNORE + ), + 'database' => 'Database installation', // IGNORE + 'dom' => array( + 'nok' => 'Cannot find a required library to browse the DOM (php-xml package).', // IGNORE + 'ok' => 'You have the required library to browse the DOM.', // IGNORE + ), + 'entries' => array( + 'nok' => 'Entry table is improperly configured.', // IGNORE + 'ok' => 'Entry table is okay.', // IGNORE + ), + 'favicons' => array( + 'nok' => 'Check permissions on ./data/favicons directory. HTTP server must have write permission.', // IGNORE + 'ok' => 'Permissions on the favicons directory are good.', // IGNORE + ), + 'feeds' => array( + 'nok' => 'Feed table is improperly configured.', // IGNORE + 'ok' => 'Feed table is okay.', // IGNORE + ), + 'fileinfo' => array( + 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', // IGNORE + 'ok' => 'You have the fileinfo library.', // IGNORE + ), + 'files' => 'File installation', // IGNORE + 'json' => array( + 'nok' => 'Cannot find JSON (php-json package).', // IGNORE + 'ok' => 'You have the JSON extension.', // IGNORE + ), + 'mbstring' => array( + 'nok' => 'Cannot find the recommended mbstring library for Unicode.', // IGNORE + 'ok' => 'You have the recommended mbstring library for Unicode.', // IGNORE + ), + 'pcre' => array( + 'nok' => 'Cannot find a required library for regular expressions (php-pcre).', // IGNORE + 'ok' => 'You have the required library for regular expressions (PCRE).', // IGNORE + ), + 'pdo' => array( + 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // IGNORE + 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // IGNORE + ), + 'php' => array( + '_' => 'PHP installation', // IGNORE + 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', // IGNORE + 'ok' => 'Your PHP version (%s) is compatible with FreshRSS.', // IGNORE + ), + 'tables' => array( + 'nok' => 'There are one or more missing tables in the database.', // IGNORE + 'ok' => 'The appropriate tables exist in the database.', // IGNORE + ), + 'title' => 'Installation check', // IGNORE + 'tokens' => array( + 'nok' => 'Check permissions on ./data/tokens directory. HTTP server must have write permission', // IGNORE + 'ok' => 'Permissions on the tokens directory are good.', // IGNORE + ), + 'users' => array( + 'nok' => 'Check permissions on ./data/users directory. HTTP server must have write permission', // IGNORE + 'ok' => 'Permissions on the users directory are good.', // IGNORE + ), + 'zip' => array( + 'nok' => 'Cannot find the ZIP extension (php-zip package).', // IGNORE + 'ok' => 'You have the ZIP extension.', // IGNORE + ), + ), + 'extensions' => array( + 'author' => 'Author', // IGNORE + 'community' => 'Available community extensions', // IGNORE + 'description' => 'Description', // IGNORE + 'disabled' => 'Disabled', // IGNORE + 'empty_list' => 'There are no installed extensions', // IGNORE + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // IGNORE + 'enabled' => 'Enabled', // IGNORE + 'latest' => 'Installed', // IGNORE + 'name' => 'Name', // IGNORE + 'no_configure_view' => 'This extension cannot be configured.', // IGNORE + 'system' => array( + '_' => 'System extensions', // IGNORE + 'no_rights' => 'System extension (you do not have the required permissions)', // IGNORE + ), + 'title' => 'Extensions', // IGNORE + 'update' => 'Update available', // IGNORE + 'user' => 'User extensions', // IGNORE + 'version' => 'Version', // IGNORE + ), + 'stats' => array( + '_' => 'Statistics', // IGNORE + 'all_feeds' => 'All feeds', // IGNORE + 'category' => 'Category', // IGNORE + 'entry_count' => 'Entry count', // IGNORE + 'entry_per_category' => 'Entries per category', // IGNORE + 'entry_per_day' => 'Entries per day (last 30 days)', // IGNORE + 'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)', // IGNORE + 'entry_per_hour' => 'Per hour (average: %.2f messages)', // IGNORE + 'entry_per_month' => 'Per month (average: %.2f messages)', // IGNORE + 'entry_repartition' => 'Entries repartition', // IGNORE + 'feed' => 'Feed', // IGNORE + 'feed_per_category' => 'Feeds per category', // IGNORE + 'idle' => 'Idle feeds', // IGNORE + 'main' => 'Main statistics', // IGNORE + 'main_stream' => 'Main stream', // IGNORE + 'no_idle' => 'There are no idle feeds!', // IGNORE + 'number_entries' => '%d articles', // IGNORE + 'overview' => 'Overview', // IGNORE + 'percent_of_total' => '% of total', // IGNORE + 'repartition' => 'Articles repartition: %s', // IGNORE + 'status_favorites' => 'Favorites', + 'status_read' => 'Read', // IGNORE + 'status_total' => 'Total', // IGNORE + 'status_unread' => 'Unread', // IGNORE + 'title' => 'Statistics', // IGNORE + 'top_feed' => 'Top ten feeds', // IGNORE + ), + 'system' => array( + '_' => 'System configuration', // IGNORE + 'auto-update-url' => 'Auto-update server URL', // IGNORE + 'base-url' => array( + '_' => 'Base URL', // IGNORE + 'recommendation' => 'Automatic recommendation: %s', // IGNORE + ), + 'cookie-duration' => array( + 'help' => 'in seconds', // IGNORE + 'number' => 'Duration to keep logged in', // IGNORE + ), + 'force_email_validation' => 'Force email address validation', // IGNORE + 'instance-name' => 'Instance name', // IGNORE + 'max-categories' => 'Max number of categories per user', // IGNORE + 'max-feeds' => 'Max number of feeds per user', // IGNORE + 'registration' => array( + 'number' => 'Max number of accounts', // IGNORE + 'select' => array( + 'label' => 'Registration form', // IGNORE + 'option' => array( + 'noform' => 'Disabled: No registration form', // IGNORE + 'nolimit' => 'Enabled: No limit of accounts', // IGNORE + 'setaccountsnumber' => 'Set max. number of accounts', // IGNORE + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // IGNORE + 'enabled' => 'Form enabled', // IGNORE + ), + 'title' => 'User registration form', // IGNORE + ), + 'sensitive-parameter' => 'Sensitive parameter. Edit manually in ./data/config.php', // IGNORE + 'tos' => array( + 'disabled' => 'is not given', // IGNORE + 'enabled' => 'is enabled', // IGNORE + 'help' => 'How to enable the Terms of Service', // IGNORE + ), + 'websub' => array( + 'help' => 'About WebSub', // IGNORE + ), + ), + 'update' => array( + '_' => 'Update system', // IGNORE + 'apply' => 'Apply', // IGNORE + 'changelog' => 'Changelog', // IGNORE + 'check' => 'Check for new updates', // IGNORE + 'copiedFromURL' => 'update.php copied from %s to ./data', // IGNORE + 'current_version' => 'Current installed version', // IGNORE + 'last' => 'Last verification', // IGNORE + 'loading' => 'Updating…', // IGNORE + 'none' => 'No update to apply', // IGNORE + 'releaseChannel' => array( + '_' => 'Release channel', // IGNORE + 'edge' => 'Rolling release (“edge”)', // IGNORE + 'latest' => 'Stable release (“latest”)', // IGNORE + ), + 'title' => 'Update system', // IGNORE + 'viaGit' => 'Update via git and GitHub.com started', // IGNORE + ), + 'user' => array( + 'admin' => 'Administrator', // IGNORE + 'article_count' => 'Articles', // IGNORE + 'back_to_manage' => '← Return to user list', // IGNORE + 'create' => 'Create new user', // IGNORE + 'database_size' => 'Database size', // IGNORE + 'email' => 'Email address', // IGNORE + 'enabled' => 'Enabled', // IGNORE + 'feed_count' => 'Feeds', // IGNORE + 'is_admin' => 'Is admin', // IGNORE + 'language' => 'Language', // IGNORE + 'last_user_activity' => 'Last user activity', // IGNORE + 'list' => 'User list', // IGNORE + 'number' => 'There is %d account created', // IGNORE + 'numbers' => 'There are %d accounts created', // IGNORE + 'password_form' => 'Password
(for the Web-form login method)', // IGNORE + 'password_format' => 'At least 7 characters', // IGNORE + 'title' => 'Manage users', // IGNORE + 'username' => 'Username', // IGNORE + ), +); diff --git a/app/i18n/en-US/api.php b/app/i18n/en-US/api.php new file mode 100644 index 000000000..3e1ba55ed --- /dev/null +++ b/app/i18n/en-US/api.php @@ -0,0 +1,33 @@ + array( + 'address' => 'Your API address:', // IGNORE + 'output' => array( + '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 + 'greader' => 'Google Reader API configuration test:', // IGNORE + ), + 'title' => array( + '_' => 'FreshRSS API endpoints', // IGNORE + 'extension' => 'API for extensions', // IGNORE + 'fever' => 'Fever compatible API', // IGNORE + 'greader' => 'Google Reader compatible API', // IGNORE + ), + ), +); diff --git a/app/i18n/en-US/conf.php b/app/i18n/en-US/conf.php new file mode 100644 index 000000000..d64e93ca1 --- /dev/null +++ b/app/i18n/en-US/conf.php @@ -0,0 +1,372 @@ + array( + '_' => 'Archiving', // IGNORE + 'exception' => 'Purge exception', // IGNORE + 'help' => 'More options are available in the individual feed’s settings', // IGNORE + 'keep_favourites' => 'Never delete favorites', + 'keep_labels' => 'Never delete labels', // IGNORE + 'keep_max' => 'Maximum number of articles to keep per feed', // IGNORE + 'keep_min_by_feed' => 'Minimum number of articles to keep per feed', // IGNORE + 'keep_period' => 'Maximum age of articles to keep', // IGNORE + 'keep_unreads' => 'Never delete unread articles', // IGNORE + 'maintenance' => 'Maintenance', // IGNORE + 'optimize' => 'Optimize database', // IGNORE + 'optimize_help' => 'Run occasionally to reduce the size of the database', // IGNORE + 'policy' => 'Purge policy', // IGNORE + 'policy_warning' => 'If no purge policy is selected, every article will be kept.', // IGNORE + 'purge_now' => 'Purge now', // IGNORE + 'title' => 'Archiving', // IGNORE + 'ttl' => 'Do not automatically refresh more often than', // IGNORE + ), + 'display' => array( + '_' => 'Display', // IGNORE + 'darkMode' => array( + '_' => 'Automatic dark mode', // IGNORE + 'auto' => 'Auto', // IGNORE + 'help' => 'For compatible themes only', // IGNORE + 'no' => 'No', // IGNORE + ), + 'icon' => array( + 'bottom_line' => 'Bottom line', // IGNORE + 'display_authors' => 'Authors', // IGNORE + 'entry' => 'Article icons', // IGNORE + 'publication_date' => 'Date of publication', // IGNORE + 'related_tags' => 'Article tags', // IGNORE + 'sharing' => 'Sharing', // IGNORE + 'summary' => 'Summary', // IGNORE + 'top_line' => 'Top line', // IGNORE + ), + 'language' => 'Language', // IGNORE + 'notif_html5' => array( + 'seconds' => 'seconds (0 means no timeout)', // IGNORE + 'timeout' => 'HTML5 notification timeout', // IGNORE + ), + 'show_nav_buttons' => 'Show the navigation buttons', // IGNORE + 'theme' => array( + '_' => 'Theme', // IGNORE + 'deprecated' => array( + '_' => 'Deprecated', // IGNORE + 'description' => 'This theme is no longer supported and will be not available anymore in a future release of FreshRSS', // IGNORE + ), + ), + 'theme_not_available' => 'The “%s” theme is not available anymore. Please choose another theme.', // IGNORE + 'thumbnail' => array( + 'label' => 'Thumbnail', // IGNORE + 'landscape' => 'Landscape', // IGNORE + 'none' => 'None', // IGNORE + 'portrait' => 'Portrait', // IGNORE + 'square' => 'Square', // IGNORE + ), + 'timezone' => 'Time zone', // IGNORE + 'title' => 'Display', // IGNORE + 'website' => array( + 'full' => 'Icon and name', // IGNORE + 'icon' => 'Icon only', // IGNORE + 'label' => 'Website', // IGNORE + 'name' => 'Name only', // IGNORE + 'none' => 'None', // IGNORE + ), + 'width' => array( + 'content' => 'Content width', // IGNORE + 'large' => 'Wide', // IGNORE + 'medium' => 'Medium', // IGNORE + 'no_limit' => 'Full Width', // IGNORE + 'thin' => 'Narrow', // IGNORE + ), + ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // IGNORE + 'message' => 'Log Message', // IGNORE + 'timestamp' => 'Timestamp', // IGNORE + ), + 'pagination' => array( + 'first' => 'First', // IGNORE + 'last' => 'Last', // IGNORE + 'next' => 'Next', // IGNORE + 'previous' => 'Previous', // IGNORE + ), + ), + 'mark_read_button' => array( + '_' => '“Mark all as read” button', // IGNORE + 'big' => 'Big', // IGNORE + 'none' => 'None', // IGNORE + 'small' => 'Small', // IGNORE + ), + 'notification_timeout' => array( + 'bad' => array( + 'label' => 'Show warning banner', // IGNORE + 'seconds' => 'seconds (at least 1)', // IGNORE + ), + 'good' => array( + 'label' => 'Show acknowledgment banner', + 'seconds' => 'seconds (0 means not shown)', // IGNORE + ), + ), + 'privacy' => array( + '_' => 'Privacy', // IGNORE + 'retrieve_extension_list' => 'Retrieve extension list', // IGNORE + ), + 'profile' => array( + '_' => 'Profile management', // IGNORE + 'api' => array( + '_' => 'API management', // IGNORE + 'api_not_set' => 'API password not set', // IGNORE + 'api_set' => 'API password set', // IGNORE + 'check_link' => 'Check API status via: %s', // IGNORE + 'disabled' => 'The API access is disabled.', // IGNORE + 'documentation_link' => 'See the documentation and list of known apps', // IGNORE + 'help' => 'See documentation', // IGNORE + ), + 'change_password' => 'Change password', // IGNORE + 'confirm_new_password' => 'Confirm new password', // IGNORE + 'current_password' => 'Current password
(for the Web-form login method)', // IGNORE + 'delete' => array( + '_' => 'Account deletion', // IGNORE + 'warn' => 'Your account and all related data will be deleted.', // IGNORE + ), + 'email' => 'Email address', // IGNORE + 'new_password' => 'New password', // IGNORE + 'password_api' => 'API password
(e.g., for mobile apps)', // IGNORE + 'password_format' => 'At least 7 characters', // IGNORE + 'title' => 'Profile', // IGNORE + ), + 'query' => array( + '_' => 'User queries', // IGNORE + 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', // IGNORE + 'description' => 'Description', // IGNORE + 'filter' => array( + '_' => 'Filter applied:', // IGNORE + 'categories' => 'Display by category', // IGNORE + 'feeds' => 'Display by feed', // IGNORE + 'order' => 'Sort by date', // IGNORE + 'search' => 'Expression', // IGNORE + 'shareOpml' => 'Enable sharing by OPML of corresponding categories and feeds', // IGNORE + 'shareRss' => 'Enable sharing by HTML & RSS', // IGNORE + 'state' => 'State', // IGNORE + 'tags' => 'Display by label', // IGNORE + 'type' => 'Type', // IGNORE + ), + 'get_A' => 'Show all feeds, also those shown in their category', // IGNORE + 'get_Z' => 'Show all feeds, also archived ones', // IGNORE + 'get_all' => 'Display all articles', // IGNORE + 'get_all_labels' => 'Display articles with any label', // IGNORE + 'get_category' => 'Display “%s” category', // IGNORE + 'get_favorite' => 'Display favorite articles', + 'get_feed' => 'Display “%s” feed', // IGNORE + 'get_important' => 'Display articles from important feeds', // IGNORE + 'get_label' => 'Display articles with “%s” label', // IGNORE + 'help' => 'See the documentation for user queries and resharing by HTML / RSS / OPML.', // IGNORE + 'image_url' => 'Image URL', // IGNORE + 'name' => 'Name', // IGNORE + 'no_filter' => 'No filter', // IGNORE + 'no_queries' => array( + '_' => 'No user queries are saved yet.', // IGNORE + 'help' => 'See documentation', // IGNORE + ), + 'number' => 'Query n°%d', // IGNORE + 'order_asc' => 'Display oldest articles first', // IGNORE + 'order_desc' => 'Display newest articles first', // IGNORE + 'search' => 'Search for “%s”', // IGNORE + 'share' => array( + '_' => 'Share this query by link', // IGNORE + 'disabled' => array( + '_' => 'disabled', // IGNORE + 'title' => 'Sharing', // IGNORE + ), + 'greader' => 'Shareable link to the GReader JSON', // IGNORE + 'help' => 'Give this link if you want to share this query with anyone', // IGNORE + 'html' => 'Shareable link to the HTML page', // IGNORE + 'opml' => 'Shareable link to the OPML list of feeds', // IGNORE + 'rss' => 'Shareable link to the RSS feed', // IGNORE + ), + 'state_0' => 'Display all articles', // IGNORE + 'state_1' => 'Display read articles', // IGNORE + 'state_2' => 'Display unread articles', // IGNORE + 'state_3' => 'Display all articles', // IGNORE + 'state_4' => 'Display favorite articles', + 'state_5' => 'Display read favorite articles', + 'state_6' => 'Display unread favorite articles', + 'state_7' => 'Display favorite articles', + 'state_8' => 'Display not favorite articles', + 'state_9' => 'Display read not favorite articles', + 'state_10' => 'Display unread not favorite articles', + 'state_11' => 'Display not favorite articles', + 'state_12' => 'Display all articles', // IGNORE + 'state_13' => 'Display read articles', // IGNORE + 'state_14' => 'Display unread articles', // IGNORE + 'state_15' => 'Display all articles', // IGNORE + 'title' => 'User queries', // IGNORE + ), + 'reading' => array( + '_' => 'Reading', // IGNORE + 'after_onread' => 'After “mark all as read”,', // IGNORE + 'always_show_favorites' => 'Show all articles in favorites by default', + 'apply_to_individual_feed' => 'Applies to feeds individually', // IGNORE + 'article' => array( + 'authors_date' => array( + '_' => 'Authors and date', // IGNORE + 'both' => 'In header and footer', // IGNORE + 'footer' => 'In footer', // IGNORE + 'header' => 'In header', // IGNORE + 'none' => 'None', // IGNORE + ), + 'feed_name' => array( + 'above_title' => 'Above title/tags', // IGNORE + 'none' => 'None', // IGNORE + 'with_authors' => 'In authors and date row', // IGNORE + ), + 'feed_title' => 'Feed title', // IGNORE + 'icons' => array( + '_' => 'Article icons position
(Reading view only)', // IGNORE + 'above_title' => 'Above title', // IGNORE + 'with_authors' => 'In authors and date row', // IGNORE + ), + 'tags' => array( + '_' => 'Tags', // IGNORE + 'both' => 'In header and footer', // IGNORE + 'footer' => 'In footer', // IGNORE + 'header' => 'In header', // IGNORE + 'none' => 'None', // IGNORE + ), + 'tags_max' => array( + '_' => 'Max number of tags shown', // IGNORE + 'help' => '0 means: show all tags and do not collapse them', // IGNORE + ), + ), + 'articles_per_page' => 'Number of articles per page', // IGNORE + 'auto_load_more' => 'Load more articles at the bottom of the page', // IGNORE + 'auto_remove_article' => 'Hide articles after reading', // IGNORE + 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', // IGNORE + 'display_articles_unfolded' => 'Show articles unfolded by default', // IGNORE + 'display_categories_unfolded' => 'Categories to unfold', // IGNORE + 'headline' => array( + 'articles' => 'Articles: Open/Close', // IGNORE + 'articles_header_footer' => 'Articles: header/footer', // IGNORE + 'categories' => 'Left navigation: Categories', // IGNORE + 'mark_as_read' => 'Mark article as read', // IGNORE + 'misc' => 'Miscellaneous', // IGNORE + 'view' => 'View', // IGNORE + ), + 'hide_read_feeds' => 'Hide categories & feeds with no unread articles (does not work with “Show all articles” configuration)', // IGNORE + 'img_with_lazyload' => 'Use lazy load mode to load pictures', // IGNORE + 'jump_next' => 'jump to next unread sibling', // IGNORE + 'mark_updated_article_unread' => 'Mark updated articles as unread', // IGNORE + 'number_divided_when_reader' => 'Divide by 2 in the reading view.', // IGNORE + 'read' => array( + 'article_open_on_website' => 'when the article is opened on its original website', // IGNORE + 'article_viewed' => 'when the article is viewed', // IGNORE + 'focus' => 'when focused (except for important feeds)', // IGNORE + 'keep_max_n_unread' => 'Max number of articles to keep unread', // IGNORE + 'scroll' => 'while scrolling (except for important feeds)', // IGNORE + 'upon_gone' => 'when it is no longer in the upstream news feed', // IGNORE + 'upon_reception' => 'upon receiving the article', // IGNORE + 'when' => 'Mark an article as read…', // IGNORE + 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // IGNORE + 'when_same_title_in_feed' => 'if an identical title already exists in the top n newest articles of the feed', // IGNORE + ), + 'show' => array( + '_' => 'Articles to display', // IGNORE + 'active_category' => 'Active category', // IGNORE + 'adaptive' => 'Show unreads if any, all articles otherwise', // IGNORE + 'all_articles' => 'Show all articles', // IGNORE + 'all_categories' => 'All categories', // IGNORE + 'no_category' => 'No category', // IGNORE + 'remember_categories' => 'Remember open categories', // IGNORE + 'unread' => 'Show unreads', // IGNORE + 'unread_or_favorite' => 'Show unreads and favorites', // IGNORE + ), + 'show_fav_unread_help' => 'Applies also on labels', // IGNORE + 'sides_close_article' => 'Clicking outside of article text area closes the article', // IGNORE + 'sort' => array( + '_' => 'Sort order', // IGNORE + 'newer_first' => 'Newest first', // IGNORE + 'older_first' => 'Oldest first', // IGNORE + ), + 'star' => array( + 'when' => 'Mark an article as favorite…', + ), + 'sticky_post' => 'Stick the article to the top when opened', // IGNORE + 'title' => 'Reading', // IGNORE + 'view' => array( + 'default' => 'Default view', // IGNORE + 'global' => 'Global view', // IGNORE + 'normal' => 'Normal view', // IGNORE + 'reader' => 'Reading view', // IGNORE + ), + ), + 'sharing' => array( + '_' => 'Sharing', // IGNORE + 'add' => 'Add a sharing method', // IGNORE + 'bluesky' => 'Bluesky', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // IGNORE + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'Email', // IGNORE + 'facebook' => 'Facebook', // IGNORE + 'more_information' => 'More information', // IGNORE + 'print' => 'Print', // IGNORE + 'raindrop' => 'Raindrop.io', // IGNORE + 'remove' => 'Remove sharing method', // IGNORE + 'shaarli' => 'Shaarli', // IGNORE + 'share_name' => 'Share name to display', // IGNORE + 'share_url' => 'Share URL to use', // IGNORE + 'title' => 'Sharing', // IGNORE + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag', // IGNORE + ), + 'shortcut' => array( + '_' => 'Shortcuts', // IGNORE + 'article_action' => 'Article actions', // IGNORE + 'auto_share' => 'Share', // IGNORE + 'auto_share_help' => 'If there is only one sharing mode, it is used. Otherwise, modes are accessible by their number.', // IGNORE + 'close_menus' => 'Close menus', // IGNORE + 'collapse_article' => 'Collapse', // IGNORE + 'first_article' => 'Open the first article', // IGNORE + 'focus_search' => 'Access search box', // IGNORE + 'global_view' => 'Switch to global view', // IGNORE + 'help' => 'Display documentation', // IGNORE + 'javascript' => 'JavaScript must be enabled in order to use shortcuts', // IGNORE + 'last_article' => 'Open the last article', // IGNORE + 'load_more' => 'Load more articles', // IGNORE + 'mark_favorite' => 'Toggle favorite', + 'mark_read' => 'Toggle read', // IGNORE + 'navigation' => 'Navigation', // IGNORE + 'navigation_help' => 'With the ⇧ Shift modifier, navigation shortcuts apply on feeds.
With the Alt ⎇ modifier, navigation shortcuts apply on categories.', // IGNORE + 'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.', // IGNORE + 'next_article' => 'Open the next article', // IGNORE + 'next_unread_article' => 'Open the next unread article', // IGNORE + 'non_standard' => 'Some keys (%s) may not work as shortcuts.', // IGNORE + 'normal_view' => 'Switch to normal view', // IGNORE + 'other_action' => 'Other actions', // IGNORE + 'previous_article' => 'Open the previous article', // IGNORE + 'reading_view' => 'Switch to reading view', // IGNORE + 'rss_view' => 'Open as RSS feed', // IGNORE + 'see_on_website' => 'See on original website', // IGNORE + 'shift_for_all_read' => '+ Alt ⎇ to mark previous articles as read
+ ⇧ Shift to mark all articles as read', // IGNORE + 'skip_next_article' => 'Focus next without opening', // IGNORE + 'skip_previous_article' => 'Focus previous without opening', // IGNORE + 'title' => 'Shortcuts', // IGNORE + 'toggle_media' => 'Play/pause media', // IGNORE + 'user_filter' => 'Access user queries', // IGNORE + 'user_filter_help' => 'If there is only one user query, it is used. Otherwise, queries are accessible by their number.', // IGNORE + 'views' => 'Views', // IGNORE + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', // IGNORE + 'current' => 'Current user', // IGNORE + 'is_admin' => 'is administrator', // IGNORE + 'users' => 'Users', // IGNORE + ), +); diff --git a/app/i18n/en-US/feedback.php b/app/i18n/en-US/feedback.php new file mode 100644 index 000000000..6da240f4f --- /dev/null +++ b/app/i18n/en-US/feedback.php @@ -0,0 +1,152 @@ + array( + 'denied' => 'You don’t have permission to access this page', // IGNORE + 'not_found' => 'You are looking for a page that doesn’t exist', // IGNORE + ), + 'admin' => array( + 'optimization_complete' => 'Optimization complete', // IGNORE + ), + 'api' => array( + 'password' => array( + 'failed' => 'Your password cannot be modified', // IGNORE + 'updated' => 'Your password has been modified', // IGNORE + ), + ), + 'auth' => array( + 'login' => array( + 'invalid' => 'Login is invalid', // IGNORE + 'success' => 'You are connected', // IGNORE + ), + 'logout' => array( + 'success' => 'You are disconnected', // IGNORE + ), + ), + 'conf' => array( + 'error' => 'An error occurred while saving configuration', // IGNORE + 'query_created' => 'Query “%s” has been created.', // IGNORE + 'shortcuts_updated' => 'Shortcuts have been updated', // IGNORE + 'updated' => 'Configuration has been updated', // IGNORE + ), + 'extensions' => array( + 'already_enabled' => '%s is already enabled', // IGNORE + 'cannot_remove' => '%s cannot be removed', // IGNORE + 'disable' => array( + 'ko' => '%s cannot be disabled. Check FreshRSS logs for details.', // IGNORE + 'ok' => '%s is now disabled', // IGNORE + ), + 'enable' => array( + 'ko' => '%s cannot be enabled. Check FreshRSS logs for details.', // IGNORE + 'ok' => '%s is now enabled', // IGNORE + ), + 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // IGNORE + 'no_access' => 'You have no access on %s', // IGNORE + 'not_enabled' => '%s is not enabled', // IGNORE + 'not_found' => '%s does not exist', // IGNORE + 'removed' => '%s removed', // IGNORE + ), + 'import_export' => array( + 'export_no_zip_extension' => 'The ZIP extension is not present on your server. Please try to export files one by one.', // IGNORE + 'feeds_imported' => 'Your feeds have been imported. If you are done importing, you can now click the Update feeds button.', // IGNORE + 'feeds_imported_with_errors' => 'Your feeds have been imported, but some errors occurred. If you are done importing, you can now click the Update feeds button.', // IGNORE + 'file_cannot_be_uploaded' => 'File cannot be uploaded!', // IGNORE + 'no_zip_extension' => 'The ZIP extension is not present on your server.', // IGNORE + 'zip_error' => 'An error occurred during ZIP processing.', // IGNORE + ), + 'profile' => array( + 'error' => 'Your profile cannot be modified', // IGNORE + 'passwords_dont_match' => 'Passwords don’t match', // IGNORE + 'updated' => 'Your profile has been modified', // IGNORE + ), + 'sub' => array( + 'actualize' => 'Updating', // IGNORE + 'articles' => array( + 'marked_read' => 'The selected articles have been marked as read.', // IGNORE + 'marked_unread' => 'The articles have been marked as unread.', // IGNORE + ), + 'category' => array( + 'created' => 'Category %s has been created.', // IGNORE + 'deleted' => 'Category has been deleted.', // IGNORE + 'emptied' => 'Category has been emptied', // IGNORE + 'error' => 'Category cannot be updated', // IGNORE + 'name_exists' => 'Category name already exists.', // IGNORE + 'no_id' => 'You must specify the id of the category.', // IGNORE + 'no_name' => 'Category name cannot be empty.', // IGNORE + 'not_delete_default' => 'You cannot delete the default category!', // IGNORE + 'not_exist' => 'The category does not exist!', // IGNORE + 'over_max' => 'You have reached your limit of categories (%d)', // IGNORE + 'updated' => 'Category has been updated.', // IGNORE + ), + 'feed' => array( + 'actualized' => '%s has been updated', // IGNORE + 'actualizeds' => 'RSS feeds have been updated', // IGNORE + 'added' => 'RSS feed %s has been added', // IGNORE + 'already_subscribed' => 'You have already subscribed to %s', // IGNORE + 'cache_cleared' => '%s cache has been cleared', // IGNORE + 'deleted' => 'Feed has been deleted', // IGNORE + 'error' => 'Feed cannot be updated', // IGNORE + 'favicon' => array( + 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // IGNORE + 'unsupported_format' => 'Unsupported image file format!', // IGNORE + ), + 'internal_problem' => 'The newsfeed could not be added. Check FreshRSS logs for details. You can try force adding by appending #force_feed to the URL.', // IGNORE + 'invalid_url' => 'URL %s is invalid', // IGNORE + 'n_actualized' => '%d feeds have been updated', // IGNORE + 'n_entries_deleted' => '%d articles have been deleted', // IGNORE + 'no_refresh' => 'There are no feeds to refresh', // IGNORE + 'not_added' => '%s could not be added', // IGNORE + 'not_found' => 'Feed cannot be found', // IGNORE + 'over_max' => 'You have reached your limit of feeds (%d)', // IGNORE + 'reloaded' => '%s has been reloaded', // IGNORE + 'selector_preview' => array( + 'http_error' => 'Failed to load website content.', // IGNORE + 'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.', // IGNORE + 'no_feed' => 'Internal error (feed cannot be found).', // IGNORE + 'no_result' => 'The selector didn’t match anything. As a fallback the original feed text will be displayed instead.', // IGNORE + 'selector_empty' => 'The selector is empty. You need to define one to create a preview.', // IGNORE + ), + 'updated' => 'Feed has been updated', // IGNORE + ), + 'purge_completed' => 'Purge completed (%d articles deleted)', // IGNORE + ), + 'tag' => array( + 'created' => 'Label “%s” has been created.', // IGNORE + 'error' => 'Label could not be updated!', // IGNORE + 'name_exists' => 'Label name already exists.', // IGNORE + 'renamed' => 'Label “%s” has been renamed to “%s”.', // IGNORE + 'updated' => 'Label has been updated.', // IGNORE + ), + 'update' => array( + 'can_apply' => 'FreshRSS will now be updated to the version %s.', // IGNORE + 'error' => 'The update process has encountered an error: %s', // IGNORE + 'file_is_nok' => 'New version %s available, but check permissions on %s directory. HTTP server must have have write permission', // IGNORE + 'finished' => 'Update complete!', // IGNORE + 'none' => 'No update to apply', // IGNORE + 'server_not_found' => 'Update server cannot be found. [%s]', // IGNORE + ), + 'user' => array( + 'created' => array( + '_' => 'User %s has been created', // IGNORE + 'error' => 'User %s cannot be created', // IGNORE + ), + 'deleted' => array( + '_' => 'User %s has been deleted', // IGNORE + 'error' => 'User %s cannot be deleted', // IGNORE + ), + 'updated' => array( + '_' => 'User %s has been updated', // IGNORE + 'error' => 'User %s has not been updated', // IGNORE + ), + ), +); diff --git a/app/i18n/en-US/gen.php b/app/i18n/en-US/gen.php new file mode 100644 index 000000000..ce4c8a6fc --- /dev/null +++ b/app/i18n/en-US/gen.php @@ -0,0 +1,277 @@ + array( + 'actualize' => 'Update feeds', // IGNORE + 'add' => 'Add', // IGNORE + 'back_to_rss_feeds' => '← Go back to your RSS feeds', // IGNORE + 'cancel' => 'Cancel', // IGNORE + 'close' => 'Close', // IGNORE + 'create' => 'Create', // IGNORE + 'delete_all_feeds' => 'Delete all feeds', // IGNORE + 'delete_errored_feeds' => 'Delete feeds with errors', // IGNORE + 'delete_muted_feeds' => 'Delete muted feeds', // IGNORE + 'demote' => 'Demote', // IGNORE + 'disable' => 'Disable', // IGNORE + 'download' => 'Download', // IGNORE + 'empty' => 'Empty', // IGNORE + 'enable' => 'Enable', // IGNORE + 'export' => 'Export', // IGNORE + 'filter' => 'Filter', // IGNORE + 'import' => 'Import', // IGNORE + 'load_default_shortcuts' => 'Load default shortcuts', // IGNORE + 'manage' => 'Manage', // IGNORE + 'mark_read' => 'Mark as read', // IGNORE + 'menu' => array( + 'open' => 'Open menu', // IGNORE + ), + 'nav_buttons' => array( + 'next' => 'Next article', // IGNORE + 'prev' => 'Previous article', // IGNORE + 'up' => 'Go up', // IGNORE + ), + 'open_url' => 'Open URL', // IGNORE + 'promote' => 'Promote', // IGNORE + 'purge' => 'Purge', // IGNORE + 'refresh_opml' => 'Refresh OPML', // IGNORE + 'remove' => 'Remove', // IGNORE + 'rename' => 'Rename', // IGNORE + 'see_website' => 'See website', // IGNORE + 'submit' => 'Submit', // IGNORE + 'truncate' => 'Delete all articles', // IGNORE + 'update' => 'Update', // IGNORE + ), + 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // IGNORE + 'email' => 'Email address', // IGNORE + 'keep_logged_in' => 'Keep me logged in (%s days)', // IGNORE + 'login' => 'Login', // IGNORE + 'logout' => 'Logout', // IGNORE + 'password' => array( + '_' => 'Password', // IGNORE + 'format' => 'At least 7 characters', // IGNORE + ), + 'reauth' => array( + 'header' => 'Reauthentication is required', // IGNORE + 'tip' => 'You won’t be asked to sign in again for %d minutes', // IGNORE + 'title' => 'Reauthentication', // IGNORE + ), + 'registration' => array( + '_' => 'New account', // IGNORE + 'ask' => 'Create an account?', // IGNORE + 'title' => 'Account creation', // IGNORE + ), + 'username' => array( + '_' => 'Username', // IGNORE + 'format' => 'Maximum 16 alphanumeric characters', // IGNORE + ), + ), + 'date' => array( + 'Apr' => '\\A\\p\\r\\i\\l', // IGNORE + 'Aug' => '\\A\\u\\g\\u\\s\\t', // IGNORE + 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', // IGNORE + 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', // IGNORE + 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', // IGNORE + 'Jul' => '\\J\\u\\l\\y', // IGNORE + 'Jun' => '\\J\\u\\n\\e', // IGNORE + 'Mar' => '\\M\\a\\r\\c\\h', // IGNORE + 'May' => '\\M\\a\\y', // IGNORE + 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', // IGNORE + 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', // IGNORE + 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', // IGNORE + 'apr' => 'Apr.', // IGNORE + 'april' => 'April', // IGNORE + 'aug' => 'Aug.', // IGNORE + 'august' => 'August', // IGNORE + 'before_yesterday' => 'Before yesterday', // IGNORE + 'dec' => 'Dec.', // IGNORE + 'december' => 'December', // IGNORE + 'feb' => 'Feb.', // IGNORE + 'february' => 'February', // IGNORE + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t g\\:i a', + 'fri' => 'Fri', // IGNORE + 'jan' => 'Jan.', // IGNORE + 'january' => 'January', // IGNORE + 'jul' => 'July', // IGNORE + 'july' => 'July', // IGNORE + 'jun' => 'June', // IGNORE + 'june' => 'June', // IGNORE + 'last_2_year' => 'Last two years', // IGNORE + 'last_3_month' => 'Last three months', // IGNORE + 'last_3_year' => 'Last three years', // IGNORE + 'last_5_year' => 'Last five years', // IGNORE + 'last_6_month' => 'Last six months', // IGNORE + 'last_month' => 'Last month', // IGNORE + 'last_week' => 'Last week', // IGNORE + 'last_year' => 'Last year', // IGNORE + 'mar' => 'Mar.', // IGNORE + 'march' => 'March', // IGNORE + 'may' => 'May', // IGNORE + 'may_' => 'May', // IGNORE + 'mon' => 'Mon', // IGNORE + 'month' => 'months', // IGNORE + 'nov' => 'Nov.', // IGNORE + 'november' => 'November', // IGNORE + 'oct' => 'Oct.', // IGNORE + 'october' => 'October', // IGNORE + 'sat' => 'Sat', // IGNORE + 'sep' => 'Sept.', // IGNORE + 'september' => 'September', // IGNORE + 'sun' => 'Sun', // IGNORE + 'thu' => 'Thu', // IGNORE + 'today' => 'Today', // IGNORE + 'tue' => 'Tue', // IGNORE + 'wed' => 'Wed', // IGNORE + 'yesterday' => 'Yesterday', // IGNORE + ), + 'dir' => 'ltr', // IGNORE + 'freshrss' => array( + '_' => 'FreshRSS', // IGNORE + 'about' => 'About FreshRSS', // IGNORE + ), + 'js' => array( + 'category_empty' => 'Empty category', // IGNORE + 'confirm_action' => 'Are you sure you want to perform this action? It cannot be canceled!', + 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be canceled!', + 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // IGNORE + 'feedback' => array( + 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', // IGNORE + 'body_unread_articles' => '(unread: %%d)', // IGNORE + 'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // IGNORE + 'title_new_articles' => 'FreshRSS: new articles!', // IGNORE + ), + 'labels_empty' => 'No labels', // IGNORE + 'new_article' => 'There are new articles available, click to refresh the page.', // IGNORE + 'should_be_activated' => 'JavaScript must be enabled', // IGNORE + 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // IGNORE + ), + 'lang' => array( + 'cs' => 'Čeština', // IGNORE + 'de' => 'Deutsch', // IGNORE + 'el' => 'Ελληνικά', // IGNORE + 'en' => 'English', // IGNORE + 'en-US' => 'English (United States)', // IGNORE + 'es' => 'Español', // IGNORE + 'fa' => 'فارسی', // IGNORE + 'fi' => 'Suomi', // IGNORE + 'fr' => 'Français', // IGNORE + 'he' => 'עברית', // IGNORE + 'hu' => 'Magyar', // IGNORE + 'id' => 'Bahasa Indonesia', // IGNORE + 'it' => 'Italiano', // IGNORE + 'ja' => '日本語', // IGNORE + 'ko' => '한국어', // IGNORE + 'lv' => 'Latviešu', // IGNORE + 'nl' => 'Nederlands', // IGNORE + 'oc' => 'Occitan', // IGNORE + 'pl' => 'Polski', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE + 'ru' => 'Русский', // IGNORE + 'sk' => 'Slovenčina', // IGNORE + 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE + ), + 'menu' => array( + 'about' => 'About', // IGNORE + 'account' => 'Account', // IGNORE + 'admin' => 'Administration', // IGNORE + 'archiving' => 'Archiving', // IGNORE + 'authentication' => 'Authentication', // IGNORE + 'check_install' => 'Installation check', // IGNORE + 'configuration' => 'Configuration', // IGNORE + 'display' => 'Display', // IGNORE + 'extensions' => 'Extensions', // IGNORE + 'logs' => 'Logs', // IGNORE + 'privacy' => 'Privacy', // IGNORE + 'queries' => 'User queries', // IGNORE + 'reading' => 'Reading', // IGNORE + 'search' => 'Search words or #tags', // IGNORE + 'search_help' => 'See documentation for advanced search parameters', // IGNORE + 'sharing' => 'Sharing', // IGNORE + 'shortcuts' => 'Shortcuts', // IGNORE + 'stats' => 'Statistics', // IGNORE + 'system' => 'System configuration', // IGNORE + 'update' => 'Update', // IGNORE + 'user_management' => 'Manage users', // IGNORE + 'user_profile' => 'Profile', // IGNORE + ), + 'period' => array( + 'days' => 'days', // IGNORE + 'hours' => 'hours', // IGNORE + 'months' => 'months', // IGNORE + '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 + 'archiveORG' => 'archive.org', // IGNORE + 'archivePH' => 'archive.ph', // IGNORE + 'bluesky' => 'Bluesky', // IGNORE + 'buffer' => 'Buffer', // IGNORE + 'clipboard' => 'Clipboard', // IGNORE + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'Email', // IGNORE + 'email-webmail-firefox-fix' => 'Email (webmail - fix for Firefox)', // IGNORE + 'facebook' => 'Facebook', // IGNORE + 'gnusocial' => 'GNU social', // IGNORE + 'jdh' => 'Journal du hacker', // IGNORE + 'lemmy' => 'Lemmy', // IGNORE + 'linkding' => 'Linkding', // IGNORE + 'linkedin' => 'LinkedIn', // IGNORE + 'mastodon' => 'Mastodon', // IGNORE + 'movim' => 'Movim', // IGNORE + 'omnivore' => 'Omnivore', // IGNORE + 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // IGNORE + 'pocket' => 'Pocket', // IGNORE + 'print' => 'Print', // IGNORE + 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // IGNORE + 'shaarli' => 'Shaarli', // IGNORE + 'telegram' => 'Telegram', // IGNORE + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag v1', // IGNORE + 'wallabagv2' => 'wallabag v2', // IGNORE + 'web-sharing-api' => 'System sharing', // IGNORE + 'whatsapp' => 'Whatsapp', // IGNORE + 'xing' => 'Xing', // IGNORE + ), + 'short' => array( + 'attention' => 'Warning!', // IGNORE + 'blank_to_disable' => 'Leave blank to disable', // IGNORE + 'by_author' => 'By:', // IGNORE + 'by_default' => 'By default', // IGNORE + 'damn' => 'Blast!', // IGNORE + 'default_category' => 'Uncategorized', // IGNORE + 'no' => 'No', // IGNORE + 'not_applicable' => 'Not available', // IGNORE + 'ok' => 'Okay!', // IGNORE + 'or' => 'or', // IGNORE + 'yes' => 'Yes', // IGNORE + ), + 'stream' => array( + 'load_more' => 'Load more articles', // IGNORE + 'mark_all_read' => 'Mark all as read', // IGNORE + 'nothing_to_load' => 'There are no more articles', // IGNORE + ), +); diff --git a/app/i18n/en-US/index.php b/app/i18n/en-US/index.php new file mode 100644 index 000000000..7a019bce0 --- /dev/null +++ b/app/i18n/en-US/index.php @@ -0,0 +1,110 @@ + array( + '_' => 'About', // IGNORE + 'agpl3' => 'AGPL 3', // IGNORE + 'bug_reports' => array( + 'environment_information' => array( + '_' => 'System information', // IGNORE + 'browser' => 'Browser', // IGNORE + 'database' => 'Database', // IGNORE + 'server_software' => 'Server software', // IGNORE + 'version_curl' => 'cURL version', // IGNORE + 'version_frss' => 'FreshRSS version', // IGNORE + 'version_php' => 'PHP version', // IGNORE + ), + ), + 'bugs_reports' => 'Bug reports', // IGNORE + 'documentation' => 'Documentation', // IGNORE + 'freshrss_description' => 'FreshRSS is a self-hostable RSS aggregator and reader. It allows you to read and follow several news websites at a glance without the need to browse from one website to another. FreshRSS is lightweight, configurable, and easy to use.', // IGNORE + 'github' => 'on GitHub', // IGNORE + 'license' => 'License', // IGNORE + 'project_website' => 'Project website', // IGNORE + 'title' => 'About', // IGNORE + 'version' => 'Version', // IGNORE + ), + 'feed' => array( + 'empty' => 'There are no articles to show.', // IGNORE + 'received' => array( + 'before_yesterday' => 'Received before yesterday', // IGNORE + 'today' => 'Received today', // IGNORE + 'yesterday' => 'Received yesterday', // IGNORE + ), + 'rss_of' => 'RSS feed of %s', // IGNORE + 'title' => 'Main stream', // IGNORE + 'title_fav' => 'Favorites', + 'title_global' => 'Global view', // IGNORE + ), + 'log' => array( + '_' => 'Logs', // IGNORE + 'clear' => 'Clear the logs', // IGNORE + 'empty' => 'Log file is empty', // IGNORE + 'title' => 'Logs', // IGNORE + ), + 'menu' => array( + 'about' => 'About FreshRSS', // IGNORE + 'before_one_day' => 'Older than one day', // IGNORE + 'before_one_week' => 'Older than one week', // IGNORE + 'bookmark_query' => 'Bookmark current query', // IGNORE + 'favorites' => 'Favorites (%s)', + 'global_view' => 'Global view', // IGNORE + 'important' => 'Important feeds', // IGNORE + 'main_stream' => 'Main stream', // IGNORE + 'mark_all_read' => 'Mark all as read', // IGNORE + 'mark_cat_read' => 'Mark category as read', // IGNORE + 'mark_feed_read' => 'Mark feed as read', // IGNORE + 'mark_selection_unread' => 'Mark selection as unread', // IGNORE + 'mylabels' => 'My labels', // IGNORE + 'newer_first' => 'Newer first', // IGNORE + 'non-starred' => 'Show non-favorites', + 'normal_view' => 'Normal view', // IGNORE + 'older_first' => 'Oldest first', // IGNORE + 'queries' => 'User queries', // IGNORE + 'read' => 'Show read', // IGNORE + 'reader_view' => 'Reading view', // IGNORE + 'rss_view' => 'RSS feed', // IGNORE + 'search_short' => 'Search', // IGNORE + 'sort' => array( + '_' => 'Sorting criteria', // IGNORE + 'c' => array( + 'name_asc' => 'Category, feed titles A→Z', // IGNORE + 'name_desc' => 'Category, feed titles Z→A', // IGNORE + ), + 'date_asc' => 'Publication date 1→9', // IGNORE + 'date_desc' => 'Publication date 9→1', // IGNORE + 'f' => array( + 'name_asc' => 'Feed title A→Z', // IGNORE + 'name_desc' => 'Feed title Z→A', // IGNORE + ), + 'id_asc' => 'Freshly received last', // IGNORE + 'id_desc' => 'Freshly received first', // IGNORE + 'link_asc' => 'Link A→Z', // IGNORE + 'link_desc' => 'Link Z→A', // IGNORE + 'rand' => 'Random order', // IGNORE + 'title_asc' => 'Title A→Z', // IGNORE + 'title_desc' => 'Title Z→A', // IGNORE + ), + 'starred' => 'Show favorites', + 'stats' => 'Statistics', // IGNORE + 'subscription' => 'Subscription management', // IGNORE + 'unread' => 'Show unread', // IGNORE + ), + 'share' => 'Share', // IGNORE + 'tag' => array( + 'related' => 'Article tags', // IGNORE + ), + 'tos' => array( + 'title' => 'Terms of Service', // IGNORE + ), +); diff --git a/app/i18n/en-US/install.php b/app/i18n/en-US/install.php new file mode 100644 index 000000000..a25ce674a --- /dev/null +++ b/app/i18n/en-US/install.php @@ -0,0 +1,128 @@ + array( + 'finish' => 'Complete installation', // IGNORE + 'fix_errors_before' => 'Please all fix errors before continuing to the next step.', // IGNORE + 'keep_install' => 'Keep previous configuration', // IGNORE + 'next_step' => 'Go to the next step', // IGNORE + 'reinstall' => 'Reinstall FreshRSS', // IGNORE + ), + 'bdd' => array( + '_' => 'Database', // IGNORE + 'conf' => array( + '_' => 'Database configuration', // IGNORE + 'ko' => 'Verify your database configuration.', // IGNORE + 'ok' => 'Database configuration has been saved.', // IGNORE + ), + 'host' => 'Host', // IGNORE + 'password' => 'Database password', // IGNORE + 'prefix' => 'Table prefix', // IGNORE + 'type' => 'Type of database', // IGNORE + 'username' => 'Database username', // IGNORE + ), + 'check' => array( + '_' => 'Checks', // IGNORE + 'already_installed' => 'We have detected that FreshRSS is already installed!', // IGNORE + 'cache' => array( + 'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.', + 'ok' => 'Permissions on the cache directory are good.', // IGNORE + ), + 'ctype' => array( + 'nok' => 'Cannot find the required library for character type checking (php-ctype).', // IGNORE + 'ok' => 'You have the required library for character type checking (ctype).', // IGNORE + ), + 'curl' => array( + 'nok' => 'Cannot find the cURL library (php-curl package).', // IGNORE + 'ok' => 'You have the cURL library.', // IGNORE + ), + 'data' => 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 + ), + 'dom' => array( + 'nok' => 'Cannot find the required library to browse the DOM.', // IGNORE + 'ok' => 'You have the required library to browse the DOM.', // IGNORE + ), + 'favicons' => array( + 'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.', + 'ok' => 'Permissions on the favicons directory are good.', // IGNORE + ), + 'fileinfo' => array( + 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', // IGNORE + 'ok' => 'You have the fileinfo library.', // IGNORE + ), + 'json' => array( + 'nok' => 'Cannot find the recommended library to parse JSON.', // IGNORE + 'ok' => 'You have the recommended library to parse JSON.', // IGNORE + ), + 'mbstring' => array( + 'nok' => 'Cannot find the recommended library mbstring for Unicode.', // IGNORE + 'ok' => 'You have the recommended library mbstring for Unicode.', // IGNORE + ), + 'pcre' => array( + 'nok' => 'Cannot find the required library for regular expressions (php-pcre).', // IGNORE + 'ok' => 'You have the required library for regular expressions (PCRE).', // IGNORE + ), + 'pdo' => array( + 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // IGNORE + 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // IGNORE + ), + 'php' => array( + 'nok' => 'Your PHP version is %s, but FreshRSS requires at least version %s.', // IGNORE + 'ok' => 'Your PHP version, %s, is compatible with FreshRSS.', // IGNORE + ), + 'reload' => 'Check again', // IGNORE + 'tmp' => array( + 'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.', // IGNORE + 'ok' => 'Permissions on the temp directory are good.', // IGNORE + ), + 'unknown_process_username' => 'unknown', // IGNORE + 'users' => array( + 'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.', // IGNORE + 'ok' => 'Permissions on the users directory are good.', // IGNORE + ), + 'xml' => array( + 'nok' => 'Cannot find the required library to parse XML.', // IGNORE + 'ok' => 'You have the required library to parse XML.', // IGNORE + ), + ), + 'conf' => array( + '_' => 'General configuration', // IGNORE + 'ok' => 'General configuration has been saved.', // IGNORE + ), + 'congratulations' => 'Congratulations!', // IGNORE + 'default_user' => array( + '_' => 'Username of the default user', // IGNORE + 'max_char' => 'maximum 16 alphanumeric characters', // IGNORE + ), + 'fix_errors_before' => 'Please fix errors before continuing to the next step.', // IGNORE + 'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled', // IGNORE + 'js' => array( + 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', // IGNORE + ), + 'language' => array( + '_' => 'Language', // IGNORE + 'choose' => 'Choose a language for FreshRSS', // IGNORE + 'defined' => 'Language has been defined.', // IGNORE + ), + 'missing_applied_migrations' => 'Something went wrong; you should create an empty file %s manually.', // IGNORE + 'ok' => 'The installation process was successful.', // IGNORE + 'session' => array( + 'nok' => 'The web server seems to be incorrectly configured for cookies required for PHP sessions!', // IGNORE + ), + 'step' => 'step %d', // IGNORE + 'steps' => 'Steps', // IGNORE + 'this_is_the_end' => 'This is the end', // IGNORE + 'title' => 'Installation · FreshRSS', // IGNORE +); diff --git a/app/i18n/en-US/sub.php b/app/i18n/en-US/sub.php new file mode 100644 index 000000000..b3c4042ee --- /dev/null +++ b/app/i18n/en-US/sub.php @@ -0,0 +1,307 @@ + array( + 'documentation' => 'Copy the following URL to use it within an external tool.', // IGNORE + 'title' => 'API', // IGNORE + ), + 'bookmarklet' => array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose “Bookmark This Link”. Then click the “Subscribe” button in any page you want to subscribe to.', // IGNORE + 'label' => 'Subscribe', // IGNORE + 'title' => 'Bookmarklet', // IGNORE + ), + 'category' => array( + '_' => 'Category', // IGNORE + 'add' => 'Add a category', // IGNORE + 'archiving' => 'Archiving', // IGNORE + 'dynamic_opml' => array( + '_' => 'Dynamic OPML', // IGNORE + 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // IGNORE + ), + 'empty' => 'Empty category', // IGNORE + 'expand' => 'Expand category', // IGNORE + 'information' => 'Information', // IGNORE + 'open' => 'Open category', // IGNORE + 'opml_url' => 'OPML URL', // IGNORE + 'position' => 'Display position', // IGNORE + 'position_help' => 'To control category sort order', // IGNORE + 'title' => 'Title', // IGNORE + ), + 'feed' => array( + 'accept_cookies' => 'Accept cookies', // IGNORE + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // IGNORE + 'add' => 'Add a feed', // IGNORE + 'advanced' => 'Advanced', // IGNORE + 'archiving' => 'Archiving', // IGNORE + 'auth' => array( + 'configuration' => 'Login', // IGNORE + 'help' => 'Allows access to HTTP protected RSS feeds', // IGNORE + 'http' => 'HTTP Authentication', // IGNORE + 'password' => 'HTTP password', // IGNORE + 'username' => 'HTTP username', // IGNORE + ), + 'change_favicon' => 'Change…', // IGNORE + 'clear_cache' => 'Always clear cache', // IGNORE + 'content_action' => array( + '_' => 'Content action when fetching the article content', // IGNORE + 'append' => 'Add after existing content', // IGNORE + 'prepend' => 'Add before existing content', // IGNORE + 'replace' => 'Replace existing content', // IGNORE + ), + 'content_retrieval' => 'Content retrieval', // IGNORE + 'css_cookie' => 'Use Cookies when fetching the article content', // IGNORE + 'css_cookie_help' => 'Example: foo=bar; gdpr_consent=true; cookie=value', // IGNORE + 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', // IGNORE + 'css_path' => 'Article CSS selector on original website', // IGNORE + 'css_path_filter' => array( + '_' => 'CSS selector of the elements to remove', // IGNORE + 'help' => 'A CSS selector may be a list such as: footer, aside, p[data-sanitized-class~="menu"]', // IGNORE + ), + 'description' => 'Description', // IGNORE + 'empty' => 'This feed is empty. Please verify that it is still maintained.', // IGNORE + 'error' => 'This feed has encountered a problem. If this situation persists, please verify that it is still reachable.', // IGNORE + 'export-as-opml' => array( + 'download' => 'Download', // IGNORE + 'help' => 'XML file (data subset. See documentation)', // IGNORE + 'label' => 'Export as OPML', // IGNORE + ), + 'ext_favicon' => 'Set automatically', // IGNORE + 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // IGNORE + 'filteractions' => array( + '_' => 'Filter actions', // IGNORE + 'help' => 'Write one search filter per line. Operators see documentation.', // IGNORE + ), + 'http_headers' => 'HTTP Headers', // IGNORE + 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // IGNORE + 'icon' => 'Icon', // IGNORE + 'information' => 'Information', // IGNORE + 'keep_min' => 'Minimum number of articles to keep', // IGNORE + 'kind' => array( + '_' => 'Type of feed source', // IGNORE + 'html_json' => array( + '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // IGNORE + 'xpath' => array( + '_' => 'XPath for JSON in HTML', // IGNORE + 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // IGNORE + ), + ), + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // IGNORE + 'feed_title' => array( + '_' => 'feed title', // IGNORE + 'help' => 'Example: //title or a static string: "My custom feed"', // IGNORE + ), + 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // IGNORE + 'item' => array( + '_' => 'finding news items
(most important)', // IGNORE + 'help' => 'Example: //div[@class="news-item"]', // IGNORE + ), + 'item_author' => array( + '_' => 'item author', // IGNORE + 'help' => 'Can also be a static string. Example: "Anonymous"', // IGNORE + ), + 'item_categories' => 'item tags', // IGNORE + 'item_content' => array( + '_' => 'item content', // IGNORE + 'help' => 'Example to take the full item: .', // IGNORE + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // IGNORE + 'help' => 'Example: descendant::img/@src', // IGNORE + ), + 'item_timeFormat' => array( + '_' => 'Custom date/time format', // IGNORE + 'help' => 'Optional. A format supported by DateTime::createFromFormat() such as d-m-Y H:i:s', // IGNORE + ), + 'item_timestamp' => array( + '_' => 'item date', // IGNORE + 'help' => 'The result will be parsed by strtotime()', // IGNORE + ), + 'item_title' => array( + '_' => 'item title', // IGNORE + 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // IGNORE + ), + 'item_uid' => array( + '_' => 'item unique ID', // IGNORE + 'help' => 'Optional. Example: descendant::div/@data-uri', // IGNORE + ), + 'item_uri' => array( + '_' => 'item link (URL)', // IGNORE + 'help' => 'Example: descendant::a/@href', // IGNORE + ), + 'relative' => 'XPath (relative to item) for:', // IGNORE + 'xpath' => 'XPath for:', // IGNORE + ), + 'json_dotnotation' => array( + '_' => 'JSON (dot notation)', // IGNORE + 'feed_title' => array( + '_' => 'feed title', // IGNORE + 'help' => 'Example: meta.title or a static string: "My custom feed"', // IGNORE + ), + 'help' => 'A JSON dot notated uses dots between objects and brackets for arrays (e.g. data.items[0].title)', // IGNORE + 'item' => array( + '_' => 'finding news items
(most important)', // IGNORE + 'help' => 'JSON path to the array containing the items, e.g. $ or newsItems', // IGNORE + ), + 'item_author' => 'item author', // IGNORE + 'item_categories' => 'item tags', // IGNORE + 'item_content' => array( + '_' => 'item content', // IGNORE + 'help' => 'Key under which the content is found, e.g. content', // IGNORE + ), + 'item_thumbnail' => array( + '_' => 'item thumbnail', // IGNORE + 'help' => 'Example: image', // IGNORE + ), + 'item_timeFormat' => array( + '_' => 'Custom date/time format', // IGNORE + 'help' => 'Optional. A format supported by DateTime::createFromFormat() such as d-m-Y H:i:s', // IGNORE + ), + 'item_timestamp' => array( + '_' => 'item date', // IGNORE + 'help' => 'The result will be parsed by strtotime()', // IGNORE + ), + 'item_title' => 'item title', // IGNORE + 'item_uid' => 'item unique ID', // IGNORE + 'item_uri' => array( + '_' => 'item link (URL)', // IGNORE + 'help' => 'Example: permalink', // IGNORE + ), + 'json' => 'dot notation for:', // IGNORE + 'relative' => 'dot notated path (relative to item) for:', // IGNORE + ), + 'jsonfeed' => 'JSON Feed', // IGNORE + 'rss' => 'RSS / Atom (default)', // IGNORE + 'xml_xpath' => 'XML + XPath', // IGNORE + ), + 'maintenance' => array( + 'clear_cache' => 'Clear cache', // IGNORE + 'clear_cache_help' => 'Clear the cache for this feed.', // IGNORE + 'reload_articles' => 'Reload articles', // IGNORE + 'reload_articles_help' => 'Reload that many articles and fetch complete content if a selector is defined.', // IGNORE + 'title' => 'Maintenance', // IGNORE + ), + 'max_http_redir' => 'Max HTTP redirects', // IGNORE + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // IGNORE + 'method' => array( + '_' => 'HTTP Method', // IGNORE + ), + 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // IGNORE + 'method_postparams' => 'Payload for POST', // IGNORE + 'moved_category_deleted' => 'When you remove a category, its feeds are automatically classified under %s.', // IGNORE + 'mute' => array( + '_' => 'mute', // IGNORE + 'state_is_muted' => 'This feed is muted', // IGNORE + ), + 'no_selected' => 'No feed selected.', // IGNORE + 'number_entries' => '%d articles', // IGNORE + 'open_feed' => 'Open feed %s', // IGNORE + 'path_entries_conditions' => 'Conditions for content retrieval', // IGNORE + 'priority' => array( + '_' => 'Visibility', // IGNORE + 'category' => 'Show in its category', // IGNORE + 'feed' => 'Show in its feed', // IGNORE + 'hidden' => 'Do not show', // IGNORE + 'important' => 'Show in important feeds', // IGNORE + 'main_stream' => 'Show in main stream', // IGNORE + ), + 'proxy' => 'Set a proxy for fetching this feed', // IGNORE + 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: 127.0.0.1:1080 or username:password@127.0.0.1:1080)', // IGNORE + 'reset_favicon' => 'Reset to default', // IGNORE + 'selector_preview' => array( + 'show_raw' => 'Show source code', // IGNORE + 'show_rendered' => 'Show content', // IGNORE + ), + 'show' => array( + 'all' => 'All feeds', // IGNORE + 'error' => 'Show only feeds with errors', // IGNORE + ), + 'showing' => array( + 'error' => 'Showing only feeds with errors', // IGNORE + ), + 'ssl_verify' => 'Verify SSL security', // IGNORE + 'stats' => 'Statistics', // IGNORE + 'think_to_add' => 'You may add some feeds.', // IGNORE + 'timeout' => 'Timeout in seconds', // IGNORE + 'title' => 'Title', // IGNORE + 'title_add' => 'Add an RSS feed', // IGNORE + 'ttl' => 'Do not automatically refresh more often than', // IGNORE + 'unicityCriteria' => array( + '_' => 'Article unicity criteria', // IGNORE + 'forced' => 'forced', // IGNORE + 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // IGNORE + 'id' => 'Standard ID (default)', // IGNORE + 'link' => 'Link', // IGNORE + 'sha1:content' => 'Content', // IGNORE + 'sha1:content_published' => 'Content + Date', // IGNORE + 'sha1:link_published' => 'Link + Date', // IGNORE + 'sha1:link_published_title' => 'Link + Date + Title', // IGNORE + 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // IGNORE + 'sha1:published' => 'Date', // IGNORE + 'sha1:title' => 'Title', // IGNORE + 'sha1:title_published' => 'Title + Date', // IGNORE + 'sha1:title_published_content' => 'Title + Date + Content', // IGNORE + ), + 'url' => 'Feed URL', // IGNORE + 'useragent' => 'Set the user agent for fetching this feed', // IGNORE + 'useragent_help' => 'Example: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', // IGNORE + 'validator' => 'Check the validity of the feed', // IGNORE + 'website' => 'Website URL', // IGNORE + 'websub' => 'Instant notifications with WebSub', // IGNORE + ), + 'import_export' => array( + 'export' => array( + '_' => 'Export', // IGNORE + 'sqlite' => 'Download user database as SQLite', // IGNORE + ), + 'export_labelled' => 'Export your labeled articles', + 'export_opml' => 'Export list of feeds (OPML)', // IGNORE + 'export_starred' => 'Export your favorites', + 'feed_list' => 'List of %s articles', // IGNORE + 'file_to_import' => 'File to import
(OPML, JSON or ZIP)', // IGNORE + 'file_to_import_no_zip' => 'File to import
(OPML or JSON)', // IGNORE + 'import' => 'Import', // IGNORE + 'starred_list' => 'List of favorite articles', + 'title' => 'Import / export', // IGNORE + ), + 'menu' => array( + 'add' => 'Add a feed or category', // IGNORE + 'import_export' => 'Import / export', // IGNORE + 'label_management' => 'Label management', // IGNORE + 'stats' => array( + 'idle' => 'Idle feeds', // IGNORE + 'main' => 'Main statistics', // IGNORE + 'repartition' => 'Articles repartition', // IGNORE + ), + 'subscription_management' => 'Subscription management', // IGNORE + 'subscription_tools' => 'Subscription tools', // IGNORE + ), + 'tag' => array( + 'auto_label' => 'Add this label to new articles', // IGNORE + 'name' => 'Name', // IGNORE + 'new_name' => 'New name', // IGNORE + 'old_name' => 'Old name', // IGNORE + ), + 'title' => array( + '_' => 'Subscription management', // IGNORE + 'add' => 'Add a feed or category', // IGNORE + 'add_category' => 'Add a category', // IGNORE + 'add_dynamic_opml' => 'Add dynamic OPML', // IGNORE + 'add_feed' => 'Add a feed', // IGNORE + 'add_label' => 'Add a label', // IGNORE + 'add_opml_category' => 'OPML category name', // IGNORE + 'delete_label' => 'Delete this label', // IGNORE + 'feed_management' => 'RSS feeds management', // IGNORE + 'subscription_tools' => 'Subscription tools', // IGNORE + ), +); diff --git a/app/i18n/en-US/user.php b/app/i18n/en-US/user.php new file mode 100644 index 000000000..abae569f8 --- /dev/null +++ b/app/i18n/en-US/user.php @@ -0,0 +1,54 @@ + array( + 'feedback' => array( + 'invalid' => 'This email address is invalid.', // IGNORE + 'required' => 'An email address is required.', // IGNORE + ), + 'validation' => array( + 'change_email' => 'You can change your email address on the profile page.', // IGNORE + 'email_sent_to' => 'We sent you an email at %s. Please follow its instructions to validate your address.', // IGNORE + 'feedback' => array( + 'email_failed' => 'We couldn’t send you an email because of a server configuration error.', // IGNORE + 'email_sent' => 'An email has been sent to your address.', // IGNORE + 'error' => 'Email address validation failed.', // IGNORE + 'ok' => 'This email address has been validated.', // IGNORE + 'unnecessary' => 'This email address was already validated.', // IGNORE + 'wrong_token' => 'This email address failed to be validated due to a wrong token.', // IGNORE + ), + 'need_to' => 'You need to validate your email address before being able to use %s.', // IGNORE + 'resend_email' => 'Resend the email', // IGNORE + 'title' => 'Email address validation', // IGNORE + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'body' => 'You’ve just registered on %s, but you still need to validate your email address. For that, just follow the link:', // IGNORE + 'title' => 'You need to validate your account', // IGNORE + 'welcome' => 'Welcome %s,', // IGNORE + ), + ), + 'password' => array( + 'invalid' => 'The password is invalid.', // IGNORE + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // IGNORE + ), + ), + 'username' => array( + 'invalid' => 'This username is invalid.', // IGNORE + 'taken' => 'This username, %s, is taken.', // IGNORE + ), +); diff --git a/app/i18n/en-us/admin.php b/app/i18n/en-us/admin.php deleted file mode 100644 index 199edfe65..000000000 --- a/app/i18n/en-us/admin.php +++ /dev/null @@ -1,240 +0,0 @@ - array( - 'allow_anonymous' => 'Allow anonymous reading of the default user’s articles (%s)', // IGNORE - 'allow_anonymous_refresh' => 'Allow anonymous refresh of the articles', // IGNORE - 'api_enabled' => 'Allow API access (required for mobile apps and sharing user queries)', // IGNORE - 'form' => 'Web form (traditional, requires JavaScript)', // IGNORE - 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // IGNORE - 'none' => 'None (dangerous)', // IGNORE - 'title' => 'Authentication', // IGNORE - 'token' => 'Master authentication token', // IGNORE - 'token_help' => 'Allows access to all RSS outputs of the user as well as refreshing feeds without authentication:', // IGNORE - 'type' => 'Authentication method', // IGNORE - 'unsafe_autologin' => 'Allow unsafe automatic login using the format: ', // IGNORE - ), - 'check_install' => array( - 'cache' => array( - 'nok' => 'Check permissions on ./data/cache directory. HTTP server must have write permission.', // IGNORE - 'ok' => 'Permissions on the cache directory are good.', // IGNORE - ), - 'categories' => array( - 'nok' => 'Category table is improperly configured.', // IGNORE - 'ok' => 'Category table is okay.', // IGNORE - ), - 'connection' => array( - 'nok' => 'Connection to the database cannot be established.', // IGNORE - 'ok' => 'Connection to the database is okay.', // IGNORE - ), - 'ctype' => array( - 'nok' => 'Cannot find a required library for character type checking (php-ctype).', // IGNORE - 'ok' => 'You have the required library for character type checking (ctype).', // IGNORE - ), - 'curl' => array( - 'nok' => 'Cannot find the cURL library (php-curl package).', // IGNORE - 'ok' => 'You have the cURL library.', // IGNORE - ), - 'data' => array( - 'nok' => 'Check permissions on ./data directory. HTTP server must have write permission.', // IGNORE - 'ok' => 'Permissions on the data directory are good.', // IGNORE - ), - 'database' => 'Database installation', // IGNORE - 'dom' => array( - 'nok' => 'Cannot find a required library to browse the DOM (php-xml package).', // IGNORE - 'ok' => 'You have the required library to browse the DOM.', // IGNORE - ), - 'entries' => array( - 'nok' => 'Entry table is improperly configured.', // IGNORE - 'ok' => 'Entry table is okay.', // IGNORE - ), - 'favicons' => array( - 'nok' => 'Check permissions on ./data/favicons directory. HTTP server must have write permission.', // IGNORE - 'ok' => 'Permissions on the favicons directory are good.', // IGNORE - ), - 'feeds' => array( - 'nok' => 'Feed table is improperly configured.', // IGNORE - 'ok' => 'Feed table is okay.', // IGNORE - ), - 'fileinfo' => array( - 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', // IGNORE - 'ok' => 'You have the fileinfo library.', // IGNORE - ), - 'files' => 'File installation', // IGNORE - 'json' => array( - 'nok' => 'Cannot find JSON (php-json package).', // IGNORE - 'ok' => 'You have the JSON extension.', // IGNORE - ), - 'mbstring' => array( - 'nok' => 'Cannot find the recommended mbstring library for Unicode.', // IGNORE - 'ok' => 'You have the recommended mbstring library for Unicode.', // IGNORE - ), - 'pcre' => array( - 'nok' => 'Cannot find a required library for regular expressions (php-pcre).', // IGNORE - 'ok' => 'You have the required library for regular expressions (PCRE).', // IGNORE - ), - 'pdo' => array( - 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // IGNORE - 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // IGNORE - ), - 'php' => array( - '_' => 'PHP installation', // IGNORE - 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', // IGNORE - 'ok' => 'Your PHP version (%s) is compatible with FreshRSS.', // IGNORE - ), - 'tables' => array( - 'nok' => 'There are one or more missing tables in the database.', // IGNORE - 'ok' => 'The appropriate tables exist in the database.', // IGNORE - ), - 'title' => 'Installation check', // IGNORE - 'tokens' => array( - 'nok' => 'Check permissions on ./data/tokens directory. HTTP server must have write permission', // IGNORE - 'ok' => 'Permissions on the tokens directory are good.', // IGNORE - ), - 'users' => array( - 'nok' => 'Check permissions on ./data/users directory. HTTP server must have write permission', // IGNORE - 'ok' => 'Permissions on the users directory are good.', // IGNORE - ), - 'zip' => array( - 'nok' => 'Cannot find the ZIP extension (php-zip package).', // IGNORE - 'ok' => 'You have the ZIP extension.', // IGNORE - ), - ), - 'extensions' => array( - 'author' => 'Author', // IGNORE - 'community' => 'Available community extensions', // IGNORE - 'description' => 'Description', // IGNORE - 'disabled' => 'Disabled', // IGNORE - 'empty_list' => 'There are no installed extensions', // IGNORE - 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // IGNORE - 'enabled' => 'Enabled', // IGNORE - 'latest' => 'Installed', // IGNORE - 'name' => 'Name', // IGNORE - 'no_configure_view' => 'This extension cannot be configured.', // IGNORE - 'system' => array( - '_' => 'System extensions', // IGNORE - 'no_rights' => 'System extension (you do not have the required permissions)', // IGNORE - ), - 'title' => 'Extensions', // IGNORE - 'update' => 'Update available', // IGNORE - 'user' => 'User extensions', // IGNORE - 'version' => 'Version', // IGNORE - ), - 'stats' => array( - '_' => 'Statistics', // IGNORE - 'all_feeds' => 'All feeds', // IGNORE - 'category' => 'Category', // IGNORE - 'entry_count' => 'Entry count', // IGNORE - 'entry_per_category' => 'Entries per category', // IGNORE - 'entry_per_day' => 'Entries per day (last 30 days)', // IGNORE - 'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)', // IGNORE - 'entry_per_hour' => 'Per hour (average: %.2f messages)', // IGNORE - 'entry_per_month' => 'Per month (average: %.2f messages)', // IGNORE - 'entry_repartition' => 'Entries repartition', // IGNORE - 'feed' => 'Feed', // IGNORE - 'feed_per_category' => 'Feeds per category', // IGNORE - 'idle' => 'Idle feeds', // IGNORE - 'main' => 'Main statistics', // IGNORE - 'main_stream' => 'Main stream', // IGNORE - 'no_idle' => 'There are no idle feeds!', // IGNORE - 'number_entries' => '%d articles', // IGNORE - 'overview' => 'Overview', // IGNORE - 'percent_of_total' => '% of total', // IGNORE - 'repartition' => 'Articles repartition: %s', // IGNORE - 'status_favorites' => 'Favorites', - 'status_read' => 'Read', // IGNORE - 'status_total' => 'Total', // IGNORE - 'status_unread' => 'Unread', // IGNORE - 'title' => 'Statistics', // IGNORE - 'top_feed' => 'Top ten feeds', // IGNORE - ), - 'system' => array( - '_' => 'System configuration', // IGNORE - 'auto-update-url' => 'Auto-update server URL', // IGNORE - 'base-url' => array( - '_' => 'Base URL', // IGNORE - 'recommendation' => 'Automatic recommendation: %s', // IGNORE - ), - 'cookie-duration' => array( - 'help' => 'in seconds', // IGNORE - 'number' => 'Duration to keep logged in', // IGNORE - ), - 'force_email_validation' => 'Force email address validation', // IGNORE - 'instance-name' => 'Instance name', // IGNORE - 'max-categories' => 'Max number of categories per user', // IGNORE - 'max-feeds' => 'Max number of feeds per user', // IGNORE - 'registration' => array( - 'number' => 'Max number of accounts', // IGNORE - 'select' => array( - 'label' => 'Registration form', // IGNORE - 'option' => array( - 'noform' => 'Disabled: No registration form', // IGNORE - 'nolimit' => 'Enabled: No limit of accounts', // IGNORE - 'setaccountsnumber' => 'Set max. number of accounts', // IGNORE - ), - ), - 'status' => array( - 'disabled' => 'Form disabled', // IGNORE - 'enabled' => 'Form enabled', // IGNORE - ), - 'title' => 'User registration form', // IGNORE - ), - 'sensitive-parameter' => 'Sensitive parameter. Edit manually in ./data/config.php', // IGNORE - 'tos' => array( - 'disabled' => 'is not given', // IGNORE - 'enabled' => 'is enabled', // IGNORE - 'help' => 'How to enable the Terms of Service', // IGNORE - ), - 'websub' => array( - 'help' => 'About WebSub', // IGNORE - ), - ), - 'update' => array( - '_' => 'Update system', // IGNORE - 'apply' => 'Apply', // IGNORE - 'changelog' => 'Changelog', // IGNORE - 'check' => 'Check for new updates', // IGNORE - 'copiedFromURL' => 'update.php copied from %s to ./data', // IGNORE - 'current_version' => 'Current installed version', // IGNORE - 'last' => 'Last verification', // IGNORE - 'loading' => 'Updating…', // IGNORE - 'none' => 'No update to apply', // IGNORE - 'releaseChannel' => array( - '_' => 'Release channel', // IGNORE - 'edge' => 'Rolling release (“edge”)', // IGNORE - 'latest' => 'Stable release (“latest”)', // IGNORE - ), - 'title' => 'Update system', // IGNORE - 'viaGit' => 'Update via git and GitHub.com started', // IGNORE - ), - 'user' => array( - 'admin' => 'Administrator', // IGNORE - 'article_count' => 'Articles', // IGNORE - 'back_to_manage' => '← Return to user list', // IGNORE - 'create' => 'Create new user', // IGNORE - 'database_size' => 'Database size', // IGNORE - 'email' => 'Email address', // IGNORE - 'enabled' => 'Enabled', // IGNORE - 'feed_count' => 'Feeds', // IGNORE - 'is_admin' => 'Is admin', // IGNORE - 'language' => 'Language', // IGNORE - 'last_user_activity' => 'Last user activity', // IGNORE - 'list' => 'User list', // IGNORE - 'number' => 'There is %d account created', // IGNORE - 'numbers' => 'There are %d accounts created', // IGNORE - 'password_form' => 'Password
(for the Web-form login method)', // IGNORE - 'password_format' => 'At least 7 characters', // IGNORE - 'title' => 'Manage users', // IGNORE - 'username' => 'Username', // IGNORE - ), -); diff --git a/app/i18n/en-us/api.php b/app/i18n/en-us/api.php deleted file mode 100644 index 3e1ba55ed..000000000 --- a/app/i18n/en-us/api.php +++ /dev/null @@ -1,33 +0,0 @@ - array( - 'address' => 'Your API address:', // IGNORE - 'output' => array( - '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 - 'greader' => 'Google Reader API configuration test:', // IGNORE - ), - 'title' => array( - '_' => 'FreshRSS API endpoints', // IGNORE - 'extension' => 'API for extensions', // IGNORE - 'fever' => 'Fever compatible API', // IGNORE - 'greader' => 'Google Reader compatible API', // IGNORE - ), - ), -); diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php deleted file mode 100644 index d64e93ca1..000000000 --- a/app/i18n/en-us/conf.php +++ /dev/null @@ -1,372 +0,0 @@ - array( - '_' => 'Archiving', // IGNORE - 'exception' => 'Purge exception', // IGNORE - 'help' => 'More options are available in the individual feed’s settings', // IGNORE - 'keep_favourites' => 'Never delete favorites', - 'keep_labels' => 'Never delete labels', // IGNORE - 'keep_max' => 'Maximum number of articles to keep per feed', // IGNORE - 'keep_min_by_feed' => 'Minimum number of articles to keep per feed', // IGNORE - 'keep_period' => 'Maximum age of articles to keep', // IGNORE - 'keep_unreads' => 'Never delete unread articles', // IGNORE - 'maintenance' => 'Maintenance', // IGNORE - 'optimize' => 'Optimize database', // IGNORE - 'optimize_help' => 'Run occasionally to reduce the size of the database', // IGNORE - 'policy' => 'Purge policy', // IGNORE - 'policy_warning' => 'If no purge policy is selected, every article will be kept.', // IGNORE - 'purge_now' => 'Purge now', // IGNORE - 'title' => 'Archiving', // IGNORE - 'ttl' => 'Do not automatically refresh more often than', // IGNORE - ), - 'display' => array( - '_' => 'Display', // IGNORE - 'darkMode' => array( - '_' => 'Automatic dark mode', // IGNORE - 'auto' => 'Auto', // IGNORE - 'help' => 'For compatible themes only', // IGNORE - 'no' => 'No', // IGNORE - ), - 'icon' => array( - 'bottom_line' => 'Bottom line', // IGNORE - 'display_authors' => 'Authors', // IGNORE - 'entry' => 'Article icons', // IGNORE - 'publication_date' => 'Date of publication', // IGNORE - 'related_tags' => 'Article tags', // IGNORE - 'sharing' => 'Sharing', // IGNORE - 'summary' => 'Summary', // IGNORE - 'top_line' => 'Top line', // IGNORE - ), - 'language' => 'Language', // IGNORE - 'notif_html5' => array( - 'seconds' => 'seconds (0 means no timeout)', // IGNORE - 'timeout' => 'HTML5 notification timeout', // IGNORE - ), - 'show_nav_buttons' => 'Show the navigation buttons', // IGNORE - 'theme' => array( - '_' => 'Theme', // IGNORE - 'deprecated' => array( - '_' => 'Deprecated', // IGNORE - 'description' => 'This theme is no longer supported and will be not available anymore in a future release of FreshRSS', // IGNORE - ), - ), - 'theme_not_available' => 'The “%s” theme is not available anymore. Please choose another theme.', // IGNORE - 'thumbnail' => array( - 'label' => 'Thumbnail', // IGNORE - 'landscape' => 'Landscape', // IGNORE - 'none' => 'None', // IGNORE - 'portrait' => 'Portrait', // IGNORE - 'square' => 'Square', // IGNORE - ), - 'timezone' => 'Time zone', // IGNORE - 'title' => 'Display', // IGNORE - 'website' => array( - 'full' => 'Icon and name', // IGNORE - 'icon' => 'Icon only', // IGNORE - 'label' => 'Website', // IGNORE - 'name' => 'Name only', // IGNORE - 'none' => 'None', // IGNORE - ), - 'width' => array( - 'content' => 'Content width', // IGNORE - 'large' => 'Wide', // IGNORE - 'medium' => 'Medium', // IGNORE - 'no_limit' => 'Full Width', // IGNORE - 'thin' => 'Narrow', // IGNORE - ), - ), - 'logs' => array( - 'loglist' => array( - 'level' => 'Log Level', // IGNORE - 'message' => 'Log Message', // IGNORE - 'timestamp' => 'Timestamp', // IGNORE - ), - 'pagination' => array( - 'first' => 'First', // IGNORE - 'last' => 'Last', // IGNORE - 'next' => 'Next', // IGNORE - 'previous' => 'Previous', // IGNORE - ), - ), - 'mark_read_button' => array( - '_' => '“Mark all as read” button', // IGNORE - 'big' => 'Big', // IGNORE - 'none' => 'None', // IGNORE - 'small' => 'Small', // IGNORE - ), - 'notification_timeout' => array( - 'bad' => array( - 'label' => 'Show warning banner', // IGNORE - 'seconds' => 'seconds (at least 1)', // IGNORE - ), - 'good' => array( - 'label' => 'Show acknowledgment banner', - 'seconds' => 'seconds (0 means not shown)', // IGNORE - ), - ), - 'privacy' => array( - '_' => 'Privacy', // IGNORE - 'retrieve_extension_list' => 'Retrieve extension list', // IGNORE - ), - 'profile' => array( - '_' => 'Profile management', // IGNORE - 'api' => array( - '_' => 'API management', // IGNORE - 'api_not_set' => 'API password not set', // IGNORE - 'api_set' => 'API password set', // IGNORE - 'check_link' => 'Check API status via: %s', // IGNORE - 'disabled' => 'The API access is disabled.', // IGNORE - 'documentation_link' => 'See the documentation and list of known apps', // IGNORE - 'help' => 'See documentation', // IGNORE - ), - 'change_password' => 'Change password', // IGNORE - 'confirm_new_password' => 'Confirm new password', // IGNORE - 'current_password' => 'Current password
(for the Web-form login method)', // IGNORE - 'delete' => array( - '_' => 'Account deletion', // IGNORE - 'warn' => 'Your account and all related data will be deleted.', // IGNORE - ), - 'email' => 'Email address', // IGNORE - 'new_password' => 'New password', // IGNORE - 'password_api' => 'API password
(e.g., for mobile apps)', // IGNORE - 'password_format' => 'At least 7 characters', // IGNORE - 'title' => 'Profile', // IGNORE - ), - 'query' => array( - '_' => 'User queries', // IGNORE - 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', // IGNORE - 'description' => 'Description', // IGNORE - 'filter' => array( - '_' => 'Filter applied:', // IGNORE - 'categories' => 'Display by category', // IGNORE - 'feeds' => 'Display by feed', // IGNORE - 'order' => 'Sort by date', // IGNORE - 'search' => 'Expression', // IGNORE - 'shareOpml' => 'Enable sharing by OPML of corresponding categories and feeds', // IGNORE - 'shareRss' => 'Enable sharing by HTML & RSS', // IGNORE - 'state' => 'State', // IGNORE - 'tags' => 'Display by label', // IGNORE - 'type' => 'Type', // IGNORE - ), - 'get_A' => 'Show all feeds, also those shown in their category', // IGNORE - 'get_Z' => 'Show all feeds, also archived ones', // IGNORE - 'get_all' => 'Display all articles', // IGNORE - 'get_all_labels' => 'Display articles with any label', // IGNORE - 'get_category' => 'Display “%s” category', // IGNORE - 'get_favorite' => 'Display favorite articles', - 'get_feed' => 'Display “%s” feed', // IGNORE - 'get_important' => 'Display articles from important feeds', // IGNORE - 'get_label' => 'Display articles with “%s” label', // IGNORE - 'help' => 'See the documentation for user queries and resharing by HTML / RSS / OPML.', // IGNORE - 'image_url' => 'Image URL', // IGNORE - 'name' => 'Name', // IGNORE - 'no_filter' => 'No filter', // IGNORE - 'no_queries' => array( - '_' => 'No user queries are saved yet.', // IGNORE - 'help' => 'See documentation', // IGNORE - ), - 'number' => 'Query n°%d', // IGNORE - 'order_asc' => 'Display oldest articles first', // IGNORE - 'order_desc' => 'Display newest articles first', // IGNORE - 'search' => 'Search for “%s”', // IGNORE - 'share' => array( - '_' => 'Share this query by link', // IGNORE - 'disabled' => array( - '_' => 'disabled', // IGNORE - 'title' => 'Sharing', // IGNORE - ), - 'greader' => 'Shareable link to the GReader JSON', // IGNORE - 'help' => 'Give this link if you want to share this query with anyone', // IGNORE - 'html' => 'Shareable link to the HTML page', // IGNORE - 'opml' => 'Shareable link to the OPML list of feeds', // IGNORE - 'rss' => 'Shareable link to the RSS feed', // IGNORE - ), - 'state_0' => 'Display all articles', // IGNORE - 'state_1' => 'Display read articles', // IGNORE - 'state_2' => 'Display unread articles', // IGNORE - 'state_3' => 'Display all articles', // IGNORE - 'state_4' => 'Display favorite articles', - 'state_5' => 'Display read favorite articles', - 'state_6' => 'Display unread favorite articles', - 'state_7' => 'Display favorite articles', - 'state_8' => 'Display not favorite articles', - 'state_9' => 'Display read not favorite articles', - 'state_10' => 'Display unread not favorite articles', - 'state_11' => 'Display not favorite articles', - 'state_12' => 'Display all articles', // IGNORE - 'state_13' => 'Display read articles', // IGNORE - 'state_14' => 'Display unread articles', // IGNORE - 'state_15' => 'Display all articles', // IGNORE - 'title' => 'User queries', // IGNORE - ), - 'reading' => array( - '_' => 'Reading', // IGNORE - 'after_onread' => 'After “mark all as read”,', // IGNORE - 'always_show_favorites' => 'Show all articles in favorites by default', - 'apply_to_individual_feed' => 'Applies to feeds individually', // IGNORE - 'article' => array( - 'authors_date' => array( - '_' => 'Authors and date', // IGNORE - 'both' => 'In header and footer', // IGNORE - 'footer' => 'In footer', // IGNORE - 'header' => 'In header', // IGNORE - 'none' => 'None', // IGNORE - ), - 'feed_name' => array( - 'above_title' => 'Above title/tags', // IGNORE - 'none' => 'None', // IGNORE - 'with_authors' => 'In authors and date row', // IGNORE - ), - 'feed_title' => 'Feed title', // IGNORE - 'icons' => array( - '_' => 'Article icons position
(Reading view only)', // IGNORE - 'above_title' => 'Above title', // IGNORE - 'with_authors' => 'In authors and date row', // IGNORE - ), - 'tags' => array( - '_' => 'Tags', // IGNORE - 'both' => 'In header and footer', // IGNORE - 'footer' => 'In footer', // IGNORE - 'header' => 'In header', // IGNORE - 'none' => 'None', // IGNORE - ), - 'tags_max' => array( - '_' => 'Max number of tags shown', // IGNORE - 'help' => '0 means: show all tags and do not collapse them', // IGNORE - ), - ), - 'articles_per_page' => 'Number of articles per page', // IGNORE - 'auto_load_more' => 'Load more articles at the bottom of the page', // IGNORE - 'auto_remove_article' => 'Hide articles after reading', // IGNORE - 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', // IGNORE - 'display_articles_unfolded' => 'Show articles unfolded by default', // IGNORE - 'display_categories_unfolded' => 'Categories to unfold', // IGNORE - 'headline' => array( - 'articles' => 'Articles: Open/Close', // IGNORE - 'articles_header_footer' => 'Articles: header/footer', // IGNORE - 'categories' => 'Left navigation: Categories', // IGNORE - 'mark_as_read' => 'Mark article as read', // IGNORE - 'misc' => 'Miscellaneous', // IGNORE - 'view' => 'View', // IGNORE - ), - 'hide_read_feeds' => 'Hide categories & feeds with no unread articles (does not work with “Show all articles” configuration)', // IGNORE - 'img_with_lazyload' => 'Use lazy load mode to load pictures', // IGNORE - 'jump_next' => 'jump to next unread sibling', // IGNORE - 'mark_updated_article_unread' => 'Mark updated articles as unread', // IGNORE - 'number_divided_when_reader' => 'Divide by 2 in the reading view.', // IGNORE - 'read' => array( - 'article_open_on_website' => 'when the article is opened on its original website', // IGNORE - 'article_viewed' => 'when the article is viewed', // IGNORE - 'focus' => 'when focused (except for important feeds)', // IGNORE - 'keep_max_n_unread' => 'Max number of articles to keep unread', // IGNORE - 'scroll' => 'while scrolling (except for important feeds)', // IGNORE - 'upon_gone' => 'when it is no longer in the upstream news feed', // IGNORE - 'upon_reception' => 'upon receiving the article', // IGNORE - 'when' => 'Mark an article as read…', // IGNORE - 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // IGNORE - 'when_same_title_in_feed' => 'if an identical title already exists in the top n newest articles of the feed', // IGNORE - ), - 'show' => array( - '_' => 'Articles to display', // IGNORE - 'active_category' => 'Active category', // IGNORE - 'adaptive' => 'Show unreads if any, all articles otherwise', // IGNORE - 'all_articles' => 'Show all articles', // IGNORE - 'all_categories' => 'All categories', // IGNORE - 'no_category' => 'No category', // IGNORE - 'remember_categories' => 'Remember open categories', // IGNORE - 'unread' => 'Show unreads', // IGNORE - 'unread_or_favorite' => 'Show unreads and favorites', // IGNORE - ), - 'show_fav_unread_help' => 'Applies also on labels', // IGNORE - 'sides_close_article' => 'Clicking outside of article text area closes the article', // IGNORE - 'sort' => array( - '_' => 'Sort order', // IGNORE - 'newer_first' => 'Newest first', // IGNORE - 'older_first' => 'Oldest first', // IGNORE - ), - 'star' => array( - 'when' => 'Mark an article as favorite…', - ), - 'sticky_post' => 'Stick the article to the top when opened', // IGNORE - 'title' => 'Reading', // IGNORE - 'view' => array( - 'default' => 'Default view', // IGNORE - 'global' => 'Global view', // IGNORE - 'normal' => 'Normal view', // IGNORE - 'reader' => 'Reading view', // IGNORE - ), - ), - 'sharing' => array( - '_' => 'Sharing', // IGNORE - 'add' => 'Add a sharing method', // IGNORE - 'bluesky' => 'Bluesky', // IGNORE - 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // IGNORE - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => 'Email', // IGNORE - 'facebook' => 'Facebook', // IGNORE - 'more_information' => 'More information', // IGNORE - 'print' => 'Print', // IGNORE - 'raindrop' => 'Raindrop.io', // IGNORE - 'remove' => 'Remove sharing method', // IGNORE - 'shaarli' => 'Shaarli', // IGNORE - 'share_name' => 'Share name to display', // IGNORE - 'share_url' => 'Share URL to use', // IGNORE - 'title' => 'Sharing', // IGNORE - 'twitter' => 'Twitter', // IGNORE - 'wallabag' => 'wallabag', // IGNORE - ), - 'shortcut' => array( - '_' => 'Shortcuts', // IGNORE - 'article_action' => 'Article actions', // IGNORE - 'auto_share' => 'Share', // IGNORE - 'auto_share_help' => 'If there is only one sharing mode, it is used. Otherwise, modes are accessible by their number.', // IGNORE - 'close_menus' => 'Close menus', // IGNORE - 'collapse_article' => 'Collapse', // IGNORE - 'first_article' => 'Open the first article', // IGNORE - 'focus_search' => 'Access search box', // IGNORE - 'global_view' => 'Switch to global view', // IGNORE - 'help' => 'Display documentation', // IGNORE - 'javascript' => 'JavaScript must be enabled in order to use shortcuts', // IGNORE - 'last_article' => 'Open the last article', // IGNORE - 'load_more' => 'Load more articles', // IGNORE - 'mark_favorite' => 'Toggle favorite', - 'mark_read' => 'Toggle read', // IGNORE - 'navigation' => 'Navigation', // IGNORE - 'navigation_help' => 'With the ⇧ Shift modifier, navigation shortcuts apply on feeds.
With the Alt ⎇ modifier, navigation shortcuts apply on categories.', // IGNORE - 'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.', // IGNORE - 'next_article' => 'Open the next article', // IGNORE - 'next_unread_article' => 'Open the next unread article', // IGNORE - 'non_standard' => 'Some keys (%s) may not work as shortcuts.', // IGNORE - 'normal_view' => 'Switch to normal view', // IGNORE - 'other_action' => 'Other actions', // IGNORE - 'previous_article' => 'Open the previous article', // IGNORE - 'reading_view' => 'Switch to reading view', // IGNORE - 'rss_view' => 'Open as RSS feed', // IGNORE - 'see_on_website' => 'See on original website', // IGNORE - 'shift_for_all_read' => '+ Alt ⎇ to mark previous articles as read
+ ⇧ Shift to mark all articles as read', // IGNORE - 'skip_next_article' => 'Focus next without opening', // IGNORE - 'skip_previous_article' => 'Focus previous without opening', // IGNORE - 'title' => 'Shortcuts', // IGNORE - 'toggle_media' => 'Play/pause media', // IGNORE - 'user_filter' => 'Access user queries', // IGNORE - 'user_filter_help' => 'If there is only one user query, it is used. Otherwise, queries are accessible by their number.', // IGNORE - 'views' => 'Views', // IGNORE - ), - 'user' => array( - 'articles_and_size' => '%s articles (%s)', // IGNORE - 'current' => 'Current user', // IGNORE - 'is_admin' => 'is administrator', // IGNORE - 'users' => 'Users', // IGNORE - ), -); diff --git a/app/i18n/en-us/feedback.php b/app/i18n/en-us/feedback.php deleted file mode 100644 index 6da240f4f..000000000 --- a/app/i18n/en-us/feedback.php +++ /dev/null @@ -1,152 +0,0 @@ - array( - 'denied' => 'You don’t have permission to access this page', // IGNORE - 'not_found' => 'You are looking for a page that doesn’t exist', // IGNORE - ), - 'admin' => array( - 'optimization_complete' => 'Optimization complete', // IGNORE - ), - 'api' => array( - 'password' => array( - 'failed' => 'Your password cannot be modified', // IGNORE - 'updated' => 'Your password has been modified', // IGNORE - ), - ), - 'auth' => array( - 'login' => array( - 'invalid' => 'Login is invalid', // IGNORE - 'success' => 'You are connected', // IGNORE - ), - 'logout' => array( - 'success' => 'You are disconnected', // IGNORE - ), - ), - 'conf' => array( - 'error' => 'An error occurred while saving configuration', // IGNORE - 'query_created' => 'Query “%s” has been created.', // IGNORE - 'shortcuts_updated' => 'Shortcuts have been updated', // IGNORE - 'updated' => 'Configuration has been updated', // IGNORE - ), - 'extensions' => array( - 'already_enabled' => '%s is already enabled', // IGNORE - 'cannot_remove' => '%s cannot be removed', // IGNORE - 'disable' => array( - 'ko' => '%s cannot be disabled. Check FreshRSS logs for details.', // IGNORE - 'ok' => '%s is now disabled', // IGNORE - ), - 'enable' => array( - 'ko' => '%s cannot be enabled. Check FreshRSS logs for details.', // IGNORE - 'ok' => '%s is now enabled', // IGNORE - ), - 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // IGNORE - 'no_access' => 'You have no access on %s', // IGNORE - 'not_enabled' => '%s is not enabled', // IGNORE - 'not_found' => '%s does not exist', // IGNORE - 'removed' => '%s removed', // IGNORE - ), - 'import_export' => array( - 'export_no_zip_extension' => 'The ZIP extension is not present on your server. Please try to export files one by one.', // IGNORE - 'feeds_imported' => 'Your feeds have been imported. If you are done importing, you can now click the Update feeds button.', // IGNORE - 'feeds_imported_with_errors' => 'Your feeds have been imported, but some errors occurred. If you are done importing, you can now click the Update feeds button.', // IGNORE - 'file_cannot_be_uploaded' => 'File cannot be uploaded!', // IGNORE - 'no_zip_extension' => 'The ZIP extension is not present on your server.', // IGNORE - 'zip_error' => 'An error occurred during ZIP processing.', // IGNORE - ), - 'profile' => array( - 'error' => 'Your profile cannot be modified', // IGNORE - 'passwords_dont_match' => 'Passwords don’t match', // IGNORE - 'updated' => 'Your profile has been modified', // IGNORE - ), - 'sub' => array( - 'actualize' => 'Updating', // IGNORE - 'articles' => array( - 'marked_read' => 'The selected articles have been marked as read.', // IGNORE - 'marked_unread' => 'The articles have been marked as unread.', // IGNORE - ), - 'category' => array( - 'created' => 'Category %s has been created.', // IGNORE - 'deleted' => 'Category has been deleted.', // IGNORE - 'emptied' => 'Category has been emptied', // IGNORE - 'error' => 'Category cannot be updated', // IGNORE - 'name_exists' => 'Category name already exists.', // IGNORE - 'no_id' => 'You must specify the id of the category.', // IGNORE - 'no_name' => 'Category name cannot be empty.', // IGNORE - 'not_delete_default' => 'You cannot delete the default category!', // IGNORE - 'not_exist' => 'The category does not exist!', // IGNORE - 'over_max' => 'You have reached your limit of categories (%d)', // IGNORE - 'updated' => 'Category has been updated.', // IGNORE - ), - 'feed' => array( - 'actualized' => '%s has been updated', // IGNORE - 'actualizeds' => 'RSS feeds have been updated', // IGNORE - 'added' => 'RSS feed %s has been added', // IGNORE - 'already_subscribed' => 'You have already subscribed to %s', // IGNORE - 'cache_cleared' => '%s cache has been cleared', // IGNORE - 'deleted' => 'Feed has been deleted', // IGNORE - 'error' => 'Feed cannot be updated', // IGNORE - 'favicon' => array( - 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // IGNORE - 'unsupported_format' => 'Unsupported image file format!', // IGNORE - ), - 'internal_problem' => 'The newsfeed could not be added. Check FreshRSS logs for details. You can try force adding by appending #force_feed to the URL.', // IGNORE - 'invalid_url' => 'URL %s is invalid', // IGNORE - 'n_actualized' => '%d feeds have been updated', // IGNORE - 'n_entries_deleted' => '%d articles have been deleted', // IGNORE - 'no_refresh' => 'There are no feeds to refresh', // IGNORE - 'not_added' => '%s could not be added', // IGNORE - 'not_found' => 'Feed cannot be found', // IGNORE - 'over_max' => 'You have reached your limit of feeds (%d)', // IGNORE - 'reloaded' => '%s has been reloaded', // IGNORE - 'selector_preview' => array( - 'http_error' => 'Failed to load website content.', // IGNORE - 'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.', // IGNORE - 'no_feed' => 'Internal error (feed cannot be found).', // IGNORE - 'no_result' => 'The selector didn’t match anything. As a fallback the original feed text will be displayed instead.', // IGNORE - 'selector_empty' => 'The selector is empty. You need to define one to create a preview.', // IGNORE - ), - 'updated' => 'Feed has been updated', // IGNORE - ), - 'purge_completed' => 'Purge completed (%d articles deleted)', // IGNORE - ), - 'tag' => array( - 'created' => 'Label “%s” has been created.', // IGNORE - 'error' => 'Label could not be updated!', // IGNORE - 'name_exists' => 'Label name already exists.', // IGNORE - 'renamed' => 'Label “%s” has been renamed to “%s”.', // IGNORE - 'updated' => 'Label has been updated.', // IGNORE - ), - 'update' => array( - 'can_apply' => 'FreshRSS will now be updated to the version %s.', // IGNORE - 'error' => 'The update process has encountered an error: %s', // IGNORE - 'file_is_nok' => 'New version %s available, but check permissions on %s directory. HTTP server must have have write permission', // IGNORE - 'finished' => 'Update complete!', // IGNORE - 'none' => 'No update to apply', // IGNORE - 'server_not_found' => 'Update server cannot be found. [%s]', // IGNORE - ), - 'user' => array( - 'created' => array( - '_' => 'User %s has been created', // IGNORE - 'error' => 'User %s cannot be created', // IGNORE - ), - 'deleted' => array( - '_' => 'User %s has been deleted', // IGNORE - 'error' => 'User %s cannot be deleted', // IGNORE - ), - 'updated' => array( - '_' => 'User %s has been updated', // IGNORE - 'error' => 'User %s has not been updated', // IGNORE - ), - ), -); diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php deleted file mode 100644 index e4fb41e0d..000000000 --- a/app/i18n/en-us/gen.php +++ /dev/null @@ -1,277 +0,0 @@ - array( - 'actualize' => 'Update feeds', // IGNORE - 'add' => 'Add', // IGNORE - 'back_to_rss_feeds' => '← Go back to your RSS feeds', // IGNORE - 'cancel' => 'Cancel', // IGNORE - 'close' => 'Close', // IGNORE - 'create' => 'Create', // IGNORE - 'delete_all_feeds' => 'Delete all feeds', // IGNORE - 'delete_errored_feeds' => 'Delete feeds with errors', // IGNORE - 'delete_muted_feeds' => 'Delete muted feeds', // IGNORE - 'demote' => 'Demote', // IGNORE - 'disable' => 'Disable', // IGNORE - 'download' => 'Download', // IGNORE - 'empty' => 'Empty', // IGNORE - 'enable' => 'Enable', // IGNORE - 'export' => 'Export', // IGNORE - 'filter' => 'Filter', // IGNORE - 'import' => 'Import', // IGNORE - 'load_default_shortcuts' => 'Load default shortcuts', // IGNORE - 'manage' => 'Manage', // IGNORE - 'mark_read' => 'Mark as read', // IGNORE - 'menu' => array( - 'open' => 'Open menu', // IGNORE - ), - 'nav_buttons' => array( - 'next' => 'Next article', // IGNORE - 'prev' => 'Previous article', // IGNORE - 'up' => 'Go up', // IGNORE - ), - 'open_url' => 'Open URL', // IGNORE - 'promote' => 'Promote', // IGNORE - 'purge' => 'Purge', // IGNORE - 'refresh_opml' => 'Refresh OPML', // IGNORE - 'remove' => 'Remove', // IGNORE - 'rename' => 'Rename', // IGNORE - 'see_website' => 'See website', // IGNORE - 'submit' => 'Submit', // IGNORE - 'truncate' => 'Delete all articles', // IGNORE - 'update' => 'Update', // IGNORE - ), - 'auth' => array( - 'accept_tos' => 'I accept the Terms of Service.', // IGNORE - 'email' => 'Email address', // IGNORE - 'keep_logged_in' => 'Keep me logged in (%s days)', // IGNORE - 'login' => 'Login', // IGNORE - 'logout' => 'Logout', // IGNORE - 'password' => array( - '_' => 'Password', // IGNORE - 'format' => 'At least 7 characters', // IGNORE - ), - 'reauth' => array( - 'header' => 'Reauthentication is required', // IGNORE - 'tip' => 'You won’t be asked to sign in again for %d minutes', // IGNORE - 'title' => 'Reauthentication', // IGNORE - ), - 'registration' => array( - '_' => 'New account', // IGNORE - 'ask' => 'Create an account?', // IGNORE - 'title' => 'Account creation', // IGNORE - ), - 'username' => array( - '_' => 'Username', // IGNORE - 'format' => 'Maximum 16 alphanumeric characters', // IGNORE - ), - ), - 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', // IGNORE - 'Aug' => '\\A\\u\\g\\u\\s\\t', // IGNORE - 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', // IGNORE - 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', // IGNORE - 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', // IGNORE - 'Jul' => '\\J\\u\\l\\y', // IGNORE - 'Jun' => '\\J\\u\\n\\e', // IGNORE - 'Mar' => '\\M\\a\\r\\c\\h', // IGNORE - 'May' => '\\M\\a\\y', // IGNORE - 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', // IGNORE - 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', // IGNORE - 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', // IGNORE - 'apr' => 'Apr.', // IGNORE - 'april' => 'April', // IGNORE - 'aug' => 'Aug.', // IGNORE - 'august' => 'August', // IGNORE - 'before_yesterday' => 'Before yesterday', // IGNORE - 'dec' => 'Dec.', // IGNORE - 'december' => 'December', // IGNORE - 'feb' => 'Feb.', // IGNORE - 'february' => 'February', // IGNORE - 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', - 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t g\\:i a', - 'fri' => 'Fri', // IGNORE - 'jan' => 'Jan.', // IGNORE - 'january' => 'January', // IGNORE - 'jul' => 'July', // IGNORE - 'july' => 'July', // IGNORE - 'jun' => 'June', // IGNORE - 'june' => 'June', // IGNORE - 'last_2_year' => 'Last two years', // IGNORE - 'last_3_month' => 'Last three months', // IGNORE - 'last_3_year' => 'Last three years', // IGNORE - 'last_5_year' => 'Last five years', // IGNORE - 'last_6_month' => 'Last six months', // IGNORE - 'last_month' => 'Last month', // IGNORE - 'last_week' => 'Last week', // IGNORE - 'last_year' => 'Last year', // IGNORE - 'mar' => 'Mar.', // IGNORE - 'march' => 'March', // IGNORE - 'may' => 'May', // IGNORE - 'may_' => 'May', // IGNORE - 'mon' => 'Mon', // IGNORE - 'month' => 'months', // IGNORE - 'nov' => 'Nov.', // IGNORE - 'november' => 'November', // IGNORE - 'oct' => 'Oct.', // IGNORE - 'october' => 'October', // IGNORE - 'sat' => 'Sat', // IGNORE - 'sep' => 'Sept.', // IGNORE - 'september' => 'September', // IGNORE - 'sun' => 'Sun', // IGNORE - 'thu' => 'Thu', // IGNORE - 'today' => 'Today', // IGNORE - 'tue' => 'Tue', // IGNORE - 'wed' => 'Wed', // IGNORE - 'yesterday' => 'Yesterday', // IGNORE - ), - 'dir' => 'ltr', // IGNORE - 'freshrss' => array( - '_' => 'FreshRSS', // IGNORE - 'about' => 'About FreshRSS', // IGNORE - ), - 'js' => array( - 'category_empty' => 'Empty category', // IGNORE - 'confirm_action' => 'Are you sure you want to perform this action? It cannot be canceled!', - 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be canceled!', - 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // IGNORE - 'feedback' => array( - 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', // IGNORE - 'body_unread_articles' => '(unread: %%d)', // IGNORE - 'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // IGNORE - 'title_new_articles' => 'FreshRSS: new articles!', // IGNORE - ), - 'labels_empty' => 'No labels', // IGNORE - 'new_article' => 'There are new articles available, click to refresh the page.', // IGNORE - 'should_be_activated' => 'JavaScript must be enabled', // IGNORE - 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // IGNORE - ), - 'lang' => array( - 'cs' => 'Čeština', // IGNORE - 'de' => 'Deutsch', // IGNORE - 'el' => 'Ελληνικά', // IGNORE - 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE - 'es' => 'Español', // IGNORE - 'fa' => 'فارسی', // IGNORE - 'fi' => 'Suomi', // IGNORE - 'fr' => 'Français', // IGNORE - 'he' => 'עברית', // IGNORE - 'hu' => 'Magyar', // IGNORE - 'id' => 'Bahasa Indonesia', // IGNORE - 'it' => 'Italiano', // IGNORE - 'ja' => '日本語', // IGNORE - 'ko' => '한국어', // IGNORE - 'lv' => 'Latviešu', // IGNORE - 'nl' => 'Nederlands', // IGNORE - 'oc' => 'Occitan', // IGNORE - 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE - 'ru' => 'Русский', // IGNORE - 'sk' => 'Slovenčina', // IGNORE - 'tr' => 'Türkçe', // IGNORE - 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE - ), - 'menu' => array( - 'about' => 'About', // IGNORE - 'account' => 'Account', // IGNORE - 'admin' => 'Administration', // IGNORE - 'archiving' => 'Archiving', // IGNORE - 'authentication' => 'Authentication', // IGNORE - 'check_install' => 'Installation check', // IGNORE - 'configuration' => 'Configuration', // IGNORE - 'display' => 'Display', // IGNORE - 'extensions' => 'Extensions', // IGNORE - 'logs' => 'Logs', // IGNORE - 'privacy' => 'Privacy', // IGNORE - 'queries' => 'User queries', // IGNORE - 'reading' => 'Reading', // IGNORE - 'search' => 'Search words or #tags', // IGNORE - 'search_help' => 'See documentation for advanced search parameters', // IGNORE - 'sharing' => 'Sharing', // IGNORE - 'shortcuts' => 'Shortcuts', // IGNORE - 'stats' => 'Statistics', // IGNORE - 'system' => 'System configuration', // IGNORE - 'update' => 'Update', // IGNORE - 'user_management' => 'Manage users', // IGNORE - 'user_profile' => 'Profile', // IGNORE - ), - 'period' => array( - 'days' => 'days', // IGNORE - 'hours' => 'hours', // IGNORE - 'months' => 'months', // IGNORE - '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 - 'archiveORG' => 'archive.org', // IGNORE - 'archivePH' => 'archive.ph', // IGNORE - 'bluesky' => 'Bluesky', // IGNORE - 'buffer' => 'Buffer', // IGNORE - 'clipboard' => 'Clipboard', // IGNORE - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => 'Email', // IGNORE - 'email-webmail-firefox-fix' => 'Email (webmail - fix for Firefox)', // IGNORE - 'facebook' => 'Facebook', // IGNORE - 'gnusocial' => 'GNU social', // IGNORE - 'jdh' => 'Journal du hacker', // IGNORE - 'lemmy' => 'Lemmy', // IGNORE - 'linkding' => 'Linkding', // IGNORE - 'linkedin' => 'LinkedIn', // IGNORE - 'mastodon' => 'Mastodon', // IGNORE - 'movim' => 'Movim', // IGNORE - 'omnivore' => 'Omnivore', // IGNORE - 'pinboard' => 'Pinboard', // IGNORE - 'pinterest' => 'Pinterest', // IGNORE - 'pocket' => 'Pocket', // IGNORE - 'print' => 'Print', // IGNORE - 'raindrop' => 'Raindrop.io', // IGNORE - 'reddit' => 'Reddit', // IGNORE - 'shaarli' => 'Shaarli', // IGNORE - 'telegram' => 'Telegram', // IGNORE - 'twitter' => 'Twitter', // IGNORE - 'wallabag' => 'wallabag v1', // IGNORE - 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'System sharing', // IGNORE - 'whatsapp' => 'Whatsapp', // IGNORE - 'xing' => 'Xing', // IGNORE - ), - 'short' => array( - 'attention' => 'Warning!', // IGNORE - 'blank_to_disable' => 'Leave blank to disable', // IGNORE - 'by_author' => 'By:', // IGNORE - 'by_default' => 'By default', // IGNORE - 'damn' => 'Blast!', // IGNORE - 'default_category' => 'Uncategorized', // IGNORE - 'no' => 'No', // IGNORE - 'not_applicable' => 'Not available', // IGNORE - 'ok' => 'Okay!', // IGNORE - 'or' => 'or', // IGNORE - 'yes' => 'Yes', // IGNORE - ), - 'stream' => array( - 'load_more' => 'Load more articles', // IGNORE - 'mark_all_read' => 'Mark all as read', // IGNORE - 'nothing_to_load' => 'There are no more articles', // IGNORE - ), -); diff --git a/app/i18n/en-us/index.php b/app/i18n/en-us/index.php deleted file mode 100644 index 7a019bce0..000000000 --- a/app/i18n/en-us/index.php +++ /dev/null @@ -1,110 +0,0 @@ - array( - '_' => 'About', // IGNORE - 'agpl3' => 'AGPL 3', // IGNORE - 'bug_reports' => array( - 'environment_information' => array( - '_' => 'System information', // IGNORE - 'browser' => 'Browser', // IGNORE - 'database' => 'Database', // IGNORE - 'server_software' => 'Server software', // IGNORE - 'version_curl' => 'cURL version', // IGNORE - 'version_frss' => 'FreshRSS version', // IGNORE - 'version_php' => 'PHP version', // IGNORE - ), - ), - 'bugs_reports' => 'Bug reports', // IGNORE - 'documentation' => 'Documentation', // IGNORE - 'freshrss_description' => 'FreshRSS is a self-hostable RSS aggregator and reader. It allows you to read and follow several news websites at a glance without the need to browse from one website to another. FreshRSS is lightweight, configurable, and easy to use.', // IGNORE - 'github' => 'on GitHub', // IGNORE - 'license' => 'License', // IGNORE - 'project_website' => 'Project website', // IGNORE - 'title' => 'About', // IGNORE - 'version' => 'Version', // IGNORE - ), - 'feed' => array( - 'empty' => 'There are no articles to show.', // IGNORE - 'received' => array( - 'before_yesterday' => 'Received before yesterday', // IGNORE - 'today' => 'Received today', // IGNORE - 'yesterday' => 'Received yesterday', // IGNORE - ), - 'rss_of' => 'RSS feed of %s', // IGNORE - 'title' => 'Main stream', // IGNORE - 'title_fav' => 'Favorites', - 'title_global' => 'Global view', // IGNORE - ), - 'log' => array( - '_' => 'Logs', // IGNORE - 'clear' => 'Clear the logs', // IGNORE - 'empty' => 'Log file is empty', // IGNORE - 'title' => 'Logs', // IGNORE - ), - 'menu' => array( - 'about' => 'About FreshRSS', // IGNORE - 'before_one_day' => 'Older than one day', // IGNORE - 'before_one_week' => 'Older than one week', // IGNORE - 'bookmark_query' => 'Bookmark current query', // IGNORE - 'favorites' => 'Favorites (%s)', - 'global_view' => 'Global view', // IGNORE - 'important' => 'Important feeds', // IGNORE - 'main_stream' => 'Main stream', // IGNORE - 'mark_all_read' => 'Mark all as read', // IGNORE - 'mark_cat_read' => 'Mark category as read', // IGNORE - 'mark_feed_read' => 'Mark feed as read', // IGNORE - 'mark_selection_unread' => 'Mark selection as unread', // IGNORE - 'mylabels' => 'My labels', // IGNORE - 'newer_first' => 'Newer first', // IGNORE - 'non-starred' => 'Show non-favorites', - 'normal_view' => 'Normal view', // IGNORE - 'older_first' => 'Oldest first', // IGNORE - 'queries' => 'User queries', // IGNORE - 'read' => 'Show read', // IGNORE - 'reader_view' => 'Reading view', // IGNORE - 'rss_view' => 'RSS feed', // IGNORE - 'search_short' => 'Search', // IGNORE - 'sort' => array( - '_' => 'Sorting criteria', // IGNORE - 'c' => array( - 'name_asc' => 'Category, feed titles A→Z', // IGNORE - 'name_desc' => 'Category, feed titles Z→A', // IGNORE - ), - 'date_asc' => 'Publication date 1→9', // IGNORE - 'date_desc' => 'Publication date 9→1', // IGNORE - 'f' => array( - 'name_asc' => 'Feed title A→Z', // IGNORE - 'name_desc' => 'Feed title Z→A', // IGNORE - ), - 'id_asc' => 'Freshly received last', // IGNORE - 'id_desc' => 'Freshly received first', // IGNORE - 'link_asc' => 'Link A→Z', // IGNORE - 'link_desc' => 'Link Z→A', // IGNORE - 'rand' => 'Random order', // IGNORE - 'title_asc' => 'Title A→Z', // IGNORE - 'title_desc' => 'Title Z→A', // IGNORE - ), - 'starred' => 'Show favorites', - 'stats' => 'Statistics', // IGNORE - 'subscription' => 'Subscription management', // IGNORE - 'unread' => 'Show unread', // IGNORE - ), - 'share' => 'Share', // IGNORE - 'tag' => array( - 'related' => 'Article tags', // IGNORE - ), - 'tos' => array( - 'title' => 'Terms of Service', // IGNORE - ), -); diff --git a/app/i18n/en-us/install.php b/app/i18n/en-us/install.php deleted file mode 100644 index a25ce674a..000000000 --- a/app/i18n/en-us/install.php +++ /dev/null @@ -1,128 +0,0 @@ - array( - 'finish' => 'Complete installation', // IGNORE - 'fix_errors_before' => 'Please all fix errors before continuing to the next step.', // IGNORE - 'keep_install' => 'Keep previous configuration', // IGNORE - 'next_step' => 'Go to the next step', // IGNORE - 'reinstall' => 'Reinstall FreshRSS', // IGNORE - ), - 'bdd' => array( - '_' => 'Database', // IGNORE - 'conf' => array( - '_' => 'Database configuration', // IGNORE - 'ko' => 'Verify your database configuration.', // IGNORE - 'ok' => 'Database configuration has been saved.', // IGNORE - ), - 'host' => 'Host', // IGNORE - 'password' => 'Database password', // IGNORE - 'prefix' => 'Table prefix', // IGNORE - 'type' => 'Type of database', // IGNORE - 'username' => 'Database username', // IGNORE - ), - 'check' => array( - '_' => 'Checks', // IGNORE - 'already_installed' => 'We have detected that FreshRSS is already installed!', // IGNORE - 'cache' => array( - 'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.', - 'ok' => 'Permissions on the cache directory are good.', // IGNORE - ), - 'ctype' => array( - 'nok' => 'Cannot find the required library for character type checking (php-ctype).', // IGNORE - 'ok' => 'You have the required library for character type checking (ctype).', // IGNORE - ), - 'curl' => array( - 'nok' => 'Cannot find the cURL library (php-curl package).', // IGNORE - 'ok' => 'You have the cURL library.', // IGNORE - ), - 'data' => 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 - ), - 'dom' => array( - 'nok' => 'Cannot find the required library to browse the DOM.', // IGNORE - 'ok' => 'You have the required library to browse the DOM.', // IGNORE - ), - 'favicons' => array( - 'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.', - 'ok' => 'Permissions on the favicons directory are good.', // IGNORE - ), - 'fileinfo' => array( - 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', // IGNORE - 'ok' => 'You have the fileinfo library.', // IGNORE - ), - 'json' => array( - 'nok' => 'Cannot find the recommended library to parse JSON.', // IGNORE - 'ok' => 'You have the recommended library to parse JSON.', // IGNORE - ), - 'mbstring' => array( - 'nok' => 'Cannot find the recommended library mbstring for Unicode.', // IGNORE - 'ok' => 'You have the recommended library mbstring for Unicode.', // IGNORE - ), - 'pcre' => array( - 'nok' => 'Cannot find the required library for regular expressions (php-pcre).', // IGNORE - 'ok' => 'You have the required library for regular expressions (PCRE).', // IGNORE - ), - 'pdo' => array( - 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // IGNORE - 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // IGNORE - ), - 'php' => array( - 'nok' => 'Your PHP version is %s, but FreshRSS requires at least version %s.', // IGNORE - 'ok' => 'Your PHP version, %s, is compatible with FreshRSS.', // IGNORE - ), - 'reload' => 'Check again', // IGNORE - 'tmp' => array( - 'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.', // IGNORE - 'ok' => 'Permissions on the temp directory are good.', // IGNORE - ), - 'unknown_process_username' => 'unknown', // IGNORE - 'users' => array( - 'nok' => 'Check permissions on the %1$s directory for %2$s user. The HTTP server must have write permissions.', // IGNORE - 'ok' => 'Permissions on the users directory are good.', // IGNORE - ), - 'xml' => array( - 'nok' => 'Cannot find the required library to parse XML.', // IGNORE - 'ok' => 'You have the required library to parse XML.', // IGNORE - ), - ), - 'conf' => array( - '_' => 'General configuration', // IGNORE - 'ok' => 'General configuration has been saved.', // IGNORE - ), - 'congratulations' => 'Congratulations!', // IGNORE - 'default_user' => array( - '_' => 'Username of the default user', // IGNORE - 'max_char' => 'maximum 16 alphanumeric characters', // IGNORE - ), - 'fix_errors_before' => 'Please fix errors before continuing to the next step.', // IGNORE - 'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled', // IGNORE - 'js' => array( - 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', // IGNORE - ), - 'language' => array( - '_' => 'Language', // IGNORE - 'choose' => 'Choose a language for FreshRSS', // IGNORE - 'defined' => 'Language has been defined.', // IGNORE - ), - 'missing_applied_migrations' => 'Something went wrong; you should create an empty file %s manually.', // IGNORE - 'ok' => 'The installation process was successful.', // IGNORE - 'session' => array( - 'nok' => 'The web server seems to be incorrectly configured for cookies required for PHP sessions!', // IGNORE - ), - 'step' => 'step %d', // IGNORE - 'steps' => 'Steps', // IGNORE - 'this_is_the_end' => 'This is the end', // IGNORE - 'title' => 'Installation · FreshRSS', // IGNORE -); diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php deleted file mode 100644 index b3c4042ee..000000000 --- a/app/i18n/en-us/sub.php +++ /dev/null @@ -1,307 +0,0 @@ - array( - 'documentation' => 'Copy the following URL to use it within an external tool.', // IGNORE - 'title' => 'API', // IGNORE - ), - 'bookmarklet' => array( - 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose “Bookmark This Link”. Then click the “Subscribe” button in any page you want to subscribe to.', // IGNORE - 'label' => 'Subscribe', // IGNORE - 'title' => 'Bookmarklet', // IGNORE - ), - 'category' => array( - '_' => 'Category', // IGNORE - 'add' => 'Add a category', // IGNORE - 'archiving' => 'Archiving', // IGNORE - 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // IGNORE - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // IGNORE - ), - 'empty' => 'Empty category', // IGNORE - 'expand' => 'Expand category', // IGNORE - 'information' => 'Information', // IGNORE - 'open' => 'Open category', // IGNORE - 'opml_url' => 'OPML URL', // IGNORE - 'position' => 'Display position', // IGNORE - 'position_help' => 'To control category sort order', // IGNORE - 'title' => 'Title', // IGNORE - ), - 'feed' => array( - 'accept_cookies' => 'Accept cookies', // IGNORE - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // IGNORE - 'add' => 'Add a feed', // IGNORE - 'advanced' => 'Advanced', // IGNORE - 'archiving' => 'Archiving', // IGNORE - 'auth' => array( - 'configuration' => 'Login', // IGNORE - 'help' => 'Allows access to HTTP protected RSS feeds', // IGNORE - 'http' => 'HTTP Authentication', // IGNORE - 'password' => 'HTTP password', // IGNORE - 'username' => 'HTTP username', // IGNORE - ), - 'change_favicon' => 'Change…', // IGNORE - 'clear_cache' => 'Always clear cache', // IGNORE - 'content_action' => array( - '_' => 'Content action when fetching the article content', // IGNORE - 'append' => 'Add after existing content', // IGNORE - 'prepend' => 'Add before existing content', // IGNORE - 'replace' => 'Replace existing content', // IGNORE - ), - 'content_retrieval' => 'Content retrieval', // IGNORE - 'css_cookie' => 'Use Cookies when fetching the article content', // IGNORE - 'css_cookie_help' => 'Example: foo=bar; gdpr_consent=true; cookie=value', // IGNORE - 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', // IGNORE - 'css_path' => 'Article CSS selector on original website', // IGNORE - 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // IGNORE - 'help' => 'A CSS selector may be a list such as: footer, aside, p[data-sanitized-class~="menu"]', // IGNORE - ), - 'description' => 'Description', // IGNORE - 'empty' => 'This feed is empty. Please verify that it is still maintained.', // IGNORE - 'error' => 'This feed has encountered a problem. If this situation persists, please verify that it is still reachable.', // IGNORE - 'export-as-opml' => array( - 'download' => 'Download', // IGNORE - 'help' => 'XML file (data subset. See documentation)', // IGNORE - 'label' => 'Export as OPML', // IGNORE - ), - 'ext_favicon' => 'Set automatically', // IGNORE - 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // IGNORE - 'filteractions' => array( - '_' => 'Filter actions', // IGNORE - 'help' => 'Write one search filter per line. Operators see documentation.', // IGNORE - ), - 'http_headers' => 'HTTP Headers', // IGNORE - 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // IGNORE - 'icon' => 'Icon', // IGNORE - 'information' => 'Information', // IGNORE - 'keep_min' => 'Minimum number of articles to keep', // IGNORE - 'kind' => array( - '_' => 'Type of feed source', // IGNORE - 'html_json' => array( - '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // IGNORE - 'xpath' => array( - '_' => 'XPath for JSON in HTML', // IGNORE - 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // IGNORE - ), - ), - 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // IGNORE - 'feed_title' => array( - '_' => 'feed title', // IGNORE - 'help' => 'Example: //title or a static string: "My custom feed"', // IGNORE - ), - 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // IGNORE - 'item' => array( - '_' => 'finding news items
(most important)', // IGNORE - 'help' => 'Example: //div[@class="news-item"]', // IGNORE - ), - 'item_author' => array( - '_' => 'item author', // IGNORE - 'help' => 'Can also be a static string. Example: "Anonymous"', // IGNORE - ), - 'item_categories' => 'item tags', // IGNORE - 'item_content' => array( - '_' => 'item content', // IGNORE - 'help' => 'Example to take the full item: .', // IGNORE - ), - 'item_thumbnail' => array( - '_' => 'item thumbnail', // IGNORE - 'help' => 'Example: descendant::img/@src', // IGNORE - ), - 'item_timeFormat' => array( - '_' => 'Custom date/time format', // IGNORE - 'help' => 'Optional. A format supported by DateTime::createFromFormat() such as d-m-Y H:i:s', // IGNORE - ), - 'item_timestamp' => array( - '_' => 'item date', // IGNORE - 'help' => 'The result will be parsed by strtotime()', // IGNORE - ), - 'item_title' => array( - '_' => 'item title', // IGNORE - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // IGNORE - ), - 'item_uid' => array( - '_' => 'item unique ID', // IGNORE - 'help' => 'Optional. Example: descendant::div/@data-uri', // IGNORE - ), - 'item_uri' => array( - '_' => 'item link (URL)', // IGNORE - 'help' => 'Example: descendant::a/@href', // IGNORE - ), - 'relative' => 'XPath (relative to item) for:', // IGNORE - 'xpath' => 'XPath for:', // IGNORE - ), - 'json_dotnotation' => array( - '_' => 'JSON (dot notation)', // IGNORE - 'feed_title' => array( - '_' => 'feed title', // IGNORE - 'help' => 'Example: meta.title or a static string: "My custom feed"', // IGNORE - ), - 'help' => 'A JSON dot notated uses dots between objects and brackets for arrays (e.g. data.items[0].title)', // IGNORE - 'item' => array( - '_' => 'finding news items
(most important)', // IGNORE - 'help' => 'JSON path to the array containing the items, e.g. $ or newsItems', // IGNORE - ), - 'item_author' => 'item author', // IGNORE - 'item_categories' => 'item tags', // IGNORE - 'item_content' => array( - '_' => 'item content', // IGNORE - 'help' => 'Key under which the content is found, e.g. content', // IGNORE - ), - 'item_thumbnail' => array( - '_' => 'item thumbnail', // IGNORE - 'help' => 'Example: image', // IGNORE - ), - 'item_timeFormat' => array( - '_' => 'Custom date/time format', // IGNORE - 'help' => 'Optional. A format supported by DateTime::createFromFormat() such as d-m-Y H:i:s', // IGNORE - ), - 'item_timestamp' => array( - '_' => 'item date', // IGNORE - 'help' => 'The result will be parsed by strtotime()', // IGNORE - ), - 'item_title' => 'item title', // IGNORE - 'item_uid' => 'item unique ID', // IGNORE - 'item_uri' => array( - '_' => 'item link (URL)', // IGNORE - 'help' => 'Example: permalink', // IGNORE - ), - 'json' => 'dot notation for:', // IGNORE - 'relative' => 'dot notated path (relative to item) for:', // IGNORE - ), - 'jsonfeed' => 'JSON Feed', // IGNORE - 'rss' => 'RSS / Atom (default)', // IGNORE - 'xml_xpath' => 'XML + XPath', // IGNORE - ), - 'maintenance' => array( - 'clear_cache' => 'Clear cache', // IGNORE - 'clear_cache_help' => 'Clear the cache for this feed.', // IGNORE - 'reload_articles' => 'Reload articles', // IGNORE - 'reload_articles_help' => 'Reload that many articles and fetch complete content if a selector is defined.', // IGNORE - 'title' => 'Maintenance', // IGNORE - ), - 'max_http_redir' => 'Max HTTP redirects', // IGNORE - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // IGNORE - 'method' => array( - '_' => 'HTTP Method', // IGNORE - ), - 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // IGNORE - 'method_postparams' => 'Payload for POST', // IGNORE - 'moved_category_deleted' => 'When you remove a category, its feeds are automatically classified under %s.', // IGNORE - 'mute' => array( - '_' => 'mute', // IGNORE - 'state_is_muted' => 'This feed is muted', // IGNORE - ), - 'no_selected' => 'No feed selected.', // IGNORE - 'number_entries' => '%d articles', // IGNORE - 'open_feed' => 'Open feed %s', // IGNORE - 'path_entries_conditions' => 'Conditions for content retrieval', // IGNORE - 'priority' => array( - '_' => 'Visibility', // IGNORE - 'category' => 'Show in its category', // IGNORE - 'feed' => 'Show in its feed', // IGNORE - 'hidden' => 'Do not show', // IGNORE - 'important' => 'Show in important feeds', // IGNORE - 'main_stream' => 'Show in main stream', // IGNORE - ), - 'proxy' => 'Set a proxy for fetching this feed', // IGNORE - 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: 127.0.0.1:1080 or username:password@127.0.0.1:1080)', // IGNORE - 'reset_favicon' => 'Reset to default', // IGNORE - 'selector_preview' => array( - 'show_raw' => 'Show source code', // IGNORE - 'show_rendered' => 'Show content', // IGNORE - ), - 'show' => array( - 'all' => 'All feeds', // IGNORE - 'error' => 'Show only feeds with errors', // IGNORE - ), - 'showing' => array( - 'error' => 'Showing only feeds with errors', // IGNORE - ), - 'ssl_verify' => 'Verify SSL security', // IGNORE - 'stats' => 'Statistics', // IGNORE - 'think_to_add' => 'You may add some feeds.', // IGNORE - 'timeout' => 'Timeout in seconds', // IGNORE - 'title' => 'Title', // IGNORE - 'title_add' => 'Add an RSS feed', // IGNORE - 'ttl' => 'Do not automatically refresh more often than', // IGNORE - 'unicityCriteria' => array( - '_' => 'Article unicity criteria', // IGNORE - 'forced' => 'forced', // IGNORE - 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // IGNORE - 'id' => 'Standard ID (default)', // IGNORE - 'link' => 'Link', // IGNORE - 'sha1:content' => 'Content', // IGNORE - 'sha1:content_published' => 'Content + Date', // IGNORE - 'sha1:link_published' => 'Link + Date', // IGNORE - 'sha1:link_published_title' => 'Link + Date + Title', // IGNORE - 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // IGNORE - 'sha1:published' => 'Date', // IGNORE - 'sha1:title' => 'Title', // IGNORE - 'sha1:title_published' => 'Title + Date', // IGNORE - 'sha1:title_published_content' => 'Title + Date + Content', // IGNORE - ), - 'url' => 'Feed URL', // IGNORE - 'useragent' => 'Set the user agent for fetching this feed', // IGNORE - 'useragent_help' => 'Example: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', // IGNORE - 'validator' => 'Check the validity of the feed', // IGNORE - 'website' => 'Website URL', // IGNORE - 'websub' => 'Instant notifications with WebSub', // IGNORE - ), - 'import_export' => array( - 'export' => array( - '_' => 'Export', // IGNORE - 'sqlite' => 'Download user database as SQLite', // IGNORE - ), - 'export_labelled' => 'Export your labeled articles', - 'export_opml' => 'Export list of feeds (OPML)', // IGNORE - 'export_starred' => 'Export your favorites', - 'feed_list' => 'List of %s articles', // IGNORE - 'file_to_import' => 'File to import
(OPML, JSON or ZIP)', // IGNORE - 'file_to_import_no_zip' => 'File to import
(OPML or JSON)', // IGNORE - 'import' => 'Import', // IGNORE - 'starred_list' => 'List of favorite articles', - 'title' => 'Import / export', // IGNORE - ), - 'menu' => array( - 'add' => 'Add a feed or category', // IGNORE - 'import_export' => 'Import / export', // IGNORE - 'label_management' => 'Label management', // IGNORE - 'stats' => array( - 'idle' => 'Idle feeds', // IGNORE - 'main' => 'Main statistics', // IGNORE - 'repartition' => 'Articles repartition', // IGNORE - ), - 'subscription_management' => 'Subscription management', // IGNORE - 'subscription_tools' => 'Subscription tools', // IGNORE - ), - 'tag' => array( - 'auto_label' => 'Add this label to new articles', // IGNORE - 'name' => 'Name', // IGNORE - 'new_name' => 'New name', // IGNORE - 'old_name' => 'Old name', // IGNORE - ), - 'title' => array( - '_' => 'Subscription management', // IGNORE - 'add' => 'Add a feed or category', // IGNORE - 'add_category' => 'Add a category', // IGNORE - 'add_dynamic_opml' => 'Add dynamic OPML', // IGNORE - 'add_feed' => 'Add a feed', // IGNORE - 'add_label' => 'Add a label', // IGNORE - 'add_opml_category' => 'OPML category name', // IGNORE - 'delete_label' => 'Delete this label', // IGNORE - 'feed_management' => 'RSS feeds management', // IGNORE - 'subscription_tools' => 'Subscription tools', // IGNORE - ), -); diff --git a/app/i18n/en-us/user.php b/app/i18n/en-us/user.php deleted file mode 100644 index abae569f8..000000000 --- a/app/i18n/en-us/user.php +++ /dev/null @@ -1,54 +0,0 @@ - array( - 'feedback' => array( - 'invalid' => 'This email address is invalid.', // IGNORE - 'required' => 'An email address is required.', // IGNORE - ), - 'validation' => array( - 'change_email' => 'You can change your email address on the profile page.', // IGNORE - 'email_sent_to' => 'We sent you an email at %s. Please follow its instructions to validate your address.', // IGNORE - 'feedback' => array( - 'email_failed' => 'We couldn’t send you an email because of a server configuration error.', // IGNORE - 'email_sent' => 'An email has been sent to your address.', // IGNORE - 'error' => 'Email address validation failed.', // IGNORE - 'ok' => 'This email address has been validated.', // IGNORE - 'unnecessary' => 'This email address was already validated.', // IGNORE - 'wrong_token' => 'This email address failed to be validated due to a wrong token.', // IGNORE - ), - 'need_to' => 'You need to validate your email address before being able to use %s.', // IGNORE - 'resend_email' => 'Resend the email', // IGNORE - 'title' => 'Email address validation', // IGNORE - ), - ), - 'mailer' => array( - 'email_need_validation' => array( - 'body' => 'You’ve just registered on %s, but you still need to validate your email address. For that, just follow the link:', // IGNORE - 'title' => 'You need to validate your account', // IGNORE - 'welcome' => 'Welcome %s,', // IGNORE - ), - ), - 'password' => array( - 'invalid' => 'The password is invalid.', // IGNORE - ), - 'tos' => array( - 'feedback' => array( - 'invalid' => 'You must accept the Terms of Service to be able to register.', // IGNORE - ), - ), - 'username' => array( - 'invalid' => 'This username is invalid.', // IGNORE - 'taken' => 'This username, %s, is taken.', // IGNORE - ), -); diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 42beb0a03..68e096416 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', 'el' => 'Ελληνικά', 'en' => 'English', - 'en-us' => 'English (United States)', + 'en-US' => 'English (United States)', 'es' => 'Español', 'fa' => 'فارسی', 'fi' => 'Suomi', @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', 'oc' => 'Occitan', 'pl' => 'Polski', - 'pt-br' => 'Português (Brasil)', - 'pt-pt' => 'Português (Portugal)', + 'pt-BR' => 'Português (Brasil)', + 'pt-PT' => 'Português (Portugal)', 'ru' => 'Русский', 'sk' => 'Slovenčina', 'tr' => 'Türkçe', 'uk' => 'Українська', - 'zh-cn' => '简体中文', - 'zh-tw' => '正體中文', + 'zh-CN' => '简体中文', + 'zh-TW' => '正體中文', ), 'menu' => array( 'about' => 'About', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index d16f2f07c..bd320df0a 100644 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Acerca de', diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php index 65ae9645a..34f05a62d 100644 --- a/app/i18n/fa/gen.php +++ b/app/i18n/fa/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE - 'uk' => 'Українська', // TODO - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'uk' => 'Українська', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => ' در مورد', diff --git a/app/i18n/fi/gen.php b/app/i18n/fi/gen.php index eb1babb2d..ad48083f3 100644 --- a/app/i18n/fi/gen.php +++ b/app/i18n/fi/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Tietoja', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 46dda0d5c..60df9d64a 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'À propos', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 0da616b8e..68b2cbaf8 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'אודות', diff --git a/app/i18n/hu/gen.php b/app/i18n/hu/gen.php index 117a8e333..c0cc355da 100644 --- a/app/i18n/hu/gen.php +++ b/app/i18n/hu/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Névjegy', diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php index 19035c401..a8f63a93d 100644 --- a/app/i18n/id/gen.php +++ b/app/i18n/id/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Tentang', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index b68a6cf3c..b4c6e7e45 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Informazioni', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index d0a44b615..5d67cb97a 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'FreshRSSについて', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 683d7f1b2..66a29d19d 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => '정보', diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php index 2752eaf47..7d3ae82bb 100644 --- a/app/i18n/lv/gen.php +++ b/app/i18n/lv/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Par', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 191cbed94..c5cc37474 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Over', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index abe430a0a..aeb7714fc 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'A prepaus', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index a35987c02..e5c864469 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'O serwisie', diff --git a/app/i18n/pt-BR/admin.php b/app/i18n/pt-BR/admin.php new file mode 100644 index 000000000..6e2a53ae8 --- /dev/null +++ b/app/i18n/pt-BR/admin.php @@ -0,0 +1,240 @@ + array( + 'allow_anonymous' => 'Permitir a leitura anônima dos artigos pelo usuário padrão (%s)', + 'allow_anonymous_refresh' => 'Permitir atualização anônima dos artigos', + 'api_enabled' => 'Permitir acesso à API (Necessáiro para aplicativos móveis and sharing user queries)', // DIRTY + 'form' => 'Formulário Web(tradicional, Necessita de JavaScript)', + 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // TODO + 'none' => 'Nenhum (Perigoso)', + 'title' => 'Autenticação', + 'token' => 'Token de autenticação principal', + 'token_help' => 'Permite acesso a todos as saídas RSS do usuário bem como atualização dos feeds sem autenticação:', + 'type' => 'Método de autenticação', + 'unsafe_autologin' => 'Permitir login automático inseguro usando o seguinte formato: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Verifique as permissões no diretório ./data/cache. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório cache estão corretos.', + ), + 'categories' => array( + 'nok' => 'Tabela Category está configurada incorretamente.', + 'ok' => 'Tabela Category está ok.', + ), + 'connection' => array( + 'nok' => 'Conexão ao banco de dados não pode ser estabelecida.', + 'ok' => 'Conexão ao banco de dados está ok.', + ), + 'ctype' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', + 'ok' => 'Você tem a biblioteca necessária para verificação do tipo de caractere (ctype).', + ), + 'curl' => array( + 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', + 'ok' => 'Você tem a biblioteca cURL.', + ), + 'data' => array( + 'nok' => 'Verifique as permissões no diretório ./data. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório data estão corretos.', + ), + 'database' => 'Instalação do banco de dados', + '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.', + ), + 'entries' => array( + 'nok' => 'Tabela Entry está configurada incorretamente.', + 'ok' => 'Tabela Entry está ok.', + ), + 'favicons' => array( + 'nok' => 'Verifique as permissões no diretório ./data/favicons. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório favicons estão corretos.', + ), + 'feeds' => array( + 'nok' => 'Tabela Feed está configurada incorretamente.', + 'ok' => 'Tabela Feed está ok.', + ), + 'fileinfo' => array( + 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', + 'ok' => 'Você tem a biblioteca fileinfo.', + ), + 'files' => 'Instalação de arquivos', + 'json' => array( + 'nok' => 'Não foi possível encontrar JSON (php-json).', + 'ok' => 'Você tem a extensão JSON.', + ), + 'mbstring' => array( + 'nok' => 'Não foi possível encontrar a biblioteca recomendada para Unicode (mbstring).', + 'ok' => 'Você tem a biblioteca recomendada para Unicode (mbstring).', + ), + 'pcre' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', + 'ok' => 'Você tem a biblioteca necessária para expressões regulares (php-pcre).', + ), + 'pdo' => array( + 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'Você tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + '_' => 'Instação do PHP', + 'nok' => 'Sua versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', + 'ok' => 'Sua versão do PHP é %s, que é compatível com o FreshRSS.', + ), + 'tables' => array( + 'nok' => 'Há uma ou mais tabelas inexistentes no banco de dados.', + 'ok' => 'As tabelas apropriadas existem no banco de dados.', + ), + 'title' => 'Verificação de instalação', + 'tokens' => array( + 'nok' => 'Verifique as permissões no diretório ./data/tokens. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório tokens estão corretos.', + ), + 'users' => array( + 'nok' => 'Verifiquei as permissões no diretório ./data/users. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório users estão corretos.', + ), + 'zip' => array( + 'nok' => 'Não foi possível localizar a extensão ZIP (php-zip).', + 'ok' => 'Você tem a extensão ZIP.', + ), + ), + 'extensions' => array( + 'author' => 'Autor', + 'community' => 'Extensões da comunidade disponíveis', + 'description' => 'Descrição', + 'disabled' => 'Desabilitado', + 'empty_list' => 'Não há extensões instaladas', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO + 'enabled' => 'Habilitada', + 'latest' => 'Instalado', + 'name' => 'Nome', + 'no_configure_view' => 'Esta extensão não pode ser configurada.', + 'system' => array( + '_' => 'Extensões do sistema', + 'no_rights' => 'Extensões do sistema (Você não tem direitos para isto)', + ), + 'title' => 'Extensões', + 'update' => 'Atualização disponível', + 'user' => 'Extensões do usuário', + 'version' => 'Versão', + ), + 'stats' => array( + '_' => 'Estatísticas', + 'all_feeds' => 'Todos os feeds', + 'category' => 'Categoria', + 'entry_count' => 'Contagem de entrada', + 'entry_per_category' => 'Entradas por categoria', + 'entry_per_day' => 'Entradas por dia (últimos 30 dias)', + 'entry_per_day_of_week' => 'Por dia da semana(média: %.2f mensagens)', + 'entry_per_hour' => 'Por hora (média: %.2f mensagens)', + 'entry_per_month' => 'Por mês(média: %.2f mensagens)', + 'entry_repartition' => 'Repartição de entradas', + 'feed' => 'Feed', // IGNORE + 'feed_per_category' => 'Feeds por categoria', + 'idle' => 'Feeds inativos', + 'main' => 'Estatísticas principais', + 'main_stream' => 'Stream principal', + 'no_idle' => 'Não há nenhum feed inativo!', + 'number_entries' => '%d artigos', + 'overview' => 'Overview', // TODO + 'percent_of_total' => '% do total', + 'repartition' => 'Repartição de artigos: %s', + 'status_favorites' => 'Favoritos', + 'status_read' => 'Lido', + 'status_total' => 'Total', // IGNORE + 'status_unread' => 'Não lidos', + 'title' => 'Estatísticas', + 'top_feed' => 'Top10 Feeds', + ), + 'system' => array( + '_' => 'Configuração do sistema', + 'auto-update-url' => 'URL do servidor para atualização automática', + 'base-url' => array( + '_' => 'URL Base', + 'recommendation' => 'Recomendação automática: %s', + ), + 'cookie-duration' => array( + 'help' => 'em segundos', + 'number' => 'Manter seção ativa durante', + ), + 'force_email_validation' => 'Força verificação do endereço de email', + 'instance-name' => 'Nome da instância', + 'max-categories' => 'Limite de categorias por usuário', + 'max-feeds' => 'Limite de Feeds por usuário', + 'registration' => array( + 'number' => 'Máximo número de contas', + 'select' => array( + 'label' => 'Formulário de Registro', + 'option' => array( + 'noform' => 'Desativado: Sem formulário de registro', + 'nolimit' => 'Ativado: Sem limites de contas', + 'setaccountsnumber' => 'Definir o máximo número de contas', + ), + ), + 'status' => array( + 'disabled' => 'Formulário desabilitado', + 'enabled' => 'Formulário habilitado', + ), + 'title' => 'Formulário de Cadastro de Usuário', + ), + 'sensitive-parameter' => 'Parâmetro sensível. Edite manualmente em ./data/config.php', + 'tos' => array( + 'disabled' => 'não fornecido', + 'enabled' => 'está ativado', + 'help' => 'Como habilitar os Termos de Serviço', + ), + 'websub' => array( + 'help' => 'Sobre WebSub', + ), + ), + 'update' => array( + '_' => 'Atualização do sistema', + 'apply' => 'Aplicar', + 'changelog' => 'Registro de alterações', + 'check' => 'Buscar por novas atualizações', + 'copiedFromURL' => 'update.php copiado de %s para ./data', + 'current_version' => 'Sua versão', + 'last' => 'Última verificação', + 'loading' => 'Atualizando…', + 'none' => 'Nenhuma atualização para se aplicar', + 'releaseChannel' => array( + '_' => 'Canal de Release', + 'edge' => 'Release contínua (“edge”)', + 'latest' => 'Release estável (“latest”)', + ), + 'title' => 'Sistema de atualização', + 'viaGit' => 'Atualização via git e GitHub.com iniciada', + ), + 'user' => array( + 'admin' => 'Administrador', + 'article_count' => 'Artigos', + 'back_to_manage' => '← Voltar para à lista de usuários', + 'create' => 'Criar novo usuário', + 'database_size' => 'Tamanho do banco de dados', + 'email' => 'Endereço de email', + 'enabled' => 'Habilitado', + 'feed_count' => 'Feeds', // IGNORE + 'is_admin' => 'É administrador', + 'language' => 'Idioma', + 'last_user_activity' => 'Última Atividade do Usuário', + 'list' => 'Lista de usuários', + 'number' => 'Há %d conta criada', + 'numbers' => 'Há %d contas criadas', + 'password_form' => 'Senha
(para o login pelo método do formulário)', + 'password_format' => 'Ao menos 7 caracteres', + 'title' => 'Gerenciar usuários', + 'username' => 'Usuário', + ), +); diff --git a/app/i18n/pt-BR/api.php b/app/i18n/pt-BR/api.php new file mode 100644 index 000000000..0021dfa98 --- /dev/null +++ b/app/i18n/pt-BR/api.php @@ -0,0 +1,33 @@ + array( + 'address' => 'Your API address:', // TODO + '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 + ), + 'test' => array( + 'fever' => 'Fever API configuration test:', // TODO + 'greader' => 'Google Reader API configuration test:', // TODO + ), + 'title' => array( + '_' => 'FreshRSS API endpoints', // TODO + 'extension' => 'API for extensions', // TODO + 'fever' => 'Fever compatible API', // TODO + 'greader' => 'Google Reader compatible API', // TODO + ), + ), +); diff --git a/app/i18n/pt-BR/conf.php b/app/i18n/pt-BR/conf.php new file mode 100644 index 000000000..9f2daba08 --- /dev/null +++ b/app/i18n/pt-BR/conf.php @@ -0,0 +1,372 @@ + array( + '_' => 'Arquivar', + 'exception' => 'Regras de exceção da limpeza', + 'help' => 'Mais opções estão disponíveis nas configurações individuais do Feed', + 'keep_favourites' => 'Nunca deletar os favoritos', + 'keep_labels' => 'Nunca deletar tags', + 'keep_max' => 'Número máximo de artigos para manter no feed', + 'keep_min_by_feed' => 'Número mínimo de artigos para manter no feed', + 'keep_period' => 'Idade máxima dos artigos a serem mantidos', + 'keep_unreads' => 'Nunca apagar os não lidos', + 'maintenance' => 'Manutenção', + 'optimize' => 'Otimizar banco de dados', + 'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho do banco de dados', + 'policy' => 'Política de limpeza', + 'policy_warning' => 'Se nenhuma política de limpeza for selecionada, todos os artigos serão mantidos.', + 'purge_now' => 'Limpar agora', + 'title' => 'Arquivar', + 'ttl' => 'Não atualize automaticamente mais frequente que', + ), + 'display' => array( + '_' => 'Exibição', + 'darkMode' => array( + '_' => 'Modo noturno automático', + 'auto' => 'Automático', + 'help' => 'For compatible themes only', // TODO + 'no' => 'Não', + ), + 'icon' => array( + 'bottom_line' => 'Linha inferior', + 'display_authors' => 'Autores', + 'entry' => 'Ícones de artigos', + 'publication_date' => 'Data da publicação', + 'related_tags' => 'Tags relacionadas', + 'sharing' => 'Compartilhar', + 'summary' => 'Sumário', + 'top_line' => 'Linha superior', + ), + 'language' => 'Idioma', + 'notif_html5' => array( + 'seconds' => 'segundos (0 significa sem timeout)', + 'timeout' => 'Notificação em HTML5 de timeout', + ), + 'show_nav_buttons' => 'Mostrar botões de navegação', + 'theme' => array( + '_' => 'Tema', + 'deprecated' => array( + '_' => 'Depreciado', + 'description' => 'Este tema não é mais suportado e não estará mais disponível em uma versão futura do FreshRSS', + ), + ), + 'theme_not_available' => 'O tema “%s” não está mais disponível. Por favor escolha outro tema.', + 'thumbnail' => array( + 'label' => 'Miniatura', + 'landscape' => 'Modo paisagem', + 'none' => 'Nenhum', + 'portrait' => 'Modo retrato', + 'square' => 'Modo quadrado', + ), + 'timezone' => 'Fuso horário', + 'title' => 'Exibição', + 'website' => array( + 'full' => 'Ícone e nome', + 'icon' => 'Apenas ícone', + 'label' => 'Site', + 'name' => 'Apenas nome', + 'none' => 'Nenhum', + ), + 'width' => array( + 'content' => 'Largura do conteúdo', + 'large' => 'Largo', + 'medium' => 'Médio', + 'no_limit' => 'Sem limite', + 'thin' => 'Fino', + ), + ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Nivel de Registro', + 'message' => 'Mensagem de Registro', + 'timestamp' => 'Data e Hora', + ), + 'pagination' => array( + 'first' => 'Primeiro', + 'last' => 'Último', + 'next' => 'Próximo', + 'previous' => 'Anterior', + ), + ), + 'mark_read_button' => array( + '_' => '“marcar todos como lido” button', // DIRTY + 'big' => 'Big', // TODO + 'none' => 'None', // TODO + 'small' => 'Small', // TODO + ), + 'notification_timeout' => array( + 'bad' => array( + 'label' => 'Show warning banner', // TODO + 'seconds' => 'seconds (at least 1)', // TODO + ), + 'good' => array( + 'label' => 'Show acknowledgement banner', // TODO + 'seconds' => 'seconds (0 means not shown)', // TODO + ), + ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), + 'profile' => array( + '_' => 'Gerenciamento de perfil', + 'api' => array( + '_' => 'Administração da API', + 'api_not_set' => 'API password not set', // TODO + 'api_set' => 'API password set', // TODO + 'check_link' => 'Check API status via: %s', // TODO + 'disabled' => 'The API access is disabled.', // TODO + 'documentation_link' => 'See the documentation and list of known apps', // TODO + 'help' => 'See documentation', // TODO + ), + 'change_password' => 'Change password', // TODO + 'confirm_new_password' => 'Confirm new password', // TODO + 'current_password' => 'Current password
(for the Web-form login method)', // TODO + 'delete' => array( + '_' => 'Remover conta', + 'warn' => 'Sua conta e todos os dados relacionados serão removidos.', + ), + 'email' => 'Endereço de e-mail', + 'new_password' => 'New password', // TODO + 'password_api' => 'Senha da API
(p.s., para aplicativos móveis)', + 'password_format' => 'Ao menos 7 caracteres', + 'title' => 'Perfil', + ), + 'query' => array( + '_' => 'Consultas do usuário', + 'deprecated' => 'Esta não é mais válida. A categoria ou feed relacionado foi deletado.', + 'description' => 'Description', // TODO + 'filter' => array( + '_' => 'Filtro aplicado:', + 'categories' => 'Exibir por categoria', + 'feeds' => 'Exibir por feed', + 'order' => 'Ordenar por data', + 'search' => 'Expressão', + 'shareOpml' => 'Habilita o compartilhamento por OPML de categorias e feeds correspondentes', + 'shareRss' => 'Habilita o compartilhamento por HTML & RSS', + 'state' => 'Estado', + 'tags' => 'Exibir por tag', + 'type' => 'Tipo', + ), + 'get_A' => 'Show all feeds, also those shown in their category', // TODO + 'get_Z' => 'Show all feeds, also archived ones', // TODO + 'get_all' => 'Mostrar todos os artigos', + 'get_all_labels' => 'Exibir artigos com qualquer rótulo', + 'get_category' => 'Visualizar “%s” categoria', + 'get_favorite' => 'Visualizar artigos favoritos', + 'get_feed' => 'Visualizar “%s” feed', + 'get_important' => 'Exibir artigos de feeds importantes', + 'get_label' => 'Exibir artigos com rótulo “%s”', + 'help' => 'Veja a documentação para consultas de usuários e recompartilhamentos por HTML / RSS / OPML.', + 'image_url' => 'Image URL', // TODO + 'name' => 'Nome', + 'no_filter' => 'Sem filtro', + 'no_queries' => array( + '_' => 'No user queries are saved yet.', // TODO + 'help' => 'See documentation', // TODO + ), + 'number' => 'Consulta n°%d', + 'order_asc' => 'Exibir artigos mais antigos primeiro', + 'order_desc' => 'Exibir artigos mais novos primeiro', + 'search' => 'Busca por “%s”', + 'share' => array( + '_' => 'Compartilhar esta consulta por link', + 'disabled' => array( + '_' => 'disabled', // TODO + 'title' => 'Sharing', // TODO + ), + 'greader' => 'Shareable link to the GReader JSON', // TODO + 'help' => 'Forneça este link se quiser compartilhar esta consulta com alguém', + 'html' => 'Link compartilhável para a página HTML', + 'opml' => 'Link compartilhável para a lista de feeds OPML', + 'rss' => 'Link compartilhável para o feed RSS', + ), + 'state_0' => 'Exibir todos os artigos', + 'state_1' => 'Exibir artigos lidos', + 'state_2' => 'Exibir artigos não lidos', + 'state_3' => 'Exibir todos os artigos', + 'state_4' => 'Exibir artigos favoritos', + 'state_5' => 'Exibir artigos favoritos lidos', + 'state_6' => 'Exibir artigos favoritos não lidos', + 'state_7' => 'Exibir artigos favoritos', + 'state_8' => 'Exibir artigos que não são favoritos', + 'state_9' => 'Exibir artigos que não são favoritos lidos', + 'state_10' => 'Exibir artigos que não são favoritos não lidos', + 'state_11' => 'Exibir artigos que não são favoritos', + 'state_12' => 'Exibir todos os artigos', + 'state_13' => 'Exibir artigos lidos', + 'state_14' => 'Exibir artigos não lidos', + 'state_15' => 'Exibir todos os artigos', + 'title' => 'Consultas de usuários', + ), + 'reading' => array( + '_' => 'Leitura', + 'after_onread' => 'Depois de “marcar todos como lido”,', + 'always_show_favorites' => 'Mostrar todos os artivos nos favoritos por padrão', + 'apply_to_individual_feed' => 'Applies to feeds individually', // TODO + 'article' => array( + 'authors_date' => array( + '_' => 'Autores e Data', + 'both' => 'No cabeçalho e rodapé', + 'footer' => 'No rodapé', + 'header' => 'No cabeçalho', + 'none' => 'Nenhum', + ), + 'feed_name' => array( + 'above_title' => 'Acima do título/etiqueta', + 'none' => 'Nenhum', + 'with_authors' => 'Com autores e data', + ), + 'feed_title' => 'Título do Feed', + 'icons' => array( + '_' => 'Article icons position
(Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), + 'tags' => array( + '_' => 'Tag', + 'both' => 'No cabeçalho e rodapé', + 'footer' => 'No rodapé', + 'header' => 'No cabeçalho', + 'none' => 'Nenhum', + ), + 'tags_max' => array( + '_' => 'Número máximo de tags exibidas', + 'help' => '0 significa: mostrar todas as tags e não recolhê-las', + ), + ), + 'articles_per_page' => 'Número de artigos por página', + 'auto_load_more' => 'Carregar mais artigos no final da página', + 'auto_remove_article' => 'Esconder artigos depois de lidos', + 'confirm_enabled' => 'Exibir uma caixa de diálogo de confirmação quando acionar “marcar todos como lido”', + 'display_articles_unfolded' => 'Mostrar artigos abertos por padrão', + 'display_categories_unfolded' => 'Categorias abertas', + 'headline' => array( + 'articles' => 'Artigos: Abrir/Fechar', + 'articles_header_footer' => 'Artigos: cabeçalho/rodapé', + 'categories' => 'Navegação à esquerda: Categoria', + 'mark_as_read' => 'Marcar artigo como lido', + 'misc' => 'Diversos', + 'view' => 'Visualização', + ), + 'hide_read_feeds' => 'Esconder categorias e feeds com nenhum artigo não lido (não funciona com a configuração “Mostrar todos os artigos”)', + 'img_with_lazyload' => 'Utilizar o modo lazy load para carregar as imagens', + 'jump_next' => 'Vá para o próximo irmão não lido', + 'mark_updated_article_unread' => 'Marcar artigos atualizados como não lidos', + 'number_divided_when_reader' => 'Dividido por 2 no modo de leitura .', + 'read' => array( + 'article_open_on_website' => 'quando o artigo é aberto no site original', + 'article_viewed' => 'Quando o artigo é visualizado', + 'focus' => 'quando focado (exceto por feeds importantes)', + 'keep_max_n_unread' => 'Número máximo de artigos para manter como não lido', + 'scroll' => 'enquanto faz a rolagem (exceto por feeds importantes)', + 'upon_gone' => 'Quando não estiver mais no feed de notícias principais', + 'upon_reception' => 'ao receber um artigo', + 'when' => 'Marcar artigo como lido…', + 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // TODO + 'when_same_title_in_feed' => 'Se um título idêntico já existir nos últimos n artigos mais novos (of the feed)', // DIRTY + ), + 'show' => array( + '_' => 'Artigos para exibir', + 'active_category' => 'Categoria ativa', + 'adaptive' => 'Show unreads if any, all articles otherwise', // TODO + 'all_articles' => 'Exibir todos os artigos', + 'all_categories' => 'Exibir todas as categorias', + 'no_category' => 'Nenhuma categoria', + 'remember_categories' => 'lembrar de abrir as categorias', + 'unread' => 'Exibir apenas não lido', + 'unread_or_favorite' => 'Show unreads and favourites', // TODO + ), + 'show_fav_unread_help' => 'Aplicar também nas tags', + 'sides_close_article' => 'Clicando fora da área do texto do artigo fecha o mesmo', + 'sort' => array( + '_' => 'Ordem de visualização', + 'newer_first' => 'Novos primeiro', + 'older_first' => 'Antigos primeiro', + ), + 'star' => array( + 'when' => 'Mark an article as favourite…', // TODO + ), + 'sticky_post' => 'Coloque o artigo no topo quando aberto', + 'title' => 'Lendo', + 'view' => array( + 'default' => 'Visualização padrão', + 'global' => 'Visualização global', + 'normal' => 'Visualização normal', + 'reader' => 'Visualização de leitura', + ), + ), + 'sharing' => array( + '_' => 'Compartilhando', + 'add' => 'Adicionar um método de compartilhamento', + 'bluesky' => 'Bluesky', // IGNORE + 'deprecated' => 'Este serviço está obceloeto e será removido do FreshRSS em versões futuras.', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'E-mail', + 'facebook' => 'Facebook', // IGNORE + 'more_information' => 'Mais informação', + 'print' => 'Imprimir', + 'raindrop' => 'Raindrop.io', // IGNORE + 'remove' => 'Remover método de compartilhamento', + 'shaarli' => 'Shaarli', // IGNORE + 'share_name' => 'Nome de visualização para compartilhar', + 'share_url' => 'URL utilizada para compartilhar', + 'title' => 'Compartilhando', + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag', // IGNORE + ), + 'shortcut' => array( + '_' => 'Atalhos', + 'article_action' => 'Ações no artigo', + 'auto_share' => 'Compartilhar', + 'auto_share_help' => 'Se há apenas um modo de compartilhamento, ele é usado. Caso contrário, serão acessíveis pelo seu número.', + 'close_menus' => 'Fechar menus', + 'collapse_article' => 'Fechar', + 'first_article' => 'Ir para o primeiro artigo', + 'focus_search' => 'Acessar a caixa de busca', + 'global_view' => 'Mudar para visualização global', + 'help' => 'Mostrar documentação', + 'javascript' => 'JavaScript deve ser habilitado para utilizar atalhos', + 'last_article' => 'Ir para o último artigo', + 'load_more' => 'Carregar mais artigos', + 'mark_favorite' => 'Marcar como favorito', + 'mark_read' => 'Marcar como lido', + 'navigation' => 'Navegação', + 'navigation_help' => 'Com o modificador ⇧ Shift, atalhos de navegação aplicam aos feeds.
Com o Alt ⎇ modificador, atalhos de navegação aplicam as categorias.', + 'navigation_no_mod_help' => 'Os seguintes atalhos de navegação não suportam modificadores.', + 'next_article' => 'Pule para o próximo artigo', + 'next_unread_article' => 'Abrir o próximo artigo não lido', + 'non_standard' => 'Algumas teclas (%s) podem não funcionar como atalhos.', + 'normal_view' => 'Mudar para a visualização normal', + 'other_action' => 'Outras ações', + 'previous_article' => 'Pule para o artigo anterior', + 'reading_view' => 'Mudar para o modo de leitura', + 'rss_view' => 'Abrir como feed RSS ', + 'see_on_website' => 'Visualize o site original', + 'shift_for_all_read' => '+ Alt ⎇ para marcar artigos anteriores como lido
+ ⇧ Shift para marcar todos os artigos como lido', + 'skip_next_article' => 'Focar o próximo sem abri-lo', + 'skip_previous_article' => 'Focar o anterior sem abri-lo', + 'title' => 'Atalhos', + 'toggle_media' => 'Reproduzir/pausar mídia', + 'user_filter' => 'Acesse filtros de usuário', + 'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.', + 'views' => 'Visualizações', + ), + 'user' => array( + 'articles_and_size' => '%s artigos (%s)', + 'current' => 'Usuário atual', + 'is_admin' => 'é administrador', + 'users' => 'Usuários', + ), +); diff --git a/app/i18n/pt-BR/feedback.php b/app/i18n/pt-BR/feedback.php new file mode 100644 index 000000000..9ec1ffb35 --- /dev/null +++ b/app/i18n/pt-BR/feedback.php @@ -0,0 +1,152 @@ + array( + 'denied' => 'Você não tem permissão para acessar esta página', + 'not_found' => 'Você está buscando por uma página que não existe', + ), + 'admin' => array( + 'optimization_complete' => 'Otimização Completa', + ), + 'api' => array( + 'password' => array( + 'failed' => 'Sua senha não pode ser modificada', + 'updated' => 'Sua senha foi alterada com sucesso', + ), + ), + 'auth' => array( + 'login' => array( + 'invalid' => 'Login está incorreto', + 'success' => 'Você está conectado', + ), + 'logout' => array( + 'success' => 'Você está desconectado', + ), + ), + 'conf' => array( + 'error' => 'Um erro ocorreu durante o salvamento das configurações', + 'query_created' => 'A Query “%s” foi criada.', + 'shortcuts_updated' => 'Atalhos foram criados', + 'updated' => 'Configuração foi atualizada', + ), + 'extensions' => array( + 'already_enabled' => '%s já está habilitado', + 'cannot_remove' => '%s não pode ser removido', + 'disable' => array( + 'ko' => '%s não pode ser desabilitado. verifique os logs do FreshRSS para detalhes.', + 'ok' => '%s agora está desabilitado', + ), + 'enable' => array( + 'ko' => '%s não pode ser habilitado. verifique os logs do FreshRSS para detalhes.', + 'ok' => '%s agora está habilitado', + ), + 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // TODO + 'no_access' => 'Você não tem acesso ao %s', + 'not_enabled' => '%s não está habilitado', + 'not_found' => '%s não existe', + 'removed' => '%s removido', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'extensão ZIP não está presente em seu servidor. Por favor tente exportar os arquivos um por vez.', + 'feeds_imported' => 'Seus feeds foram importados e serão atualizados agora / Your feeds have been imported. If you are done importing, you can now click the Update feeds button.', // DIRTY + 'feeds_imported_with_errors' => 'Seus feeds foram importados, mas alguns erros ocorreram / Your feeds have been imported, but some errors occurred. If you are done importing, you can now click the Update feeds button.', // DIRTY + 'file_cannot_be_uploaded' => 'Arquivo não pôde ser enviado', + 'no_zip_extension' => 'extensão ZIP não está presente em seu servidor.', + 'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.', + ), + 'profile' => array( + 'error' => 'Seu perfil não pode ser editado', + 'passwords_dont_match' => 'Passwords don’t match', // TODO + 'updated' => 'Seu perfil foi editado com sucesso', + ), + 'sub' => array( + 'actualize' => 'Atualizando', + 'articles' => array( + 'marked_read' => 'Os artigos selecionados foram marcados como lidos.', + 'marked_unread' => 'Os artigos foram marcados como não lidos', + ), + 'category' => array( + 'created' => 'Categoria %s foi criada.', + 'deleted' => 'Categoria foi deletada.', + 'emptied' => 'Categoria foi esvaziada', + 'error' => 'Categoria não pode ser atualizada', + 'name_exists' => 'Este nome de categoria já existe.', + 'no_id' => 'Você precisa especificar um id para a categoria.', + 'no_name' => 'Nome da categoria não pode ser vazio.', + 'not_delete_default' => 'Você não pode deletar uma categoria vazia!', + 'not_exist' => 'A categoria não existe!', + 'over_max' => 'Você atingiu seu limite de categorias (%d)', + 'updated' => 'Categoria foi atualizada.', + ), + 'feed' => array( + 'actualized' => '%s foi atualizado', + 'actualizeds' => 'Os feeds RSS foram atualizados', + 'added' => 'O feed RSS %s foi adicionado', + 'already_subscribed' => 'Você já está inscrito no %s', + 'cache_cleared' => 'O cache do feed %s foi limpo', + 'deleted' => 'o feed foi deletado', + 'error' => 'O feed não pode ser atualizado', + 'favicon' => array( + 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // TODO + 'unsupported_format' => 'Unsupported image file format!', // TODO + ), + 'internal_problem' => 'O feed RSS não pôde ser adicionado. Verifique os logs do FreshRSS para detalhes. You can try force adding by appending #force_feed to the URL.', // DIRTY + 'invalid_url' => 'URL %s é inválida', + 'n_actualized' => '%d feeds foram atualizados', + 'n_entries_deleted' => '%d artigos foram deletados', + 'no_refresh' => 'Não há feed para atualizar…', + 'not_added' => '%s não pode ser atualizado', + 'not_found' => 'Não foi possível encontrar o feed', + 'over_max' => 'Você atingiu seu limite de feeds (%d)', + 'reloaded' => 'O feed %s foi recarregado', + 'selector_preview' => array( + 'http_error' => 'Falha ao carregar o conteúdo do site.', + 'no_entries' => 'Não há nenhuma entrada nesse feed. Você precisa de pelo menos um artigo para criar uma pré-visualização', + 'no_feed' => 'Erro interno (nenhum feed para verificar).', + 'no_result' => 'O seletor não teve correspondência. Por isso foi exibido o texto do feed original.', + 'selector_empty' => 'O seletor está vazio. Você precisa definir um para criar uma pré-visualização.', + ), + 'updated' => 'Os feeds foram atualizados', + ), + 'purge_completed' => 'Limpeza completa (%d artigos deletados)', + ), + 'tag' => array( + 'created' => 'A Tag “%s” foi criada.', + 'error' => 'Etiqueta não pode ser atualizada!', + 'name_exists' => 'O nome da tag já existe.', + 'renamed' => 'A Tag “%s” foi renomeada para “%s”.', + 'updated' => 'Etiqueta foi atualizada.', + ), + 'update' => array( + 'can_apply' => 'O FreshRSS será atualizado para a versão %s.', + 'error' => 'O processo de atualização encontrou um erro: %s', + 'file_is_nok' => 'Nova versão %s disponível, mas verifique as permissões no diretório %s. Servidor HTTP deve ter direitos para escrever dentro', + 'finished' => 'Atualização completa!', + 'none' => 'Nenhuma atualização para aplicar', + 'server_not_found' => 'Servidor de atualização não pôde ser localizado. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'Usuário %s foi criado', + 'error' => 'Usuário %s não pode ser criado', + ), + 'deleted' => array( + '_' => 'Usuário %s foi deletado', + 'error' => 'Usuário %s não pode ser deletado', + ), + 'updated' => array( + '_' => 'O usuário %s foi atualizado com sucesso', + 'error' => 'O usuário %s não foi atualizado', + ), + ), +); diff --git a/app/i18n/pt-BR/gen.php b/app/i18n/pt-BR/gen.php new file mode 100644 index 000000000..598364066 --- /dev/null +++ b/app/i18n/pt-BR/gen.php @@ -0,0 +1,277 @@ + array( + 'actualize' => 'Atualizar feeds', + 'add' => 'Adicionar', + 'back_to_rss_feeds' => '← Volte para o seu feeds RSS', + 'cancel' => 'Cancelar', + 'close' => 'Close', // TODO + 'create' => 'Criar', + 'delete_all_feeds' => 'Delete all feeds', // TODO + 'delete_errored_feeds' => 'Delete feeds with errors', // TODO + 'delete_muted_feeds' => 'Excluir feeds silenciados', + 'demote' => 'Despromover', + 'disable' => 'Desabilitar', + 'download' => 'Download', // TODO + 'empty' => 'Vazio', + 'enable' => 'Habilitar', + 'export' => 'Exportar', + 'filter' => 'Filtrar', + 'import' => 'Importar', + 'load_default_shortcuts' => 'Carregar mais atalhos', + 'manage' => 'Gerenciar', + 'mark_read' => 'Marcar como lido', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), + 'nav_buttons' => array( + 'next' => 'Next article', // TODO + 'prev' => 'Previous article', // TODO + 'up' => 'Go up', // TODO + ), + 'open_url' => 'Abrir URL', + 'promote' => 'Promover', + 'purge' => 'Limpar', + 'refresh_opml' => 'Atualizar OPML', + 'remove' => 'Remover', + 'rename' => 'Renomear', + 'see_website' => 'Ver o site', + 'submit' => 'Enviar', + 'truncate' => 'Deletar todos os artigos', + 'update' => 'Atualizar', + ), + 'auth' => array( + 'accept_tos' => 'Eu aceito os Termos de serviço.', + 'email' => 'Endereço de e-mail', + 'keep_logged_in' => 'Mantenha logado por (%s days)', + 'login' => 'Entrar', + 'logout' => 'Sair', + 'password' => array( + '_' => 'Senha', + 'format' => 'Ao menos 7 caracteres', + ), + 'reauth' => array( + 'header' => 'Reauthentication is required', // TODO + 'tip' => 'You won’t be asked to sign in again for %d minutes', // TODO + 'title' => 'Reauthentication', // TODO + ), + 'registration' => array( + '_' => 'Nova conta', + 'ask' => 'Criar novoa conta?', + 'title' => 'Criação de conta', + ), + 'username' => array( + '_' => 'Usuário', + 'format' => 'Máximo 16 caracteres alphanumericos', + ), + ), + 'date' => array( + 'Apr' => '\\A\\b\\r\\i\\l', + 'Aug' => '\\A\\g\\o\\s\\t\\o', + 'Dec' => '\\D\\e\\z\\e\\m\\b\\r\\o', + 'Feb' => '\\F\\e\\v\\e\\r\\e\\i\\r\\o', + 'Jan' => '\\J\\a\\n\\e\\i\\r\\o', + 'Jul' => '\\J\\u\\l\\h\\o', + 'Jun' => '\\J\\u\\n\\h\\o', + 'Mar' => '\\M\\a\\r\\ç\\o', + 'May' => '\\M\\a\\i\\o', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\o', + 'Oct' => '\\O\\u\\t\\u\\b\\r\\o', + 'Sep' => '\\S\\e\\t\\e\\m\\b\\r\\o', + 'apr' => 'abr', + 'april' => 'Abr', + 'aug' => 'ago', + 'august' => 'Ago', + 'before_yesterday' => 'Antes de ontem', + 'dec' => 'dez', + 'december' => 'Dez', + 'feb' => 'fev', + 'february' => 'Fev', + 'format_date' => 'j \\d\\e %s \\d\\e Y', + 'format_date_hour' => 'j \\d\\e %s \\d\\e Y\\, H\\:i', + 'fri' => 'Sex', + 'jan' => 'jan', + 'january' => 'Jan', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_2_year' => 'Últimos dois anos', + 'last_3_month' => 'Últimos três meses', + 'last_3_year' => 'Últimos três anos', + 'last_5_year' => 'Últimos cinco anos', + 'last_6_month' => 'Últimos seis meses', + 'last_month' => 'Últimos mês', + 'last_week' => 'Última semana', + 'last_year' => 'Último ano', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'Mai', + 'may_' => 'Mai', + 'mon' => 'Seg', + 'month' => 'meses', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'out', + 'october' => 'Out', + 'sat' => 'Sab', + 'sep' => 'set', + 'september' => 'Set', + 'sun' => 'Dom', + 'thu' => 'Qui', + 'today' => 'Hoje', + 'tue' => 'Ter', + 'wed' => 'Qua', + 'yesterday' => 'Ontem', + ), + 'dir' => 'ltr', // IGNORE + 'freshrss' => array( + '_' => 'FreshRSS', // IGNORE + 'about' => 'Sobre FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Categoria vazia', + 'confirm_action' => 'Você tem certeza que deseja efetuar esta ação? Ela não poderá ser cancelada!', + 'confirm_action_feed_cat' => 'Você tem certeza que deseja efetuar esta ação ? Você irá perder favoritos e queries de usuários. Não poderá ser cancelado!', + 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // TODO + 'feedback' => array( + 'body_new_articles' => 'Há %%d novos artigos para ler no FreshRSS.', + 'body_unread_articles' => '(não lido: %%d)', + 'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de conexão com a internet.', + 'title_new_articles' => 'FreshRSS: novos artigos!', + ), + 'labels_empty' => 'No labels', // TODO + 'new_article' => 'Há novos artigos disponíveis, clique para atualizar a página.', + 'should_be_activated' => 'O JavaScript precisa estar ativo', + 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // TODO + ), + 'lang' => array( + 'cs' => 'Čeština', // IGNORE + 'de' => 'Deutsch', // IGNORE + 'el' => 'Ελληνικά', // IGNORE + 'en' => 'English', // IGNORE + 'en-US' => 'English (United States)', // IGNORE + 'es' => 'Español', // IGNORE + 'fa' => 'فارسی', // IGNORE + 'fi' => 'Suomi', // IGNORE + 'fr' => 'Français', // IGNORE + 'he' => 'עברית', // IGNORE + 'hu' => 'Magyar', // IGNORE + 'id' => 'Bahasa Indonesia', // IGNORE + 'it' => 'Italiano', // IGNORE + 'ja' => '日本語', // IGNORE + 'ko' => '한국어', // IGNORE + 'lv' => 'Latviešu', // IGNORE + 'nl' => 'Nederlands', // IGNORE + 'oc' => 'Occitan', // IGNORE + 'pl' => 'Polski', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE + 'ru' => 'Русский', // IGNORE + 'sk' => 'Slovenčina', // IGNORE + 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE + ), + 'menu' => array( + 'about' => 'Sobre', + 'account' => 'Conta', + 'admin' => 'Administração', + 'archiving' => 'Arquivar', + 'authentication' => 'Autenticação', + 'check_install' => 'Verificação de instalação', + 'configuration' => 'Configuração', + 'display' => 'Visualização', + 'extensions' => 'Extensões', + 'logs' => 'Logs', // IGNORE + 'privacy' => 'Privacy', // TODO + 'queries' => 'Queries de usuário', + 'reading' => 'Leitura', + 'search' => 'Procurar por palavras ou #tags', + 'search_help' => 'See documentation for advanced search parameters', // TODO + 'sharing' => 'Compartilhamento', + 'shortcuts' => 'Atalhos', + 'stats' => 'Estatísticas', + 'system' => 'Configuração do sistema', + 'update' => 'Atualização', + 'user_management' => 'Gerenciamento de usuários', + 'user_profile' => 'Perfil', + ), + 'period' => array( + 'days' => 'dias', + 'hours' => 'horas', + 'months' => 'meses', + '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 + 'archiveORG' => 'archive.org', // IGNORE + 'archivePH' => 'archive.ph', // IGNORE + 'bluesky' => 'Bluesky', // IGNORE + 'buffer' => 'Buffer', // IGNORE + 'clipboard' => 'Área de transferência', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'E-mail', + 'email-webmail-firefox-fix' => 'Email (webmail - correção para o Firefox)', + 'facebook' => 'Facebook', // IGNORE + 'gnusocial' => 'GNU social', // IGNORE + 'jdh' => 'Journal du hacker', // IGNORE + 'lemmy' => 'Lemmy', // IGNORE + 'linkding' => 'Linkding', // IGNORE + 'linkedin' => 'LinkedIn', // IGNORE + 'mastodon' => 'Mastodon', // IGNORE + 'movim' => 'Movim', // IGNORE + 'omnivore' => 'Omnivore', // IGNORE + 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // IGNORE + 'pocket' => 'Pocket', // IGNORE + 'print' => 'Imprimir', + 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // IGNORE + 'shaarli' => 'Shaarli', // IGNORE + 'telegram' => 'Telegram', // IGNORE + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag v1', // IGNORE + 'wallabagv2' => 'wallabag v2', // IGNORE + 'web-sharing-api' => 'Sistemas-compartilhados (API)', + 'whatsapp' => 'Whatsapp', // IGNORE + 'xing' => 'Xing', // IGNORE + ), + 'short' => array( + 'attention' => 'Atenção!', + 'blank_to_disable' => 'Deixe em branco para desativar', + 'by_author' => 'Por:', + 'by_default' => 'Por padrão', + 'damn' => 'Buumm!', + 'default_category' => 'Sem categoria', + 'no' => 'Não', + 'not_applicable' => 'Não disponível', + 'ok' => 'Ok!', // IGNORE + 'or' => 'ou', + 'yes' => 'Sim', + ), + 'stream' => array( + 'load_more' => 'Carregar mais artigos', + 'mark_all_read' => 'Marcar todos como lidos', + 'nothing_to_load' => 'Não há mais artigos', + ), +); diff --git a/app/i18n/pt-BR/index.php b/app/i18n/pt-BR/index.php new file mode 100644 index 000000000..9a52c27cd --- /dev/null +++ b/app/i18n/pt-BR/index.php @@ -0,0 +1,110 @@ + array( + '_' => 'Sobre', + 'agpl3' => 'AGPL 3', // IGNORE + 'bug_reports' => array( + 'environment_information' => array( + '_' => 'System information', // TODO + 'browser' => 'Browser', // TODO + 'database' => 'Database', // TODO + 'server_software' => 'Server software', // TODO + 'version_curl' => 'cURL version', // TODO + 'version_frss' => 'FreshRSS version', // TODO + 'version_php' => 'PHP version', // TODO + ), + ), + 'bugs_reports' => 'Reportar Bugs', + 'documentation' => 'Documentação', + 'freshrss_description' => 'FreshRSS é um RSS feeds aggregator para um host próprio. É leve e fácil de utilizar enquanto é uma ferramenta poderosa e configurável. ', + 'github' => 'no GitHub', + 'license' => 'licença', + 'project_website' => 'Site do projeto', + 'title' => 'Sobre', + 'version' => 'Versão', + ), + 'feed' => array( + 'empty' => 'Não há nenhum artigo para mostrar.', + 'received' => array( + 'before_yesterday' => 'Received before yesterday', // TODO + 'today' => 'Received today', // TODO + 'yesterday' => 'Received yesterday', // TODO + ), + 'rss_of' => 'RSS feed do %s', + 'title' => 'Stream principal', + 'title_fav' => 'Favoritos', + 'title_global' => 'Visualização Global', + ), + 'log' => array( + '_' => 'Logs', // IGNORE + 'clear' => 'Limpar logs', + 'empty' => 'Arquivo de log está vazio', + 'title' => 'Logs', // IGNORE + ), + 'menu' => array( + 'about' => 'Sobre o FreshRSS', + 'before_one_day' => 'Antes de um dia', + 'before_one_week' => 'Antes de uma semana', + 'bookmark_query' => 'Salvar pesquisa atual', + 'favorites' => 'Favoritos (%s)', + 'global_view' => 'Visualização global', + 'important' => 'Feeds importantes', + 'main_stream' => 'Stream principal', + 'mark_all_read' => 'Marcar todos como lidos', + 'mark_cat_read' => 'Marcar categoria como lida', + 'mark_feed_read' => 'Marcar feed com lido', + 'mark_selection_unread' => 'Marcar seleção como não lida', + 'mylabels' => 'Minhas etiquetas', + 'newer_first' => 'Novos primeiro', + 'non-starred' => 'Mostrar todos, exceto favoritos', + 'normal_view' => 'visualização normal', + 'older_first' => 'Antigos primeiro', + 'queries' => 'Queries do usuário', + 'read' => 'Mostrar apenas lidos', + 'reader_view' => 'Visualização de leitura', + 'rss_view' => 'Feed RSS', + 'search_short' => 'Buscar', + 'sort' => array( + '_' => 'Sorting criteria', // TODO + 'c' => array( + 'name_asc' => 'Category, feed titles A→Z', // TODO + 'name_desc' => 'Category, feed titles Z→A', // TODO + ), + 'date_asc' => 'Publication date 1→9', // TODO + 'date_desc' => 'Publication date 9→1', // TODO + 'f' => array( + 'name_asc' => 'Feed title A→Z', // TODO + 'name_desc' => 'Feed title Z→A', // TODO + ), + 'id_asc' => 'Freshly received last', // TODO + 'id_desc' => 'Freshly received first', // TODO + 'link_asc' => 'Link A→Z', // TODO + 'link_desc' => 'Link Z→A', // TODO + 'rand' => 'Random order', // TODO + 'title_asc' => 'Title A→Z', // TODO + 'title_desc' => 'Title Z→A', // TODO + ), + 'starred' => 'Mostrar apenas os favoritos', + 'stats' => 'Estatísticas', + 'subscription' => 'Gerenciamento de inscrições', + 'unread' => 'Mostrar apenas os não lidos', + ), + 'share' => 'Compartilhar', + 'tag' => array( + 'related' => 'Tags relacionadas', + ), + 'tos' => array( + 'title' => 'Termos do serviço', + ), +); diff --git a/app/i18n/pt-BR/install.php b/app/i18n/pt-BR/install.php new file mode 100644 index 000000000..6fd6344a3 --- /dev/null +++ b/app/i18n/pt-BR/install.php @@ -0,0 +1,128 @@ + array( + 'finish' => 'Instalação completa', + 'fix_errors_before' => 'Por favor resolva os erros antes de ir para o próximo passo.', + 'keep_install' => 'Mantenha as configurações anteriores', + 'next_step' => 'Vá para o próximo passo', + 'reinstall' => 'Reinstale o FreshRSS', + ), + 'bdd' => array( + '_' => 'Banco de dados', + 'conf' => array( + '_' => 'Configuração do banco de dados', + 'ko' => 'Verifique as informações do seu banco de dados.', + 'ok' => 'Configurações do banco de dados foram salvas.', + ), + 'host' => 'Host', // IGNORE + 'password' => 'Senha do banco de dados', + 'prefix' => 'Prefixo da tabela', + 'type' => 'Tipo do banco de dados', + 'username' => 'Usuário do banco de dados', + ), + 'check' => array( + '_' => 'Verificações', + 'already_installed' => 'Verificamos que o FreshRSS já está instalado!', + 'cache' => 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 cache estão corretos.', + ), + 'ctype' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', + 'ok' => 'Você tem a biblioteca necessária para verificação do tipo de caractere (ctype).', + ), + 'curl' => array( + 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', + 'ok' => 'Você tem a biblioteca cURL.', + ), + 'data' => 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.', + ), + '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.', + ), + 'favicons' => 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 favicons estão corretos.', + ), + 'fileinfo' => array( + 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', + 'ok' => 'Você tem a biblioteca fileinfo.', + ), + 'json' => array( + 'nok' => 'Não foi possível encontrar JSON (php-json).', + 'ok' => 'Você tem a extensão JSON.', + ), + 'mbstring' => array( + 'nok' => 'Não foi possível encontrar a biblioteca recomendada para o Unicode (mbstring).', + 'ok' => 'Você tem a biblioteca recomendada para o Unicode (mbstring).', + ), + 'pcre' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', + 'ok' => 'Você tem a biblioteca necessária para expressões regulares (php-pcre).', + ), + 'pdo' => array( + 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'Você tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + 'nok' => 'Sua versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', + 'ok' => 'Sua versão do PHP é %s, que é compatível com o FreshRSS.', + ), + 'reload' => 'Verifique novamente', + 'tmp' => array( + 'nok' => 'Verifiquei as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'As permissões para o diretório temporário estão certas.', + ), + 'unknown_process_username' => 'Desconhecido', + 'users' => array( + 'nok' => 'Verifiquei as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório users estão corretos.', + ), + 'xml' => array( + 'nok' => 'Não foi possível encontrar a biblioteca necessária para parse o XML.', + 'ok' => 'Você tem a biblioteca necessária para parse o XML.', + ), + ), + 'conf' => array( + '_' => 'Configurações gerais', + 'ok' => 'Configurações gerais foram salvas.', + ), + 'congratulations' => 'Parabéns!', + 'default_user' => array( + '_' => 'Usuário do usuário padrão', + 'max_char' => 'máximo de 16 caracteres alfanuméricos', + ), + 'fix_errors_before' => 'Por favor solucione os erros antes de ir para o próximo passo.', + 'javascript_is_better' => 'O FreshRSS é mais agradável com o JavaScript ativo', + 'js' => array( + 'confirm_reinstall' => 'Você irá perder suas configurações anteriores ao reinstalar o FreshRSS. Você está certo que deseja continuar?', + ), + 'language' => array( + '_' => 'Idioma', + 'choose' => 'Escolha o idioma para o FreshRSS', + 'defined' => 'O idioma foi definido.', + ), + 'missing_applied_migrations' => 'Algo de errado ocorreu; você tem que criar um arquivo vazio %s manualmente.', + 'ok' => 'O processo de instalação foi um sucesso.', + 'session' => array( + 'nok' => 'O servidor parece ter sido configurado incorretamente para os cookies necessários para sessões PHP!', + ), + 'step' => 'passo %d', + 'steps' => 'Passos', + 'this_is_the_end' => 'Este é o final', + 'title' => 'Instalação · FreshRSS', +); diff --git a/app/i18n/pt-BR/sub.php b/app/i18n/pt-BR/sub.php new file mode 100644 index 000000000..829b21660 --- /dev/null +++ b/app/i18n/pt-BR/sub.php @@ -0,0 +1,307 @@ + array( + 'documentation' => 'Copie a seguinte URL para utilizar com uma ferramenta externa', + 'title' => 'API', // IGNORE + ), + 'bookmarklet' => array( + 'documentation' => 'Arraste este botão para sua barra de favoritos ou clique com o botão direito e escolha “Adicionar este link aos favoritos”. Depois clique no no link da barra de favoritos “Inscrever-se” em qualquer página que você queira se inscrever.', + 'label' => 'Inscrever-se', + 'title' => 'Bookmarklet', // IGNORE + ), + 'category' => array( + '_' => 'Categoria', + 'add' => 'Adicionar categoria', + 'archiving' => 'Arquivar', + 'dynamic_opml' => array( + '_' => 'OPML Dinâmico', + 'help' => 'Forneça uma URL para o arquivo OPML para preencher dinamicamente esta categoria com feeds', + ), + 'empty' => 'Categoria vazia', + 'expand' => 'Expand category', // TODO + 'information' => 'Informações', + 'open' => 'Open category', // TODO + 'opml_url' => 'URL de OPML', + 'position' => 'Posição de exibição', + 'position_help' => 'Para controlar a ordem de exibição', + 'title' => 'Título', + ), + 'feed' => array( + 'accept_cookies' => 'Aceitar cookies', + 'accept_cookies_help' => 'Permitir que o servidor de Feed defina os cookies (sarmazenados na memória apenas durante a solicitação)', + 'add' => 'Adicionar um feed', + 'advanced' => 'Avançado', + 'archiving' => 'Arquivar', + 'auth' => array( + 'configuration' => 'Entrar', + 'help' => 'Permite acesso a feeds RSS protegidos por HTTP', + 'http' => 'Autenticação HTTP', + 'password' => 'Senha HTTP', + 'username' => 'Usuário HTTP', + ), + 'change_favicon' => 'Change…', // TODO + 'clear_cache' => 'Sempre limpar o cache', + 'content_action' => array( + '_' => 'Ações ao buscar pelo conteúdo de artigos', + 'append' => 'Adicionar depois conteúdo existente', + 'prepend' => 'Adicionar antes do conteúdo existente', + 'replace' => 'Substituir o conteúdo existente', + ), + 'content_retrieval' => 'Content retrieval', // TODO + 'css_cookie' => 'Usar cookies ao buscar pelo conteúdo de artigos', + 'css_cookie_help' => 'Exemplo: foo=bar; gdpr_consent=true; cookie=value', + 'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)', + 'css_path' => 'Caminho do CSS do artigo no site original', + 'css_path_filter' => array( + '_' => 'Seletor CSS dos elementos a serem removidos', + 'help' => 'O seletor CSS pode ser uma lista com: footer, aside, p[data-sanitized-class~="menu"]', + ), + 'description' => 'Descrição', + 'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.', + 'error' => 'Este feed encontra-se com problema. Por favor verifique se ele ainda está disponível.', // DIRTY + 'export-as-opml' => array( + 'download' => 'Download', // IGNORE + 'help' => 'Arquivo XML (data subset. See documentation)', // DIRTY + 'label' => 'Exportar como OPML', + ), + 'ext_favicon' => 'Set automatically', // TODO + 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // TODO + 'filteractions' => array( + '_' => 'Ações do filtro', + 'help' => 'Escreva um filtro de pesquisa por linha. Operators see documentation.', // DIRTY + ), + 'http_headers' => 'HTTP Headers', // TODO + 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // TODO + 'icon' => 'Icon', // TODO + 'information' => 'Informações', + 'keep_min' => 'Número mínimo de artigos para manter', + 'kind' => array( + '_' => 'Tipo de fonte de alimentação do Feed', + 'html_json' => array( + '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // TODO + 'xpath' => array( + '_' => 'XPath for JSON in HTML', // TODO + 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // TODO + ), + ), + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // IGNORE + 'feed_title' => array( + '_' => 'Título do Feed', + 'help' => 'Exemplo: //title ou uma string estática: "Meu feed customizado"', + ), + 'help' => 'XPath 1.0é uma linguagem de consulta padrão para usuários avançados e que o FreshRSS suporta para habilitar o Web scraping.', + 'item' => array( + '_' => 'encontrar notícias items
(mais importantes)', + 'help' => 'Exemplo: //div[@class="news-item"]', + ), + 'item_author' => array( + '_' => 'Autor do item', + 'help' => 'Também pode ser uma string estática. Exemplo: "Anônimo"', + ), + 'item_categories' => 'Etiquetas do item', + 'item_content' => array( + '_' => 'Conteúdo do item', + 'help' => 'Exemplo para pegar o item completo: .', + ), + 'item_thumbnail' => array( + '_' => 'Miniatura do item', + 'help' => 'Exemplo: descendant::img/@src', + ), + 'item_timeFormat' => array( + '_' => 'Custom date/time format', // TODO + 'help' => 'Optional. A format supported by DateTime::createFromFormat() such as d-m-Y H:i:s', // TODO + ), + 'item_timestamp' => array( + '_' => 'Data do Item', + 'help' => 'O resultado será parecido com: strtotime()', + ), + 'item_title' => array( + '_' => 'Titulo do Item', + 'help' => 'Utilize especialmente XPath axis descendant:: like descendant::h2', + ), + 'item_uid' => array( + '_' => 'ID único do item', + 'help' => 'Opcional. Exemplo: descendant::div/@data-uri', + ), + 'item_uri' => array( + '_' => 'Link do item (URL)', + 'help' => 'Exemplo: descendant::a/@href', + ), + 'relative' => 'XPath (relativo do item) para:', + 'xpath' => 'XPath para:', + ), + 'json_dotnotation' => array( + '_' => 'JSON (notação de ponto)', + 'feed_title' => array( + '_' => 'título do feed', + 'help' => 'Exemplo: meta.title ou uma string estática: "Meu feed customizado"', + ), + 'help' => 'Um JSON na notação de ponto usa pontos entre os objetos e colchetes para arrays (e.g. data.items[0].title)', + 'item' => array( + '_' => 'encontrando novidades itens
(mais importante)', + 'help' => 'Caminho do JSON para o array contendo os itens, e.g. $ or newsItems', // DIRTY + ), + 'item_author' => 'autor do item', + 'item_categories' => 'tags dos itens', + 'item_content' => array( + '_' => 'conteúdo do item', + 'help' => 'Chave sob na qual o conteúdo é encontrado, e.g. content', + ), + 'item_thumbnail' => array( + '_' => 'miniatura do item', + 'help' => 'Exemplo: image', + ), + 'item_timeFormat' => array( + '_' => 'Formato de data/hora customizado', + 'help' => 'Opcional. Um formato suportado por DateTime::createFromFormat() assim como d-m-Y H:i:s', + ), + 'item_timestamp' => array( + '_' => 'data do item', + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => 'título do item', + 'item_uid' => 'ID único do item', + 'item_uri' => array( + '_' => 'Link do item (URL)', + 'help' => 'Exemplo: permalink', + ), + 'json' => 'notação de ponto para:', + 'relative' => 'notação de ponto (relativa ao item) para:', + ), + 'jsonfeed' => 'JSON Feed', // IGNORE + 'rss' => 'RSS / Atom (padrão)', + 'xml_xpath' => 'XML + XPath', // IGNORE + ), + 'maintenance' => array( + 'clear_cache' => 'Limpar o cache', + 'clear_cache_help' => 'Limpar o cache em disco deste feed', + 'reload_articles' => 'Recarregar artigos', + 'reload_articles_help' => 'Recarregar artigos e buscar conteúdo completo', + 'title' => 'Manutenção', + ), + 'max_http_redir' => 'Quantidade máxima de redirecionamentos HTTP', + 'max_http_redir_help' => 'Defina como 0 ou deixe em branco para desabilitar, -1 para redirecionamentos ilimitados', + 'method' => array( + '_' => 'Método HTTP', + ), + 'method_help' => 'O conteúdo do POST tem suporte automático para application/x-www-form-urlencoded e application/json', + 'method_postparams' => 'Conteúdo do POST', + 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.', + 'mute' => array( + '_' => 'silenciar', + 'state_is_muted' => 'This feed is muted', // TODO + ), + 'no_selected' => 'Nenhum feed selecionado.', + 'number_entries' => '%d artigos', + 'open_feed' => 'Open feed %s', // TODO + 'path_entries_conditions' => 'Conditions for content retrieval', // TODO + 'priority' => array( + '_' => 'Visibilidade', + 'category' => 'Mostrar na sua categoria', + 'feed' => 'Show in its feed', // TODO + 'hidden' => 'Não exibir', + 'important' => 'Mostrar feeds importantes', + 'main_stream' => 'Mostrar na tela principal', + ), + 'proxy' => 'Defina um proxy para buscar esse feed', + 'proxy_help' => 'Selecione um protocolo (e.g: SOCKS5) e digite o endereço do proxy (e.g: 127.0.0.1:1080 or username:password@127.0.0.1:1080)', + 'reset_favicon' => 'Reset to default', // TODO + 'selector_preview' => array( + 'show_raw' => 'Mostrar fonte', + 'show_rendered' => 'Mostrar conteúdo', + ), + 'show' => array( + 'all' => 'Mostrar todos os Feeds', + 'error' => 'Somente mostrar Feeds com erros', + ), + 'showing' => array( + 'error' => 'Exibir apenas os feeds com erros', + ), + 'ssl_verify' => 'Verificar segurança SSL', + 'stats' => 'Estatísticas', + 'think_to_add' => 'Você deve adicionar alguns feeds.', + 'timeout' => 'Timeout em segundos', + 'title' => 'Título', + 'title_add' => 'Adicionar o RSS feed', + 'ttl' => 'Não atualize automaticamente mais que', + 'unicityCriteria' => array( + '_' => 'Article unicity criteria', // TODO + 'forced' => 'forced', // TODO + 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // TODO + 'id' => 'Standard ID (default)', // TODO + 'link' => 'Link', // TODO + 'sha1:content' => 'Content', // TODO + 'sha1:content_published' => 'Content + Date', // TODO + 'sha1:link_published' => 'Link + Date', // TODO + 'sha1:link_published_title' => 'Link + Date + Title', // TODO + 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // TODO + 'sha1:published' => 'Date', // TODO + 'sha1:title' => 'Title', // TODO + 'sha1:title_published' => 'Title + Date', // TODO + 'sha1:title_published_content' => 'Title + Date + Content', // TODO + ), + 'url' => 'URL do Feed', + 'useragent' => 'Defina um usuário para buscar este feed', + 'useragent_help' => 'Exemplo: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', + 'validator' => 'Verifique a validade do feed', + 'website' => 'URL do site', + 'websub' => 'Notificação instantânea com WebSub', + ), + 'import_export' => array( + 'export' => array( + '_' => 'Exportar', + 'sqlite' => 'Download user database as SQLite', // TODO + ), + 'export_labelled' => 'Exportar seus artigos etiquetados', + 'export_opml' => 'Exporta a lista dos feeds (OPML)', + 'export_starred' => 'Exportar seus favoritos', + 'feed_list' => 'Lista dos %s artigos', + 'file_to_import' => 'Arquivo para importar
(OPML, JSON or ZIP)', + 'file_to_import_no_zip' => 'Arquivo para importar
(OPML or JSON)', + 'import' => 'Importar', + 'starred_list' => 'Listar artigos favoritos', + 'title' => 'Importar / exportar', + ), + 'menu' => array( + 'add' => 'Adicionar um feed ou categoria', + 'import_export' => 'Importar / exportar', + 'label_management' => 'Gerenciar etiquetas', + 'stats' => array( + 'idle' => 'Feeds inativos', + 'main' => 'Estatísticas principais', + 'repartition' => 'Repartição de artigos', + ), + 'subscription_management' => 'Gerenciamento de inscrições', + 'subscription_tools' => 'Ferramentas de inscrição', + ), + 'tag' => array( + 'auto_label' => 'Adicione esta etiqueta para novos artigos', + 'name' => 'Nome', + 'new_name' => 'Nome novo', + 'old_name' => 'Nome antigo', + ), + 'title' => array( + '_' => 'Gerenciamento de inscrições', + 'add' => 'Adicionar um feed ou categoria', + 'add_category' => 'Adicionar uma categoria', + 'add_dynamic_opml' => 'Adicionar OPML dinâmico', + 'add_feed' => 'Adicionar um feed', + 'add_label' => 'Adicionar uma etiqueta', + 'add_opml_category' => 'OPML category name', // TODO + 'delete_label' => 'Deletar uma etiqueta', + 'feed_management' => 'Gerenciamento dos RSS feeds', + 'subscription_tools' => 'Ferramentas de inscrição', + ), +); diff --git a/app/i18n/pt-BR/user.php b/app/i18n/pt-BR/user.php new file mode 100644 index 000000000..e1655313c --- /dev/null +++ b/app/i18n/pt-BR/user.php @@ -0,0 +1,54 @@ + array( + 'feedback' => array( + 'invalid' => 'Endereço de email inválido', + 'required' => 'O endereço de email é necessário', + ), + 'validation' => array( + 'change_email' => 'Você pode mudar seu endereço de email na página do perfil.', + 'email_sent_to' => 'Enviamos um email para %s. Por favor, siga as instruções contidas nele para verificar sua conta.', + 'feedback' => array( + 'email_failed' => 'Não foi possível enviar um email para você devido a um erro de configuração no servidor.', + 'email_sent' => 'Um email foi enviado para o seu endereço', + 'error' => 'Falha na verificação do endereço de email', + 'ok' => 'O endereço de email foi verificado com sucesso.', + 'unnecessary' => 'Esse endereço de email já foi verificado.', + 'wrong_token' => 'A verificação do endereço de email falhou por causa do token incorreto.', + ), + 'need_to' => 'Para poder utilizar o %s, você deve verificar seu endereço de email.', + 'resend_email' => 'Reenviar o email', + 'title' => 'Validação do endereço de email', + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'body' => 'Você se registrou no %s. Mas ainda é necessário verificar seu endereço de email. Para isso, basta seguir o link:', + 'title' => 'Você precisa verificar sua conta', + 'welcome' => 'Bem vindo %s,', + ), + ), + 'password' => array( + 'invalid' => 'Senha incorreta', + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'Para se registrar, você deve aceitar os Termos do serviço.', + ), + ), + 'username' => array( + 'invalid' => 'Nome de usuário inválido.', + 'taken' => 'O nome de usuário %s já está sendo utilizado', + ), +); diff --git a/app/i18n/pt-PT/admin.php b/app/i18n/pt-PT/admin.php new file mode 100644 index 000000000..1076ef573 --- /dev/null +++ b/app/i18n/pt-PT/admin.php @@ -0,0 +1,240 @@ + array( + 'allow_anonymous' => 'Permitir a leitura anônima dos artigos pelo utilizador padrão (%s)', + 'allow_anonymous_refresh' => 'Permitir atualização anônima dos artigos', + 'api_enabled' => 'Permitir acesso à API (É preciso para aplicações móveis e partilha pesquisas personalizadas)', + 'form' => 'Formulário Web(tradicional, Necessita de JavaScript)', + 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // TODO + 'none' => 'Nenhum (Perigoso)', + 'title' => 'Autenticação', + 'token' => 'Token de autenticação principal', + 'token_help' => 'Permite acesso a todos as saídas RSS do utilizador bem como atualização dos feeds sem autenticação:', + 'type' => 'Método de autenticação', + 'unsafe_autologin' => 'Permitir login automático inseguro usando o seguinte formato: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Verifique as permissões no diretório ./data/cache. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório cache estão corretos.', + ), + 'categories' => array( + 'nok' => 'Tabela Categoria está configurada incorretamente.', + 'ok' => 'Tabela Categoria está ok.', + ), + 'connection' => array( + 'nok' => 'Ligação ao banco de dados não pode ser estabelecida.', + 'ok' => 'Ligação ao banco de dados está correcta.', + ), + 'ctype' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', + 'ok' => 'A biblioteca necessária para verificação do tipo de caractere (ctype).Foi Encontrada', + ), + 'curl' => array( + 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', + 'ok' => 'Tem a biblioteca cURL.', + ), + 'data' => array( + 'nok' => 'Verifique as permissões no diretório ./data. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório data estão corretos.', + ), + 'database' => 'Instalação do banco de dados', + '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.', + ), + 'entries' => array( + 'nok' => 'Tabela entradas está configurada incorretamente.', + 'ok' => 'Tabela entradas está correcta.', + ), + 'favicons' => array( + 'nok' => 'Verifique as permissões no diretório ./data/favicons. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório favicons estão corretos.', + ), + 'feeds' => array( + 'nok' => 'Tabela Feed está configurada incorretamente.', + 'ok' => 'Tabela Feed está ok.', + ), + 'fileinfo' => array( + 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', + 'ok' => 'Tem a biblioteca fileinfo.', + ), + 'files' => 'Instalação de arquivos', + 'json' => array( + 'nok' => 'Não foi possível encontrar JSON (php-json).', + 'ok' => 'Tem a extensão JSON.', + ), + 'mbstring' => array( + 'nok' => 'Não foi possível encontrar a biblioteca recomendada para Unicode (mbstring).', + 'ok' => 'Tem a biblioteca recomendada para Unicode (mbstring).', + ), + 'pcre' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', + 'ok' => 'Tem a biblioteca necessária para expressões regulares (php-pcre).', + ), + 'pdo' => array( + 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'Tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + '_' => 'Instação do PHP', + 'nok' => 'A versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', + 'ok' => 'A versão do PHP é %s, que é compatível com o FreshRSS.', + ), + 'tables' => array( + 'nok' => 'Há uma ou mais tabelas inexistentes no banco de dados.', + 'ok' => 'As tabelas apropriadas existem no base de dados.', + ), + 'title' => 'Verificação de instalação', + 'tokens' => array( + 'nok' => 'Verifique as permissões no diretório ./data/tokens. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório tokens estão corretos.', + ), + 'users' => array( + 'nok' => 'Verifiquei as permissões no diretório ./data/users. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório users estão corretos.', + ), + 'zip' => array( + 'nok' => 'Não foi possível localizar a extensão ZIP (php-zip).', + 'ok' => 'Tem a extensão ZIP.', + ), + ), + 'extensions' => array( + 'author' => 'Autor', + 'community' => 'Extensões da comunidade disponíveis', + 'description' => 'Descrição', + 'disabled' => 'Desactivado', + 'empty_list' => 'Não existem extensões instaladas', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO + 'enabled' => 'Habilitada', + 'latest' => 'Instalado', + 'name' => 'Nome', + 'no_configure_view' => 'Esta extensão não pode ser configurada.', + 'system' => array( + '_' => 'Extensões do sistema', + 'no_rights' => 'Extensões do sistema (Não tem permissões para isto)', + ), + 'title' => 'Extensões', + 'update' => 'Atualização disponível', + 'user' => 'Extensões do utilizador', + 'version' => 'Versão', + ), + 'stats' => array( + '_' => 'Estatísticas', + 'all_feeds' => 'Todos os feeds', + 'category' => 'Categoria', + 'entry_count' => 'Contagem de entrada', + 'entry_per_category' => 'Entradas por categoria', + 'entry_per_day' => 'Entradas por dia (últimos 30 dias)', + 'entry_per_day_of_week' => 'Por dia da semana(média: %.2f mensagens)', + 'entry_per_hour' => 'Por hora (média: %.2f mensagens)', + 'entry_per_month' => 'Por mês(média: %.2f mensagens)', + 'entry_repartition' => 'Repartição de entradas', + 'feed' => 'Feed', // IGNORE + 'feed_per_category' => 'Feeds por categoria', + 'idle' => 'Feeds inativos', + 'main' => 'Estatísticas principais', + 'main_stream' => 'Stream principal', + 'no_idle' => 'Não há nenhum feed inativo!', + 'number_entries' => '%d artigos', + 'overview' => 'Overview', // TODO + 'percent_of_total' => '% do total', + 'repartition' => 'Repartição de artigos: %s', + 'status_favorites' => 'Favoritos', + 'status_read' => 'Lido', + 'status_total' => 'Total', // IGNORE + 'status_unread' => 'Não lidos', + 'title' => 'Estatísticas', + 'top_feed' => 'Top10 Feeds', + ), + 'system' => array( + '_' => 'Configuração do sistema', + 'auto-update-url' => 'URL do servidor para atualização automática', + 'base-url' => array( + '_' => 'URL Base', + 'recommendation' => 'Recomendação automática: %s', + ), + 'cookie-duration' => array( + 'help' => 'em segundos', + 'number' => 'Manter seção ativa durante', + ), + 'force_email_validation' => 'Força verificação do endereço de email', + 'instance-name' => 'Nome da instância', + 'max-categories' => 'Limite de categorias por utilizador', + 'max-feeds' => 'Limite de Feeds por utilizador', + 'registration' => array( + 'number' => 'Máximo número de contas', + 'select' => array( + 'label' => 'Formulário de Registro', + 'option' => array( + 'noform' => 'Desativado: Sem formulário de registro', + 'nolimit' => 'Ativado: Sem limites de contas', + 'setaccountsnumber' => 'Definir o máximo número de contas', + ), + ), + 'status' => array( + 'disabled' => 'Formulário desabilitado', + 'enabled' => 'Formulário activado', + ), + 'title' => 'Formulário de registo de utilizador', + ), + 'sensitive-parameter' => 'Parâmetro sensível. Edite manualmente em ./data/config.php', + 'tos' => array( + 'disabled' => 'não fornecido', + 'enabled' => 'está ativado', + 'help' => 'Como habilitar os Termos de Serviço', + ), + 'websub' => array( + 'help' => 'Sobre WebSub', + ), + ), + 'update' => array( + '_' => 'Atualização do sistema', + 'apply' => 'Aplicar', + 'changelog' => 'Registo de alterações', + 'check' => 'Pesquisar por novas atualizações', + 'copiedFromURL' => 'update.php copiado de %s para ./data', + 'current_version' => 'Versão', + 'last' => 'Última verificação', + 'loading' => 'A fazer atualização…', + 'none' => 'Nenhuma atualização disponivel', + 'releaseChannel' => array( + '_' => 'Canal de Release', + 'edge' => 'Release contínua (“edge”)', + 'latest' => 'Release estável (“latest”)', + ), + 'title' => 'Sistema de atualização', + 'viaGit' => 'Atualização via git e GitHub.com iniciada', + ), + 'user' => array( + 'admin' => 'Administrador', + 'article_count' => 'Artigos', + 'back_to_manage' => '← Voltar para à lista de utilizadores', + 'create' => 'Criar novo utilizador', + 'database_size' => 'Tamanho do banco de dados', + 'email' => 'Endereço de email', + 'enabled' => 'Activado', + 'feed_count' => 'Feeds', // IGNORE + 'is_admin' => 'É administrador', + 'language' => 'Idioma', + 'last_user_activity' => 'Última Atividade do utilizador', + 'list' => 'Lista de utilizadors', + 'number' => 'Há %d conta criada', + 'numbers' => 'Há %d contas criadas', + 'password_form' => 'Senha
(para o login pelo método do formulário)', + 'password_format' => 'Ao menos 7 caracteres', + 'title' => 'Gerir utilizadores', + 'username' => 'utilizador', + ), +); diff --git a/app/i18n/pt-PT/api.php b/app/i18n/pt-PT/api.php new file mode 100644 index 000000000..0021dfa98 --- /dev/null +++ b/app/i18n/pt-PT/api.php @@ -0,0 +1,33 @@ + array( + 'address' => 'Your API address:', // TODO + '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 + ), + 'test' => array( + 'fever' => 'Fever API configuration test:', // TODO + 'greader' => 'Google Reader API configuration test:', // TODO + ), + 'title' => array( + '_' => 'FreshRSS API endpoints', // TODO + 'extension' => 'API for extensions', // TODO + 'fever' => 'Fever compatible API', // TODO + 'greader' => 'Google Reader compatible API', // TODO + ), + ), +); diff --git a/app/i18n/pt-PT/conf.php b/app/i18n/pt-PT/conf.php new file mode 100644 index 000000000..5977c0b97 --- /dev/null +++ b/app/i18n/pt-PT/conf.php @@ -0,0 +1,372 @@ + array( + '_' => 'Arquivar', + 'exception' => 'Regras de exceção da limpeza', + 'help' => 'Mais opções estão disponíveis nas configurações individuais do Feed', + 'keep_favourites' => 'Nunca apagar os favoritos', + 'keep_labels' => 'Nunca apagar tags', + 'keep_max' => 'Número máximo de artigos para manter no feed', + 'keep_min_by_feed' => 'Número mínimo de artigos para manter no feed', + 'keep_period' => 'Idade máxima dos artigos a serem mantidos', + 'keep_unreads' => 'Nunca apagar os não lidos', + 'maintenance' => 'Manutenção', + 'optimize' => 'Otimizar banco de dados', + 'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho do banco de dados', + 'policy' => 'Política de limpeza', + 'policy_warning' => 'Se nenhuma política de limpeza for selecionada, todos os artigos serão mantidos.', + 'purge_now' => 'Limpar agora', + 'title' => 'Arquivar', + 'ttl' => 'Não atualize automaticamente mais frequente que', + ), + 'display' => array( + '_' => 'Exibição', + 'darkMode' => array( + '_' => 'Modo noturno automático', + 'auto' => 'Automático', + 'help' => 'For compatible themes only', // TODO + 'no' => 'Não', + ), + 'icon' => array( + 'bottom_line' => 'Linha inferior', + 'display_authors' => 'Autores', + 'entry' => 'Ícones de artigos', + 'publication_date' => 'Data da publicação', + 'related_tags' => 'Tags relacionadas', + 'sharing' => 'Compartilhar', + 'summary' => 'Sumário', + 'top_line' => 'Linha superior', + ), + 'language' => 'Idioma', + 'notif_html5' => array( + 'seconds' => 'segundos (0 significa sem timeout)', + 'timeout' => 'Notificação em HTML5 de timeout', + ), + 'show_nav_buttons' => 'Mostrar botões de navegação', + 'theme' => array( + '_' => 'Tema', + 'deprecated' => array( + '_' => 'Depreciado', + 'description' => 'Este tema não é suportado e não estará novamente disponível em uma versão futura do FreshRSS', + ), + ), + 'theme_not_available' => 'O tema “%s” não está disponível. Por favor escolha outro tema.', + 'thumbnail' => array( + 'label' => 'Miniatura', + 'landscape' => 'Modo paisagem', + 'none' => 'Nenhum', + 'portrait' => 'Modo retrato', + 'square' => 'Modo quadrado', + ), + 'timezone' => 'Fuso horário', + 'title' => 'Exibição', + 'website' => array( + 'full' => 'Ícone e nome', + 'icon' => 'Apenas ícone', + 'label' => 'Site', + 'name' => 'Apenas nome', + 'none' => 'Nenhum', + ), + 'width' => array( + 'content' => 'Largura do conteúdo', + 'large' => 'Largo', + 'medium' => 'Médio', + 'no_limit' => 'Sem limite', + 'thin' => 'Fino', + ), + ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Nivel de Registro', + 'message' => 'Mensagem de Registro', + 'timestamp' => 'Data e Hora', + ), + 'pagination' => array( + 'first' => 'Primeiro', + 'last' => 'Último', + 'next' => 'Próximo', + 'previous' => 'Anterior', + ), + ), + 'mark_read_button' => array( + '_' => '“Mark all as read” button', // TODO + 'big' => 'Big', // TODO + 'none' => 'None', // TODO + 'small' => 'Small', // TODO + ), + 'notification_timeout' => array( + 'bad' => array( + 'label' => 'Show warning banner', // TODO + 'seconds' => 'seconds (at least 1)', // TODO + ), + 'good' => array( + 'label' => 'Show acknowledgement banner', // TODO + 'seconds' => 'seconds (0 means not shown)', // TODO + ), + ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), + 'profile' => array( + '_' => 'Gestão de perfil', + 'api' => array( + '_' => 'Administração da API', + 'api_not_set' => 'API password not set', // TODO + 'api_set' => 'API password set', // TODO + 'check_link' => 'Check API status via: %s', // TODO + 'disabled' => 'The API access is disabled.', // TODO + 'documentation_link' => 'See the documentation and list of known apps', // TODO + 'help' => 'See documentation', // TODO + ), + 'change_password' => 'Change password', // TODO + 'confirm_new_password' => 'Confirm new password', // TODO + 'current_password' => 'Current password
(for the Web-form login method)', // TODO + 'delete' => array( + '_' => 'Remover conta', + 'warn' => 'A conta e todos os dados relacionados serão removidos.', + ), + 'email' => 'Endereço de e-mail', + 'new_password' => 'New password', // TODO + 'password_api' => 'Senha da API
(p.s., para aplicativos móveis)', + 'password_format' => 'Ao menos 7 caracteres', + 'title' => 'Perfil', + ), + 'query' => array( + '_' => 'Consultas do utilizador', + 'deprecated' => 'Esta não é válida. A categoria ou feed relacionado foi apagado.', + 'description' => 'Description', // TODO + 'filter' => array( + '_' => 'Filtro aplicado:', + 'categories' => 'Mostrar por categoria', + 'feeds' => 'Mostrar por feed', + 'order' => 'Ordenar por data', + 'search' => 'Expressão', + 'shareOpml' => 'Activa a partilha por OPML de categorias e feeds correspondentes', + 'shareRss' => 'Activa o partilha por HTML & RSS', + 'state' => 'Estado', + 'tags' => 'Mostrar por tag', + 'type' => 'Tipo', + ), + 'get_A' => 'Show all feeds, also those shown in their category', // TODO + 'get_Z' => 'Show all feeds, also archived ones', // TODO + 'get_all' => 'Mostrar todos os artigos', + 'get_all_labels' => 'Mostrar artigos com qualquer rótulo', + 'get_category' => 'Visualizar “%s” categoria', + 'get_favorite' => 'Visualizar artigos favoritos', + 'get_feed' => 'Visualizar “%s” feed', + 'get_important' => 'Mostrar artigos de feeds importantes', + 'get_label' => 'Mostrar artigos com rótulo “%s”', + 'help' => 'Ver a documentação para consultas de utilozadoes e partilhas por HTML / RSS / OPML.', + 'image_url' => 'Image URL', // TODO + 'name' => 'Nome', + 'no_filter' => 'Sem filtro', + 'no_queries' => array( + '_' => 'No user queries are saved yet.', // TODO + 'help' => 'See documentation', // TODO + ), + 'number' => 'Consulta n°%d', + 'order_asc' => 'Mostrar artigos mais antigos primeiro', + 'order_desc' => 'Mostrar artigos mais novos primeiro', + 'search' => 'Pesquisa por “%s”', + 'share' => array( + '_' => 'Compartilhar esta consulta por link', + 'disabled' => array( + '_' => 'disabled', // TODO + 'title' => 'Sharing', // TODO + ), + 'greader' => 'Shareable link to the GReader JSON', // TODO + 'help' => 'Forneça este link se quiser partilhar esta consulta com alguém', + 'html' => 'Link compartilhável para a página HTML', + 'opml' => 'Link compartilhável para a lista de feeds OPML', + 'rss' => 'Link compartilhável para o feed RSS', + ), + 'state_0' => 'Mostrar todos os artigos', + 'state_1' => 'Mostrar artigos lidos', + 'state_2' => 'Mostrar artigos não lidos', + 'state_3' => 'Mostrar todos os artigos', + 'state_4' => 'Mostrar artigos favoritos', + 'state_5' => 'Mostrar artigos favoritos lidos', + 'state_6' => 'Mostrar artigos favoritos não lidos', + 'state_7' => 'Mostrar artigos favoritos', + 'state_8' => 'Mostrar artigos que não são favoritos', + 'state_9' => 'Mostrar artigos que não são favoritos lidos', + 'state_10' => 'Mostrar artigos que não são favoritos não lidos', + 'state_11' => 'Mostrar artigos que não são favoritos', + 'state_12' => 'Mostrar todos os artigos', + 'state_13' => 'Mostrar artigos lidos', + 'state_14' => 'Mostrar artigos não lidos', + 'state_15' => 'Mostrar todos os artigos', + 'title' => 'Consultas de Utilizadores', + ), + 'reading' => array( + '_' => 'Leitura', + 'after_onread' => 'Depois de “marcar todos como lido”,', + 'always_show_favorites' => 'Mostrar todos os artigos nos favoritos por padrão', + 'apply_to_individual_feed' => 'Applies to feeds individually', // TODO + 'article' => array( + 'authors_date' => array( + '_' => 'Autores e Data', + 'both' => 'No cabeçalho e rodapé', + 'footer' => 'No rodapé', + 'header' => 'No cabeçalho', + 'none' => 'Nenhum', + ), + 'feed_name' => array( + 'above_title' => 'Acima do título/etiqueta', + 'none' => 'Nenhum', + 'with_authors' => 'Com autores e data', + ), + 'feed_title' => 'Título do Feed', + 'icons' => array( + '_' => 'Article icons position
(Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), + 'tags' => array( + '_' => 'Tag', + 'both' => 'No cabeçalho e rodapé', + 'footer' => 'No rodapé', + 'header' => 'No cabeçalho', + 'none' => 'Nenhum', + ), + 'tags_max' => array( + '_' => 'Número máximo de tags exibidas', + 'help' => '0 significa: mostrar todas as tags e não enconde-las', + ), + ), + 'articles_per_page' => 'Número de artigos por página', + 'auto_load_more' => 'Carregar mais artigos no final da página', + 'auto_remove_article' => 'Esconder artigos depois de lidos', + 'confirm_enabled' => 'Mostrar uma caixa de diálogo de confirmação quando acionar “marcar todos como lido”', + 'display_articles_unfolded' => 'Mostrar artigos abertos por padrão', + 'display_categories_unfolded' => 'Categorias abertas', + 'headline' => array( + 'articles' => 'Artigos: Abrir/Fechar', + 'articles_header_footer' => 'Artigos: cabeçalho/rodapé', + 'categories' => 'Navegação à esquerda: Categoria', + 'mark_as_read' => 'Marcar artigo como lido', + 'misc' => 'Diversos', + 'view' => 'Visualização', + ), + 'hide_read_feeds' => 'Esconder categorias e feeds com nenhum artigo não lido (não funciona com a configuração “Mostrar todos os artigos”)', + 'img_with_lazyload' => 'Utilizar o modo lazy load para carregar as imagens', + 'jump_next' => 'Ir para o próximo não lido', + 'mark_updated_article_unread' => 'Marcar artigos atualizados como não lidos', + 'number_divided_when_reader' => 'Dividido por 2 no modo de leitura .', + 'read' => array( + 'article_open_on_website' => 'quando o artigo é aberto no site original', + 'article_viewed' => 'Quando o artigo é visualizado', + 'focus' => 'quando focado (exceto por feeds importantes)', + 'keep_max_n_unread' => 'Número máximo de artigos para manter como não lido', + 'scroll' => 'enquanto faz a passagem (exceto por feeds importantes)', + 'upon_gone' => 'Quando não estiver mais no feed de notícias principais', + 'upon_reception' => 'ao receber um artigo', + 'when' => 'Marcar artigo como lido…', + 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // TODO + 'when_same_title_in_feed' => 'Se um título idêntico já existir nos últimos n artigos mais novos (no feed)', + ), + 'show' => array( + '_' => 'Artigos para Mostrar', + 'active_category' => 'Categoria ativa', + 'adaptive' => 'Show unreads if any, all articles otherwise', // TODO + 'all_articles' => 'Mostrar todos os artigos', + 'all_categories' => 'Mostrar todas as categorias', + 'no_category' => 'Nenhuma categoria', + 'remember_categories' => 'lembrar de abrir as categorias', + 'unread' => 'Mostrar apenas não lido', + 'unread_or_favorite' => 'Show unreads and favourites', // TODO + ), + 'show_fav_unread_help' => 'Aplicar também nas tags', + 'sides_close_article' => 'Clicando fora da área do texto do artigo fecha o mesmo', + 'sort' => array( + '_' => 'Ordem de visualização', + 'newer_first' => 'Novos primeiro', + 'older_first' => 'Antigos primeiro', + ), + 'star' => array( + 'when' => 'Mark an article as favourite…', // TODO + ), + 'sticky_post' => 'Coloque o artigo no topo quando aberto', + 'title' => 'Lendo', + 'view' => array( + 'default' => 'Visualização padrão', + 'global' => 'Visualização global', + 'normal' => 'Visualização normal', + 'reader' => 'Visualização de leitura', + ), + ), + 'sharing' => array( + '_' => 'Partilha', + 'add' => 'Adicionar um método de partilha', + 'bluesky' => 'Bluesky', // IGNORE + 'deprecated' => 'Este serviço está obceloeto e será removido do FreshRSS em versões futuras.', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'E-mail', + 'facebook' => 'Facebook', // IGNORE + 'more_information' => 'Mais informação', + 'print' => 'Imprimir', + 'raindrop' => 'Raindrop.io', // IGNORE + 'remove' => 'Remover método de partilha', + 'shaarli' => 'Shaarli', // IGNORE + 'share_name' => 'Nome de visualização para partilhar', + 'share_url' => 'URL utilizada para partilha', + 'title' => 'Partilhar', + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag', // IGNORE + ), + 'shortcut' => array( + '_' => 'Atalhos', + 'article_action' => 'Ações no artigo', + 'auto_share' => 'Partilhar', + 'auto_share_help' => 'Se há apenas um modo de partilha, ele é usado. Caso contrário, serão acessíveis pelo seu número.', + 'close_menus' => 'Fechar menus', + 'collapse_article' => 'Fechar', + 'first_article' => 'Ir para o primeiro artigo', + 'focus_search' => 'Aceder a caixa de pesquisa', + 'global_view' => 'Mudar para visualização global', + 'help' => 'Mostrar documentação', + 'javascript' => 'JavaScript deve ser activado para utilizar atalhos', + 'last_article' => 'Ir para o último artigo', + 'load_more' => 'Carregar mais artigos', + 'mark_favorite' => 'Marcar como favorito', + 'mark_read' => 'Marcar como lido', + 'navigation' => 'Navegação', + 'navigation_help' => 'Com o modificador ⇧ Shift, atalhos de navegação aplicam aos feeds.
Com o Alt ⎇ modificador, atalhos de navegação aplicam as categorias.', + 'navigation_no_mod_help' => 'Os seguintes atalhos de navegação não suportam modificadores.', + 'next_article' => 'Pule para o próximo artigo', + 'next_unread_article' => 'Abrir o próximo artigo não lido', + 'non_standard' => 'Algumas teclas (%s) podem não funcionar como atalhos.', + 'normal_view' => 'Mudar para a visualização normal', + 'other_action' => 'Outras ações', + 'previous_article' => 'Saltar para o artigo anterior', + 'reading_view' => 'Mudar para o modo de leitura', + 'rss_view' => 'Abrir como feed RSS ', + 'see_on_website' => 'Visualize o site original', + 'shift_for_all_read' => '+ Alt ⎇ para marcar artigos anteriores como lido
+ ⇧ Shift para marcar todos os artigos como lido', + 'skip_next_article' => 'Focar o próximo sem abri-lo', + 'skip_previous_article' => 'Focar o anterior sem abri-lo', + 'title' => 'Atalhos', + 'toggle_media' => 'Reproduzir/pausar mídia', + 'user_filter' => 'Acesse filtros de utilizador', + 'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.', + 'views' => 'Visualizações', + ), + 'user' => array( + 'articles_and_size' => '%s artigos (%s)', + 'current' => 'Utilizador atual', + 'is_admin' => 'é administrador', + 'users' => 'Utilizadores', + ), +); diff --git a/app/i18n/pt-PT/feedback.php b/app/i18n/pt-PT/feedback.php new file mode 100644 index 000000000..28a27eea1 --- /dev/null +++ b/app/i18n/pt-PT/feedback.php @@ -0,0 +1,152 @@ + array( + 'denied' => ' não tem permissão para acessar esta página', + 'not_found' => ' está a pesquisar por uma página que não existe', + ), + 'admin' => array( + 'optimization_complete' => 'Otimização Completa', + ), + 'api' => array( + 'password' => array( + 'failed' => 'A senha não pode ser modificada', + 'updated' => 'A senha foi alterada com sucesso', + ), + ), + 'auth' => array( + 'login' => array( + 'invalid' => 'Login está incorreto', + 'success' => ' está ligado', + ), + 'logout' => array( + 'success' => ' está desligado', + ), + ), + 'conf' => array( + 'error' => 'Um erro ocorreu durante o salvamento das configurações', + 'query_created' => 'A Query “%s” foi criada.', + 'shortcuts_updated' => 'Atalhos foram criados', + 'updated' => 'Configuração foi atualizada', + ), + 'extensions' => array( + 'already_enabled' => '%s já está activado', + 'cannot_remove' => '%s não pode ser removido', + 'disable' => array( + 'ko' => '%s não pode ser desactivado. verifique os logs do FreshRSS para detalhes.', + 'ok' => '%s agora está desactivado', + ), + 'enable' => array( + 'ko' => '%s não pode ser activado. verifique os logs do FreshRSS para detalhes.', + 'ok' => '%s agora está activado', + ), + 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // TODO + 'no_access' => ' não tem acesso ao %s', + 'not_enabled' => '%s não está habilitado', + 'not_found' => '%s não existe', + 'removed' => '%s removido', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'extensão ZIP não está presente em seu servidor. Por favor tente exportar os arquivos um por vez.', + 'feeds_imported' => 'Seus feeds foram importados e serão atualizados pode clicar no butãoatualizar feeds.', + 'feeds_imported_with_errors' => 'Seus feeds foram importados, mas alguns erros ocorreram Carregue no butão atualizar feeds.', + 'file_cannot_be_uploaded' => 'Arquivo não pôde ser enviado', + 'no_zip_extension' => 'extensão ZIP não está presente em seu servidor.', + 'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.', + ), + 'profile' => array( + 'error' => 'Seu perfil não pode ser editado', + 'passwords_dont_match' => 'Passwords don’t match', // TODO + 'updated' => 'Seu perfil foi editado com sucesso', + ), + 'sub' => array( + 'actualize' => 'A atualizar…', + 'articles' => array( + 'marked_read' => 'Os artigos selecionados foram marcados como lidos.', + 'marked_unread' => 'Os artigos foram marcados como não lidos', + ), + 'category' => array( + 'created' => 'Categoria %s foi criada.', + 'deleted' => 'Categoria foi apagada.', + 'emptied' => 'Categoria foi limpa', + 'error' => 'Categoria não pode ser atualizada', + 'name_exists' => 'Este nome de categoria já existe.', + 'no_id' => ' precisa especificar um id para a categoria.', + 'no_name' => 'Nome da categoria não pode ser vazio.', + 'not_delete_default' => ' não pode apagar uma categoria vazia!', + 'not_exist' => 'A categoria não existe!', + 'over_max' => ' atingiu seu limite de categorias (%d)', + 'updated' => 'Categoria foi atualizada.', + ), + 'feed' => array( + 'actualized' => '%s foi atualizado', + 'actualizeds' => 'Os feeds RSS foram atualizados', + 'added' => 'O feed RSS %s foi adicionado', + 'already_subscribed' => ' já está inscrito no %s', + 'cache_cleared' => 'O cache do feed %s foi limpo', + 'deleted' => 'o feed foi apagado', + 'error' => 'O feed não pode ser atualizado', + 'favicon' => array( + 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // TODO + 'unsupported_format' => 'Unsupported image file format!', // TODO + ), + 'internal_problem' => 'O feed RSS não pôde ser adicionado. Verifique os logs do FreshRSS para detalhes. Pode forçar a atualização no link #force_feed .', + 'invalid_url' => 'URL %s é inválida', + 'n_actualized' => '%d feeds foram atualizados', + 'n_entries_deleted' => '%d artigos foram apagados', + 'no_refresh' => 'Não há feed para atualizar…', + 'not_added' => '%s não pode ser atualizado', + 'not_found' => 'Não foi possível encontrar o feed', + 'over_max' => ' atingiu seu limite de feeds (%d)', + 'reloaded' => 'O feed %s foi recarregado', + 'selector_preview' => array( + 'http_error' => 'Falha ao carregar o conteúdo do site.', + 'no_entries' => 'Não há nenhuma entrada nesse feed. precisa de pelo menos um artigo para criar uma pré-visualização', + 'no_feed' => 'Erro interno (nenhum feed para verificar).', + 'no_result' => 'O seletor não teve correspondência. Por isso foi exibido o texto do feed original.', + 'selector_empty' => 'O seletor está vazio. precisa definir um para criar uma pré-visualização.', + ), + 'updated' => 'Os feeds foram atualizados', + ), + 'purge_completed' => 'Limpeza completa (%d artigos apagados)', + ), + 'tag' => array( + 'created' => 'A Tag “%s” foi criada.', + 'error' => 'Etiqueta não pode ser atualizada!', + 'name_exists' => 'O nome da tag já existe.', + 'renamed' => 'A Tag “%s” foi renomeada para “%s”.', + 'updated' => 'Etiqueta foi atualizada.', + ), + 'update' => array( + 'can_apply' => 'O FreshRSS será atualizado para a versão %s.', + 'error' => 'O processo de atualização encontrou um erro: %s', + 'file_is_nok' => 'Nova versão %s disponível, mas verifique as permissões no diretório %s. Servidor HTTP deve ter direitos para escrever dentro', + 'finished' => 'Atualização completa!', + 'none' => 'Nenhuma atualização para aplicar', + 'server_not_found' => 'Servidor de atualização não pôde ser localizado. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'Utilizador %s foi criado', + 'error' => 'Utilizador %s não pode ser criado', + ), + 'deleted' => array( + '_' => 'Utilizador %s foi deletado', + 'error' => 'Utilizador %s não pode ser deletado', + ), + 'updated' => array( + '_' => 'O Utilizador %s foi atualizado com sucesso', + 'error' => 'O Utilizador %s não foi atualizado', + ), + ), +); diff --git a/app/i18n/pt-PT/gen.php b/app/i18n/pt-PT/gen.php new file mode 100644 index 000000000..4cc34a15e --- /dev/null +++ b/app/i18n/pt-PT/gen.php @@ -0,0 +1,277 @@ + array( + 'actualize' => 'Atualizar feeds', + 'add' => 'Adicionar', + 'back_to_rss_feeds' => '← Volte para o seu feeds RSS', + 'cancel' => 'Cancelar', + 'close' => 'Close', // TODO + 'create' => 'Criar', + 'delete_all_feeds' => 'Delete all feeds', // TODO + 'delete_errored_feeds' => 'Delete feeds with errors', // TODO + 'delete_muted_feeds' => 'Excluir feeds silenciados', + 'demote' => 'Despromover', + 'disable' => 'Desactivar', + 'download' => 'Download', // TODO + 'empty' => 'Vazio', + 'enable' => 'Activar', + 'export' => 'Exportar', + 'filter' => 'Filtrar', + 'import' => 'Importar', + 'load_default_shortcuts' => 'Carregar mais atalhos', + 'manage' => 'Gerir', + 'mark_read' => 'Marcar como lido', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), + 'nav_buttons' => array( + 'next' => 'Next article', // TODO + 'prev' => 'Previous article', // TODO + 'up' => 'Go up', // TODO + ), + 'open_url' => 'Abrir URL', + 'promote' => 'Promover', + 'purge' => 'Limpar', + 'refresh_opml' => 'Atualizar OPML', + 'remove' => 'Remover', + 'rename' => 'Renomear', + 'see_website' => 'Ver o site', + 'submit' => 'Enviar', + 'truncate' => 'Apagar todos os artigos', + 'update' => 'Atualizar', + ), + 'auth' => array( + 'accept_tos' => 'Eu aceito os Termos de serviço.', + 'email' => 'Endereço de e-mail', + 'keep_logged_in' => 'Mantenha-se ligado por (%s days)', + 'login' => 'Entrar', + 'logout' => 'Sair', + 'password' => array( + '_' => 'Senha', + 'format' => 'Pelo menos 7 caracteres', + ), + 'reauth' => array( + 'header' => 'Reauthentication is required', // TODO + 'tip' => 'You won’t be asked to sign in again for %d minutes', // TODO + 'title' => 'Reauthentication', // TODO + ), + 'registration' => array( + '_' => 'Nova conta', + 'ask' => 'Criar novoa conta?', + 'title' => 'Criação de conta', + ), + 'username' => array( + '_' => 'Utilizador', + 'format' => 'Máximo 16 caracteres alphanumericos', + ), + ), + 'date' => array( + 'Apr' => '\\A\\b\\r\\i\\l', + 'Aug' => '\\A\\g\\o\\s\\t\\o', + 'Dec' => '\\D\\e\\z\\e\\m\\b\\r\\o', + 'Feb' => '\\F\\e\\v\\e\\r\\e\\i\\r\\o', + 'Jan' => '\\J\\a\\n\\e\\i\\r\\o', + 'Jul' => '\\J\\u\\l\\h\\o', + 'Jun' => '\\J\\u\\n\\h\\o', + 'Mar' => '\\M\\a\\r\\ç\\o', + 'May' => '\\M\\a\\i\\o', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\o', + 'Oct' => '\\O\\u\\t\\u\\b\\r\\o', + 'Sep' => '\\S\\e\\t\\e\\m\\b\\r\\o', + 'apr' => 'abr', + 'april' => 'Abr', + 'aug' => 'ago', + 'august' => 'Ago', + 'before_yesterday' => 'Antes de ontem', + 'dec' => 'dez', + 'december' => 'Dez', + 'feb' => 'fev', + 'february' => 'Fev', + 'format_date' => 'j \\d\\e %s \\d\\e Y', + 'format_date_hour' => 'j \\d\\e %s \\d\\e Y\\, H\\:i', + 'fri' => 'Sex', + 'jan' => 'jan', + 'january' => 'Jan', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_2_year' => 'Últimos dois anos', + 'last_3_month' => 'Últimos três meses', + 'last_3_year' => 'Últimos três anos', + 'last_5_year' => 'Últimos cinco anos', + 'last_6_month' => 'Últimos seis meses', + 'last_month' => 'Últimos mês', + 'last_week' => 'Última semana', + 'last_year' => 'Último ano', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'Mai', + 'may_' => 'Mai', + 'mon' => 'Seg', + 'month' => 'meses', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'out', + 'october' => 'Out', + 'sat' => 'Sab', + 'sep' => 'set', + 'september' => 'Set', + 'sun' => 'Dom', + 'thu' => 'Qui', + 'today' => 'Hoje', + 'tue' => 'Ter', + 'wed' => 'Qua', + 'yesterday' => 'Ontem', + ), + 'dir' => 'ltr', // IGNORE + 'freshrss' => array( + '_' => 'FreshRSS', // IGNORE + 'about' => 'Sobre FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Categoria vazia', + 'confirm_action' => 'Tem certeza que deseja efetuar esta ação? Ela não poderá ser revertida!', + 'confirm_action_feed_cat' => 'Tem certeza que deseja efetuar esta ação ? vai perder favoritos e pesquisas personalizadas. Não poderá ser revertida!', + 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // TODO + 'feedback' => array( + 'body_new_articles' => 'Há %%d novos artigos para ler no FreshRSS.', + 'body_unread_articles' => '(não lido: %%d)', + 'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de ligação a internet.', + 'title_new_articles' => 'FreshRSS: novos artigos!', + ), + 'labels_empty' => 'No labels', // TODO + 'new_article' => 'Há novos artigos disponíveis, clique para atualizar a página.', + 'should_be_activated' => 'O JavaScript precisa estar ativo', + 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // TODO + ), + 'lang' => array( + 'cs' => 'Čeština', // IGNORE + 'de' => 'Deutsch', // IGNORE + 'el' => 'Ελληνικά', // IGNORE + 'en' => 'English', // IGNORE + 'en-US' => 'English (United States)', // IGNORE + 'es' => 'Español', // IGNORE + 'fa' => 'فارسی', // IGNORE + 'fi' => 'Suomi', // IGNORE + 'fr' => 'Français', // IGNORE + 'he' => 'עברית', // IGNORE + 'hu' => 'Magyar', // IGNORE + 'id' => 'Bahasa Indonesia', // IGNORE + 'it' => 'Italiano', // IGNORE + 'ja' => '日本語', // IGNORE + 'ko' => '한국어', // IGNORE + 'lv' => 'Latviešu', // IGNORE + 'nl' => 'Nederlands', // IGNORE + 'oc' => 'Occitan', // IGNORE + 'pl' => 'Polski', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE + 'ru' => 'Русский', // IGNORE + 'sk' => 'Slovenčina', // IGNORE + 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE + ), + 'menu' => array( + 'about' => 'Sobre', + 'account' => 'Conta', + 'admin' => 'Administração', + 'archiving' => 'Arquivar', + 'authentication' => 'Autenticação', + 'check_install' => 'Verificação de instalação', + 'configuration' => 'Configuração', + 'display' => 'Visualização', + 'extensions' => 'Extensões', + 'logs' => 'Logs', // IGNORE + 'privacy' => 'Privacy', // TODO + 'queries' => 'Queries de utilizador', + 'reading' => 'Leitura', + 'search' => 'Procurar por palavras ou #tags', + 'search_help' => 'See documentation for advanced search parameters', // TODO + 'sharing' => 'Partilhar', + 'shortcuts' => 'Atalhos', + 'stats' => 'Estatísticas', + 'system' => 'Configuração do sistema', + 'update' => 'Atualização', + 'user_management' => 'Gestão de utilizadores', + 'user_profile' => 'Perfil', + ), + 'period' => array( + 'days' => 'dias', + 'hours' => 'horas', + 'months' => 'meses', + '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 + 'archiveORG' => 'archive.org', // IGNORE + 'archivePH' => 'archive.ph', // IGNORE + 'bluesky' => 'Bluesky', // IGNORE + 'buffer' => 'Buffer', // IGNORE + 'clipboard' => 'Área de transferência', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'E-mail', + 'email-webmail-firefox-fix' => 'Email (webmail - correção para o Firefox)', + 'facebook' => 'Facebook', // IGNORE + 'gnusocial' => 'GNU social', // IGNORE + 'jdh' => 'Journal du hacker', // IGNORE + 'lemmy' => 'Lemmy', // IGNORE + 'linkding' => 'Linkding', // IGNORE + 'linkedin' => 'LinkedIn', // IGNORE + 'mastodon' => 'Mastodon', // IGNORE + 'movim' => 'Movim', // IGNORE + 'omnivore' => 'Omnivore', // IGNORE + 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // IGNORE + 'pocket' => 'Pocket', // IGNORE + 'print' => 'Imprimir', + 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // IGNORE + 'shaarli' => 'Shaarli', // IGNORE + 'telegram' => 'Telegram', // IGNORE + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag v1', // IGNORE + 'wallabagv2' => 'wallabag v2', // IGNORE + 'web-sharing-api' => 'Sistemas-compartilhados (API)', + 'whatsapp' => 'Whatsapp', // IGNORE + 'xing' => 'Xing', // IGNORE + ), + 'short' => array( + 'attention' => 'Atenção!', + 'blank_to_disable' => 'Deixe em branco para desativar', + 'by_author' => 'Por:', + 'by_default' => 'Por padrão', + 'damn' => 'Buumm!', + 'default_category' => 'Sem categoria', + 'no' => 'Não', + 'not_applicable' => 'Não disponível', + 'ok' => 'Ok!', // IGNORE + 'or' => 'ou', + 'yes' => 'Sim', + ), + 'stream' => array( + 'load_more' => 'Carregar mais artigos', + 'mark_all_read' => 'Marcar todos como lidos', + 'nothing_to_load' => 'Não existem mais artigos', + ), +); diff --git a/app/i18n/pt-PT/index.php b/app/i18n/pt-PT/index.php new file mode 100644 index 000000000..14a9acacc --- /dev/null +++ b/app/i18n/pt-PT/index.php @@ -0,0 +1,110 @@ + array( + '_' => 'Sobre', + 'agpl3' => 'AGPL 3', // IGNORE + 'bug_reports' => array( + 'environment_information' => array( + '_' => 'System information', // TODO + 'browser' => 'Browser', // TODO + 'database' => 'Database', // TODO + 'server_software' => 'Server software', // TODO + 'version_curl' => 'cURL version', // TODO + 'version_frss' => 'FreshRSS version', // TODO + 'version_php' => 'PHP version', // TODO + ), + ), + 'bugs_reports' => 'Reportar Erros', + 'documentation' => 'Documentação', + 'freshrss_description' => 'FreshRSS é um RSS feeds aggregator para um host próprio. É leve e fácil de utilizar enquanto é uma ferramenta poderosa e configurável. ', + 'github' => 'no GitHub', + 'license' => 'licença', + 'project_website' => 'Site do projeto', + 'title' => 'Sobre', + 'version' => 'Versão', + ), + 'feed' => array( + 'empty' => 'Não há nenhum artigo para mostrar.', + 'received' => array( + 'before_yesterday' => 'Received before yesterday', // TODO + 'today' => 'Received today', // TODO + 'yesterday' => 'Received yesterday', // TODO + ), + 'rss_of' => 'RSS feed do %s', + 'title' => 'Stream principal', + 'title_fav' => 'Favoritos', + 'title_global' => 'Visualização Global', + ), + 'log' => array( + '_' => 'Logs', // IGNORE + 'clear' => 'Limpar logs', + 'empty' => 'Arquivo de log está vazio', + 'title' => 'Logs', // IGNORE + ), + 'menu' => array( + 'about' => 'Sobre o FreshRSS', + 'before_one_day' => 'Antes de um dia', + 'before_one_week' => 'Antes de uma semana', + 'bookmark_query' => 'Salvar pesquisa atual', + 'favorites' => 'Favoritos (%s)', + 'global_view' => 'Visualização global', + 'important' => 'Feeds importantes', + 'main_stream' => 'Stream principal', + 'mark_all_read' => 'Marcar todos como lidos', + 'mark_cat_read' => 'Marcar categoria como lida', + 'mark_feed_read' => 'Marcar feed com lido', + 'mark_selection_unread' => 'Marcar seleção como não lida', + 'mylabels' => 'Minhas etiquetas', + 'newer_first' => 'Novos primeiro', + 'non-starred' => 'Mostrar todos, exceto favoritos', + 'normal_view' => 'visualização normal', + 'older_first' => 'Antigos primeiro', + 'queries' => 'Queries do utilizador', + 'read' => 'Mostrar apenas lidos', + 'reader_view' => 'Visualização de leitura', + 'rss_view' => 'Feed RSS', + 'search_short' => 'Pesquisar', + 'sort' => array( + '_' => 'Sorting criteria', // TODO + 'c' => array( + 'name_asc' => 'Category, feed titles A→Z', // TODO + 'name_desc' => 'Category, feed titles Z→A', // TODO + ), + 'date_asc' => 'Publication date 1→9', // TODO + 'date_desc' => 'Publication date 9→1', // TODO + 'f' => array( + 'name_asc' => 'Feed title A→Z', // TODO + 'name_desc' => 'Feed title Z→A', // TODO + ), + 'id_asc' => 'Freshly received last', // TODO + 'id_desc' => 'Freshly received first', // TODO + 'link_asc' => 'Link A→Z', // TODO + 'link_desc' => 'Link Z→A', // TODO + 'rand' => 'Random order', // TODO + 'title_asc' => 'Title A→Z', // TODO + 'title_desc' => 'Title Z→A', // TODO + ), + 'starred' => 'Mostrar apenas os favoritos', + 'stats' => 'Estatísticas', + 'subscription' => 'Gestão de inscrições', + 'unread' => 'Mostrar apenas os não lidos', + ), + 'share' => 'Partilhar', + 'tag' => array( + 'related' => 'Tags relacionadas', + ), + 'tos' => array( + 'title' => 'Termos do serviço', + ), +); diff --git a/app/i18n/pt-PT/install.php b/app/i18n/pt-PT/install.php new file mode 100644 index 000000000..0906c011d --- /dev/null +++ b/app/i18n/pt-PT/install.php @@ -0,0 +1,128 @@ + array( + 'finish' => 'Instalação completa', + 'fix_errors_before' => 'Por favor resolva os erros antes de ir para o próximo passo.', + 'keep_install' => 'Mantenha as configurações anteriores', + 'next_step' => 'Vá para o próximo passo', + 'reinstall' => 'Reinstale o FreshRSS', + ), + 'bdd' => array( + '_' => 'base de dados', + 'conf' => array( + '_' => 'Configuração da base de dados', + 'ko' => 'Verifique as informações do seu base de dados.', + 'ok' => 'Configurações do base de dados foram salvas.', + ), + 'host' => 'Host', // IGNORE + 'password' => 'Senha do base de dados', + 'prefix' => 'Prefixo da tabela', + 'type' => 'Tipo do base de dados', + 'username' => 'Utilizador do base de dados', + ), + 'check' => array( + '_' => 'Verificações', + 'already_installed' => 'Verificamos que o FreshRSS já está instalado!', + 'cache' => 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 cache estão corretos.', + ), + 'ctype' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', + 'ok' => 'Tem a biblioteca necessária para verificação do tipo de caractere (ctype).', + ), + 'curl' => array( + 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', + 'ok' => 'Tem a biblioteca cURL.', + ), + 'data' => 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.', + ), + '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.', + ), + 'favicons' => 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 favicons estão corretos.', + ), + 'fileinfo' => array( + 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', + 'ok' => 'Tem a biblioteca fileinfo.', + ), + 'json' => array( + 'nok' => 'Não foi possível encontrar JSON (php-json).', + 'ok' => 'Tem a extensão JSON.', + ), + 'mbstring' => array( + 'nok' => 'Não foi possível encontrar a biblioteca recomendada para o Unicode (mbstring).', + 'ok' => 'Tem a biblioteca recomendada para o Unicode (mbstring).', + ), + 'pcre' => array( + 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', + 'ok' => 'Tem a biblioteca necessária para expressões regulares (php-pcre).', + ), + 'pdo' => array( + 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'Tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + 'nok' => 'A versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', + 'ok' => 'A versão do PHP é %s, que é compatível com o FreshRSS.', + ), + 'reload' => 'Verifique novamente', + 'tmp' => array( + 'nok' => 'Verifiquei as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'As permissões para o diretório temporário estão certas.', + ), + 'unknown_process_username' => 'Desconhecido', + 'users' => array( + 'nok' => 'Verifiquei as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', + 'ok' => 'Permissões no diretório users estão corretos.', + ), + 'xml' => array( + 'nok' => 'Não foi possível encontrar a biblioteca necessária para parse o XML.', + 'ok' => 'Tem a biblioteca necessária para parse o XML.', + ), + ), + 'conf' => array( + '_' => 'Configurações gerais', + 'ok' => 'Configurações gerais foram salvas.', + ), + 'congratulations' => 'Parabéns!', + 'default_user' => array( + '_' => 'Utilizador padrão', + 'max_char' => 'máximo de 16 caracteres alfanuméricos', + ), + 'fix_errors_before' => 'Por favor solucione os erros antes de ir para o próximo passo.', + 'javascript_is_better' => 'O FreshRSS é mais agradável com o JavaScript ativo', + 'js' => array( + 'confirm_reinstall' => 'Vai perder suas configurações anteriores ao reinstalar o FreshRSS. Confirma que pretende continuar?', + ), + 'language' => array( + '_' => 'Idioma', + 'choose' => 'Escolha o idioma para o FreshRSS', + 'defined' => 'O idioma foi definido.', + ), + 'missing_applied_migrations' => 'Algo de errado ocorreu; Tem que criar um arquivo vazio %s manualmente.', + 'ok' => 'O processo de instalação foi um sucesso.', + 'session' => array( + 'nok' => 'O servidor parece ter sido configurado incorretamente para os cookies necessários para sessões PHP!', + ), + 'step' => 'passo %d', + 'steps' => 'Passos', + 'this_is_the_end' => 'Este é o final', + 'title' => 'Instalação · FreshRSS', +); diff --git a/app/i18n/pt-PT/sub.php b/app/i18n/pt-PT/sub.php new file mode 100644 index 000000000..dcedaeee8 --- /dev/null +++ b/app/i18n/pt-PT/sub.php @@ -0,0 +1,307 @@ + array( + 'documentation' => 'Copie a seguinte URL para utilizar com uma ferramenta externa', + 'title' => 'API', // IGNORE + ), + 'bookmarklet' => array( + 'documentation' => 'Arraste este botão para sua barra de favoritos ou clique com o botão direito e escolha “Adicionar este link aos favoritos”. Depois clique no no link da barra de favoritos “Inscrever-se” em qualquer página que você queira se inscrever.', + 'label' => 'Inscrever-se', + 'title' => 'Bookmarklet', // IGNORE + ), + 'category' => array( + '_' => 'Categoria', + 'add' => 'Adicionar categoria', + 'archiving' => 'Arquivar', + 'dynamic_opml' => array( + '_' => 'OPML Dinâmico', + 'help' => 'Forneça uma URL para o arquivo OPML para preencher dinamicamente esta categoria com feeds', + ), + 'empty' => 'Categoria vazia', + 'expand' => 'Expand category', // TODO + 'information' => 'Informações', + 'open' => 'Open category', // TODO + 'opml_url' => 'URL de OPML', + 'position' => 'Posição de visualização', + 'position_help' => 'Para controlar a ordem de visualização', + 'title' => 'Título', + ), + 'feed' => array( + 'accept_cookies' => 'Aceitar cookies', + 'accept_cookies_help' => 'Permitir que o servidor de Feed defina os cookies (sarmazenados na memória apenas durante a solicitação)', + 'add' => 'Adicionar um feed', + 'advanced' => 'Avançado', + 'archiving' => 'Arquivar', + 'auth' => array( + 'configuration' => 'Entrar', + 'help' => 'Permite acesso a feeds RSS protegidos por HTTP', + 'http' => 'Autenticação HTTP', + 'password' => 'Senha HTTP', + 'username' => 'Utilizador HTTP', + ), + 'change_favicon' => 'Change…', // TODO + 'clear_cache' => 'Sempre limpar o cache', + 'content_action' => array( + '_' => 'Ações ao buscar pelo conteúdo de artigos', + 'append' => 'Adicionar depois conteúdo existente', + 'prepend' => 'Adicionar antes do conteúdo existente', + 'replace' => 'Substituir o conteúdo existente', + ), + 'content_retrieval' => 'Content retrieval', // TODO + 'css_cookie' => 'Usar cookies ao pesquisa pelo conteúdo de artigos', + 'css_cookie_help' => 'Exemplo: foo=bar; gdpr_consent=true; cookie=value', + 'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)', + 'css_path' => 'Caminho do CSS do artigo no site original', + 'css_path_filter' => array( + '_' => 'Seletor CSS dos elementos a serem removidos', + 'help' => 'O seletor CSS pode ser uma lista com: footer, aside, p[data-sanitized-class~="menu"]', + ), + 'description' => 'Descrição', + 'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.', + 'error' => 'Este feed encontra-se com problema. Por favor verifique que ainda está disponível.', + 'export-as-opml' => array( + 'download' => 'Download', // IGNORE + 'help' => 'Arquivo XML (. Ver documentação)', + 'label' => 'Exportar como OPML', + ), + 'ext_favicon' => 'Set automatically', // TODO + 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // TODO + 'filteractions' => array( + '_' => 'Ações do filtro', + 'help' => 'Escreva um filtro de pesquisa por linha. Ver documentação.', + ), + 'http_headers' => 'HTTP Headers', // TODO + 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // TODO + 'icon' => 'Icon', // TODO + 'information' => 'Informações', + 'keep_min' => 'Número mínimo de artigos para manter', + 'kind' => array( + '_' => 'Tipo de fonte de alimentação do Feed', + 'html_json' => array( + '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // TODO + 'xpath' => array( + '_' => 'XPath for JSON in HTML', // TODO + 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // TODO + ), + ), + 'html_xpath' => array( + '_' => 'HTML + XPath (Web scraping)', // IGNORE + 'feed_title' => array( + '_' => 'Título do Feed', + 'help' => 'Exemplo: //title ou uma string estática: "Meu feed personalizado"', + ), + 'help' => 'XPath 1.0é uma linguagem de consulta padrão para usuários avançados e que o FreshRSS suporta para habilitar o Web scraping.', + 'item' => array( + '_' => 'encontrar notícias items
(mais importantes)', + 'help' => 'Exemplo: //div[@class="news-item"]', + ), + 'item_author' => array( + '_' => 'Autor do item', + 'help' => 'Também pode ser uma string estática. Exemplo: "Anônimo"', + ), + 'item_categories' => 'Etiquetas do item', + 'item_content' => array( + '_' => 'Conteúdo do item', + 'help' => 'Exemplo para pegar o item completo: .', + ), + 'item_thumbnail' => array( + '_' => 'Miniatura do item', + 'help' => 'Exemplo: descendant::img/@src', + ), + 'item_timeFormat' => array( + '_' => 'Custom date/time format', // TODO + 'help' => 'Optional. A format supported by DateTime::createFromFormat() such as d-m-Y H:i:s', // TODO + ), + 'item_timestamp' => array( + '_' => 'Data do Item', + 'help' => 'O resultado será parecido com: strtotime()', + ), + 'item_title' => array( + '_' => 'Titulo do Item', + 'help' => 'Utilize especialmente XPath axis descendant:: like descendant::h2', + ), + 'item_uid' => array( + '_' => 'ID único do item', + 'help' => 'Opcional. Exemplo: descendant::div/@data-uri', + ), + 'item_uri' => array( + '_' => 'Link do item (URL)', + 'help' => 'Exemplo: descendant::a/@href', + ), + 'relative' => 'XPath (relativo do item) para:', + 'xpath' => 'XPath para:', + ), + 'json_dotnotation' => array( + '_' => 'JSON (notação de ponto)', + 'feed_title' => array( + '_' => 'título do feed', + 'help' => 'Exemplo: meta.title ou uma string estática: "Meu feed personalizado"', + ), + 'help' => 'Um JSON na notação de ponto usa pontos entre os objetos e colchetes para arrays (e.g. data.items[0].title)', + 'item' => array( + '_' => 'encontrando novidades itens
(mais importante)', + 'help' => 'Caminho do JSON para o array contendo os itens, e.g. $ or newsItems', + ), + 'item_author' => 'autor do item', + 'item_categories' => 'tags dos itens', + 'item_content' => array( + '_' => 'conteúdo do item', + 'help' => 'Chave sob na qual o conteúdo é encontrado, e.g. content', + ), + 'item_thumbnail' => array( + '_' => 'miniatura do item', + 'help' => 'Exemplo: image', + ), + 'item_timeFormat' => array( + '_' => 'Formato de data/hora personalizado', + 'help' => 'Opcional. Um formato suportado por DateTime::createFromFormat() assim como d-m-Y H:i:s', + ), + 'item_timestamp' => array( + '_' => 'data do item', + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => 'título do item', + 'item_uid' => 'ID único do item', + 'item_uri' => array( + '_' => 'Link do item (URL)', + 'help' => 'Exemplo: permalink', + ), + 'json' => 'notação de ponto para:', + 'relative' => 'notação de ponto (relativa ao item) para:', + ), + 'jsonfeed' => 'JSON Feed', // IGNORE + 'rss' => 'RSS / Atom (padrão)', + 'xml_xpath' => 'XML + XPath', // IGNORE + ), + 'maintenance' => array( + 'clear_cache' => 'Limpar o cache', + 'clear_cache_help' => 'Limpar o cache em disco deste feed', + 'reload_articles' => 'Recarregar artigos', + 'reload_articles_help' => 'Recarregar artigos e buscar conteúdo completo', + 'title' => 'Manutenção', + ), + 'max_http_redir' => 'Quantidade máxima de redirecionamentos HTTP', + 'max_http_redir_help' => 'Defina como 0 ou deixe em branco para desactivar, -1 para redirecionamentos ilimitados', + 'method' => array( + '_' => 'Método HTTP', + ), + 'method_help' => 'O conteúdo do POST tem suporte automático para application/x-www-form-urlencoded e application/json', + 'method_postparams' => 'Conteúdo do POST', + 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.', + 'mute' => array( + '_' => 'silenciar', + 'state_is_muted' => 'This feed is muted', // TODO + ), + 'no_selected' => 'Nenhum feed selecionado.', + 'number_entries' => '%d artigos', + 'open_feed' => 'Open feed %s', // TODO + 'path_entries_conditions' => 'Conditions for content retrieval', // TODO + 'priority' => array( + '_' => 'Visibilidade', + 'category' => 'Mostrar na sua categoria', + 'feed' => 'Show in its feed', // TODO + 'hidden' => 'Não exibir', + 'important' => 'Mostrar feeds importantes', + 'main_stream' => 'Mostrar na tela principal', + ), + 'proxy' => 'Defina um proxy para buscar esse feed', + 'proxy_help' => 'Selecione um protocolo (e.g: SOCKS5) e digite o endereço do proxy (e.g: 127.0.0.1:1080 or username:password@127.0.0.1:1080)', + 'reset_favicon' => 'Reset to default', // TODO + 'selector_preview' => array( + 'show_raw' => 'Mostrar fonte', + 'show_rendered' => 'Mostrar conteúdo', + ), + 'show' => array( + 'all' => 'Mostrar todos os Feeds', + 'error' => 'Somente mostrar Feeds com erros', + ), + 'showing' => array( + 'error' => 'Exibir apenas os feeds com erros', + ), + 'ssl_verify' => 'Verificar segurança SSL', + 'stats' => 'Estatísticas', + 'think_to_add' => 'Tem adicionar alguns feeds.', + 'timeout' => 'Timeout em segundos', + 'title' => 'Título', + 'title_add' => 'Adicionar o RSS feed', + 'ttl' => 'Não atualize automaticamente mais que', + 'unicityCriteria' => array( + '_' => 'Article unicity criteria', // TODO + 'forced' => 'forced', // TODO + 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // TODO + 'id' => 'Standard ID (default)', // TODO + 'link' => 'Link', // TODO + 'sha1:content' => 'Content', // TODO + 'sha1:content_published' => 'Content + Date', // TODO + 'sha1:link_published' => 'Link + Date', // TODO + 'sha1:link_published_title' => 'Link + Date + Title', // TODO + 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // TODO + 'sha1:published' => 'Date', // TODO + 'sha1:title' => 'Title', // TODO + 'sha1:title_published' => 'Title + Date', // TODO + 'sha1:title_published_content' => 'Title + Date + Content', // TODO + ), + 'url' => 'URL do Feed', + 'useragent' => 'Defina um utilizador para pesquisar este feed', + 'useragent_help' => 'Exemplo: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', + 'validator' => 'Verifique a validade do feed', + 'website' => 'URL do site', + 'websub' => 'Notificação instantânea com WebSub', + ), + 'import_export' => array( + 'export' => array( + '_' => 'Exportar', + 'sqlite' => 'Download user database as SQLite', // TODO + ), + 'export_labelled' => 'Exportar seus artigos etiquetados', + 'export_opml' => 'Exporta a lista dos feeds (OPML)', + 'export_starred' => 'Exportar seus favoritos', + 'feed_list' => 'Lista dos %s artigos', + 'file_to_import' => 'Arquivo para importar
(OPML, JSON or ZIP)', + 'file_to_import_no_zip' => 'Arquivo para importar
(OPML or JSON)', + 'import' => 'Importar', + 'starred_list' => 'Listar artigos favoritos', + 'title' => 'Importar / exportar', + ), + 'menu' => array( + 'add' => 'Adicionar um feed ou categoria', + 'import_export' => 'Importar / exportar', + 'label_management' => 'Gerir etiquetas', + 'stats' => array( + 'idle' => 'Feeds inativos', + 'main' => 'Estatísticas principais', + 'repartition' => 'Repartição de artigos', + ), + 'subscription_management' => 'Gerir de inscrições', + 'subscription_tools' => 'Ferramentas de inscrição', + ), + 'tag' => array( + 'auto_label' => 'Adicione esta etiqueta para novos artigos', + 'name' => 'Nome', + 'new_name' => 'Nome novo', + 'old_name' => 'Nome antigo', + ), + 'title' => array( + '_' => 'Gerir inscrições', + 'add' => 'Adicionar um feed ou categoria', + 'add_category' => 'Adicionar uma categoria', + 'add_dynamic_opml' => 'Adicionar OPML dinâmico', + 'add_feed' => 'Adicionar um feed', + 'add_label' => 'Adicionar uma etiqueta', + 'add_opml_category' => 'OPML category name', // TODO + 'delete_label' => 'Apagar uma etiqueta', + 'feed_management' => 'Gerir dos RSS feeds', + 'subscription_tools' => 'Ferramentas de inscrição', + ), +); diff --git a/app/i18n/pt-PT/user.php b/app/i18n/pt-PT/user.php new file mode 100644 index 000000000..3f738b9fa --- /dev/null +++ b/app/i18n/pt-PT/user.php @@ -0,0 +1,54 @@ + array( + 'feedback' => array( + 'invalid' => 'Endereço de email inválido', + 'required' => 'O endereço de email é necessário', + ), + 'validation' => array( + 'change_email' => 'Pode mudar seu endereço de email na página do perfil.', + 'email_sent_to' => 'Enviamos um email para %s. Por favor, siga as instruções contidas nele para verificar sua conta.', + 'feedback' => array( + 'email_failed' => 'Não foi possível enviar um email devido a um erro de configuração no servidor.', + 'email_sent' => 'Um email foi enviado para o seu endereço', + 'error' => 'Falha na verificação do endereço de email', + 'ok' => 'O endereço de email foi verificado com sucesso.', + 'unnecessary' => 'Esse endereço de email já foi verificado.', + 'wrong_token' => 'A verificação do endereço de email falhou por causa do token incorreto.', + ), + 'need_to' => 'Para poder utilizar o %s, deve verificar seu endereço de email.', + 'resend_email' => 'Reenviar o email', + 'title' => 'Validação do endereço de email', + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'body' => 'Registrou no %s. Mas ainda é necessário verificar seu endereço de email. Para isso, basta seguir o link:', + 'title' => 'Precisa verificar a conta', + 'welcome' => 'Bem vindo %s,', + ), + ), + 'password' => array( + 'invalid' => 'Senha incorreta', + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'Para se registrar, tem que aceitar os Termos do serviço.', + ), + ), + 'username' => array( + 'invalid' => 'Nome de utilizador inválido.', + 'taken' => 'O nome de utilizador %s já está sendo utilizado', + ), +); diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php deleted file mode 100644 index 6e2a53ae8..000000000 --- a/app/i18n/pt-br/admin.php +++ /dev/null @@ -1,240 +0,0 @@ - array( - 'allow_anonymous' => 'Permitir a leitura anônima dos artigos pelo usuário padrão (%s)', - 'allow_anonymous_refresh' => 'Permitir atualização anônima dos artigos', - 'api_enabled' => 'Permitir acesso à API (Necessáiro para aplicativos móveis and sharing user queries)', // DIRTY - 'form' => 'Formulário Web(tradicional, Necessita de JavaScript)', - 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // TODO - 'none' => 'Nenhum (Perigoso)', - 'title' => 'Autenticação', - 'token' => 'Token de autenticação principal', - 'token_help' => 'Permite acesso a todos as saídas RSS do usuário bem como atualização dos feeds sem autenticação:', - 'type' => 'Método de autenticação', - 'unsafe_autologin' => 'Permitir login automático inseguro usando o seguinte formato: ', - ), - 'check_install' => array( - 'cache' => array( - 'nok' => 'Verifique as permissões no diretório ./data/cache. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório cache estão corretos.', - ), - 'categories' => array( - 'nok' => 'Tabela Category está configurada incorretamente.', - 'ok' => 'Tabela Category está ok.', - ), - 'connection' => array( - 'nok' => 'Conexão ao banco de dados não pode ser estabelecida.', - 'ok' => 'Conexão ao banco de dados está ok.', - ), - 'ctype' => array( - 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', - 'ok' => 'Você tem a biblioteca necessária para verificação do tipo de caractere (ctype).', - ), - 'curl' => array( - 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', - 'ok' => 'Você tem a biblioteca cURL.', - ), - 'data' => array( - 'nok' => 'Verifique as permissões no diretório ./data. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório data estão corretos.', - ), - 'database' => 'Instalação do banco de dados', - '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.', - ), - 'entries' => array( - 'nok' => 'Tabela Entry está configurada incorretamente.', - 'ok' => 'Tabela Entry está ok.', - ), - 'favicons' => array( - 'nok' => 'Verifique as permissões no diretório ./data/favicons. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório favicons estão corretos.', - ), - 'feeds' => array( - 'nok' => 'Tabela Feed está configurada incorretamente.', - 'ok' => 'Tabela Feed está ok.', - ), - 'fileinfo' => array( - 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', - 'ok' => 'Você tem a biblioteca fileinfo.', - ), - 'files' => 'Instalação de arquivos', - 'json' => array( - 'nok' => 'Não foi possível encontrar JSON (php-json).', - 'ok' => 'Você tem a extensão JSON.', - ), - 'mbstring' => array( - 'nok' => 'Não foi possível encontrar a biblioteca recomendada para Unicode (mbstring).', - 'ok' => 'Você tem a biblioteca recomendada para Unicode (mbstring).', - ), - 'pcre' => array( - 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', - 'ok' => 'Você tem a biblioteca necessária para expressões regulares (php-pcre).', - ), - 'pdo' => array( - 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', - 'ok' => 'Você tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', - ), - 'php' => array( - '_' => 'Instação do PHP', - 'nok' => 'Sua versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', - 'ok' => 'Sua versão do PHP é %s, que é compatível com o FreshRSS.', - ), - 'tables' => array( - 'nok' => 'Há uma ou mais tabelas inexistentes no banco de dados.', - 'ok' => 'As tabelas apropriadas existem no banco de dados.', - ), - 'title' => 'Verificação de instalação', - 'tokens' => array( - 'nok' => 'Verifique as permissões no diretório ./data/tokens. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório tokens estão corretos.', - ), - 'users' => array( - 'nok' => 'Verifiquei as permissões no diretório ./data/users. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório users estão corretos.', - ), - 'zip' => array( - 'nok' => 'Não foi possível localizar a extensão ZIP (php-zip).', - 'ok' => 'Você tem a extensão ZIP.', - ), - ), - 'extensions' => array( - 'author' => 'Autor', - 'community' => 'Extensões da comunidade disponíveis', - 'description' => 'Descrição', - 'disabled' => 'Desabilitado', - 'empty_list' => 'Não há extensões instaladas', - 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO - 'enabled' => 'Habilitada', - 'latest' => 'Instalado', - 'name' => 'Nome', - 'no_configure_view' => 'Esta extensão não pode ser configurada.', - 'system' => array( - '_' => 'Extensões do sistema', - 'no_rights' => 'Extensões do sistema (Você não tem direitos para isto)', - ), - 'title' => 'Extensões', - 'update' => 'Atualização disponível', - 'user' => 'Extensões do usuário', - 'version' => 'Versão', - ), - 'stats' => array( - '_' => 'Estatísticas', - 'all_feeds' => 'Todos os feeds', - 'category' => 'Categoria', - 'entry_count' => 'Contagem de entrada', - 'entry_per_category' => 'Entradas por categoria', - 'entry_per_day' => 'Entradas por dia (últimos 30 dias)', - 'entry_per_day_of_week' => 'Por dia da semana(média: %.2f mensagens)', - 'entry_per_hour' => 'Por hora (média: %.2f mensagens)', - 'entry_per_month' => 'Por mês(média: %.2f mensagens)', - 'entry_repartition' => 'Repartição de entradas', - 'feed' => 'Feed', // IGNORE - 'feed_per_category' => 'Feeds por categoria', - 'idle' => 'Feeds inativos', - 'main' => 'Estatísticas principais', - 'main_stream' => 'Stream principal', - 'no_idle' => 'Não há nenhum feed inativo!', - 'number_entries' => '%d artigos', - 'overview' => 'Overview', // TODO - 'percent_of_total' => '% do total', - 'repartition' => 'Repartição de artigos: %s', - 'status_favorites' => 'Favoritos', - 'status_read' => 'Lido', - 'status_total' => 'Total', // IGNORE - 'status_unread' => 'Não lidos', - 'title' => 'Estatísticas', - 'top_feed' => 'Top10 Feeds', - ), - 'system' => array( - '_' => 'Configuração do sistema', - 'auto-update-url' => 'URL do servidor para atualização automática', - 'base-url' => array( - '_' => 'URL Base', - 'recommendation' => 'Recomendação automática: %s', - ), - 'cookie-duration' => array( - 'help' => 'em segundos', - 'number' => 'Manter seção ativa durante', - ), - 'force_email_validation' => 'Força verificação do endereço de email', - 'instance-name' => 'Nome da instância', - 'max-categories' => 'Limite de categorias por usuário', - 'max-feeds' => 'Limite de Feeds por usuário', - 'registration' => array( - 'number' => 'Máximo número de contas', - 'select' => array( - 'label' => 'Formulário de Registro', - 'option' => array( - 'noform' => 'Desativado: Sem formulário de registro', - 'nolimit' => 'Ativado: Sem limites de contas', - 'setaccountsnumber' => 'Definir o máximo número de contas', - ), - ), - 'status' => array( - 'disabled' => 'Formulário desabilitado', - 'enabled' => 'Formulário habilitado', - ), - 'title' => 'Formulário de Cadastro de Usuário', - ), - 'sensitive-parameter' => 'Parâmetro sensível. Edite manualmente em ./data/config.php', - 'tos' => array( - 'disabled' => 'não fornecido', - 'enabled' => 'está ativado', - 'help' => 'Como habilitar os Termos de Serviço', - ), - 'websub' => array( - 'help' => 'Sobre WebSub', - ), - ), - 'update' => array( - '_' => 'Atualização do sistema', - 'apply' => 'Aplicar', - 'changelog' => 'Registro de alterações', - 'check' => 'Buscar por novas atualizações', - 'copiedFromURL' => 'update.php copiado de %s para ./data', - 'current_version' => 'Sua versão', - 'last' => 'Última verificação', - 'loading' => 'Atualizando…', - 'none' => 'Nenhuma atualização para se aplicar', - 'releaseChannel' => array( - '_' => 'Canal de Release', - 'edge' => 'Release contínua (“edge”)', - 'latest' => 'Release estável (“latest”)', - ), - 'title' => 'Sistema de atualização', - 'viaGit' => 'Atualização via git e GitHub.com iniciada', - ), - 'user' => array( - 'admin' => 'Administrador', - 'article_count' => 'Artigos', - 'back_to_manage' => '← Voltar para à lista de usuários', - 'create' => 'Criar novo usuário', - 'database_size' => 'Tamanho do banco de dados', - 'email' => 'Endereço de email', - 'enabled' => 'Habilitado', - 'feed_count' => 'Feeds', // IGNORE - 'is_admin' => 'É administrador', - 'language' => 'Idioma', - 'last_user_activity' => 'Última Atividade do Usuário', - 'list' => 'Lista de usuários', - 'number' => 'Há %d conta criada', - 'numbers' => 'Há %d contas criadas', - 'password_form' => 'Senha
(para o login pelo método do formulário)', - 'password_format' => 'Ao menos 7 caracteres', - 'title' => 'Gerenciar usuários', - 'username' => 'Usuário', - ), -); diff --git a/app/i18n/pt-br/api.php b/app/i18n/pt-br/api.php deleted file mode 100644 index 0021dfa98..000000000 --- a/app/i18n/pt-br/api.php +++ /dev/null @@ -1,33 +0,0 @@ - array( - 'address' => 'Your API address:', // TODO - '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 - ), - 'test' => array( - 'fever' => 'Fever API configuration test:', // TODO - 'greader' => 'Google Reader API configuration test:', // TODO - ), - 'title' => array( - '_' => 'FreshRSS API endpoints', // TODO - 'extension' => 'API for extensions', // TODO - 'fever' => 'Fever compatible API', // TODO - 'greader' => 'Google Reader compatible API', // TODO - ), - ), -); diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php deleted file mode 100644 index 9f2daba08..000000000 --- a/app/i18n/pt-br/conf.php +++ /dev/null @@ -1,372 +0,0 @@ - array( - '_' => 'Arquivar', - 'exception' => 'Regras de exceção da limpeza', - 'help' => 'Mais opções estão disponíveis nas configurações individuais do Feed', - 'keep_favourites' => 'Nunca deletar os favoritos', - 'keep_labels' => 'Nunca deletar tags', - 'keep_max' => 'Número máximo de artigos para manter no feed', - 'keep_min_by_feed' => 'Número mínimo de artigos para manter no feed', - 'keep_period' => 'Idade máxima dos artigos a serem mantidos', - 'keep_unreads' => 'Nunca apagar os não lidos', - 'maintenance' => 'Manutenção', - 'optimize' => 'Otimizar banco de dados', - 'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho do banco de dados', - 'policy' => 'Política de limpeza', - 'policy_warning' => 'Se nenhuma política de limpeza for selecionada, todos os artigos serão mantidos.', - 'purge_now' => 'Limpar agora', - 'title' => 'Arquivar', - 'ttl' => 'Não atualize automaticamente mais frequente que', - ), - 'display' => array( - '_' => 'Exibição', - 'darkMode' => array( - '_' => 'Modo noturno automático', - 'auto' => 'Automático', - 'help' => 'For compatible themes only', // TODO - 'no' => 'Não', - ), - 'icon' => array( - 'bottom_line' => 'Linha inferior', - 'display_authors' => 'Autores', - 'entry' => 'Ícones de artigos', - 'publication_date' => 'Data da publicação', - 'related_tags' => 'Tags relacionadas', - 'sharing' => 'Compartilhar', - 'summary' => 'Sumário', - 'top_line' => 'Linha superior', - ), - 'language' => 'Idioma', - 'notif_html5' => array( - 'seconds' => 'segundos (0 significa sem timeout)', - 'timeout' => 'Notificação em HTML5 de timeout', - ), - 'show_nav_buttons' => 'Mostrar botões de navegação', - 'theme' => array( - '_' => 'Tema', - 'deprecated' => array( - '_' => 'Depreciado', - 'description' => 'Este tema não é mais suportado e não estará mais disponível em uma versão futura do FreshRSS', - ), - ), - 'theme_not_available' => 'O tema “%s” não está mais disponível. Por favor escolha outro tema.', - 'thumbnail' => array( - 'label' => 'Miniatura', - 'landscape' => 'Modo paisagem', - 'none' => 'Nenhum', - 'portrait' => 'Modo retrato', - 'square' => 'Modo quadrado', - ), - 'timezone' => 'Fuso horário', - 'title' => 'Exibição', - 'website' => array( - 'full' => 'Ícone e nome', - 'icon' => 'Apenas ícone', - 'label' => 'Site', - 'name' => 'Apenas nome', - 'none' => 'Nenhum', - ), - 'width' => array( - 'content' => 'Largura do conteúdo', - 'large' => 'Largo', - 'medium' => 'Médio', - 'no_limit' => 'Sem limite', - 'thin' => 'Fino', - ), - ), - 'logs' => array( - 'loglist' => array( - 'level' => 'Nivel de Registro', - 'message' => 'Mensagem de Registro', - 'timestamp' => 'Data e Hora', - ), - 'pagination' => array( - 'first' => 'Primeiro', - 'last' => 'Último', - 'next' => 'Próximo', - 'previous' => 'Anterior', - ), - ), - 'mark_read_button' => array( - '_' => '“marcar todos como lido” button', // DIRTY - 'big' => 'Big', // TODO - 'none' => 'None', // TODO - 'small' => 'Small', // TODO - ), - 'notification_timeout' => array( - 'bad' => array( - 'label' => 'Show warning banner', // TODO - 'seconds' => 'seconds (at least 1)', // TODO - ), - 'good' => array( - 'label' => 'Show acknowledgement banner', // TODO - 'seconds' => 'seconds (0 means not shown)', // TODO - ), - ), - 'privacy' => array( - '_' => 'Privacy', // TODO - 'retrieve_extension_list' => 'Retrieve extension list', // TODO - ), - 'profile' => array( - '_' => 'Gerenciamento de perfil', - 'api' => array( - '_' => 'Administração da API', - 'api_not_set' => 'API password not set', // TODO - 'api_set' => 'API password set', // TODO - 'check_link' => 'Check API status via: %s', // TODO - 'disabled' => 'The API access is disabled.', // TODO - 'documentation_link' => 'See the documentation and list of known apps', // TODO - 'help' => 'See documentation', // TODO - ), - 'change_password' => 'Change password', // TODO - 'confirm_new_password' => 'Confirm new password', // TODO - 'current_password' => 'Current password
(for the Web-form login method)', // TODO - 'delete' => array( - '_' => 'Remover conta', - 'warn' => 'Sua conta e todos os dados relacionados serão removidos.', - ), - 'email' => 'Endereço de e-mail', - 'new_password' => 'New password', // TODO - 'password_api' => 'Senha da API
(p.s., para aplicativos móveis)', - 'password_format' => 'Ao menos 7 caracteres', - 'title' => 'Perfil', - ), - 'query' => array( - '_' => 'Consultas do usuário', - 'deprecated' => 'Esta não é mais válida. A categoria ou feed relacionado foi deletado.', - 'description' => 'Description', // TODO - 'filter' => array( - '_' => 'Filtro aplicado:', - 'categories' => 'Exibir por categoria', - 'feeds' => 'Exibir por feed', - 'order' => 'Ordenar por data', - 'search' => 'Expressão', - 'shareOpml' => 'Habilita o compartilhamento por OPML de categorias e feeds correspondentes', - 'shareRss' => 'Habilita o compartilhamento por HTML & RSS', - 'state' => 'Estado', - 'tags' => 'Exibir por tag', - 'type' => 'Tipo', - ), - 'get_A' => 'Show all feeds, also those shown in their category', // TODO - 'get_Z' => 'Show all feeds, also archived ones', // TODO - 'get_all' => 'Mostrar todos os artigos', - 'get_all_labels' => 'Exibir artigos com qualquer rótulo', - 'get_category' => 'Visualizar “%s” categoria', - 'get_favorite' => 'Visualizar artigos favoritos', - 'get_feed' => 'Visualizar “%s” feed', - 'get_important' => 'Exibir artigos de feeds importantes', - 'get_label' => 'Exibir artigos com rótulo “%s”', - 'help' => 'Veja a documentação para consultas de usuários e recompartilhamentos por HTML / RSS / OPML.', - 'image_url' => 'Image URL', // TODO - 'name' => 'Nome', - 'no_filter' => 'Sem filtro', - 'no_queries' => array( - '_' => 'No user queries are saved yet.', // TODO - 'help' => 'See documentation', // TODO - ), - 'number' => 'Consulta n°%d', - 'order_asc' => 'Exibir artigos mais antigos primeiro', - 'order_desc' => 'Exibir artigos mais novos primeiro', - 'search' => 'Busca por “%s”', - 'share' => array( - '_' => 'Compartilhar esta consulta por link', - 'disabled' => array( - '_' => 'disabled', // TODO - 'title' => 'Sharing', // TODO - ), - 'greader' => 'Shareable link to the GReader JSON', // TODO - 'help' => 'Forneça este link se quiser compartilhar esta consulta com alguém', - 'html' => 'Link compartilhável para a página HTML', - 'opml' => 'Link compartilhável para a lista de feeds OPML', - 'rss' => 'Link compartilhável para o feed RSS', - ), - 'state_0' => 'Exibir todos os artigos', - 'state_1' => 'Exibir artigos lidos', - 'state_2' => 'Exibir artigos não lidos', - 'state_3' => 'Exibir todos os artigos', - 'state_4' => 'Exibir artigos favoritos', - 'state_5' => 'Exibir artigos favoritos lidos', - 'state_6' => 'Exibir artigos favoritos não lidos', - 'state_7' => 'Exibir artigos favoritos', - 'state_8' => 'Exibir artigos que não são favoritos', - 'state_9' => 'Exibir artigos que não são favoritos lidos', - 'state_10' => 'Exibir artigos que não são favoritos não lidos', - 'state_11' => 'Exibir artigos que não são favoritos', - 'state_12' => 'Exibir todos os artigos', - 'state_13' => 'Exibir artigos lidos', - 'state_14' => 'Exibir artigos não lidos', - 'state_15' => 'Exibir todos os artigos', - 'title' => 'Consultas de usuários', - ), - 'reading' => array( - '_' => 'Leitura', - 'after_onread' => 'Depois de “marcar todos como lido”,', - 'always_show_favorites' => 'Mostrar todos os artivos nos favoritos por padrão', - 'apply_to_individual_feed' => 'Applies to feeds individually', // TODO - 'article' => array( - 'authors_date' => array( - '_' => 'Autores e Data', - 'both' => 'No cabeçalho e rodapé', - 'footer' => 'No rodapé', - 'header' => 'No cabeçalho', - 'none' => 'Nenhum', - ), - 'feed_name' => array( - 'above_title' => 'Acima do título/etiqueta', - 'none' => 'Nenhum', - 'with_authors' => 'Com autores e data', - ), - 'feed_title' => 'Título do Feed', - 'icons' => array( - '_' => 'Article icons position
(Reading view only)', // TODO - 'above_title' => 'Above title', // TODO - 'with_authors' => 'In authors and date row', // TODO - ), - 'tags' => array( - '_' => 'Tag', - 'both' => 'No cabeçalho e rodapé', - 'footer' => 'No rodapé', - 'header' => 'No cabeçalho', - 'none' => 'Nenhum', - ), - 'tags_max' => array( - '_' => 'Número máximo de tags exibidas', - 'help' => '0 significa: mostrar todas as tags e não recolhê-las', - ), - ), - 'articles_per_page' => 'Número de artigos por página', - 'auto_load_more' => 'Carregar mais artigos no final da página', - 'auto_remove_article' => 'Esconder artigos depois de lidos', - 'confirm_enabled' => 'Exibir uma caixa de diálogo de confirmação quando acionar “marcar todos como lido”', - 'display_articles_unfolded' => 'Mostrar artigos abertos por padrão', - 'display_categories_unfolded' => 'Categorias abertas', - 'headline' => array( - 'articles' => 'Artigos: Abrir/Fechar', - 'articles_header_footer' => 'Artigos: cabeçalho/rodapé', - 'categories' => 'Navegação à esquerda: Categoria', - 'mark_as_read' => 'Marcar artigo como lido', - 'misc' => 'Diversos', - 'view' => 'Visualização', - ), - 'hide_read_feeds' => 'Esconder categorias e feeds com nenhum artigo não lido (não funciona com a configuração “Mostrar todos os artigos”)', - 'img_with_lazyload' => 'Utilizar o modo lazy load para carregar as imagens', - 'jump_next' => 'Vá para o próximo irmão não lido', - 'mark_updated_article_unread' => 'Marcar artigos atualizados como não lidos', - 'number_divided_when_reader' => 'Dividido por 2 no modo de leitura .', - 'read' => array( - 'article_open_on_website' => 'quando o artigo é aberto no site original', - 'article_viewed' => 'Quando o artigo é visualizado', - 'focus' => 'quando focado (exceto por feeds importantes)', - 'keep_max_n_unread' => 'Número máximo de artigos para manter como não lido', - 'scroll' => 'enquanto faz a rolagem (exceto por feeds importantes)', - 'upon_gone' => 'Quando não estiver mais no feed de notícias principais', - 'upon_reception' => 'ao receber um artigo', - 'when' => 'Marcar artigo como lido…', - 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // TODO - 'when_same_title_in_feed' => 'Se um título idêntico já existir nos últimos n artigos mais novos (of the feed)', // DIRTY - ), - 'show' => array( - '_' => 'Artigos para exibir', - 'active_category' => 'Categoria ativa', - 'adaptive' => 'Show unreads if any, all articles otherwise', // TODO - 'all_articles' => 'Exibir todos os artigos', - 'all_categories' => 'Exibir todas as categorias', - 'no_category' => 'Nenhuma categoria', - 'remember_categories' => 'lembrar de abrir as categorias', - 'unread' => 'Exibir apenas não lido', - 'unread_or_favorite' => 'Show unreads and favourites', // TODO - ), - 'show_fav_unread_help' => 'Aplicar também nas tags', - 'sides_close_article' => 'Clicando fora da área do texto do artigo fecha o mesmo', - 'sort' => array( - '_' => 'Ordem de visualização', - 'newer_first' => 'Novos primeiro', - 'older_first' => 'Antigos primeiro', - ), - 'star' => array( - 'when' => 'Mark an article as favourite…', // TODO - ), - 'sticky_post' => 'Coloque o artigo no topo quando aberto', - 'title' => 'Lendo', - 'view' => array( - 'default' => 'Visualização padrão', - 'global' => 'Visualização global', - 'normal' => 'Visualização normal', - 'reader' => 'Visualização de leitura', - ), - ), - 'sharing' => array( - '_' => 'Compartilhando', - 'add' => 'Adicionar um método de compartilhamento', - 'bluesky' => 'Bluesky', // IGNORE - 'deprecated' => 'Este serviço está obceloeto e será removido do FreshRSS em versões futuras.', - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => 'E-mail', - 'facebook' => 'Facebook', // IGNORE - 'more_information' => 'Mais informação', - 'print' => 'Imprimir', - 'raindrop' => 'Raindrop.io', // IGNORE - 'remove' => 'Remover método de compartilhamento', - 'shaarli' => 'Shaarli', // IGNORE - 'share_name' => 'Nome de visualização para compartilhar', - 'share_url' => 'URL utilizada para compartilhar', - 'title' => 'Compartilhando', - 'twitter' => 'Twitter', // IGNORE - 'wallabag' => 'wallabag', // IGNORE - ), - 'shortcut' => array( - '_' => 'Atalhos', - 'article_action' => 'Ações no artigo', - 'auto_share' => 'Compartilhar', - 'auto_share_help' => 'Se há apenas um modo de compartilhamento, ele é usado. Caso contrário, serão acessíveis pelo seu número.', - 'close_menus' => 'Fechar menus', - 'collapse_article' => 'Fechar', - 'first_article' => 'Ir para o primeiro artigo', - 'focus_search' => 'Acessar a caixa de busca', - 'global_view' => 'Mudar para visualização global', - 'help' => 'Mostrar documentação', - 'javascript' => 'JavaScript deve ser habilitado para utilizar atalhos', - 'last_article' => 'Ir para o último artigo', - 'load_more' => 'Carregar mais artigos', - 'mark_favorite' => 'Marcar como favorito', - 'mark_read' => 'Marcar como lido', - 'navigation' => 'Navegação', - 'navigation_help' => 'Com o modificador ⇧ Shift, atalhos de navegação aplicam aos feeds.
Com o Alt ⎇ modificador, atalhos de navegação aplicam as categorias.', - 'navigation_no_mod_help' => 'Os seguintes atalhos de navegação não suportam modificadores.', - 'next_article' => 'Pule para o próximo artigo', - 'next_unread_article' => 'Abrir o próximo artigo não lido', - 'non_standard' => 'Algumas teclas (%s) podem não funcionar como atalhos.', - 'normal_view' => 'Mudar para a visualização normal', - 'other_action' => 'Outras ações', - 'previous_article' => 'Pule para o artigo anterior', - 'reading_view' => 'Mudar para o modo de leitura', - 'rss_view' => 'Abrir como feed RSS ', - 'see_on_website' => 'Visualize o site original', - 'shift_for_all_read' => '+ Alt ⎇ para marcar artigos anteriores como lido
+ ⇧ Shift para marcar todos os artigos como lido', - 'skip_next_article' => 'Focar o próximo sem abri-lo', - 'skip_previous_article' => 'Focar o anterior sem abri-lo', - 'title' => 'Atalhos', - 'toggle_media' => 'Reproduzir/pausar mídia', - 'user_filter' => 'Acesse filtros de usuário', - 'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.', - 'views' => 'Visualizações', - ), - 'user' => array( - 'articles_and_size' => '%s artigos (%s)', - 'current' => 'Usuário atual', - 'is_admin' => 'é administrador', - 'users' => 'Usuários', - ), -); diff --git a/app/i18n/pt-br/feedback.php b/app/i18n/pt-br/feedback.php deleted file mode 100644 index 9ec1ffb35..000000000 --- a/app/i18n/pt-br/feedback.php +++ /dev/null @@ -1,152 +0,0 @@ - array( - 'denied' => 'Você não tem permissão para acessar esta página', - 'not_found' => 'Você está buscando por uma página que não existe', - ), - 'admin' => array( - 'optimization_complete' => 'Otimização Completa', - ), - 'api' => array( - 'password' => array( - 'failed' => 'Sua senha não pode ser modificada', - 'updated' => 'Sua senha foi alterada com sucesso', - ), - ), - 'auth' => array( - 'login' => array( - 'invalid' => 'Login está incorreto', - 'success' => 'Você está conectado', - ), - 'logout' => array( - 'success' => 'Você está desconectado', - ), - ), - 'conf' => array( - 'error' => 'Um erro ocorreu durante o salvamento das configurações', - 'query_created' => 'A Query “%s” foi criada.', - 'shortcuts_updated' => 'Atalhos foram criados', - 'updated' => 'Configuração foi atualizada', - ), - 'extensions' => array( - 'already_enabled' => '%s já está habilitado', - 'cannot_remove' => '%s não pode ser removido', - 'disable' => array( - 'ko' => '%s não pode ser desabilitado. verifique os logs do FreshRSS para detalhes.', - 'ok' => '%s agora está desabilitado', - ), - 'enable' => array( - 'ko' => '%s não pode ser habilitado. verifique os logs do FreshRSS para detalhes.', - 'ok' => '%s agora está habilitado', - ), - 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // TODO - 'no_access' => 'Você não tem acesso ao %s', - 'not_enabled' => '%s não está habilitado', - 'not_found' => '%s não existe', - 'removed' => '%s removido', - ), - 'import_export' => array( - 'export_no_zip_extension' => 'extensão ZIP não está presente em seu servidor. Por favor tente exportar os arquivos um por vez.', - 'feeds_imported' => 'Seus feeds foram importados e serão atualizados agora / Your feeds have been imported. If you are done importing, you can now click the Update feeds button.', // DIRTY - 'feeds_imported_with_errors' => 'Seus feeds foram importados, mas alguns erros ocorreram / Your feeds have been imported, but some errors occurred. If you are done importing, you can now click the Update feeds button.', // DIRTY - 'file_cannot_be_uploaded' => 'Arquivo não pôde ser enviado', - 'no_zip_extension' => 'extensão ZIP não está presente em seu servidor.', - 'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.', - ), - 'profile' => array( - 'error' => 'Seu perfil não pode ser editado', - 'passwords_dont_match' => 'Passwords don’t match', // TODO - 'updated' => 'Seu perfil foi editado com sucesso', - ), - 'sub' => array( - 'actualize' => 'Atualizando', - 'articles' => array( - 'marked_read' => 'Os artigos selecionados foram marcados como lidos.', - 'marked_unread' => 'Os artigos foram marcados como não lidos', - ), - 'category' => array( - 'created' => 'Categoria %s foi criada.', - 'deleted' => 'Categoria foi deletada.', - 'emptied' => 'Categoria foi esvaziada', - 'error' => 'Categoria não pode ser atualizada', - 'name_exists' => 'Este nome de categoria já existe.', - 'no_id' => 'Você precisa especificar um id para a categoria.', - 'no_name' => 'Nome da categoria não pode ser vazio.', - 'not_delete_default' => 'Você não pode deletar uma categoria vazia!', - 'not_exist' => 'A categoria não existe!', - 'over_max' => 'Você atingiu seu limite de categorias (%d)', - 'updated' => 'Categoria foi atualizada.', - ), - 'feed' => array( - 'actualized' => '%s foi atualizado', - 'actualizeds' => 'Os feeds RSS foram atualizados', - 'added' => 'O feed RSS %s foi adicionado', - 'already_subscribed' => 'Você já está inscrito no %s', - 'cache_cleared' => 'O cache do feed %s foi limpo', - 'deleted' => 'o feed foi deletado', - 'error' => 'O feed não pode ser atualizado', - 'favicon' => array( - 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // TODO - 'unsupported_format' => 'Unsupported image file format!', // TODO - ), - 'internal_problem' => 'O feed RSS não pôde ser adicionado. Verifique os logs do FreshRSS para detalhes. You can try force adding by appending #force_feed to the URL.', // DIRTY - 'invalid_url' => 'URL %s é inválida', - 'n_actualized' => '%d feeds foram atualizados', - 'n_entries_deleted' => '%d artigos foram deletados', - 'no_refresh' => 'Não há feed para atualizar…', - 'not_added' => '%s não pode ser atualizado', - 'not_found' => 'Não foi possível encontrar o feed', - 'over_max' => 'Você atingiu seu limite de feeds (%d)', - 'reloaded' => 'O feed %s foi recarregado', - 'selector_preview' => array( - 'http_error' => 'Falha ao carregar o conteúdo do site.', - 'no_entries' => 'Não há nenhuma entrada nesse feed. Você precisa de pelo menos um artigo para criar uma pré-visualização', - 'no_feed' => 'Erro interno (nenhum feed para verificar).', - 'no_result' => 'O seletor não teve correspondência. Por isso foi exibido o texto do feed original.', - 'selector_empty' => 'O seletor está vazio. Você precisa definir um para criar uma pré-visualização.', - ), - 'updated' => 'Os feeds foram atualizados', - ), - 'purge_completed' => 'Limpeza completa (%d artigos deletados)', - ), - 'tag' => array( - 'created' => 'A Tag “%s” foi criada.', - 'error' => 'Etiqueta não pode ser atualizada!', - 'name_exists' => 'O nome da tag já existe.', - 'renamed' => 'A Tag “%s” foi renomeada para “%s”.', - 'updated' => 'Etiqueta foi atualizada.', - ), - 'update' => array( - 'can_apply' => 'O FreshRSS será atualizado para a versão %s.', - 'error' => 'O processo de atualização encontrou um erro: %s', - 'file_is_nok' => 'Nova versão %s disponível, mas verifique as permissões no diretório %s. Servidor HTTP deve ter direitos para escrever dentro', - 'finished' => 'Atualização completa!', - 'none' => 'Nenhuma atualização para aplicar', - 'server_not_found' => 'Servidor de atualização não pôde ser localizado. [%s]', - ), - 'user' => array( - 'created' => array( - '_' => 'Usuário %s foi criado', - 'error' => 'Usuário %s não pode ser criado', - ), - 'deleted' => array( - '_' => 'Usuário %s foi deletado', - 'error' => 'Usuário %s não pode ser deletado', - ), - 'updated' => array( - '_' => 'O usuário %s foi atualizado com sucesso', - 'error' => 'O usuário %s não foi atualizado', - ), - ), -); diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php deleted file mode 100644 index b2d263554..000000000 --- a/app/i18n/pt-br/gen.php +++ /dev/null @@ -1,277 +0,0 @@ - array( - 'actualize' => 'Atualizar feeds', - 'add' => 'Adicionar', - 'back_to_rss_feeds' => '← Volte para o seu feeds RSS', - 'cancel' => 'Cancelar', - 'close' => 'Close', // TODO - 'create' => 'Criar', - 'delete_all_feeds' => 'Delete all feeds', // TODO - 'delete_errored_feeds' => 'Delete feeds with errors', // TODO - 'delete_muted_feeds' => 'Excluir feeds silenciados', - 'demote' => 'Despromover', - 'disable' => 'Desabilitar', - 'download' => 'Download', // TODO - 'empty' => 'Vazio', - 'enable' => 'Habilitar', - 'export' => 'Exportar', - 'filter' => 'Filtrar', - 'import' => 'Importar', - 'load_default_shortcuts' => 'Carregar mais atalhos', - 'manage' => 'Gerenciar', - 'mark_read' => 'Marcar como lido', - 'menu' => array( - 'open' => 'Open menu', // TODO - ), - 'nav_buttons' => array( - 'next' => 'Next article', // TODO - 'prev' => 'Previous article', // TODO - 'up' => 'Go up', // TODO - ), - 'open_url' => 'Abrir URL', - 'promote' => 'Promover', - 'purge' => 'Limpar', - 'refresh_opml' => 'Atualizar OPML', - 'remove' => 'Remover', - 'rename' => 'Renomear', - 'see_website' => 'Ver o site', - 'submit' => 'Enviar', - 'truncate' => 'Deletar todos os artigos', - 'update' => 'Atualizar', - ), - 'auth' => array( - 'accept_tos' => 'Eu aceito os Termos de serviço.', - 'email' => 'Endereço de e-mail', - 'keep_logged_in' => 'Mantenha logado por (%s days)', - 'login' => 'Entrar', - 'logout' => 'Sair', - 'password' => array( - '_' => 'Senha', - 'format' => 'Ao menos 7 caracteres', - ), - 'reauth' => array( - 'header' => 'Reauthentication is required', // TODO - 'tip' => 'You won’t be asked to sign in again for %d minutes', // TODO - 'title' => 'Reauthentication', // TODO - ), - 'registration' => array( - '_' => 'Nova conta', - 'ask' => 'Criar novoa conta?', - 'title' => 'Criação de conta', - ), - 'username' => array( - '_' => 'Usuário', - 'format' => 'Máximo 16 caracteres alphanumericos', - ), - ), - 'date' => array( - 'Apr' => '\\A\\b\\r\\i\\l', - 'Aug' => '\\A\\g\\o\\s\\t\\o', - 'Dec' => '\\D\\e\\z\\e\\m\\b\\r\\o', - 'Feb' => '\\F\\e\\v\\e\\r\\e\\i\\r\\o', - 'Jan' => '\\J\\a\\n\\e\\i\\r\\o', - 'Jul' => '\\J\\u\\l\\h\\o', - 'Jun' => '\\J\\u\\n\\h\\o', - 'Mar' => '\\M\\a\\r\\ç\\o', - 'May' => '\\M\\a\\i\\o', - 'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\o', - 'Oct' => '\\O\\u\\t\\u\\b\\r\\o', - 'Sep' => '\\S\\e\\t\\e\\m\\b\\r\\o', - 'apr' => 'abr', - 'april' => 'Abr', - 'aug' => 'ago', - 'august' => 'Ago', - 'before_yesterday' => 'Antes de ontem', - 'dec' => 'dez', - 'december' => 'Dez', - 'feb' => 'fev', - 'february' => 'Fev', - 'format_date' => 'j \\d\\e %s \\d\\e Y', - 'format_date_hour' => 'j \\d\\e %s \\d\\e Y\\, H\\:i', - 'fri' => 'Sex', - 'jan' => 'jan', - 'january' => 'Jan', - 'jul' => 'jul', - 'july' => 'Jul', - 'jun' => 'jun', - 'june' => 'Jun', - 'last_2_year' => 'Últimos dois anos', - 'last_3_month' => 'Últimos três meses', - 'last_3_year' => 'Últimos três anos', - 'last_5_year' => 'Últimos cinco anos', - 'last_6_month' => 'Últimos seis meses', - 'last_month' => 'Últimos mês', - 'last_week' => 'Última semana', - 'last_year' => 'Último ano', - 'mar' => 'mar', - 'march' => 'Mar', - 'may' => 'Mai', - 'may_' => 'Mai', - 'mon' => 'Seg', - 'month' => 'meses', - 'nov' => 'nov', - 'november' => 'Nov', - 'oct' => 'out', - 'october' => 'Out', - 'sat' => 'Sab', - 'sep' => 'set', - 'september' => 'Set', - 'sun' => 'Dom', - 'thu' => 'Qui', - 'today' => 'Hoje', - 'tue' => 'Ter', - 'wed' => 'Qua', - 'yesterday' => 'Ontem', - ), - 'dir' => 'ltr', // IGNORE - 'freshrss' => array( - '_' => 'FreshRSS', // IGNORE - 'about' => 'Sobre FreshRSS', - ), - 'js' => array( - 'category_empty' => 'Categoria vazia', - 'confirm_action' => 'Você tem certeza que deseja efetuar esta ação? Ela não poderá ser cancelada!', - 'confirm_action_feed_cat' => 'Você tem certeza que deseja efetuar esta ação ? Você irá perder favoritos e queries de usuários. Não poderá ser cancelado!', - 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // TODO - 'feedback' => array( - 'body_new_articles' => 'Há %%d novos artigos para ler no FreshRSS.', - 'body_unread_articles' => '(não lido: %%d)', - 'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de conexão com a internet.', - 'title_new_articles' => 'FreshRSS: novos artigos!', - ), - 'labels_empty' => 'No labels', // TODO - 'new_article' => 'Há novos artigos disponíveis, clique para atualizar a página.', - 'should_be_activated' => 'O JavaScript precisa estar ativo', - 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // TODO - ), - 'lang' => array( - 'cs' => 'Čeština', // IGNORE - 'de' => 'Deutsch', // IGNORE - 'el' => 'Ελληνικά', // IGNORE - 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE - 'es' => 'Español', // IGNORE - 'fa' => 'فارسی', // IGNORE - 'fi' => 'Suomi', // IGNORE - 'fr' => 'Français', // IGNORE - 'he' => 'עברית', // IGNORE - 'hu' => 'Magyar', // IGNORE - 'id' => 'Bahasa Indonesia', // IGNORE - 'it' => 'Italiano', // IGNORE - 'ja' => '日本語', // IGNORE - 'ko' => '한국어', // IGNORE - 'lv' => 'Latviešu', // IGNORE - 'nl' => 'Nederlands', // IGNORE - 'oc' => 'Occitan', // IGNORE - 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE - 'ru' => 'Русский', // IGNORE - 'sk' => 'Slovenčina', // IGNORE - 'tr' => 'Türkçe', // IGNORE - 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE - ), - 'menu' => array( - 'about' => 'Sobre', - 'account' => 'Conta', - 'admin' => 'Administração', - 'archiving' => 'Arquivar', - 'authentication' => 'Autenticação', - 'check_install' => 'Verificação de instalação', - 'configuration' => 'Configuração', - 'display' => 'Visualização', - 'extensions' => 'Extensões', - 'logs' => 'Logs', // IGNORE - 'privacy' => 'Privacy', // TODO - 'queries' => 'Queries de usuário', - 'reading' => 'Leitura', - 'search' => 'Procurar por palavras ou #tags', - 'search_help' => 'See documentation for advanced search parameters', // TODO - 'sharing' => 'Compartilhamento', - 'shortcuts' => 'Atalhos', - 'stats' => 'Estatísticas', - 'system' => 'Configuração do sistema', - 'update' => 'Atualização', - 'user_management' => 'Gerenciamento de usuários', - 'user_profile' => 'Perfil', - ), - 'period' => array( - 'days' => 'dias', - 'hours' => 'horas', - 'months' => 'meses', - '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 - 'archiveORG' => 'archive.org', // IGNORE - 'archivePH' => 'archive.ph', // IGNORE - 'bluesky' => 'Bluesky', // IGNORE - 'buffer' => 'Buffer', // IGNORE - 'clipboard' => 'Área de transferência', - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => 'E-mail', - 'email-webmail-firefox-fix' => 'Email (webmail - correção para o Firefox)', - 'facebook' => 'Facebook', // IGNORE - 'gnusocial' => 'GNU social', // IGNORE - 'jdh' => 'Journal du hacker', // IGNORE - 'lemmy' => 'Lemmy', // IGNORE - 'linkding' => 'Linkding', // IGNORE - 'linkedin' => 'LinkedIn', // IGNORE - 'mastodon' => 'Mastodon', // IGNORE - 'movim' => 'Movim', // IGNORE - 'omnivore' => 'Omnivore', // IGNORE - 'pinboard' => 'Pinboard', // IGNORE - 'pinterest' => 'Pinterest', // IGNORE - 'pocket' => 'Pocket', // IGNORE - 'print' => 'Imprimir', - 'raindrop' => 'Raindrop.io', // IGNORE - 'reddit' => 'Reddit', // IGNORE - 'shaarli' => 'Shaarli', // IGNORE - 'telegram' => 'Telegram', // IGNORE - 'twitter' => 'Twitter', // IGNORE - 'wallabag' => 'wallabag v1', // IGNORE - 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'Sistemas-compartilhados (API)', - 'whatsapp' => 'Whatsapp', // IGNORE - 'xing' => 'Xing', // IGNORE - ), - 'short' => array( - 'attention' => 'Atenção!', - 'blank_to_disable' => 'Deixe em branco para desativar', - 'by_author' => 'Por:', - 'by_default' => 'Por padrão', - 'damn' => 'Buumm!', - 'default_category' => 'Sem categoria', - 'no' => 'Não', - 'not_applicable' => 'Não disponível', - 'ok' => 'Ok!', // IGNORE - 'or' => 'ou', - 'yes' => 'Sim', - ), - 'stream' => array( - 'load_more' => 'Carregar mais artigos', - 'mark_all_read' => 'Marcar todos como lidos', - 'nothing_to_load' => 'Não há mais artigos', - ), -); diff --git a/app/i18n/pt-br/index.php b/app/i18n/pt-br/index.php deleted file mode 100644 index 9a52c27cd..000000000 --- a/app/i18n/pt-br/index.php +++ /dev/null @@ -1,110 +0,0 @@ - array( - '_' => 'Sobre', - 'agpl3' => 'AGPL 3', // IGNORE - 'bug_reports' => array( - 'environment_information' => array( - '_' => 'System information', // TODO - 'browser' => 'Browser', // TODO - 'database' => 'Database', // TODO - 'server_software' => 'Server software', // TODO - 'version_curl' => 'cURL version', // TODO - 'version_frss' => 'FreshRSS version', // TODO - 'version_php' => 'PHP version', // TODO - ), - ), - 'bugs_reports' => 'Reportar Bugs', - 'documentation' => 'Documentação', - 'freshrss_description' => 'FreshRSS é um RSS feeds aggregator para um host próprio. É leve e fácil de utilizar enquanto é uma ferramenta poderosa e configurável. ', - 'github' => 'no GitHub', - 'license' => 'licença', - 'project_website' => 'Site do projeto', - 'title' => 'Sobre', - 'version' => 'Versão', - ), - 'feed' => array( - 'empty' => 'Não há nenhum artigo para mostrar.', - 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO - 'today' => 'Received today', // TODO - 'yesterday' => 'Received yesterday', // TODO - ), - 'rss_of' => 'RSS feed do %s', - 'title' => 'Stream principal', - 'title_fav' => 'Favoritos', - 'title_global' => 'Visualização Global', - ), - 'log' => array( - '_' => 'Logs', // IGNORE - 'clear' => 'Limpar logs', - 'empty' => 'Arquivo de log está vazio', - 'title' => 'Logs', // IGNORE - ), - 'menu' => array( - 'about' => 'Sobre o FreshRSS', - 'before_one_day' => 'Antes de um dia', - 'before_one_week' => 'Antes de uma semana', - 'bookmark_query' => 'Salvar pesquisa atual', - 'favorites' => 'Favoritos (%s)', - 'global_view' => 'Visualização global', - 'important' => 'Feeds importantes', - 'main_stream' => 'Stream principal', - 'mark_all_read' => 'Marcar todos como lidos', - 'mark_cat_read' => 'Marcar categoria como lida', - 'mark_feed_read' => 'Marcar feed com lido', - 'mark_selection_unread' => 'Marcar seleção como não lida', - 'mylabels' => 'Minhas etiquetas', - 'newer_first' => 'Novos primeiro', - 'non-starred' => 'Mostrar todos, exceto favoritos', - 'normal_view' => 'visualização normal', - 'older_first' => 'Antigos primeiro', - 'queries' => 'Queries do usuário', - 'read' => 'Mostrar apenas lidos', - 'reader_view' => 'Visualização de leitura', - 'rss_view' => 'Feed RSS', - 'search_short' => 'Buscar', - 'sort' => array( - '_' => 'Sorting criteria', // TODO - 'c' => array( - 'name_asc' => 'Category, feed titles A→Z', // TODO - 'name_desc' => 'Category, feed titles Z→A', // TODO - ), - 'date_asc' => 'Publication date 1→9', // TODO - 'date_desc' => 'Publication date 9→1', // TODO - 'f' => array( - 'name_asc' => 'Feed title A→Z', // TODO - 'name_desc' => 'Feed title Z→A', // TODO - ), - 'id_asc' => 'Freshly received last', // TODO - 'id_desc' => 'Freshly received first', // TODO - 'link_asc' => 'Link A→Z', // TODO - 'link_desc' => 'Link Z→A', // TODO - 'rand' => 'Random order', // TODO - 'title_asc' => 'Title A→Z', // TODO - 'title_desc' => 'Title Z→A', // TODO - ), - 'starred' => 'Mostrar apenas os favoritos', - 'stats' => 'Estatísticas', - 'subscription' => 'Gerenciamento de inscrições', - 'unread' => 'Mostrar apenas os não lidos', - ), - 'share' => 'Compartilhar', - 'tag' => array( - 'related' => 'Tags relacionadas', - ), - 'tos' => array( - 'title' => 'Termos do serviço', - ), -); diff --git a/app/i18n/pt-br/install.php b/app/i18n/pt-br/install.php deleted file mode 100644 index 6fd6344a3..000000000 --- a/app/i18n/pt-br/install.php +++ /dev/null @@ -1,128 +0,0 @@ - array( - 'finish' => 'Instalação completa', - 'fix_errors_before' => 'Por favor resolva os erros antes de ir para o próximo passo.', - 'keep_install' => 'Mantenha as configurações anteriores', - 'next_step' => 'Vá para o próximo passo', - 'reinstall' => 'Reinstale o FreshRSS', - ), - 'bdd' => array( - '_' => 'Banco de dados', - 'conf' => array( - '_' => 'Configuração do banco de dados', - 'ko' => 'Verifique as informações do seu banco de dados.', - 'ok' => 'Configurações do banco de dados foram salvas.', - ), - 'host' => 'Host', // IGNORE - 'password' => 'Senha do banco de dados', - 'prefix' => 'Prefixo da tabela', - 'type' => 'Tipo do banco de dados', - 'username' => 'Usuário do banco de dados', - ), - 'check' => array( - '_' => 'Verificações', - 'already_installed' => 'Verificamos que o FreshRSS já está instalado!', - 'cache' => 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 cache estão corretos.', - ), - 'ctype' => array( - 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', - 'ok' => 'Você tem a biblioteca necessária para verificação do tipo de caractere (ctype).', - ), - 'curl' => array( - 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', - 'ok' => 'Você tem a biblioteca cURL.', - ), - 'data' => 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.', - ), - '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.', - ), - 'favicons' => 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 favicons estão corretos.', - ), - 'fileinfo' => array( - 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', - 'ok' => 'Você tem a biblioteca fileinfo.', - ), - 'json' => array( - 'nok' => 'Não foi possível encontrar JSON (php-json).', - 'ok' => 'Você tem a extensão JSON.', - ), - 'mbstring' => array( - 'nok' => 'Não foi possível encontrar a biblioteca recomendada para o Unicode (mbstring).', - 'ok' => 'Você tem a biblioteca recomendada para o Unicode (mbstring).', - ), - 'pcre' => array( - 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', - 'ok' => 'Você tem a biblioteca necessária para expressões regulares (php-pcre).', - ), - 'pdo' => array( - 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', - 'ok' => 'Você tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', - ), - 'php' => array( - 'nok' => 'Sua versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', - 'ok' => 'Sua versão do PHP é %s, que é compatível com o FreshRSS.', - ), - 'reload' => 'Verifique novamente', - 'tmp' => array( - 'nok' => 'Verifiquei as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'As permissões para o diretório temporário estão certas.', - ), - 'unknown_process_username' => 'Desconhecido', - 'users' => array( - 'nok' => 'Verifiquei as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório users estão corretos.', - ), - 'xml' => array( - 'nok' => 'Não foi possível encontrar a biblioteca necessária para parse o XML.', - 'ok' => 'Você tem a biblioteca necessária para parse o XML.', - ), - ), - 'conf' => array( - '_' => 'Configurações gerais', - 'ok' => 'Configurações gerais foram salvas.', - ), - 'congratulations' => 'Parabéns!', - 'default_user' => array( - '_' => 'Usuário do usuário padrão', - 'max_char' => 'máximo de 16 caracteres alfanuméricos', - ), - 'fix_errors_before' => 'Por favor solucione os erros antes de ir para o próximo passo.', - 'javascript_is_better' => 'O FreshRSS é mais agradável com o JavaScript ativo', - 'js' => array( - 'confirm_reinstall' => 'Você irá perder suas configurações anteriores ao reinstalar o FreshRSS. Você está certo que deseja continuar?', - ), - 'language' => array( - '_' => 'Idioma', - 'choose' => 'Escolha o idioma para o FreshRSS', - 'defined' => 'O idioma foi definido.', - ), - 'missing_applied_migrations' => 'Algo de errado ocorreu; você tem que criar um arquivo vazio %s manualmente.', - 'ok' => 'O processo de instalação foi um sucesso.', - 'session' => array( - 'nok' => 'O servidor parece ter sido configurado incorretamente para os cookies necessários para sessões PHP!', - ), - 'step' => 'passo %d', - 'steps' => 'Passos', - 'this_is_the_end' => 'Este é o final', - 'title' => 'Instalação · FreshRSS', -); diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php deleted file mode 100644 index 829b21660..000000000 --- a/app/i18n/pt-br/sub.php +++ /dev/null @@ -1,307 +0,0 @@ - array( - 'documentation' => 'Copie a seguinte URL para utilizar com uma ferramenta externa', - 'title' => 'API', // IGNORE - ), - 'bookmarklet' => array( - 'documentation' => 'Arraste este botão para sua barra de favoritos ou clique com o botão direito e escolha “Adicionar este link aos favoritos”. Depois clique no no link da barra de favoritos “Inscrever-se” em qualquer página que você queira se inscrever.', - 'label' => 'Inscrever-se', - 'title' => 'Bookmarklet', // IGNORE - ), - 'category' => array( - '_' => 'Categoria', - 'add' => 'Adicionar categoria', - 'archiving' => 'Arquivar', - 'dynamic_opml' => array( - '_' => 'OPML Dinâmico', - 'help' => 'Forneça uma URL para o arquivo OPML para preencher dinamicamente esta categoria com feeds', - ), - 'empty' => 'Categoria vazia', - 'expand' => 'Expand category', // TODO - 'information' => 'Informações', - 'open' => 'Open category', // TODO - 'opml_url' => 'URL de OPML', - 'position' => 'Posição de exibição', - 'position_help' => 'Para controlar a ordem de exibição', - 'title' => 'Título', - ), - 'feed' => array( - 'accept_cookies' => 'Aceitar cookies', - 'accept_cookies_help' => 'Permitir que o servidor de Feed defina os cookies (sarmazenados na memória apenas durante a solicitação)', - 'add' => 'Adicionar um feed', - 'advanced' => 'Avançado', - 'archiving' => 'Arquivar', - 'auth' => array( - 'configuration' => 'Entrar', - 'help' => 'Permite acesso a feeds RSS protegidos por HTTP', - 'http' => 'Autenticação HTTP', - 'password' => 'Senha HTTP', - 'username' => 'Usuário HTTP', - ), - 'change_favicon' => 'Change…', // TODO - 'clear_cache' => 'Sempre limpar o cache', - 'content_action' => array( - '_' => 'Ações ao buscar pelo conteúdo de artigos', - 'append' => 'Adicionar depois conteúdo existente', - 'prepend' => 'Adicionar antes do conteúdo existente', - 'replace' => 'Substituir o conteúdo existente', - ), - 'content_retrieval' => 'Content retrieval', // TODO - 'css_cookie' => 'Usar cookies ao buscar pelo conteúdo de artigos', - 'css_cookie_help' => 'Exemplo: foo=bar; gdpr_consent=true; cookie=value', - 'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)', - 'css_path' => 'Caminho do CSS do artigo no site original', - 'css_path_filter' => array( - '_' => 'Seletor CSS dos elementos a serem removidos', - 'help' => 'O seletor CSS pode ser uma lista com: footer, aside, p[data-sanitized-class~="menu"]', - ), - 'description' => 'Descrição', - 'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.', - 'error' => 'Este feed encontra-se com problema. Por favor verifique se ele ainda está disponível.', // DIRTY - 'export-as-opml' => array( - 'download' => 'Download', // IGNORE - 'help' => 'Arquivo XML (data subset. See documentation)', // DIRTY - 'label' => 'Exportar como OPML', - ), - 'ext_favicon' => 'Set automatically', // TODO - 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // TODO - 'filteractions' => array( - '_' => 'Ações do filtro', - 'help' => 'Escreva um filtro de pesquisa por linha. Operators see documentation.', // DIRTY - ), - 'http_headers' => 'HTTP Headers', // TODO - 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // TODO - 'icon' => 'Icon', // TODO - 'information' => 'Informações', - 'keep_min' => 'Número mínimo de artigos para manter', - 'kind' => array( - '_' => 'Tipo de fonte de alimentação do Feed', - 'html_json' => array( - '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // TODO - 'xpath' => array( - '_' => 'XPath for JSON in HTML', // TODO - 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // TODO - ), - ), - 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // IGNORE - 'feed_title' => array( - '_' => 'Título do Feed', - 'help' => 'Exemplo: //title ou uma string estática: "Meu feed customizado"', - ), - 'help' => 'XPath 1.0é uma linguagem de consulta padrão para usuários avançados e que o FreshRSS suporta para habilitar o Web scraping.', - 'item' => array( - '_' => 'encontrar notícias items
(mais importantes)', - 'help' => 'Exemplo: //div[@class="news-item"]', - ), - 'item_author' => array( - '_' => 'Autor do item', - 'help' => 'Também pode ser uma string estática. Exemplo: "Anônimo"', - ), - 'item_categories' => 'Etiquetas do item', - 'item_content' => array( - '_' => 'Conteúdo do item', - 'help' => 'Exemplo para pegar o item completo: .', - ), - 'item_thumbnail' => array( - '_' => 'Miniatura do item', - 'help' => 'Exemplo: descendant::img/@src', - ), - 'item_timeFormat' => array( - '_' => 'Custom date/time format', // TODO - 'help' => 'Optional. A format supported by DateTime::createFromFormat() such as d-m-Y H:i:s', // TODO - ), - 'item_timestamp' => array( - '_' => 'Data do Item', - 'help' => 'O resultado será parecido com: strtotime()', - ), - 'item_title' => array( - '_' => 'Titulo do Item', - 'help' => 'Utilize especialmente XPath axis descendant:: like descendant::h2', - ), - 'item_uid' => array( - '_' => 'ID único do item', - 'help' => 'Opcional. Exemplo: descendant::div/@data-uri', - ), - 'item_uri' => array( - '_' => 'Link do item (URL)', - 'help' => 'Exemplo: descendant::a/@href', - ), - 'relative' => 'XPath (relativo do item) para:', - 'xpath' => 'XPath para:', - ), - 'json_dotnotation' => array( - '_' => 'JSON (notação de ponto)', - 'feed_title' => array( - '_' => 'título do feed', - 'help' => 'Exemplo: meta.title ou uma string estática: "Meu feed customizado"', - ), - 'help' => 'Um JSON na notação de ponto usa pontos entre os objetos e colchetes para arrays (e.g. data.items[0].title)', - 'item' => array( - '_' => 'encontrando novidades itens
(mais importante)', - 'help' => 'Caminho do JSON para o array contendo os itens, e.g. $ or newsItems', // DIRTY - ), - 'item_author' => 'autor do item', - 'item_categories' => 'tags dos itens', - 'item_content' => array( - '_' => 'conteúdo do item', - 'help' => 'Chave sob na qual o conteúdo é encontrado, e.g. content', - ), - 'item_thumbnail' => array( - '_' => 'miniatura do item', - 'help' => 'Exemplo: image', - ), - 'item_timeFormat' => array( - '_' => 'Formato de data/hora customizado', - 'help' => 'Opcional. Um formato suportado por DateTime::createFromFormat() assim como d-m-Y H:i:s', - ), - 'item_timestamp' => array( - '_' => 'data do item', - 'help' => 'The result will be parsed by strtotime()', // TODO - ), - 'item_title' => 'título do item', - 'item_uid' => 'ID único do item', - 'item_uri' => array( - '_' => 'Link do item (URL)', - 'help' => 'Exemplo: permalink', - ), - 'json' => 'notação de ponto para:', - 'relative' => 'notação de ponto (relativa ao item) para:', - ), - 'jsonfeed' => 'JSON Feed', // IGNORE - 'rss' => 'RSS / Atom (padrão)', - 'xml_xpath' => 'XML + XPath', // IGNORE - ), - 'maintenance' => array( - 'clear_cache' => 'Limpar o cache', - 'clear_cache_help' => 'Limpar o cache em disco deste feed', - 'reload_articles' => 'Recarregar artigos', - 'reload_articles_help' => 'Recarregar artigos e buscar conteúdo completo', - 'title' => 'Manutenção', - ), - 'max_http_redir' => 'Quantidade máxima de redirecionamentos HTTP', - 'max_http_redir_help' => 'Defina como 0 ou deixe em branco para desabilitar, -1 para redirecionamentos ilimitados', - 'method' => array( - '_' => 'Método HTTP', - ), - 'method_help' => 'O conteúdo do POST tem suporte automático para application/x-www-form-urlencoded e application/json', - 'method_postparams' => 'Conteúdo do POST', - 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.', - 'mute' => array( - '_' => 'silenciar', - 'state_is_muted' => 'This feed is muted', // TODO - ), - 'no_selected' => 'Nenhum feed selecionado.', - 'number_entries' => '%d artigos', - 'open_feed' => 'Open feed %s', // TODO - 'path_entries_conditions' => 'Conditions for content retrieval', // TODO - 'priority' => array( - '_' => 'Visibilidade', - 'category' => 'Mostrar na sua categoria', - 'feed' => 'Show in its feed', // TODO - 'hidden' => 'Não exibir', - 'important' => 'Mostrar feeds importantes', - 'main_stream' => 'Mostrar na tela principal', - ), - 'proxy' => 'Defina um proxy para buscar esse feed', - 'proxy_help' => 'Selecione um protocolo (e.g: SOCKS5) e digite o endereço do proxy (e.g: 127.0.0.1:1080 or username:password@127.0.0.1:1080)', - 'reset_favicon' => 'Reset to default', // TODO - 'selector_preview' => array( - 'show_raw' => 'Mostrar fonte', - 'show_rendered' => 'Mostrar conteúdo', - ), - 'show' => array( - 'all' => 'Mostrar todos os Feeds', - 'error' => 'Somente mostrar Feeds com erros', - ), - 'showing' => array( - 'error' => 'Exibir apenas os feeds com erros', - ), - 'ssl_verify' => 'Verificar segurança SSL', - 'stats' => 'Estatísticas', - 'think_to_add' => 'Você deve adicionar alguns feeds.', - 'timeout' => 'Timeout em segundos', - 'title' => 'Título', - 'title_add' => 'Adicionar o RSS feed', - 'ttl' => 'Não atualize automaticamente mais que', - 'unicityCriteria' => array( - '_' => 'Article unicity criteria', // TODO - 'forced' => 'forced', // TODO - 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // TODO - 'id' => 'Standard ID (default)', // TODO - 'link' => 'Link', // TODO - 'sha1:content' => 'Content', // TODO - 'sha1:content_published' => 'Content + Date', // TODO - 'sha1:link_published' => 'Link + Date', // TODO - 'sha1:link_published_title' => 'Link + Date + Title', // TODO - 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // TODO - 'sha1:published' => 'Date', // TODO - 'sha1:title' => 'Title', // TODO - 'sha1:title_published' => 'Title + Date', // TODO - 'sha1:title_published_content' => 'Title + Date + Content', // TODO - ), - 'url' => 'URL do Feed', - 'useragent' => 'Defina um usuário para buscar este feed', - 'useragent_help' => 'Exemplo: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', - 'validator' => 'Verifique a validade do feed', - 'website' => 'URL do site', - 'websub' => 'Notificação instantânea com WebSub', - ), - 'import_export' => array( - 'export' => array( - '_' => 'Exportar', - 'sqlite' => 'Download user database as SQLite', // TODO - ), - 'export_labelled' => 'Exportar seus artigos etiquetados', - 'export_opml' => 'Exporta a lista dos feeds (OPML)', - 'export_starred' => 'Exportar seus favoritos', - 'feed_list' => 'Lista dos %s artigos', - 'file_to_import' => 'Arquivo para importar
(OPML, JSON or ZIP)', - 'file_to_import_no_zip' => 'Arquivo para importar
(OPML or JSON)', - 'import' => 'Importar', - 'starred_list' => 'Listar artigos favoritos', - 'title' => 'Importar / exportar', - ), - 'menu' => array( - 'add' => 'Adicionar um feed ou categoria', - 'import_export' => 'Importar / exportar', - 'label_management' => 'Gerenciar etiquetas', - 'stats' => array( - 'idle' => 'Feeds inativos', - 'main' => 'Estatísticas principais', - 'repartition' => 'Repartição de artigos', - ), - 'subscription_management' => 'Gerenciamento de inscrições', - 'subscription_tools' => 'Ferramentas de inscrição', - ), - 'tag' => array( - 'auto_label' => 'Adicione esta etiqueta para novos artigos', - 'name' => 'Nome', - 'new_name' => 'Nome novo', - 'old_name' => 'Nome antigo', - ), - 'title' => array( - '_' => 'Gerenciamento de inscrições', - 'add' => 'Adicionar um feed ou categoria', - 'add_category' => 'Adicionar uma categoria', - 'add_dynamic_opml' => 'Adicionar OPML dinâmico', - 'add_feed' => 'Adicionar um feed', - 'add_label' => 'Adicionar uma etiqueta', - 'add_opml_category' => 'OPML category name', // TODO - 'delete_label' => 'Deletar uma etiqueta', - 'feed_management' => 'Gerenciamento dos RSS feeds', - 'subscription_tools' => 'Ferramentas de inscrição', - ), -); diff --git a/app/i18n/pt-br/user.php b/app/i18n/pt-br/user.php deleted file mode 100644 index e1655313c..000000000 --- a/app/i18n/pt-br/user.php +++ /dev/null @@ -1,54 +0,0 @@ - array( - 'feedback' => array( - 'invalid' => 'Endereço de email inválido', - 'required' => 'O endereço de email é necessário', - ), - 'validation' => array( - 'change_email' => 'Você pode mudar seu endereço de email na página do perfil.', - 'email_sent_to' => 'Enviamos um email para %s. Por favor, siga as instruções contidas nele para verificar sua conta.', - 'feedback' => array( - 'email_failed' => 'Não foi possível enviar um email para você devido a um erro de configuração no servidor.', - 'email_sent' => 'Um email foi enviado para o seu endereço', - 'error' => 'Falha na verificação do endereço de email', - 'ok' => 'O endereço de email foi verificado com sucesso.', - 'unnecessary' => 'Esse endereço de email já foi verificado.', - 'wrong_token' => 'A verificação do endereço de email falhou por causa do token incorreto.', - ), - 'need_to' => 'Para poder utilizar o %s, você deve verificar seu endereço de email.', - 'resend_email' => 'Reenviar o email', - 'title' => 'Validação do endereço de email', - ), - ), - 'mailer' => array( - 'email_need_validation' => array( - 'body' => 'Você se registrou no %s. Mas ainda é necessário verificar seu endereço de email. Para isso, basta seguir o link:', - 'title' => 'Você precisa verificar sua conta', - 'welcome' => 'Bem vindo %s,', - ), - ), - 'password' => array( - 'invalid' => 'Senha incorreta', - ), - 'tos' => array( - 'feedback' => array( - 'invalid' => 'Para se registrar, você deve aceitar os Termos do serviço.', - ), - ), - 'username' => array( - 'invalid' => 'Nome de usuário inválido.', - 'taken' => 'O nome de usuário %s já está sendo utilizado', - ), -); diff --git a/app/i18n/pt-pt/admin.php b/app/i18n/pt-pt/admin.php deleted file mode 100644 index 1076ef573..000000000 --- a/app/i18n/pt-pt/admin.php +++ /dev/null @@ -1,240 +0,0 @@ - array( - 'allow_anonymous' => 'Permitir a leitura anônima dos artigos pelo utilizador padrão (%s)', - 'allow_anonymous_refresh' => 'Permitir atualização anônima dos artigos', - 'api_enabled' => 'Permitir acesso à API (É preciso para aplicações móveis e partilha pesquisas personalizadas)', - 'form' => 'Formulário Web(tradicional, Necessita de JavaScript)', - 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // TODO - 'none' => 'Nenhum (Perigoso)', - 'title' => 'Autenticação', - 'token' => 'Token de autenticação principal', - 'token_help' => 'Permite acesso a todos as saídas RSS do utilizador bem como atualização dos feeds sem autenticação:', - 'type' => 'Método de autenticação', - 'unsafe_autologin' => 'Permitir login automático inseguro usando o seguinte formato: ', - ), - 'check_install' => array( - 'cache' => array( - 'nok' => 'Verifique as permissões no diretório ./data/cache. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório cache estão corretos.', - ), - 'categories' => array( - 'nok' => 'Tabela Categoria está configurada incorretamente.', - 'ok' => 'Tabela Categoria está ok.', - ), - 'connection' => array( - 'nok' => 'Ligação ao banco de dados não pode ser estabelecida.', - 'ok' => 'Ligação ao banco de dados está correcta.', - ), - 'ctype' => array( - 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', - 'ok' => 'A biblioteca necessária para verificação do tipo de caractere (ctype).Foi Encontrada', - ), - 'curl' => array( - 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', - 'ok' => 'Tem a biblioteca cURL.', - ), - 'data' => array( - 'nok' => 'Verifique as permissões no diretório ./data. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório data estão corretos.', - ), - 'database' => 'Instalação do banco de dados', - '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.', - ), - 'entries' => array( - 'nok' => 'Tabela entradas está configurada incorretamente.', - 'ok' => 'Tabela entradas está correcta.', - ), - 'favicons' => array( - 'nok' => 'Verifique as permissões no diretório ./data/favicons. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório favicons estão corretos.', - ), - 'feeds' => array( - 'nok' => 'Tabela Feed está configurada incorretamente.', - 'ok' => 'Tabela Feed está ok.', - ), - 'fileinfo' => array( - 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', - 'ok' => 'Tem a biblioteca fileinfo.', - ), - 'files' => 'Instalação de arquivos', - 'json' => array( - 'nok' => 'Não foi possível encontrar JSON (php-json).', - 'ok' => 'Tem a extensão JSON.', - ), - 'mbstring' => array( - 'nok' => 'Não foi possível encontrar a biblioteca recomendada para Unicode (mbstring).', - 'ok' => 'Tem a biblioteca recomendada para Unicode (mbstring).', - ), - 'pcre' => array( - 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', - 'ok' => 'Tem a biblioteca necessária para expressões regulares (php-pcre).', - ), - 'pdo' => array( - 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', - 'ok' => 'Tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', - ), - 'php' => array( - '_' => 'Instação do PHP', - 'nok' => 'A versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', - 'ok' => 'A versão do PHP é %s, que é compatível com o FreshRSS.', - ), - 'tables' => array( - 'nok' => 'Há uma ou mais tabelas inexistentes no banco de dados.', - 'ok' => 'As tabelas apropriadas existem no base de dados.', - ), - 'title' => 'Verificação de instalação', - 'tokens' => array( - 'nok' => 'Verifique as permissões no diretório ./data/tokens. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório tokens estão corretos.', - ), - 'users' => array( - 'nok' => 'Verifiquei as permissões no diretório ./data/users. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório users estão corretos.', - ), - 'zip' => array( - 'nok' => 'Não foi possível localizar a extensão ZIP (php-zip).', - 'ok' => 'Tem a extensão ZIP.', - ), - ), - 'extensions' => array( - 'author' => 'Autor', - 'community' => 'Extensões da comunidade disponíveis', - 'description' => 'Descrição', - 'disabled' => 'Desactivado', - 'empty_list' => 'Não existem extensões instaladas', - 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO - 'enabled' => 'Habilitada', - 'latest' => 'Instalado', - 'name' => 'Nome', - 'no_configure_view' => 'Esta extensão não pode ser configurada.', - 'system' => array( - '_' => 'Extensões do sistema', - 'no_rights' => 'Extensões do sistema (Não tem permissões para isto)', - ), - 'title' => 'Extensões', - 'update' => 'Atualização disponível', - 'user' => 'Extensões do utilizador', - 'version' => 'Versão', - ), - 'stats' => array( - '_' => 'Estatísticas', - 'all_feeds' => 'Todos os feeds', - 'category' => 'Categoria', - 'entry_count' => 'Contagem de entrada', - 'entry_per_category' => 'Entradas por categoria', - 'entry_per_day' => 'Entradas por dia (últimos 30 dias)', - 'entry_per_day_of_week' => 'Por dia da semana(média: %.2f mensagens)', - 'entry_per_hour' => 'Por hora (média: %.2f mensagens)', - 'entry_per_month' => 'Por mês(média: %.2f mensagens)', - 'entry_repartition' => 'Repartição de entradas', - 'feed' => 'Feed', // IGNORE - 'feed_per_category' => 'Feeds por categoria', - 'idle' => 'Feeds inativos', - 'main' => 'Estatísticas principais', - 'main_stream' => 'Stream principal', - 'no_idle' => 'Não há nenhum feed inativo!', - 'number_entries' => '%d artigos', - 'overview' => 'Overview', // TODO - 'percent_of_total' => '% do total', - 'repartition' => 'Repartição de artigos: %s', - 'status_favorites' => 'Favoritos', - 'status_read' => 'Lido', - 'status_total' => 'Total', // IGNORE - 'status_unread' => 'Não lidos', - 'title' => 'Estatísticas', - 'top_feed' => 'Top10 Feeds', - ), - 'system' => array( - '_' => 'Configuração do sistema', - 'auto-update-url' => 'URL do servidor para atualização automática', - 'base-url' => array( - '_' => 'URL Base', - 'recommendation' => 'Recomendação automática: %s', - ), - 'cookie-duration' => array( - 'help' => 'em segundos', - 'number' => 'Manter seção ativa durante', - ), - 'force_email_validation' => 'Força verificação do endereço de email', - 'instance-name' => 'Nome da instância', - 'max-categories' => 'Limite de categorias por utilizador', - 'max-feeds' => 'Limite de Feeds por utilizador', - 'registration' => array( - 'number' => 'Máximo número de contas', - 'select' => array( - 'label' => 'Formulário de Registro', - 'option' => array( - 'noform' => 'Desativado: Sem formulário de registro', - 'nolimit' => 'Ativado: Sem limites de contas', - 'setaccountsnumber' => 'Definir o máximo número de contas', - ), - ), - 'status' => array( - 'disabled' => 'Formulário desabilitado', - 'enabled' => 'Formulário activado', - ), - 'title' => 'Formulário de registo de utilizador', - ), - 'sensitive-parameter' => 'Parâmetro sensível. Edite manualmente em ./data/config.php', - 'tos' => array( - 'disabled' => 'não fornecido', - 'enabled' => 'está ativado', - 'help' => 'Como habilitar os Termos de Serviço', - ), - 'websub' => array( - 'help' => 'Sobre WebSub', - ), - ), - 'update' => array( - '_' => 'Atualização do sistema', - 'apply' => 'Aplicar', - 'changelog' => 'Registo de alterações', - 'check' => 'Pesquisar por novas atualizações', - 'copiedFromURL' => 'update.php copiado de %s para ./data', - 'current_version' => 'Versão', - 'last' => 'Última verificação', - 'loading' => 'A fazer atualização…', - 'none' => 'Nenhuma atualização disponivel', - 'releaseChannel' => array( - '_' => 'Canal de Release', - 'edge' => 'Release contínua (“edge”)', - 'latest' => 'Release estável (“latest”)', - ), - 'title' => 'Sistema de atualização', - 'viaGit' => 'Atualização via git e GitHub.com iniciada', - ), - 'user' => array( - 'admin' => 'Administrador', - 'article_count' => 'Artigos', - 'back_to_manage' => '← Voltar para à lista de utilizadores', - 'create' => 'Criar novo utilizador', - 'database_size' => 'Tamanho do banco de dados', - 'email' => 'Endereço de email', - 'enabled' => 'Activado', - 'feed_count' => 'Feeds', // IGNORE - 'is_admin' => 'É administrador', - 'language' => 'Idioma', - 'last_user_activity' => 'Última Atividade do utilizador', - 'list' => 'Lista de utilizadors', - 'number' => 'Há %d conta criada', - 'numbers' => 'Há %d contas criadas', - 'password_form' => 'Senha
(para o login pelo método do formulário)', - 'password_format' => 'Ao menos 7 caracteres', - 'title' => 'Gerir utilizadores', - 'username' => 'utilizador', - ), -); diff --git a/app/i18n/pt-pt/api.php b/app/i18n/pt-pt/api.php deleted file mode 100644 index 0021dfa98..000000000 --- a/app/i18n/pt-pt/api.php +++ /dev/null @@ -1,33 +0,0 @@ - array( - 'address' => 'Your API address:', // TODO - '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 - ), - 'test' => array( - 'fever' => 'Fever API configuration test:', // TODO - 'greader' => 'Google Reader API configuration test:', // TODO - ), - 'title' => array( - '_' => 'FreshRSS API endpoints', // TODO - 'extension' => 'API for extensions', // TODO - 'fever' => 'Fever compatible API', // TODO - 'greader' => 'Google Reader compatible API', // TODO - ), - ), -); diff --git a/app/i18n/pt-pt/conf.php b/app/i18n/pt-pt/conf.php deleted file mode 100644 index 5977c0b97..000000000 --- a/app/i18n/pt-pt/conf.php +++ /dev/null @@ -1,372 +0,0 @@ - array( - '_' => 'Arquivar', - 'exception' => 'Regras de exceção da limpeza', - 'help' => 'Mais opções estão disponíveis nas configurações individuais do Feed', - 'keep_favourites' => 'Nunca apagar os favoritos', - 'keep_labels' => 'Nunca apagar tags', - 'keep_max' => 'Número máximo de artigos para manter no feed', - 'keep_min_by_feed' => 'Número mínimo de artigos para manter no feed', - 'keep_period' => 'Idade máxima dos artigos a serem mantidos', - 'keep_unreads' => 'Nunca apagar os não lidos', - 'maintenance' => 'Manutenção', - 'optimize' => 'Otimizar banco de dados', - 'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho do banco de dados', - 'policy' => 'Política de limpeza', - 'policy_warning' => 'Se nenhuma política de limpeza for selecionada, todos os artigos serão mantidos.', - 'purge_now' => 'Limpar agora', - 'title' => 'Arquivar', - 'ttl' => 'Não atualize automaticamente mais frequente que', - ), - 'display' => array( - '_' => 'Exibição', - 'darkMode' => array( - '_' => 'Modo noturno automático', - 'auto' => 'Automático', - 'help' => 'For compatible themes only', // TODO - 'no' => 'Não', - ), - 'icon' => array( - 'bottom_line' => 'Linha inferior', - 'display_authors' => 'Autores', - 'entry' => 'Ícones de artigos', - 'publication_date' => 'Data da publicação', - 'related_tags' => 'Tags relacionadas', - 'sharing' => 'Compartilhar', - 'summary' => 'Sumário', - 'top_line' => 'Linha superior', - ), - 'language' => 'Idioma', - 'notif_html5' => array( - 'seconds' => 'segundos (0 significa sem timeout)', - 'timeout' => 'Notificação em HTML5 de timeout', - ), - 'show_nav_buttons' => 'Mostrar botões de navegação', - 'theme' => array( - '_' => 'Tema', - 'deprecated' => array( - '_' => 'Depreciado', - 'description' => 'Este tema não é suportado e não estará novamente disponível em uma versão futura do FreshRSS', - ), - ), - 'theme_not_available' => 'O tema “%s” não está disponível. Por favor escolha outro tema.', - 'thumbnail' => array( - 'label' => 'Miniatura', - 'landscape' => 'Modo paisagem', - 'none' => 'Nenhum', - 'portrait' => 'Modo retrato', - 'square' => 'Modo quadrado', - ), - 'timezone' => 'Fuso horário', - 'title' => 'Exibição', - 'website' => array( - 'full' => 'Ícone e nome', - 'icon' => 'Apenas ícone', - 'label' => 'Site', - 'name' => 'Apenas nome', - 'none' => 'Nenhum', - ), - 'width' => array( - 'content' => 'Largura do conteúdo', - 'large' => 'Largo', - 'medium' => 'Médio', - 'no_limit' => 'Sem limite', - 'thin' => 'Fino', - ), - ), - 'logs' => array( - 'loglist' => array( - 'level' => 'Nivel de Registro', - 'message' => 'Mensagem de Registro', - 'timestamp' => 'Data e Hora', - ), - 'pagination' => array( - 'first' => 'Primeiro', - 'last' => 'Último', - 'next' => 'Próximo', - 'previous' => 'Anterior', - ), - ), - 'mark_read_button' => array( - '_' => '“Mark all as read” button', // TODO - 'big' => 'Big', // TODO - 'none' => 'None', // TODO - 'small' => 'Small', // TODO - ), - 'notification_timeout' => array( - 'bad' => array( - 'label' => 'Show warning banner', // TODO - 'seconds' => 'seconds (at least 1)', // TODO - ), - 'good' => array( - 'label' => 'Show acknowledgement banner', // TODO - 'seconds' => 'seconds (0 means not shown)', // TODO - ), - ), - 'privacy' => array( - '_' => 'Privacy', // TODO - 'retrieve_extension_list' => 'Retrieve extension list', // TODO - ), - 'profile' => array( - '_' => 'Gestão de perfil', - 'api' => array( - '_' => 'Administração da API', - 'api_not_set' => 'API password not set', // TODO - 'api_set' => 'API password set', // TODO - 'check_link' => 'Check API status via: %s', // TODO - 'disabled' => 'The API access is disabled.', // TODO - 'documentation_link' => 'See the documentation and list of known apps', // TODO - 'help' => 'See documentation', // TODO - ), - 'change_password' => 'Change password', // TODO - 'confirm_new_password' => 'Confirm new password', // TODO - 'current_password' => 'Current password
(for the Web-form login method)', // TODO - 'delete' => array( - '_' => 'Remover conta', - 'warn' => 'A conta e todos os dados relacionados serão removidos.', - ), - 'email' => 'Endereço de e-mail', - 'new_password' => 'New password', // TODO - 'password_api' => 'Senha da API
(p.s., para aplicativos móveis)', - 'password_format' => 'Ao menos 7 caracteres', - 'title' => 'Perfil', - ), - 'query' => array( - '_' => 'Consultas do utilizador', - 'deprecated' => 'Esta não é válida. A categoria ou feed relacionado foi apagado.', - 'description' => 'Description', // TODO - 'filter' => array( - '_' => 'Filtro aplicado:', - 'categories' => 'Mostrar por categoria', - 'feeds' => 'Mostrar por feed', - 'order' => 'Ordenar por data', - 'search' => 'Expressão', - 'shareOpml' => 'Activa a partilha por OPML de categorias e feeds correspondentes', - 'shareRss' => 'Activa o partilha por HTML & RSS', - 'state' => 'Estado', - 'tags' => 'Mostrar por tag', - 'type' => 'Tipo', - ), - 'get_A' => 'Show all feeds, also those shown in their category', // TODO - 'get_Z' => 'Show all feeds, also archived ones', // TODO - 'get_all' => 'Mostrar todos os artigos', - 'get_all_labels' => 'Mostrar artigos com qualquer rótulo', - 'get_category' => 'Visualizar “%s” categoria', - 'get_favorite' => 'Visualizar artigos favoritos', - 'get_feed' => 'Visualizar “%s” feed', - 'get_important' => 'Mostrar artigos de feeds importantes', - 'get_label' => 'Mostrar artigos com rótulo “%s”', - 'help' => 'Ver a documentação para consultas de utilozadoes e partilhas por HTML / RSS / OPML.', - 'image_url' => 'Image URL', // TODO - 'name' => 'Nome', - 'no_filter' => 'Sem filtro', - 'no_queries' => array( - '_' => 'No user queries are saved yet.', // TODO - 'help' => 'See documentation', // TODO - ), - 'number' => 'Consulta n°%d', - 'order_asc' => 'Mostrar artigos mais antigos primeiro', - 'order_desc' => 'Mostrar artigos mais novos primeiro', - 'search' => 'Pesquisa por “%s”', - 'share' => array( - '_' => 'Compartilhar esta consulta por link', - 'disabled' => array( - '_' => 'disabled', // TODO - 'title' => 'Sharing', // TODO - ), - 'greader' => 'Shareable link to the GReader JSON', // TODO - 'help' => 'Forneça este link se quiser partilhar esta consulta com alguém', - 'html' => 'Link compartilhável para a página HTML', - 'opml' => 'Link compartilhável para a lista de feeds OPML', - 'rss' => 'Link compartilhável para o feed RSS', - ), - 'state_0' => 'Mostrar todos os artigos', - 'state_1' => 'Mostrar artigos lidos', - 'state_2' => 'Mostrar artigos não lidos', - 'state_3' => 'Mostrar todos os artigos', - 'state_4' => 'Mostrar artigos favoritos', - 'state_5' => 'Mostrar artigos favoritos lidos', - 'state_6' => 'Mostrar artigos favoritos não lidos', - 'state_7' => 'Mostrar artigos favoritos', - 'state_8' => 'Mostrar artigos que não são favoritos', - 'state_9' => 'Mostrar artigos que não são favoritos lidos', - 'state_10' => 'Mostrar artigos que não são favoritos não lidos', - 'state_11' => 'Mostrar artigos que não são favoritos', - 'state_12' => 'Mostrar todos os artigos', - 'state_13' => 'Mostrar artigos lidos', - 'state_14' => 'Mostrar artigos não lidos', - 'state_15' => 'Mostrar todos os artigos', - 'title' => 'Consultas de Utilizadores', - ), - 'reading' => array( - '_' => 'Leitura', - 'after_onread' => 'Depois de “marcar todos como lido”,', - 'always_show_favorites' => 'Mostrar todos os artigos nos favoritos por padrão', - 'apply_to_individual_feed' => 'Applies to feeds individually', // TODO - 'article' => array( - 'authors_date' => array( - '_' => 'Autores e Data', - 'both' => 'No cabeçalho e rodapé', - 'footer' => 'No rodapé', - 'header' => 'No cabeçalho', - 'none' => 'Nenhum', - ), - 'feed_name' => array( - 'above_title' => 'Acima do título/etiqueta', - 'none' => 'Nenhum', - 'with_authors' => 'Com autores e data', - ), - 'feed_title' => 'Título do Feed', - 'icons' => array( - '_' => 'Article icons position
(Reading view only)', // TODO - 'above_title' => 'Above title', // TODO - 'with_authors' => 'In authors and date row', // TODO - ), - 'tags' => array( - '_' => 'Tag', - 'both' => 'No cabeçalho e rodapé', - 'footer' => 'No rodapé', - 'header' => 'No cabeçalho', - 'none' => 'Nenhum', - ), - 'tags_max' => array( - '_' => 'Número máximo de tags exibidas', - 'help' => '0 significa: mostrar todas as tags e não enconde-las', - ), - ), - 'articles_per_page' => 'Número de artigos por página', - 'auto_load_more' => 'Carregar mais artigos no final da página', - 'auto_remove_article' => 'Esconder artigos depois de lidos', - 'confirm_enabled' => 'Mostrar uma caixa de diálogo de confirmação quando acionar “marcar todos como lido”', - 'display_articles_unfolded' => 'Mostrar artigos abertos por padrão', - 'display_categories_unfolded' => 'Categorias abertas', - 'headline' => array( - 'articles' => 'Artigos: Abrir/Fechar', - 'articles_header_footer' => 'Artigos: cabeçalho/rodapé', - 'categories' => 'Navegação à esquerda: Categoria', - 'mark_as_read' => 'Marcar artigo como lido', - 'misc' => 'Diversos', - 'view' => 'Visualização', - ), - 'hide_read_feeds' => 'Esconder categorias e feeds com nenhum artigo não lido (não funciona com a configuração “Mostrar todos os artigos”)', - 'img_with_lazyload' => 'Utilizar o modo lazy load para carregar as imagens', - 'jump_next' => 'Ir para o próximo não lido', - 'mark_updated_article_unread' => 'Marcar artigos atualizados como não lidos', - 'number_divided_when_reader' => 'Dividido por 2 no modo de leitura .', - 'read' => array( - 'article_open_on_website' => 'quando o artigo é aberto no site original', - 'article_viewed' => 'Quando o artigo é visualizado', - 'focus' => 'quando focado (exceto por feeds importantes)', - 'keep_max_n_unread' => 'Número máximo de artigos para manter como não lido', - 'scroll' => 'enquanto faz a passagem (exceto por feeds importantes)', - 'upon_gone' => 'Quando não estiver mais no feed de notícias principais', - 'upon_reception' => 'ao receber um artigo', - 'when' => 'Marcar artigo como lido…', - 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // TODO - 'when_same_title_in_feed' => 'Se um título idêntico já existir nos últimos n artigos mais novos (no feed)', - ), - 'show' => array( - '_' => 'Artigos para Mostrar', - 'active_category' => 'Categoria ativa', - 'adaptive' => 'Show unreads if any, all articles otherwise', // TODO - 'all_articles' => 'Mostrar todos os artigos', - 'all_categories' => 'Mostrar todas as categorias', - 'no_category' => 'Nenhuma categoria', - 'remember_categories' => 'lembrar de abrir as categorias', - 'unread' => 'Mostrar apenas não lido', - 'unread_or_favorite' => 'Show unreads and favourites', // TODO - ), - 'show_fav_unread_help' => 'Aplicar também nas tags', - 'sides_close_article' => 'Clicando fora da área do texto do artigo fecha o mesmo', - 'sort' => array( - '_' => 'Ordem de visualização', - 'newer_first' => 'Novos primeiro', - 'older_first' => 'Antigos primeiro', - ), - 'star' => array( - 'when' => 'Mark an article as favourite…', // TODO - ), - 'sticky_post' => 'Coloque o artigo no topo quando aberto', - 'title' => 'Lendo', - 'view' => array( - 'default' => 'Visualização padrão', - 'global' => 'Visualização global', - 'normal' => 'Visualização normal', - 'reader' => 'Visualização de leitura', - ), - ), - 'sharing' => array( - '_' => 'Partilha', - 'add' => 'Adicionar um método de partilha', - 'bluesky' => 'Bluesky', // IGNORE - 'deprecated' => 'Este serviço está obceloeto e será removido do FreshRSS em versões futuras.', - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => 'E-mail', - 'facebook' => 'Facebook', // IGNORE - 'more_information' => 'Mais informação', - 'print' => 'Imprimir', - 'raindrop' => 'Raindrop.io', // IGNORE - 'remove' => 'Remover método de partilha', - 'shaarli' => 'Shaarli', // IGNORE - 'share_name' => 'Nome de visualização para partilhar', - 'share_url' => 'URL utilizada para partilha', - 'title' => 'Partilhar', - 'twitter' => 'Twitter', // IGNORE - 'wallabag' => 'wallabag', // IGNORE - ), - 'shortcut' => array( - '_' => 'Atalhos', - 'article_action' => 'Ações no artigo', - 'auto_share' => 'Partilhar', - 'auto_share_help' => 'Se há apenas um modo de partilha, ele é usado. Caso contrário, serão acessíveis pelo seu número.', - 'close_menus' => 'Fechar menus', - 'collapse_article' => 'Fechar', - 'first_article' => 'Ir para o primeiro artigo', - 'focus_search' => 'Aceder a caixa de pesquisa', - 'global_view' => 'Mudar para visualização global', - 'help' => 'Mostrar documentação', - 'javascript' => 'JavaScript deve ser activado para utilizar atalhos', - 'last_article' => 'Ir para o último artigo', - 'load_more' => 'Carregar mais artigos', - 'mark_favorite' => 'Marcar como favorito', - 'mark_read' => 'Marcar como lido', - 'navigation' => 'Navegação', - 'navigation_help' => 'Com o modificador ⇧ Shift, atalhos de navegação aplicam aos feeds.
Com o Alt ⎇ modificador, atalhos de navegação aplicam as categorias.', - 'navigation_no_mod_help' => 'Os seguintes atalhos de navegação não suportam modificadores.', - 'next_article' => 'Pule para o próximo artigo', - 'next_unread_article' => 'Abrir o próximo artigo não lido', - 'non_standard' => 'Algumas teclas (%s) podem não funcionar como atalhos.', - 'normal_view' => 'Mudar para a visualização normal', - 'other_action' => 'Outras ações', - 'previous_article' => 'Saltar para o artigo anterior', - 'reading_view' => 'Mudar para o modo de leitura', - 'rss_view' => 'Abrir como feed RSS ', - 'see_on_website' => 'Visualize o site original', - 'shift_for_all_read' => '+ Alt ⎇ para marcar artigos anteriores como lido
+ ⇧ Shift para marcar todos os artigos como lido', - 'skip_next_article' => 'Focar o próximo sem abri-lo', - 'skip_previous_article' => 'Focar o anterior sem abri-lo', - 'title' => 'Atalhos', - 'toggle_media' => 'Reproduzir/pausar mídia', - 'user_filter' => 'Acesse filtros de utilizador', - 'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.', - 'views' => 'Visualizações', - ), - 'user' => array( - 'articles_and_size' => '%s artigos (%s)', - 'current' => 'Utilizador atual', - 'is_admin' => 'é administrador', - 'users' => 'Utilizadores', - ), -); diff --git a/app/i18n/pt-pt/feedback.php b/app/i18n/pt-pt/feedback.php deleted file mode 100644 index 28a27eea1..000000000 --- a/app/i18n/pt-pt/feedback.php +++ /dev/null @@ -1,152 +0,0 @@ - array( - 'denied' => ' não tem permissão para acessar esta página', - 'not_found' => ' está a pesquisar por uma página que não existe', - ), - 'admin' => array( - 'optimization_complete' => 'Otimização Completa', - ), - 'api' => array( - 'password' => array( - 'failed' => 'A senha não pode ser modificada', - 'updated' => 'A senha foi alterada com sucesso', - ), - ), - 'auth' => array( - 'login' => array( - 'invalid' => 'Login está incorreto', - 'success' => ' está ligado', - ), - 'logout' => array( - 'success' => ' está desligado', - ), - ), - 'conf' => array( - 'error' => 'Um erro ocorreu durante o salvamento das configurações', - 'query_created' => 'A Query “%s” foi criada.', - 'shortcuts_updated' => 'Atalhos foram criados', - 'updated' => 'Configuração foi atualizada', - ), - 'extensions' => array( - 'already_enabled' => '%s já está activado', - 'cannot_remove' => '%s não pode ser removido', - 'disable' => array( - 'ko' => '%s não pode ser desactivado. verifique os logs do FreshRSS para detalhes.', - 'ok' => '%s agora está desactivado', - ), - 'enable' => array( - 'ko' => '%s não pode ser activado. verifique os logs do FreshRSS para detalhes.', - 'ok' => '%s agora está activado', - ), - 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // TODO - 'no_access' => ' não tem acesso ao %s', - 'not_enabled' => '%s não está habilitado', - 'not_found' => '%s não existe', - 'removed' => '%s removido', - ), - 'import_export' => array( - 'export_no_zip_extension' => 'extensão ZIP não está presente em seu servidor. Por favor tente exportar os arquivos um por vez.', - 'feeds_imported' => 'Seus feeds foram importados e serão atualizados pode clicar no butãoatualizar feeds.', - 'feeds_imported_with_errors' => 'Seus feeds foram importados, mas alguns erros ocorreram Carregue no butão atualizar feeds.', - 'file_cannot_be_uploaded' => 'Arquivo não pôde ser enviado', - 'no_zip_extension' => 'extensão ZIP não está presente em seu servidor.', - 'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.', - ), - 'profile' => array( - 'error' => 'Seu perfil não pode ser editado', - 'passwords_dont_match' => 'Passwords don’t match', // TODO - 'updated' => 'Seu perfil foi editado com sucesso', - ), - 'sub' => array( - 'actualize' => 'A atualizar…', - 'articles' => array( - 'marked_read' => 'Os artigos selecionados foram marcados como lidos.', - 'marked_unread' => 'Os artigos foram marcados como não lidos', - ), - 'category' => array( - 'created' => 'Categoria %s foi criada.', - 'deleted' => 'Categoria foi apagada.', - 'emptied' => 'Categoria foi limpa', - 'error' => 'Categoria não pode ser atualizada', - 'name_exists' => 'Este nome de categoria já existe.', - 'no_id' => ' precisa especificar um id para a categoria.', - 'no_name' => 'Nome da categoria não pode ser vazio.', - 'not_delete_default' => ' não pode apagar uma categoria vazia!', - 'not_exist' => 'A categoria não existe!', - 'over_max' => ' atingiu seu limite de categorias (%d)', - 'updated' => 'Categoria foi atualizada.', - ), - 'feed' => array( - 'actualized' => '%s foi atualizado', - 'actualizeds' => 'Os feeds RSS foram atualizados', - 'added' => 'O feed RSS %s foi adicionado', - 'already_subscribed' => ' já está inscrito no %s', - 'cache_cleared' => 'O cache do feed %s foi limpo', - 'deleted' => 'o feed foi apagado', - 'error' => 'O feed não pode ser atualizado', - 'favicon' => array( - 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // TODO - 'unsupported_format' => 'Unsupported image file format!', // TODO - ), - 'internal_problem' => 'O feed RSS não pôde ser adicionado. Verifique os logs do FreshRSS para detalhes. Pode forçar a atualização no link #force_feed .', - 'invalid_url' => 'URL %s é inválida', - 'n_actualized' => '%d feeds foram atualizados', - 'n_entries_deleted' => '%d artigos foram apagados', - 'no_refresh' => 'Não há feed para atualizar…', - 'not_added' => '%s não pode ser atualizado', - 'not_found' => 'Não foi possível encontrar o feed', - 'over_max' => ' atingiu seu limite de feeds (%d)', - 'reloaded' => 'O feed %s foi recarregado', - 'selector_preview' => array( - 'http_error' => 'Falha ao carregar o conteúdo do site.', - 'no_entries' => 'Não há nenhuma entrada nesse feed. precisa de pelo menos um artigo para criar uma pré-visualização', - 'no_feed' => 'Erro interno (nenhum feed para verificar).', - 'no_result' => 'O seletor não teve correspondência. Por isso foi exibido o texto do feed original.', - 'selector_empty' => 'O seletor está vazio. precisa definir um para criar uma pré-visualização.', - ), - 'updated' => 'Os feeds foram atualizados', - ), - 'purge_completed' => 'Limpeza completa (%d artigos apagados)', - ), - 'tag' => array( - 'created' => 'A Tag “%s” foi criada.', - 'error' => 'Etiqueta não pode ser atualizada!', - 'name_exists' => 'O nome da tag já existe.', - 'renamed' => 'A Tag “%s” foi renomeada para “%s”.', - 'updated' => 'Etiqueta foi atualizada.', - ), - 'update' => array( - 'can_apply' => 'O FreshRSS será atualizado para a versão %s.', - 'error' => 'O processo de atualização encontrou um erro: %s', - 'file_is_nok' => 'Nova versão %s disponível, mas verifique as permissões no diretório %s. Servidor HTTP deve ter direitos para escrever dentro', - 'finished' => 'Atualização completa!', - 'none' => 'Nenhuma atualização para aplicar', - 'server_not_found' => 'Servidor de atualização não pôde ser localizado. [%s]', - ), - 'user' => array( - 'created' => array( - '_' => 'Utilizador %s foi criado', - 'error' => 'Utilizador %s não pode ser criado', - ), - 'deleted' => array( - '_' => 'Utilizador %s foi deletado', - 'error' => 'Utilizador %s não pode ser deletado', - ), - 'updated' => array( - '_' => 'O Utilizador %s foi atualizado com sucesso', - 'error' => 'O Utilizador %s não foi atualizado', - ), - ), -); diff --git a/app/i18n/pt-pt/gen.php b/app/i18n/pt-pt/gen.php deleted file mode 100644 index 705789dc5..000000000 --- a/app/i18n/pt-pt/gen.php +++ /dev/null @@ -1,277 +0,0 @@ - array( - 'actualize' => 'Atualizar feeds', - 'add' => 'Adicionar', - 'back_to_rss_feeds' => '← Volte para o seu feeds RSS', - 'cancel' => 'Cancelar', - 'close' => 'Close', // TODO - 'create' => 'Criar', - 'delete_all_feeds' => 'Delete all feeds', // TODO - 'delete_errored_feeds' => 'Delete feeds with errors', // TODO - 'delete_muted_feeds' => 'Excluir feeds silenciados', - 'demote' => 'Despromover', - 'disable' => 'Desactivar', - 'download' => 'Download', // TODO - 'empty' => 'Vazio', - 'enable' => 'Activar', - 'export' => 'Exportar', - 'filter' => 'Filtrar', - 'import' => 'Importar', - 'load_default_shortcuts' => 'Carregar mais atalhos', - 'manage' => 'Gerir', - 'mark_read' => 'Marcar como lido', - 'menu' => array( - 'open' => 'Open menu', // TODO - ), - 'nav_buttons' => array( - 'next' => 'Next article', // TODO - 'prev' => 'Previous article', // TODO - 'up' => 'Go up', // TODO - ), - 'open_url' => 'Abrir URL', - 'promote' => 'Promover', - 'purge' => 'Limpar', - 'refresh_opml' => 'Atualizar OPML', - 'remove' => 'Remover', - 'rename' => 'Renomear', - 'see_website' => 'Ver o site', - 'submit' => 'Enviar', - 'truncate' => 'Apagar todos os artigos', - 'update' => 'Atualizar', - ), - 'auth' => array( - 'accept_tos' => 'Eu aceito os Termos de serviço.', - 'email' => 'Endereço de e-mail', - 'keep_logged_in' => 'Mantenha-se ligado por (%s days)', - 'login' => 'Entrar', - 'logout' => 'Sair', - 'password' => array( - '_' => 'Senha', - 'format' => 'Pelo menos 7 caracteres', - ), - 'reauth' => array( - 'header' => 'Reauthentication is required', // TODO - 'tip' => 'You won’t be asked to sign in again for %d minutes', // TODO - 'title' => 'Reauthentication', // TODO - ), - 'registration' => array( - '_' => 'Nova conta', - 'ask' => 'Criar novoa conta?', - 'title' => 'Criação de conta', - ), - 'username' => array( - '_' => 'Utilizador', - 'format' => 'Máximo 16 caracteres alphanumericos', - ), - ), - 'date' => array( - 'Apr' => '\\A\\b\\r\\i\\l', - 'Aug' => '\\A\\g\\o\\s\\t\\o', - 'Dec' => '\\D\\e\\z\\e\\m\\b\\r\\o', - 'Feb' => '\\F\\e\\v\\e\\r\\e\\i\\r\\o', - 'Jan' => '\\J\\a\\n\\e\\i\\r\\o', - 'Jul' => '\\J\\u\\l\\h\\o', - 'Jun' => '\\J\\u\\n\\h\\o', - 'Mar' => '\\M\\a\\r\\ç\\o', - 'May' => '\\M\\a\\i\\o', - 'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\o', - 'Oct' => '\\O\\u\\t\\u\\b\\r\\o', - 'Sep' => '\\S\\e\\t\\e\\m\\b\\r\\o', - 'apr' => 'abr', - 'april' => 'Abr', - 'aug' => 'ago', - 'august' => 'Ago', - 'before_yesterday' => 'Antes de ontem', - 'dec' => 'dez', - 'december' => 'Dez', - 'feb' => 'fev', - 'february' => 'Fev', - 'format_date' => 'j \\d\\e %s \\d\\e Y', - 'format_date_hour' => 'j \\d\\e %s \\d\\e Y\\, H\\:i', - 'fri' => 'Sex', - 'jan' => 'jan', - 'january' => 'Jan', - 'jul' => 'jul', - 'july' => 'Jul', - 'jun' => 'jun', - 'june' => 'Jun', - 'last_2_year' => 'Últimos dois anos', - 'last_3_month' => 'Últimos três meses', - 'last_3_year' => 'Últimos três anos', - 'last_5_year' => 'Últimos cinco anos', - 'last_6_month' => 'Últimos seis meses', - 'last_month' => 'Últimos mês', - 'last_week' => 'Última semana', - 'last_year' => 'Último ano', - 'mar' => 'mar', - 'march' => 'Mar', - 'may' => 'Mai', - 'may_' => 'Mai', - 'mon' => 'Seg', - 'month' => 'meses', - 'nov' => 'nov', - 'november' => 'Nov', - 'oct' => 'out', - 'october' => 'Out', - 'sat' => 'Sab', - 'sep' => 'set', - 'september' => 'Set', - 'sun' => 'Dom', - 'thu' => 'Qui', - 'today' => 'Hoje', - 'tue' => 'Ter', - 'wed' => 'Qua', - 'yesterday' => 'Ontem', - ), - 'dir' => 'ltr', // IGNORE - 'freshrss' => array( - '_' => 'FreshRSS', // IGNORE - 'about' => 'Sobre FreshRSS', - ), - 'js' => array( - 'category_empty' => 'Categoria vazia', - 'confirm_action' => 'Tem certeza que deseja efetuar esta ação? Ela não poderá ser revertida!', - 'confirm_action_feed_cat' => 'Tem certeza que deseja efetuar esta ação ? vai perder favoritos e pesquisas personalizadas. Não poderá ser revertida!', - 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // TODO - 'feedback' => array( - 'body_new_articles' => 'Há %%d novos artigos para ler no FreshRSS.', - 'body_unread_articles' => '(não lido: %%d)', - 'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de ligação a internet.', - 'title_new_articles' => 'FreshRSS: novos artigos!', - ), - 'labels_empty' => 'No labels', // TODO - 'new_article' => 'Há novos artigos disponíveis, clique para atualizar a página.', - 'should_be_activated' => 'O JavaScript precisa estar ativo', - 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // TODO - ), - 'lang' => array( - 'cs' => 'Čeština', // IGNORE - 'de' => 'Deutsch', // IGNORE - 'el' => 'Ελληνικά', // IGNORE - 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE - 'es' => 'Español', // IGNORE - 'fa' => 'فارسی', // IGNORE - 'fi' => 'Suomi', // IGNORE - 'fr' => 'Français', // IGNORE - 'he' => 'עברית', // IGNORE - 'hu' => 'Magyar', // IGNORE - 'id' => 'Bahasa Indonesia', // IGNORE - 'it' => 'Italiano', // IGNORE - 'ja' => '日本語', // IGNORE - 'ko' => '한국어', // IGNORE - 'lv' => 'Latviešu', // IGNORE - 'nl' => 'Nederlands', // IGNORE - 'oc' => 'Occitan', // IGNORE - 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE - 'ru' => 'Русский', // IGNORE - 'sk' => 'Slovenčina', // IGNORE - 'tr' => 'Türkçe', // IGNORE - 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE - ), - 'menu' => array( - 'about' => 'Sobre', - 'account' => 'Conta', - 'admin' => 'Administração', - 'archiving' => 'Arquivar', - 'authentication' => 'Autenticação', - 'check_install' => 'Verificação de instalação', - 'configuration' => 'Configuração', - 'display' => 'Visualização', - 'extensions' => 'Extensões', - 'logs' => 'Logs', // IGNORE - 'privacy' => 'Privacy', // TODO - 'queries' => 'Queries de utilizador', - 'reading' => 'Leitura', - 'search' => 'Procurar por palavras ou #tags', - 'search_help' => 'See documentation for advanced search parameters', // TODO - 'sharing' => 'Partilhar', - 'shortcuts' => 'Atalhos', - 'stats' => 'Estatísticas', - 'system' => 'Configuração do sistema', - 'update' => 'Atualização', - 'user_management' => 'Gestão de utilizadores', - 'user_profile' => 'Perfil', - ), - 'period' => array( - 'days' => 'dias', - 'hours' => 'horas', - 'months' => 'meses', - '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 - 'archiveORG' => 'archive.org', // IGNORE - 'archivePH' => 'archive.ph', // IGNORE - 'bluesky' => 'Bluesky', // IGNORE - 'buffer' => 'Buffer', // IGNORE - 'clipboard' => 'Área de transferência', - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => 'E-mail', - 'email-webmail-firefox-fix' => 'Email (webmail - correção para o Firefox)', - 'facebook' => 'Facebook', // IGNORE - 'gnusocial' => 'GNU social', // IGNORE - 'jdh' => 'Journal du hacker', // IGNORE - 'lemmy' => 'Lemmy', // IGNORE - 'linkding' => 'Linkding', // IGNORE - 'linkedin' => 'LinkedIn', // IGNORE - 'mastodon' => 'Mastodon', // IGNORE - 'movim' => 'Movim', // IGNORE - 'omnivore' => 'Omnivore', // IGNORE - 'pinboard' => 'Pinboard', // IGNORE - 'pinterest' => 'Pinterest', // IGNORE - 'pocket' => 'Pocket', // IGNORE - 'print' => 'Imprimir', - 'raindrop' => 'Raindrop.io', // IGNORE - 'reddit' => 'Reddit', // IGNORE - 'shaarli' => 'Shaarli', // IGNORE - 'telegram' => 'Telegram', // IGNORE - 'twitter' => 'Twitter', // IGNORE - 'wallabag' => 'wallabag v1', // IGNORE - 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'Sistemas-compartilhados (API)', - 'whatsapp' => 'Whatsapp', // IGNORE - 'xing' => 'Xing', // IGNORE - ), - 'short' => array( - 'attention' => 'Atenção!', - 'blank_to_disable' => 'Deixe em branco para desativar', - 'by_author' => 'Por:', - 'by_default' => 'Por padrão', - 'damn' => 'Buumm!', - 'default_category' => 'Sem categoria', - 'no' => 'Não', - 'not_applicable' => 'Não disponível', - 'ok' => 'Ok!', // IGNORE - 'or' => 'ou', - 'yes' => 'Sim', - ), - 'stream' => array( - 'load_more' => 'Carregar mais artigos', - 'mark_all_read' => 'Marcar todos como lidos', - 'nothing_to_load' => 'Não existem mais artigos', - ), -); diff --git a/app/i18n/pt-pt/index.php b/app/i18n/pt-pt/index.php deleted file mode 100644 index 14a9acacc..000000000 --- a/app/i18n/pt-pt/index.php +++ /dev/null @@ -1,110 +0,0 @@ - array( - '_' => 'Sobre', - 'agpl3' => 'AGPL 3', // IGNORE - 'bug_reports' => array( - 'environment_information' => array( - '_' => 'System information', // TODO - 'browser' => 'Browser', // TODO - 'database' => 'Database', // TODO - 'server_software' => 'Server software', // TODO - 'version_curl' => 'cURL version', // TODO - 'version_frss' => 'FreshRSS version', // TODO - 'version_php' => 'PHP version', // TODO - ), - ), - 'bugs_reports' => 'Reportar Erros', - 'documentation' => 'Documentação', - 'freshrss_description' => 'FreshRSS é um RSS feeds aggregator para um host próprio. É leve e fácil de utilizar enquanto é uma ferramenta poderosa e configurável. ', - 'github' => 'no GitHub', - 'license' => 'licença', - 'project_website' => 'Site do projeto', - 'title' => 'Sobre', - 'version' => 'Versão', - ), - 'feed' => array( - 'empty' => 'Não há nenhum artigo para mostrar.', - 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO - 'today' => 'Received today', // TODO - 'yesterday' => 'Received yesterday', // TODO - ), - 'rss_of' => 'RSS feed do %s', - 'title' => 'Stream principal', - 'title_fav' => 'Favoritos', - 'title_global' => 'Visualização Global', - ), - 'log' => array( - '_' => 'Logs', // IGNORE - 'clear' => 'Limpar logs', - 'empty' => 'Arquivo de log está vazio', - 'title' => 'Logs', // IGNORE - ), - 'menu' => array( - 'about' => 'Sobre o FreshRSS', - 'before_one_day' => 'Antes de um dia', - 'before_one_week' => 'Antes de uma semana', - 'bookmark_query' => 'Salvar pesquisa atual', - 'favorites' => 'Favoritos (%s)', - 'global_view' => 'Visualização global', - 'important' => 'Feeds importantes', - 'main_stream' => 'Stream principal', - 'mark_all_read' => 'Marcar todos como lidos', - 'mark_cat_read' => 'Marcar categoria como lida', - 'mark_feed_read' => 'Marcar feed com lido', - 'mark_selection_unread' => 'Marcar seleção como não lida', - 'mylabels' => 'Minhas etiquetas', - 'newer_first' => 'Novos primeiro', - 'non-starred' => 'Mostrar todos, exceto favoritos', - 'normal_view' => 'visualização normal', - 'older_first' => 'Antigos primeiro', - 'queries' => 'Queries do utilizador', - 'read' => 'Mostrar apenas lidos', - 'reader_view' => 'Visualização de leitura', - 'rss_view' => 'Feed RSS', - 'search_short' => 'Pesquisar', - 'sort' => array( - '_' => 'Sorting criteria', // TODO - 'c' => array( - 'name_asc' => 'Category, feed titles A→Z', // TODO - 'name_desc' => 'Category, feed titles Z→A', // TODO - ), - 'date_asc' => 'Publication date 1→9', // TODO - 'date_desc' => 'Publication date 9→1', // TODO - 'f' => array( - 'name_asc' => 'Feed title A→Z', // TODO - 'name_desc' => 'Feed title Z→A', // TODO - ), - 'id_asc' => 'Freshly received last', // TODO - 'id_desc' => 'Freshly received first', // TODO - 'link_asc' => 'Link A→Z', // TODO - 'link_desc' => 'Link Z→A', // TODO - 'rand' => 'Random order', // TODO - 'title_asc' => 'Title A→Z', // TODO - 'title_desc' => 'Title Z→A', // TODO - ), - 'starred' => 'Mostrar apenas os favoritos', - 'stats' => 'Estatísticas', - 'subscription' => 'Gestão de inscrições', - 'unread' => 'Mostrar apenas os não lidos', - ), - 'share' => 'Partilhar', - 'tag' => array( - 'related' => 'Tags relacionadas', - ), - 'tos' => array( - 'title' => 'Termos do serviço', - ), -); diff --git a/app/i18n/pt-pt/install.php b/app/i18n/pt-pt/install.php deleted file mode 100644 index 0906c011d..000000000 --- a/app/i18n/pt-pt/install.php +++ /dev/null @@ -1,128 +0,0 @@ - array( - 'finish' => 'Instalação completa', - 'fix_errors_before' => 'Por favor resolva os erros antes de ir para o próximo passo.', - 'keep_install' => 'Mantenha as configurações anteriores', - 'next_step' => 'Vá para o próximo passo', - 'reinstall' => 'Reinstale o FreshRSS', - ), - 'bdd' => array( - '_' => 'base de dados', - 'conf' => array( - '_' => 'Configuração da base de dados', - 'ko' => 'Verifique as informações do seu base de dados.', - 'ok' => 'Configurações do base de dados foram salvas.', - ), - 'host' => 'Host', // IGNORE - 'password' => 'Senha do base de dados', - 'prefix' => 'Prefixo da tabela', - 'type' => 'Tipo do base de dados', - 'username' => 'Utilizador do base de dados', - ), - 'check' => array( - '_' => 'Verificações', - 'already_installed' => 'Verificamos que o FreshRSS já está instalado!', - 'cache' => 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 cache estão corretos.', - ), - 'ctype' => array( - 'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).', - 'ok' => 'Tem a biblioteca necessária para verificação do tipo de caractere (ctype).', - ), - 'curl' => array( - 'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).', - 'ok' => 'Tem a biblioteca cURL.', - ), - 'data' => 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.', - ), - '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.', - ), - 'favicons' => 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 favicons estão corretos.', - ), - 'fileinfo' => array( - 'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).', - 'ok' => 'Tem a biblioteca fileinfo.', - ), - 'json' => array( - 'nok' => 'Não foi possível encontrar JSON (php-json).', - 'ok' => 'Tem a extensão JSON.', - ), - 'mbstring' => array( - 'nok' => 'Não foi possível encontrar a biblioteca recomendada para o Unicode (mbstring).', - 'ok' => 'Tem a biblioteca recomendada para o Unicode (mbstring).', - ), - 'pcre' => array( - 'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).', - 'ok' => 'Tem a biblioteca necessária para expressões regulares (php-pcre).', - ), - 'pdo' => array( - 'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', - 'ok' => 'Tem o PDO e ao menos um dos drivers suportados (pdo_mysql, pdo_sqlite, pdo_pgsql).', - ), - 'php' => array( - 'nok' => 'A versão do PHP é %s mas FreshRSS requer ao menos a versão %s.', - 'ok' => 'A versão do PHP é %s, que é compatível com o FreshRSS.', - ), - 'reload' => 'Verifique novamente', - 'tmp' => array( - 'nok' => 'Verifiquei as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'As permissões para o diretório temporário estão certas.', - ), - 'unknown_process_username' => 'Desconhecido', - 'users' => array( - 'nok' => 'Verifiquei as permissões no diretório %s. O servidor HTTP deve ter direitos para escrever dentro desta pasta.', - 'ok' => 'Permissões no diretório users estão corretos.', - ), - 'xml' => array( - 'nok' => 'Não foi possível encontrar a biblioteca necessária para parse o XML.', - 'ok' => 'Tem a biblioteca necessária para parse o XML.', - ), - ), - 'conf' => array( - '_' => 'Configurações gerais', - 'ok' => 'Configurações gerais foram salvas.', - ), - 'congratulations' => 'Parabéns!', - 'default_user' => array( - '_' => 'Utilizador padrão', - 'max_char' => 'máximo de 16 caracteres alfanuméricos', - ), - 'fix_errors_before' => 'Por favor solucione os erros antes de ir para o próximo passo.', - 'javascript_is_better' => 'O FreshRSS é mais agradável com o JavaScript ativo', - 'js' => array( - 'confirm_reinstall' => 'Vai perder suas configurações anteriores ao reinstalar o FreshRSS. Confirma que pretende continuar?', - ), - 'language' => array( - '_' => 'Idioma', - 'choose' => 'Escolha o idioma para o FreshRSS', - 'defined' => 'O idioma foi definido.', - ), - 'missing_applied_migrations' => 'Algo de errado ocorreu; Tem que criar um arquivo vazio %s manualmente.', - 'ok' => 'O processo de instalação foi um sucesso.', - 'session' => array( - 'nok' => 'O servidor parece ter sido configurado incorretamente para os cookies necessários para sessões PHP!', - ), - 'step' => 'passo %d', - 'steps' => 'Passos', - 'this_is_the_end' => 'Este é o final', - 'title' => 'Instalação · FreshRSS', -); diff --git a/app/i18n/pt-pt/sub.php b/app/i18n/pt-pt/sub.php deleted file mode 100644 index dcedaeee8..000000000 --- a/app/i18n/pt-pt/sub.php +++ /dev/null @@ -1,307 +0,0 @@ - array( - 'documentation' => 'Copie a seguinte URL para utilizar com uma ferramenta externa', - 'title' => 'API', // IGNORE - ), - 'bookmarklet' => array( - 'documentation' => 'Arraste este botão para sua barra de favoritos ou clique com o botão direito e escolha “Adicionar este link aos favoritos”. Depois clique no no link da barra de favoritos “Inscrever-se” em qualquer página que você queira se inscrever.', - 'label' => 'Inscrever-se', - 'title' => 'Bookmarklet', // IGNORE - ), - 'category' => array( - '_' => 'Categoria', - 'add' => 'Adicionar categoria', - 'archiving' => 'Arquivar', - 'dynamic_opml' => array( - '_' => 'OPML Dinâmico', - 'help' => 'Forneça uma URL para o arquivo OPML para preencher dinamicamente esta categoria com feeds', - ), - 'empty' => 'Categoria vazia', - 'expand' => 'Expand category', // TODO - 'information' => 'Informações', - 'open' => 'Open category', // TODO - 'opml_url' => 'URL de OPML', - 'position' => 'Posição de visualização', - 'position_help' => 'Para controlar a ordem de visualização', - 'title' => 'Título', - ), - 'feed' => array( - 'accept_cookies' => 'Aceitar cookies', - 'accept_cookies_help' => 'Permitir que o servidor de Feed defina os cookies (sarmazenados na memória apenas durante a solicitação)', - 'add' => 'Adicionar um feed', - 'advanced' => 'Avançado', - 'archiving' => 'Arquivar', - 'auth' => array( - 'configuration' => 'Entrar', - 'help' => 'Permite acesso a feeds RSS protegidos por HTTP', - 'http' => 'Autenticação HTTP', - 'password' => 'Senha HTTP', - 'username' => 'Utilizador HTTP', - ), - 'change_favicon' => 'Change…', // TODO - 'clear_cache' => 'Sempre limpar o cache', - 'content_action' => array( - '_' => 'Ações ao buscar pelo conteúdo de artigos', - 'append' => 'Adicionar depois conteúdo existente', - 'prepend' => 'Adicionar antes do conteúdo existente', - 'replace' => 'Substituir o conteúdo existente', - ), - 'content_retrieval' => 'Content retrieval', // TODO - 'css_cookie' => 'Usar cookies ao pesquisa pelo conteúdo de artigos', - 'css_cookie_help' => 'Exemplo: foo=bar; gdpr_consent=true; cookie=value', - 'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)', - 'css_path' => 'Caminho do CSS do artigo no site original', - 'css_path_filter' => array( - '_' => 'Seletor CSS dos elementos a serem removidos', - 'help' => 'O seletor CSS pode ser uma lista com: footer, aside, p[data-sanitized-class~="menu"]', - ), - 'description' => 'Descrição', - 'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.', - 'error' => 'Este feed encontra-se com problema. Por favor verifique que ainda está disponível.', - 'export-as-opml' => array( - 'download' => 'Download', // IGNORE - 'help' => 'Arquivo XML (. Ver documentação)', - 'label' => 'Exportar como OPML', - ), - 'ext_favicon' => 'Set automatically', // TODO - 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // TODO - 'filteractions' => array( - '_' => 'Ações do filtro', - 'help' => 'Escreva um filtro de pesquisa por linha. Ver documentação.', - ), - 'http_headers' => 'HTTP Headers', // TODO - 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // TODO - 'icon' => 'Icon', // TODO - 'information' => 'Informações', - 'keep_min' => 'Número mínimo de artigos para manter', - 'kind' => array( - '_' => 'Tipo de fonte de alimentação do Feed', - 'html_json' => array( - '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // TODO - 'xpath' => array( - '_' => 'XPath for JSON in HTML', // TODO - 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // TODO - ), - ), - 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // IGNORE - 'feed_title' => array( - '_' => 'Título do Feed', - 'help' => 'Exemplo: //title ou uma string estática: "Meu feed personalizado"', - ), - 'help' => 'XPath 1.0é uma linguagem de consulta padrão para usuários avançados e que o FreshRSS suporta para habilitar o Web scraping.', - 'item' => array( - '_' => 'encontrar notícias items
(mais importantes)', - 'help' => 'Exemplo: //div[@class="news-item"]', - ), - 'item_author' => array( - '_' => 'Autor do item', - 'help' => 'Também pode ser uma string estática. Exemplo: "Anônimo"', - ), - 'item_categories' => 'Etiquetas do item', - 'item_content' => array( - '_' => 'Conteúdo do item', - 'help' => 'Exemplo para pegar o item completo: .', - ), - 'item_thumbnail' => array( - '_' => 'Miniatura do item', - 'help' => 'Exemplo: descendant::img/@src', - ), - 'item_timeFormat' => array( - '_' => 'Custom date/time format', // TODO - 'help' => 'Optional. A format supported by DateTime::createFromFormat() such as d-m-Y H:i:s', // TODO - ), - 'item_timestamp' => array( - '_' => 'Data do Item', - 'help' => 'O resultado será parecido com: strtotime()', - ), - 'item_title' => array( - '_' => 'Titulo do Item', - 'help' => 'Utilize especialmente XPath axis descendant:: like descendant::h2', - ), - 'item_uid' => array( - '_' => 'ID único do item', - 'help' => 'Opcional. Exemplo: descendant::div/@data-uri', - ), - 'item_uri' => array( - '_' => 'Link do item (URL)', - 'help' => 'Exemplo: descendant::a/@href', - ), - 'relative' => 'XPath (relativo do item) para:', - 'xpath' => 'XPath para:', - ), - 'json_dotnotation' => array( - '_' => 'JSON (notação de ponto)', - 'feed_title' => array( - '_' => 'título do feed', - 'help' => 'Exemplo: meta.title ou uma string estática: "Meu feed personalizado"', - ), - 'help' => 'Um JSON na notação de ponto usa pontos entre os objetos e colchetes para arrays (e.g. data.items[0].title)', - 'item' => array( - '_' => 'encontrando novidades itens
(mais importante)', - 'help' => 'Caminho do JSON para o array contendo os itens, e.g. $ or newsItems', - ), - 'item_author' => 'autor do item', - 'item_categories' => 'tags dos itens', - 'item_content' => array( - '_' => 'conteúdo do item', - 'help' => 'Chave sob na qual o conteúdo é encontrado, e.g. content', - ), - 'item_thumbnail' => array( - '_' => 'miniatura do item', - 'help' => 'Exemplo: image', - ), - 'item_timeFormat' => array( - '_' => 'Formato de data/hora personalizado', - 'help' => 'Opcional. Um formato suportado por DateTime::createFromFormat() assim como d-m-Y H:i:s', - ), - 'item_timestamp' => array( - '_' => 'data do item', - 'help' => 'The result will be parsed by strtotime()', // TODO - ), - 'item_title' => 'título do item', - 'item_uid' => 'ID único do item', - 'item_uri' => array( - '_' => 'Link do item (URL)', - 'help' => 'Exemplo: permalink', - ), - 'json' => 'notação de ponto para:', - 'relative' => 'notação de ponto (relativa ao item) para:', - ), - 'jsonfeed' => 'JSON Feed', // IGNORE - 'rss' => 'RSS / Atom (padrão)', - 'xml_xpath' => 'XML + XPath', // IGNORE - ), - 'maintenance' => array( - 'clear_cache' => 'Limpar o cache', - 'clear_cache_help' => 'Limpar o cache em disco deste feed', - 'reload_articles' => 'Recarregar artigos', - 'reload_articles_help' => 'Recarregar artigos e buscar conteúdo completo', - 'title' => 'Manutenção', - ), - 'max_http_redir' => 'Quantidade máxima de redirecionamentos HTTP', - 'max_http_redir_help' => 'Defina como 0 ou deixe em branco para desactivar, -1 para redirecionamentos ilimitados', - 'method' => array( - '_' => 'Método HTTP', - ), - 'method_help' => 'O conteúdo do POST tem suporte automático para application/x-www-form-urlencoded e application/json', - 'method_postparams' => 'Conteúdo do POST', - 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.', - 'mute' => array( - '_' => 'silenciar', - 'state_is_muted' => 'This feed is muted', // TODO - ), - 'no_selected' => 'Nenhum feed selecionado.', - 'number_entries' => '%d artigos', - 'open_feed' => 'Open feed %s', // TODO - 'path_entries_conditions' => 'Conditions for content retrieval', // TODO - 'priority' => array( - '_' => 'Visibilidade', - 'category' => 'Mostrar na sua categoria', - 'feed' => 'Show in its feed', // TODO - 'hidden' => 'Não exibir', - 'important' => 'Mostrar feeds importantes', - 'main_stream' => 'Mostrar na tela principal', - ), - 'proxy' => 'Defina um proxy para buscar esse feed', - 'proxy_help' => 'Selecione um protocolo (e.g: SOCKS5) e digite o endereço do proxy (e.g: 127.0.0.1:1080 or username:password@127.0.0.1:1080)', - 'reset_favicon' => 'Reset to default', // TODO - 'selector_preview' => array( - 'show_raw' => 'Mostrar fonte', - 'show_rendered' => 'Mostrar conteúdo', - ), - 'show' => array( - 'all' => 'Mostrar todos os Feeds', - 'error' => 'Somente mostrar Feeds com erros', - ), - 'showing' => array( - 'error' => 'Exibir apenas os feeds com erros', - ), - 'ssl_verify' => 'Verificar segurança SSL', - 'stats' => 'Estatísticas', - 'think_to_add' => 'Tem adicionar alguns feeds.', - 'timeout' => 'Timeout em segundos', - 'title' => 'Título', - 'title_add' => 'Adicionar o RSS feed', - 'ttl' => 'Não atualize automaticamente mais que', - 'unicityCriteria' => array( - '_' => 'Article unicity criteria', // TODO - 'forced' => 'forced', // TODO - 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // TODO - 'id' => 'Standard ID (default)', // TODO - 'link' => 'Link', // TODO - 'sha1:content' => 'Content', // TODO - 'sha1:content_published' => 'Content + Date', // TODO - 'sha1:link_published' => 'Link + Date', // TODO - 'sha1:link_published_title' => 'Link + Date + Title', // TODO - 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // TODO - 'sha1:published' => 'Date', // TODO - 'sha1:title' => 'Title', // TODO - 'sha1:title_published' => 'Title + Date', // TODO - 'sha1:title_published_content' => 'Title + Date + Content', // TODO - ), - 'url' => 'URL do Feed', - 'useragent' => 'Defina um utilizador para pesquisar este feed', - 'useragent_help' => 'Exemplo: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', - 'validator' => 'Verifique a validade do feed', - 'website' => 'URL do site', - 'websub' => 'Notificação instantânea com WebSub', - ), - 'import_export' => array( - 'export' => array( - '_' => 'Exportar', - 'sqlite' => 'Download user database as SQLite', // TODO - ), - 'export_labelled' => 'Exportar seus artigos etiquetados', - 'export_opml' => 'Exporta a lista dos feeds (OPML)', - 'export_starred' => 'Exportar seus favoritos', - 'feed_list' => 'Lista dos %s artigos', - 'file_to_import' => 'Arquivo para importar
(OPML, JSON or ZIP)', - 'file_to_import_no_zip' => 'Arquivo para importar
(OPML or JSON)', - 'import' => 'Importar', - 'starred_list' => 'Listar artigos favoritos', - 'title' => 'Importar / exportar', - ), - 'menu' => array( - 'add' => 'Adicionar um feed ou categoria', - 'import_export' => 'Importar / exportar', - 'label_management' => 'Gerir etiquetas', - 'stats' => array( - 'idle' => 'Feeds inativos', - 'main' => 'Estatísticas principais', - 'repartition' => 'Repartição de artigos', - ), - 'subscription_management' => 'Gerir de inscrições', - 'subscription_tools' => 'Ferramentas de inscrição', - ), - 'tag' => array( - 'auto_label' => 'Adicione esta etiqueta para novos artigos', - 'name' => 'Nome', - 'new_name' => 'Nome novo', - 'old_name' => 'Nome antigo', - ), - 'title' => array( - '_' => 'Gerir inscrições', - 'add' => 'Adicionar um feed ou categoria', - 'add_category' => 'Adicionar uma categoria', - 'add_dynamic_opml' => 'Adicionar OPML dinâmico', - 'add_feed' => 'Adicionar um feed', - 'add_label' => 'Adicionar uma etiqueta', - 'add_opml_category' => 'OPML category name', // TODO - 'delete_label' => 'Apagar uma etiqueta', - 'feed_management' => 'Gerir dos RSS feeds', - 'subscription_tools' => 'Ferramentas de inscrição', - ), -); diff --git a/app/i18n/pt-pt/user.php b/app/i18n/pt-pt/user.php deleted file mode 100644 index 3f738b9fa..000000000 --- a/app/i18n/pt-pt/user.php +++ /dev/null @@ -1,54 +0,0 @@ - array( - 'feedback' => array( - 'invalid' => 'Endereço de email inválido', - 'required' => 'O endereço de email é necessário', - ), - 'validation' => array( - 'change_email' => 'Pode mudar seu endereço de email na página do perfil.', - 'email_sent_to' => 'Enviamos um email para %s. Por favor, siga as instruções contidas nele para verificar sua conta.', - 'feedback' => array( - 'email_failed' => 'Não foi possível enviar um email devido a um erro de configuração no servidor.', - 'email_sent' => 'Um email foi enviado para o seu endereço', - 'error' => 'Falha na verificação do endereço de email', - 'ok' => 'O endereço de email foi verificado com sucesso.', - 'unnecessary' => 'Esse endereço de email já foi verificado.', - 'wrong_token' => 'A verificação do endereço de email falhou por causa do token incorreto.', - ), - 'need_to' => 'Para poder utilizar o %s, deve verificar seu endereço de email.', - 'resend_email' => 'Reenviar o email', - 'title' => 'Validação do endereço de email', - ), - ), - 'mailer' => array( - 'email_need_validation' => array( - 'body' => 'Registrou no %s. Mas ainda é necessário verificar seu endereço de email. Para isso, basta seguir o link:', - 'title' => 'Precisa verificar a conta', - 'welcome' => 'Bem vindo %s,', - ), - ), - 'password' => array( - 'invalid' => 'Senha incorreta', - ), - 'tos' => array( - 'feedback' => array( - 'invalid' => 'Para se registrar, tem que aceitar os Termos do serviço.', - ), - ), - 'username' => array( - 'invalid' => 'Nome de utilizador inválido.', - 'taken' => 'O nome de utilizador %s já está sendo utilizado', - ), -); diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 9a9459b19..399f0b8ac 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'О проекте', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 3e907404f..a240ec81d 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'O FreshRSS', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 3b96ebd54..9dfa52a81 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Hakkında', diff --git a/app/i18n/uk/gen.php b/app/i18n/uk/gen.php index fd7eeca35..32466778c 100644 --- a/app/i18n/uk/gen.php +++ b/app/i18n/uk/gen.php @@ -161,7 +161,7 @@ return array( 'de' => 'Deutsch', // IGNORE 'el' => 'Ελληνικά', // IGNORE 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE + 'en-US' => 'English (United States)', // IGNORE 'es' => 'Español', // IGNORE 'fa' => 'فارسی', // IGNORE 'fi' => 'Suomi', // IGNORE @@ -176,14 +176,14 @@ return array( 'nl' => 'Nederlands', // IGNORE 'oc' => 'Occitan', // IGNORE 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Про програму', diff --git a/app/i18n/zh-CN/admin.php b/app/i18n/zh-CN/admin.php new file mode 100644 index 000000000..8bf7d5fed --- /dev/null +++ b/app/i18n/zh-CN/admin.php @@ -0,0 +1,240 @@ + array( + 'allow_anonymous' => '允许匿名阅读默认用户(%s)的文章', + 'allow_anonymous_refresh' => '允许匿名刷新文章', + 'api_enabled' => '允许 API 访问 (用于手机应用 and sharing user queries)', // DIRTY + 'form' => '网页表单(传统方式, 需要 JavaScript)', + 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // TODO + 'none' => '无(危险)', + 'title' => '认证', + 'token' => '主验证 token', + 'token_help' => '允许不验证而访问用户的全部 RSS 输出以及刷新订阅源:', + 'type' => '认证方式', + 'unsafe_autologin' => '允许不安全的自动登陆方式:', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => '请检查 ./data/cache 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'cache 目录权限正常', + ), + 'categories' => array( + 'nok' => 'Category 表配置错误', + 'ok' => 'Category 表正常', + ), + 'connection' => array( + 'nok' => '数据库连接失败', + 'ok' => '数据库连接正常', + ), + 'ctype' => array( + 'nok' => '找不到字符类型检测库(php-ctype)', + 'ok' => '已找到字符类型检测库(ctype)', + ), + 'curl' => array( + 'nok' => '找不到 cURL 库(php-curl 包)', + 'ok' => '已找到 cURL 库', + ), + 'data' => array( + 'nok' => '请检查 ./data 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'data 目录权限正常', + ), + 'database' => '数据库安装', + 'dom' => array( + 'nok' => '找不到用于浏览 DOM 的库(php-xml 包)', + 'ok' => '已找到用于浏览 DOM 的库', + ), + 'entries' => array( + 'nok' => 'Entry 表配置错误', + 'ok' => 'Entry 表配置正常', + ), + 'favicons' => array( + 'nok' => '请检查 ./data/favicons 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'favicons 目录权限正常', + ), + 'feeds' => array( + 'nok' => 'Feed 表配置错误', + 'ok' => 'Feed 表正常', + ), + 'fileinfo' => array( + 'nok' => '找不到 PHP fileinfo 库(php-fileinfo 包)', + 'ok' => '已找到 fileinfo 库', + ), + 'files' => '文件相关', + 'json' => array( + 'nok' => '找不到 JSON 扩展(php-json 包)', + 'ok' => '已找到 JSON 扩展', + ), + 'mbstring' => array( + 'nok' => '找不到推荐用于 Unicode 的 mbstring 库', + 'ok' => '已找到推荐用于 Unicode 的 mbstring 库', + ), + 'pcre' => array( + 'nok' => '找不到正则表达式解析库(php-pcre)', + 'ok' => '已找到正则表达式解析库(PCRE)', + ), + 'pdo' => array( + 'nok' => '找不到 PDO 或其中一种支持的驱动(pdo_mysql、pdo_sqlite、pdo_pgsql)', + 'ok' => '已找到 PDO 和至少一种支持的驱动(pdo_mysql、pdo_sqlite、pdo_pgsql)', + ), + 'php' => array( + '_' => 'PHP 安装', + 'nok' => '你的 PHP 版本为 %s,但 FreshRSS 最低需要 %s', + 'ok' => '你的 PHP 版本为 %s,与 FreshRSS 兼容', + ), + 'tables' => array( + 'nok' => '数据库中缺少一个或多个表', + 'ok' => '数据库中存在正确的表', + ), + 'title' => '环境检查', + 'tokens' => array( + 'nok' => '请检查 ./data/tokens 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'tokens 目录权限正常', + ), + 'users' => array( + 'nok' => '请检查 ./data/users 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'users 目录权限正常', + ), + 'zip' => array( + 'nok' => '找不到 ZIP 扩展(php-zip 包)', + 'ok' => '已找到 ZIP 扩展', + ), + ), + 'extensions' => array( + 'author' => '作者', + 'community' => '可用的社区扩展', + 'description' => '描述', + 'disabled' => '已禁用', + 'empty_list' => '没有已安装的扩展', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO + 'enabled' => '已启用', + 'latest' => '已安装', + 'name' => '名称', + 'no_configure_view' => '此扩展无法配置。', + 'system' => array( + '_' => '系统扩展', + 'no_rights' => '系统扩展(你没有所需权限)', + ), + 'title' => '扩展', + 'update' => '更新可用', + 'user' => '用户扩展', + 'version' => '版本', + ), + 'stats' => array( + '_' => '统计数据', + 'all_feeds' => '所有订阅源', + 'category' => '分类', + 'entry_count' => '文章数', + 'entry_per_category' => '各分类文章数', + 'entry_per_day' => '每日文章数(近三十日)', + 'entry_per_day_of_week' => '一周中(平均:%.2f 条消息)', + 'entry_per_hour' => '各小时(平均:%.2f 条消息)', + 'entry_per_month' => '各月(平均:%.2f 条消息)', + 'entry_repartition' => '文章分布', + 'feed' => '订阅源', + 'feed_per_category' => '各分类订阅源数', + 'idle' => '长期无更新订阅源', + 'main' => '主要统计数据', + 'main_stream' => '首页', + 'no_idle' => '订阅源近期皆有更新!', + 'number_entries' => '%d 篇文章', + 'overview' => 'Overview', // TODO + 'percent_of_total' => '%', + 'repartition' => '文章分布: %s', // DIRTY + 'status_favorites' => '收藏', + 'status_read' => '已读', + 'status_total' => '总计', + 'status_unread' => '未读', + 'title' => '统计', + 'top_feed' => '前十订阅源', + ), + 'system' => array( + '_' => '系统配置', + 'auto-update-url' => '自动更新服务器 URL', + 'base-url' => array( + '_' => '基础 URL', + 'recommendation' => '推荐: %s', + ), + 'cookie-duration' => array( + 'help' => '单位:秒', + 'number' => '保持登录的时长', + ), + 'force_email_validation' => '强制验证邮箱地址', + 'instance-name' => '实例名称', + 'max-categories' => '各用户分类数限制', + 'max-feeds' => '各用户订阅源数限制', + 'registration' => array( + 'number' => '最大用户数', + 'select' => array( + 'label' => '注册表单', + 'option' => array( + 'noform' => '禁用,无注册表单', + 'nolimit' => '启用,且无账户限制', + 'setaccountsnumber' => '设置用户数的最大值', + ), + ), + 'status' => array( + 'disabled' => '注册表单已禁用', + 'enabled' => '注册表单已启用', + ), + 'title' => '用户注册表单', + ), + 'sensitive-parameter' => '敏感参数。在 ./data/config.php 中手动修改', + 'tos' => array( + 'disabled' => '没有提供', + 'enabled' => '已启用', + 'help' => '如何启用服务条款', + ), + 'websub' => array( + 'help' => '关于 WebSub', + ), + ), + 'update' => array( + '_' => '更新系统', + 'apply' => '应用', + 'changelog' => '更新记录', + 'check' => '检查更新', + 'copiedFromURL' => '从 %s 复制 update.php 到 ./data', + 'current_version' => '当前 版本为', + 'last' => '上次检查', + 'loading' => '更新中…', + 'none' => '没有可用更新', + 'releaseChannel' => array( + '_' => '发布通道', + 'edge' => '滚动发布 (“edge”)', + 'latest' => '稳定版本 (“latest”)', + ), + 'title' => '更新系统', + 'viaGit' => '开始通过 git and GitHub.com 更新', + ), + 'user' => array( + 'admin' => '管理员', + 'article_count' => '文章数', + 'back_to_manage' => '← 返回用户列表', + 'create' => '创建新用户', + 'database_size' => '数据库大小', + 'email' => '邮箱地址', + 'enabled' => '已启用', + 'feed_count' => '订阅源数', + 'is_admin' => '管理员', + 'language' => '语言', + 'last_user_activity' => '上次用户活跃', + 'list' => '用户列表', + 'number' => '已有 %d 个用户', + 'numbers' => '已有 %d 个用户', + 'password_form' => '密码
(用于网页表单登录方式)', + 'password_format' => '至少 7 个字符', + 'title' => '用户管理', + 'username' => '用户名', + ), +); diff --git a/app/i18n/zh-CN/api.php b/app/i18n/zh-CN/api.php new file mode 100644 index 000000000..0021dfa98 --- /dev/null +++ b/app/i18n/zh-CN/api.php @@ -0,0 +1,33 @@ + array( + 'address' => 'Your API address:', // TODO + '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 + ), + 'test' => array( + 'fever' => 'Fever API configuration test:', // TODO + 'greader' => 'Google Reader API configuration test:', // TODO + ), + 'title' => array( + '_' => 'FreshRSS API endpoints', // TODO + 'extension' => 'API for extensions', // TODO + 'fever' => 'Fever compatible API', // TODO + 'greader' => 'Google Reader compatible API', // TODO + ), + ), +); diff --git a/app/i18n/zh-CN/conf.php b/app/i18n/zh-CN/conf.php new file mode 100644 index 000000000..1ee9bf404 --- /dev/null +++ b/app/i18n/zh-CN/conf.php @@ -0,0 +1,372 @@ + array( + '_' => '归档', + 'exception' => '清理例外', + 'help' => '更多可用选项位于各订阅源的设置', + 'keep_favourites' => '永不删除已收藏的文章', + 'keep_labels' => '永不删除打了标签的文章', + 'keep_max' => '每订阅源最多保留的文章数', + 'keep_min_by_feed' => '至少保留的文章数', + 'keep_period' => '文章最多保留', + 'keep_unreads' => '永不删除未读文章', + 'maintenance' => '维护', + 'optimize' => '优化数据库', + 'optimize_help' => '偶尔执行可以减少数据库大小', + 'policy' => '清理策略', + 'policy_warning' => '如果未选择清理策略,则将保留全部文章。', + 'purge_now' => '立即清除', + 'title' => '存档', + 'ttl' => '最小自动刷新间隔', + ), + 'display' => array( + '_' => '显示', + 'darkMode' => array( + '_' => '自动黑暗模式', + 'auto' => '启动', + 'help' => '仅适用于兼容性主题', + 'no' => '关闭', + ), + 'icon' => array( + 'bottom_line' => '底栏', + 'display_authors' => '作者', + 'entry' => '文章图标', + 'publication_date' => '更新日期', + 'related_tags' => '文章标签', + 'sharing' => '分享', + 'summary' => '摘要', + 'top_line' => '顶栏', + ), + 'language' => '语言', + 'notif_html5' => array( + 'seconds' => '秒(0 表示不超时)', + 'timeout' => 'HTML5 通知超时时间', + ), + 'show_nav_buttons' => '显示导航按钮', + 'theme' => array( + '_' => '主题', + 'deprecated' => array( + '_' => '已弃用', + 'description' => '这个主题已经不再被支持并且会在将来版本的 FreshRSS 中删除', + ), + ), + 'theme_not_available' => '“%s” 主题不再可用,请选择其他主题。', + 'thumbnail' => array( + 'label' => '缩略图', + 'landscape' => '横向', + 'none' => '无', + 'portrait' => '纵向', + 'square' => '方形', + ), + 'timezone' => '时区', + 'title' => '显示', + 'website' => array( + 'full' => '图标和名称', + 'icon' => '仅图标', + 'label' => '网页显示', + 'name' => '仅名称', + 'none' => '无', + ), + 'width' => array( + 'content' => '内容宽度', + 'large' => '宽', + 'medium' => '中', + 'no_limit' => '无限制', + 'thin' => '窄', + ), + ), + 'logs' => array( + 'loglist' => array( + 'level' => '日志等级', + 'message' => '信息', + 'timestamp' => '时间', + ), + 'pagination' => array( + 'first' => '首页', + 'last' => '末页', + 'next' => '下一页', + 'previous' => '上一页', + ), + ), + 'mark_read_button' => array( + '_' => '“全部标记为已读”按钮', + 'big' => '大', + 'none' => '无', + 'small' => '小', + ), + 'notification_timeout' => array( + 'bad' => array( + 'label' => 'Show warning banner', // TODO + 'seconds' => 'seconds (at least 1)', // TODO + ), + 'good' => array( + 'label' => 'Show acknowledgement banner', // TODO + 'seconds' => 'seconds (0 means not shown)', // TODO + ), + ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => '获取扩展列表', + ), + 'profile' => array( + '_' => '账户管理', + 'api' => array( + '_' => 'API 管理', + 'api_not_set' => 'API密码未设置', + 'api_set' => 'API密码已设置', + 'check_link' => 'Check API status via: %s', // TODO + 'disabled' => 'The API access is disabled.', // TODO + 'documentation_link' => 'See the documentation and list of known apps', // TODO + 'help' => 'See documentation', // TODO + ), + 'change_password' => '修改密码', + 'confirm_new_password' => '确认新密码', + 'current_password' => 'Current password
(for the Web-form login method)', // TODO + 'delete' => array( + '_' => '账户删除', + 'warn' => '你的帐户以及所有相关数据将被删除。', + ), + 'email' => '邮箱地址', + 'new_password' => '新密码', + 'password_api' => 'API 密码
(例如用于手机应用)', + 'password_format' => '至少 7 个字符', + 'title' => '账户', + ), + 'query' => array( + '_' => '自定义查询', + 'deprecated' => '此查询不再有效。相关的分类或订阅源已被删除。', + 'description' => 'Description', // TODO + 'filter' => array( + '_' => '生效的过滤器:', + 'categories' => '按分类显示', + 'feeds' => '按订阅源显示', + 'order' => '按日期排序', + 'search' => '表达式', + 'shareOpml' => '启用相应类别和 feed 的 OPML 分享', + 'shareRss' => '启用 HTML 和 RSS 分享', + 'state' => '状态', + 'tags' => '按标签显示', + 'type' => '类型', + ), + 'get_A' => 'Show all feeds, also those shown in their category', // TODO + 'get_Z' => 'Show all feeds, also archived ones', // TODO + 'get_all' => '显示所有文章', + 'get_all_labels' => '显示所有打了标签的文章', + 'get_category' => '显示分类“%s”', + 'get_favorite' => '显示收藏文章', + 'get_feed' => '显示订阅源“%s”', + 'get_important' => '显示来自“重要的订阅”的文章', + 'get_label' => '显示打了“%s”标签的文章', + 'help' => '参见文档: queries and resharing by HTML / RSS / OPML.', + 'image_url' => 'Image URL', // TODO + 'name' => '名称', + 'no_filter' => '无过滤器', + 'no_queries' => array( + '_' => 'No user queries are saved yet.', // TODO + 'help' => 'See documentation', // TODO + ), + 'number' => '查询 n°%d', + 'order_asc' => '由旧至新显示文章', + 'order_desc' => '由新至旧显示文章', + 'search' => '搜索 “%s”', + 'share' => array( + '_' => '分享您的自定义查询', + 'disabled' => array( + '_' => '已禁用', + 'title' => '分享', + ), + 'greader' => 'Shareable link to the GReader JSON', // TODO + 'help' => '获取此自定义查询的分享链接', + 'html' => 'HTML 页面的分享链接', + 'opml' => '订阅源 OPML 的分享链接', + 'rss' => 'RSS feed 的分享链接', + ), + 'state_0' => '显示所有文章', + 'state_1' => '显示已读文章', + 'state_2' => '显示未读文章', + 'state_3' => '显示所有文章', + 'state_4' => '显示收藏文章', + 'state_5' => '显示已读的收藏文章', + 'state_6' => '显示未读的收藏文章', + 'state_7' => '显示收藏文章', + 'state_8' => '显示未收藏文章', + 'state_9' => '显示已读的未收藏文章', + 'state_10' => '显示未读的未收藏文章', + 'state_11' => '显示未收藏文章', + 'state_12' => '显示所有文章', + 'state_13' => '显示已读文章', + 'state_14' => '显示未读文章', + 'state_15' => '显示所有文章', + 'title' => '自定义查询', + ), + 'reading' => array( + '_' => '阅读', + 'after_onread' => '“全部标记为已读”后', + 'always_show_favorites' => '默认显示收藏夹中所有的文章', + 'apply_to_individual_feed' => 'Applies to feeds individually', // TODO + 'article' => array( + 'authors_date' => array( + '_' => '作者和日期', + 'both' => '页脚与页眉', + 'footer' => '页脚', + 'header' => '页眉', + 'none' => '不显示', + ), + 'feed_name' => array( + 'above_title' => '在标题/标签上方', + 'none' => '不显示', + 'with_authors' => '与作者和日期一行', + ), + 'feed_title' => '订阅源标题', + 'icons' => array( + '_' => '文章图标位置
(仅阅读视图)', + 'above_title' => '标题之上', + 'with_authors' => '与作者和日期在同一行', + ), + 'tags' => array( + '_' => '文章标签', + 'both' => '页脚与页眉', + 'footer' => '页脚', + 'header' => '页眉', + 'none' => '不显示', + ), + 'tags_max' => array( + '_' => '标签最多显示个数', + 'help' => '0 表示:显示所有标签且不折叠', + ), + ), + 'articles_per_page' => '每页文章数', + 'auto_load_more' => '在页面底部载入更多文章', + 'auto_remove_article' => '阅读后隐藏文章', + 'confirm_enabled' => '“全部标记为已读”时显示确认对话框', + 'display_articles_unfolded' => '默认展开显示文章', + 'display_categories_unfolded' => '展开的分类', + 'headline' => array( + 'articles' => '文章:打开/关闭', + 'articles_header_footer' => '文章: 页眉/页脚', + 'categories' => '左侧导航栏:分类', + 'mark_as_read' => '标为已读选项', + 'misc' => '其它', + 'view' => '浏览', + ), + 'hide_read_feeds' => '隐藏没有未读文章的分类和订阅源(启用“显示所有文章”后不生效)', + 'img_with_lazyload' => '延迟加载图片', + 'jump_next' => '跳转到下一未读项', + 'mark_updated_article_unread' => '将有更新的文章设为未读', + 'number_divided_when_reader' => '阅读视图中显示一半', + 'read' => array( + 'article_open_on_website' => '在打开原文章后', + 'article_viewed' => '在文章被浏览后', + 'focus' => '被聚焦时(除了重要订阅)', + 'keep_max_n_unread' => '未读最多保留 n 条', + 'scroll' => '在滚动浏览后(除了重要订阅)', + 'upon_gone' => '在被原订阅源被移除后', + 'upon_reception' => '在接收文章后', + 'when' => '何时将文章标记为已读', + 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // TODO + 'when_same_title_in_feed' => '已存在 n 条相同标题文章 (of the feed)', // DIRTY + ), + 'show' => array( + '_' => '文章显示', + 'active_category' => '活跃的分类', + 'adaptive' => '若有未读项就显示未读,否则显示所有文章', + 'all_articles' => '显示所有', + 'all_categories' => '所有分类', + 'no_category' => '无分类', + 'remember_categories' => '记住打开的分类', + 'unread' => '只显示未读', + 'unread_or_favorite' => '显示未读及收藏', + ), + 'show_fav_unread_help' => '同样适用于标签', + 'sides_close_article' => '点击文章文本区域外关闭文章', + 'sort' => array( + '_' => '排列顺序', + 'newer_first' => '由新至旧', + 'older_first' => '由旧至新', + ), + 'star' => array( + 'when' => 'Mark an article as favourite…', // TODO + ), + 'sticky_post' => '打开文章时将其置顶', + 'title' => '阅读', + 'view' => array( + 'default' => '默认视图', + 'global' => '全屏视图', + 'normal' => '普通视图', + 'reader' => '阅读视图', + ), + ), + 'sharing' => array( + '_' => '分享', + 'add' => '添加分享方式', + 'bluesky' => 'Bluesky', // IGNORE + 'deprecated' => '此功能已被废弃并会在未来的 FreshRSS 版本中移除,详情见 说明文档.', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'Email', // IGNORE + 'facebook' => 'Facebook', // IGNORE + 'more_information' => '更多信息', + 'print' => '打印', + 'raindrop' => 'Raindrop.io', // IGNORE + 'remove' => '删除分享方式', + 'shaarli' => 'Shaarli', // IGNORE + 'share_name' => '显示名称', + 'share_url' => '用于分享的 URL', + 'title' => '分享', + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag', // IGNORE + ), + 'shortcut' => array( + '_' => '快捷键', + 'article_action' => '文章操作', + 'auto_share' => '分享', + 'auto_share_help' => '如果有多种分享方式,则会按照它们的序号依次访问。', + 'close_menus' => '关闭菜单', + 'collapse_article' => '折叠文章', + 'first_article' => '打开第一篇文章', + 'focus_search' => '访问搜索框', + 'global_view' => '切换到全屏视图', + 'help' => '显示帮助文档', + 'javascript' => '若要使用快捷键,必须启用 JavaScript', + 'last_article' => '打开最后一篇文章', + 'load_more' => '载入更多文章', + 'mark_favorite' => '加入收藏', + 'mark_read' => '设为已读', + 'navigation' => '浏览', + 'navigation_help' => '组合 ⇧ Shift 键,导航快捷键将应用于订阅源。
组合 Alt ⎇ 键,导航快捷键将应用于分类。', + 'navigation_no_mod_help' => '以下快捷键不支持组合键(Shift 或 Alt)', + 'next_article' => '打开下一篇文章', + 'next_unread_article' => '打开下一篇未读文章', + 'non_standard' => '这些键(%s)可能不能作为快捷键', + 'normal_view' => '切换到普通视图', + 'other_action' => '其他操作', + 'previous_article' => '打开上一篇文章', + 'reading_view' => '切换到阅读视图', + 'rss_view' => '切换到 RSS 视图', + 'see_on_website' => '在原网站中查看', + 'shift_for_all_read' => '+ Alt ⎇ 键将上方的文章标记为已读
+ ⇧ Shift 键将所有文章设为已读', + 'skip_next_article' => '跳转到下一篇文章而不打开', + 'skip_previous_article' => '跳转到上一篇文章而不打开', + 'title' => '快捷键', + 'toggle_media' => '播放/暂停媒体', + 'user_filter' => '显示自定义查询', + 'user_filter_help' => '如果有多个自定义过滤器,则会按照它们的序号依次访问。', + 'views' => '视图', + ), + 'user' => array( + 'articles_and_size' => '%s 篇文章(%s)', + 'current' => '当前用户', + 'is_admin' => '该用户为管理员', + 'users' => '用户', + ), +); diff --git a/app/i18n/zh-CN/feedback.php b/app/i18n/zh-CN/feedback.php new file mode 100644 index 000000000..3aa767f95 --- /dev/null +++ b/app/i18n/zh-CN/feedback.php @@ -0,0 +1,152 @@ + array( + 'denied' => '你无权访问此页面', + 'not_found' => '你寻找的页面不存在', + ), + 'admin' => array( + 'optimization_complete' => '优化完成', + ), + 'api' => array( + 'password' => array( + 'failed' => '你的密码无法修改', + 'updated' => '你的密码已修改', + ), + ), + 'auth' => array( + 'login' => array( + 'invalid' => '用户名或密码无效', + 'success' => '登录成功', + ), + 'logout' => array( + 'success' => '已登出', + ), + ), + 'conf' => array( + 'error' => '保存配置时出错', + 'query_created' => '查询 “%s” 已创建。', + 'shortcuts_updated' => '快捷键已更新', + 'updated' => '配置已更新', + ), + 'extensions' => array( + 'already_enabled' => '%s 已启用', + 'cannot_remove' => '无法删除 %s', + 'disable' => array( + 'ko' => '无法禁用 %s。检查 FreshRSS 日志 查看详情。', + 'ok' => '%s 现已禁用', + ), + 'enable' => array( + 'ko' => '%s 启用失败。检查 FreshRSS 日志 查看详情。', + 'ok' => '%s 现已启用', + ), + 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // TODO + 'no_access' => '你无权访问 %s', + 'not_enabled' => '%s 未启用', + 'not_found' => '%s 不存在', + 'removed' => '%s 已删除', + ), + 'import_export' => array( + 'export_no_zip_extension' => '服务器未启用 ZIP 扩展,请尝试逐个导出文件。', + 'feeds_imported' => '你的订阅源已导入,你可以点击 更新订阅 按钮以完成导入。', + 'feeds_imported_with_errors' => '你的订阅源已导入,但发生错误。你可以点击 更新订阅 按钮以完成导入。', + 'file_cannot_be_uploaded' => '文件未能上传!', + 'no_zip_extension' => '服务器未启用 ZIP 扩展。', + 'zip_error' => '导入 ZIP 文件时出错', // DIRTY + ), + 'profile' => array( + 'error' => '你的帐户无法修改', + 'passwords_dont_match' => 'Passwords don’t match', // TODO + 'updated' => '你的帐户已修改', + ), + 'sub' => array( + 'actualize' => '获取', + 'articles' => array( + 'marked_read' => '文章已标记为已读', + 'marked_unread' => '文章已标记为未读', + ), + 'category' => array( + 'created' => '已创建分类 %s', + 'deleted' => '已删除分类', + 'emptied' => '已清空分类', + 'error' => '更新分类失败', + 'name_exists' => '分类名已存在', + 'no_id' => '你必须指定分类 ID', + 'no_name' => '分类名不能为空', + 'not_delete_default' => '你不能删除默认分类!', + 'not_exist' => '分类不存在!', + 'over_max' => '你已达到分类数上限(%d)', + 'updated' => '已更新分类', + ), + 'feed' => array( + 'actualized' => '已更新 %s', + 'actualizeds' => '已更新订阅源', + 'added' => '订阅源 %s 已添加', + 'already_subscribed' => '你已订阅 %s', + 'cache_cleared' => '%s 缓存已清理', + 'deleted' => '已删除订阅源', + 'error' => '订阅源更新失败', + 'favicon' => array( + 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // TODO + 'unsupported_format' => 'Unsupported image file format!', // TODO + ), + 'internal_problem' => '订阅源添加失败,检查 FreshRSS 日志 查看详情。你可以在 URL 后添加 #force_feed 尝试强制添加。', + 'invalid_url' => 'URL %s 无效', + 'n_actualized' => '已更新 %d 个订阅源', + 'n_entries_deleted' => '已删除 %d 篇文章', + 'no_refresh' => '没有可刷新的订阅源', + 'not_added' => '%s 添加失败', + 'not_found' => '无法找到订阅', + 'over_max' => '你已达到订阅源数上限(%d)', + 'reloaded' => '%s 已重新加载', + 'selector_preview' => array( + 'http_error' => '无法加载网站内容。', + 'no_entries' => '你的订阅中没有任何条目,你至少需要一个条目来创建一个预览。', + 'no_feed' => '网络错误(订阅源不存在)', + 'no_result' => '选择器没有匹配到任何东西,回退显示原始的订阅源文本。', + 'selector_empty' => '选择器是空的,你需要一个来创建预览。', + ), + 'updated' => '已更新订阅源', + ), + 'purge_completed' => '清除完成(已删除 %d 篇文章)', + ), + 'tag' => array( + 'created' => '标签“%s”已创建。', + 'error' => '标签无法被更新!', + 'name_exists' => '标签名已存在。', + 'renamed' => '标签“%s”已被重命名为“%s”。', + 'updated' => '标签已更新。', + ), + 'update' => array( + 'can_apply' => 'FreshRSS 将更新到 版本 %s。', + 'error' => '更新出错:%s', + 'file_is_nok' => '请检查 %s 目录权限。HTTP 服务器必须拥有写入权限。', + 'finished' => '更新完成!', + 'none' => '没有可用更新', + 'server_not_found' => '找不到更新服务器。 [%s]', + ), + 'user' => array( + 'created' => array( + '_' => '已创建用户 %s', + 'error' => '创建用户 %s 失败', + ), + 'deleted' => array( + '_' => '已删除用户 %s', + 'error' => '删除用户 %s 失败', + ), + 'updated' => array( + '_' => '已更新用户 %s', + 'error' => '更新用户 %s 失败', + ), + ), +); diff --git a/app/i18n/zh-CN/gen.php b/app/i18n/zh-CN/gen.php new file mode 100644 index 000000000..032bfb682 --- /dev/null +++ b/app/i18n/zh-CN/gen.php @@ -0,0 +1,277 @@ + array( + 'actualize' => '更新订阅源', + 'add' => '添加', + 'back_to_rss_feeds' => '← 返回订阅源', + 'cancel' => '取消', + 'close' => 'Close', // TODO + 'create' => '创建', + 'delete_all_feeds' => 'Delete all feeds', // TODO + 'delete_errored_feeds' => 'Delete feeds with errors', // TODO + 'delete_muted_feeds' => '删除已暂停的订阅源', + 'demote' => '撤销管理员', + 'disable' => '禁用', + 'download' => 'Download', // TODO + 'empty' => '清空', + 'enable' => '启用', + 'export' => '导出', + 'filter' => '过滤', + 'import' => '导入', + 'load_default_shortcuts' => '加载默认快捷键', + 'manage' => '管理', + 'mark_read' => '标记已读', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), + 'nav_buttons' => array( + 'next' => 'Next article', // TODO + 'prev' => 'Previous article', // TODO + 'up' => 'Go up', // TODO + ), + 'open_url' => '打开链接', + 'promote' => '设为管理员', + 'purge' => '清理', + 'refresh_opml' => '刷新订阅源动态列表', + 'remove' => '删除', + 'rename' => '重命名', + 'see_website' => '网站中查看', + 'submit' => '提交', + 'truncate' => '删除所有文章', + 'update' => '更新', + ), + 'auth' => array( + 'accept_tos' => '我接受 服务条款', + 'email' => 'Email 地址', + 'keep_logged_in' => '%s 天内保持登录', + 'login' => '登录', + 'logout' => '登出', + 'password' => array( + '_' => '密码', + 'format' => '至少 7 个字符', + ), + 'reauth' => array( + 'header' => 'Reauthentication is required', // TODO + 'tip' => 'You won’t be asked to sign in again for %d minutes', // TODO + 'title' => 'Reauthentication', // TODO + ), + 'registration' => array( + '_' => '新用户', + 'ask' => '创建新用户?', + 'title' => '用户创建', + ), + 'username' => array( + '_' => '用户名', + 'format' => '最多 16 个数字或字母', + ), + ), + 'date' => array( + 'Apr' => '\\四\\月', + 'Aug' => '\\八\\月', + 'Dec' => '\\十\\二\\月', + 'Feb' => '\\二\\月', + 'Jan' => '\\一\\月', + 'Jul' => '\\七\\月', + 'Jun' => '\\六\\月', + 'Mar' => '\\三\\月', + 'May' => '\\五\\月', + 'Nov' => '\\十\\一\\月', + 'Oct' => '\\十\\月', + 'Sep' => '\\九\\月', + 'apr' => '四月', + 'april' => '四月', + 'aug' => '八月', + 'august' => '八月', + 'before_yesterday' => '昨天以前', + 'dec' => '十二月', + 'december' => '十二月', + 'feb' => '二月', + 'february' => '二月', + 'format_date' => 'Y\\年n\\月j\\日', + 'format_date_hour' => 'Y\\年n\\月j\\日 H\\:i', + 'fri' => '周五', + 'jan' => '一月', + 'january' => '一月', + 'jul' => '七月', + 'july' => '七月', + 'jun' => '六月', + 'june' => '六月', + 'last_2_year' => '过去两年', + 'last_3_month' => '最近三个月', + 'last_3_year' => '过去三年', + 'last_5_year' => '过去五年', + 'last_6_month' => '最近六个月', + 'last_month' => '上月', + 'last_week' => '上周', + 'last_year' => '去年', + 'mar' => '三月', + 'march' => '三月', + 'may' => '五月', + 'may_' => '五月', + 'mon' => '周一', + 'month' => '个月', + 'nov' => '十一月', + 'november' => '十一月', + 'oct' => '十月', + 'october' => '十月', + 'sat' => '周六', + 'sep' => '九月', + 'september' => '九月', + 'sun' => '周日', + 'thu' => '周四', + 'today' => '今天', + 'tue' => '周二', + 'wed' => '周三', + 'yesterday' => '昨天', + ), + 'dir' => 'ltr', // IGNORE + 'freshrss' => array( + '_' => 'FreshRSS', // IGNORE + 'about' => '关于 FreshRSS', + ), + 'js' => array( + 'category_empty' => '清空分类', + 'confirm_action' => '你确定要执行此操作吗?这将不可撤销!', + 'confirm_action_feed_cat' => '你确定要执行此操作吗?你将丢失相关的收藏和自定义查询,这将不可撤销!', + 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // TODO + 'feedback' => array( + 'body_new_articles' => 'FreshRSS 中有 %%d 篇文章等待阅读。', + 'body_unread_articles' => '(未读: %%d)', + 'request_failed' => '请求失败,这可能是因为网络连接问题。', + 'title_new_articles' => 'FreshRSS: 新文章!', + ), + 'labels_empty' => '无标签', + 'new_article' => '发现新文章,点击刷新页面。', + 'should_be_activated' => '必须启用 JavaScript', + 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // TODO + ), + 'lang' => array( + 'cs' => 'Čeština', // IGNORE + 'de' => 'Deutsch', // IGNORE + 'el' => 'Ελληνικά', // IGNORE + 'en' => 'English', // IGNORE + 'en-US' => 'English (United States)', // IGNORE + 'es' => 'Español', // IGNORE + 'fa' => 'فارسی', // IGNORE + 'fi' => 'Suomi', // IGNORE + 'fr' => 'Français', // IGNORE + 'he' => 'עברית', // IGNORE + 'hu' => 'Magyar', // IGNORE + 'id' => 'Bahasa Indonesia', // IGNORE + 'it' => 'Italiano', // IGNORE + 'ja' => '日本語', // IGNORE + 'ko' => '한국어', // IGNORE + 'lv' => 'Latviešu', // IGNORE + 'nl' => 'Nederlands', // IGNORE + 'oc' => 'Occitan', // IGNORE + 'pl' => 'Polski', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE + 'ru' => 'Русский', // IGNORE + 'sk' => 'Slovenčina', // IGNORE + 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE + ), + 'menu' => array( + 'about' => '关于', + 'account' => '账户', + 'admin' => '管理', + 'archiving' => '归档', + 'authentication' => '认证', + 'check_install' => '环境检查', + 'configuration' => '配置', + 'display' => '显示', + 'extensions' => '扩展', + 'logs' => '日志', + 'privacy' => 'Privacy', // TODO + 'queries' => '自定义查询', + 'reading' => '阅读', + 'search' => '搜索内容或#文章标签', + 'search_help' => '查阅文档获取支持的 搜索参数', + 'sharing' => '分享', + 'shortcuts' => '快捷键', + 'stats' => '统计', + 'system' => '系统配置', + 'update' => '更新', + 'user_management' => '用户管理', + 'user_profile' => '帐户', + ), + 'period' => array( + 'days' => '天', + 'hours' => '时', + 'months' => '月', + 'weeks' => '周', + 'years' => '年', + ), + 'readme' => array( + 'contribute' => 'contribute', // IGNORE + 'language' => 'Language', // IGNORE + 'translated' => 'Progress', // IGNORE + ), + 'share' => array( + 'Known' => '基于 Known 的站点', + 'archiveIS' => 'archive.is', // IGNORE + 'archiveORG' => 'archive.org', // IGNORE + 'archivePH' => 'archive.ph', // IGNORE + 'bluesky' => 'Bluesky', // IGNORE + 'buffer' => 'Buffer', // IGNORE + 'clipboard' => '剪贴板', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'Email', // IGNORE + 'email-webmail-firefox-fix' => 'Email (webmail - 兼容 Firefox)', + 'facebook' => 'Facebook', // IGNORE + 'gnusocial' => 'GNU social', // IGNORE + 'jdh' => 'Journal du hacker', // IGNORE + 'lemmy' => 'Lemmy', // IGNORE + 'linkding' => 'Linkding', // IGNORE + 'linkedin' => 'LinkedIn', // IGNORE + 'mastodon' => 'Mastodon', // IGNORE + 'movim' => 'Movim', // IGNORE + 'omnivore' => 'Omnivore', // IGNORE + 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // IGNORE + 'pocket' => 'Pocket', // IGNORE + 'print' => '打印', + 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // IGNORE + 'shaarli' => 'Shaarli', // IGNORE + 'telegram' => 'Telegram', // IGNORE + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'Wallabag v1', // IGNORE + 'wallabagv2' => 'Wallabag v2', // IGNORE + 'web-sharing-api' => '系统分享', + 'whatsapp' => 'Whatsapp', // IGNORE + 'xing' => 'Xing', // IGNORE + ), + 'short' => array( + 'attention' => '警告!', + 'blank_to_disable' => '留空以禁用', + 'by_author' => '作者', + 'by_default' => '默认', + 'damn' => '错误!', + 'default_category' => '未分类', + 'no' => '否', + 'not_applicable' => '不可用', + 'ok' => '正常!', + 'or' => '或', + 'yes' => '是', + ), + 'stream' => array( + 'load_more' => '载入更多文章', + 'mark_all_read' => '全部设为已读', + 'nothing_to_load' => '没有更多文章', + ), +); diff --git a/app/i18n/zh-CN/index.php b/app/i18n/zh-CN/index.php new file mode 100644 index 000000000..33c9998b0 --- /dev/null +++ b/app/i18n/zh-CN/index.php @@ -0,0 +1,110 @@ + array( + '_' => '关于', + 'agpl3' => 'AGPL 3', // IGNORE + 'bug_reports' => array( + 'environment_information' => array( + '_' => 'System information', // TODO + 'browser' => 'Browser', // TODO + 'database' => 'Database', // TODO + 'server_software' => 'Server software', // TODO + 'version_curl' => 'cURL version', // TODO + 'version_frss' => 'FreshRSS version', // TODO + 'version_php' => 'PHP version', // TODO + ), + ), + 'bugs_reports' => '报告错误', + 'documentation' => '文档', + 'freshrss_description' => 'FreshRSS 是一个自托管的 RSS 聚合服务。 它不仅轻快易用,并且强大又易于配置。', + 'github' => 'GitHub Issues', + 'license' => '授权', + 'project_website' => '项目网站', + 'title' => '关于', + 'version' => '版本', + ), + 'feed' => array( + 'empty' => '没有文章可以显示。', + 'received' => array( + 'before_yesterday' => 'Received before yesterday', // TODO + 'today' => 'Received today', // TODO + 'yesterday' => 'Received yesterday', // TODO + ), + 'rss_of' => '%s 的订阅源', + 'title' => '首页', + 'title_fav' => '收藏', + 'title_global' => '全局视图', + ), + 'log' => array( + '_' => '日志', + 'clear' => '清除日志', + 'empty' => '日志文件为空', + 'title' => '日志', + ), + 'menu' => array( + 'about' => '关于 FreshRSS', + 'before_one_day' => '一天前', + 'before_one_week' => '一周前', + 'bookmark_query' => '收藏当前查询', + 'favorites' => '收藏(%s)', + 'global_view' => '全局视图', + 'important' => '重要的订阅', + 'main_stream' => '首页', + 'mark_all_read' => '全部设为已读', + 'mark_cat_read' => '此分类设为已读', + 'mark_feed_read' => '此订阅源设为已读', + 'mark_selection_unread' => '将筛选结果标记为未读', + 'mylabels' => '我的标签', + 'newer_first' => '由新至旧', + 'non-starred' => '显示未收藏', + 'normal_view' => '普通视图', + 'older_first' => '由旧至新', + 'queries' => '自定义查询', + 'read' => '显示已读', + 'reader_view' => '阅读视图', + 'rss_view' => '订阅源', + 'search_short' => '搜索', + 'sort' => array( + '_' => 'Sorting criteria', // TODO + 'c' => array( + 'name_asc' => 'Category, feed titles A→Z', // TODO + 'name_desc' => 'Category, feed titles Z→A', // TODO + ), + 'date_asc' => 'Publication date 1→9', // TODO + 'date_desc' => 'Publication date 9→1', // TODO + 'f' => array( + 'name_asc' => 'Feed title A→Z', // TODO + 'name_desc' => 'Feed title Z→A', // TODO + ), + 'id_asc' => 'Freshly received last', // TODO + 'id_desc' => 'Freshly received first', // TODO + 'link_asc' => 'Link A→Z', // TODO + 'link_desc' => 'Link Z→A', // TODO + 'rand' => 'Random order', // TODO + 'title_asc' => 'Title A→Z', // TODO + 'title_desc' => 'Title Z→A', // TODO + ), + 'starred' => '显示收藏', + 'stats' => '统计', + 'subscription' => '订阅管理', + 'unread' => '显示未读', + ), + 'share' => '分享', + 'tag' => array( + 'related' => '文章标签', + ), + 'tos' => array( + 'title' => '服务条款', + ), +); diff --git a/app/i18n/zh-CN/install.php b/app/i18n/zh-CN/install.php new file mode 100644 index 000000000..f4c9480e9 --- /dev/null +++ b/app/i18n/zh-CN/install.php @@ -0,0 +1,128 @@ + array( + 'finish' => '完成安装', + 'fix_errors_before' => '请在继续下一步前修复错误', + 'keep_install' => '保留当前配置', + 'next_step' => '下一步', + 'reinstall' => '重新安装 FreshRSS', + ), + 'bdd' => array( + '_' => '数据库', + 'conf' => array( + '_' => '数据库配置', + 'ko' => '验证你的数据库信息', + 'ok' => '数据库配置已保存', + ), + 'host' => '主机', + 'password' => '数据库密码', + 'prefix' => '表前缀', + 'type' => '数据库类型', + 'username' => '数据库用户名', + ), + 'check' => array( + '_' => '检查', + 'already_installed' => '我们检测到 FreshRSS 已经安装!', + 'cache' => array( + 'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'cache 目录权限正常', + ), + 'ctype' => array( + 'nok' => '找不到字符类型检测库(php-ctype)', + 'ok' => '已找到字符类型检测库(ctype)', + ), + 'curl' => array( + 'nok' => '找不到 cURL 库(php-curl 包)', + 'ok' => '已找到 cURL 库', + ), + 'data' => array( + 'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'data 目录权限正常', + ), + 'dom' => array( + 'nok' => '找不到用于浏览 DOM 的库(php-xml 包)', + 'ok' => '已找到用于浏览 DOM 的库', + ), + 'favicons' => array( + 'nok' => '请检查 ./data/favicons 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'favicons 目录权限正常', + ), + 'fileinfo' => array( + 'nok' => '找不到 PHP fileinfo 库(fileinfo 包)', + 'ok' => '已找到 fileinfo 库', + ), + 'json' => array( + 'nok' => '找不到 JSON 扩展(php-json 包)', + 'ok' => '已找到 JSON 扩展', + ), + 'mbstring' => array( + 'nok' => '找不到推荐用于 Unicode 的 mbstring 库', + 'ok' => '已找到推荐用于 Unicode 的 mbstring 库', + ), + 'pcre' => array( + 'nok' => '找不到正则表达式解析库(php-pcre)', + 'ok' => '已找到正则表达式解析库(PCRE)', + ), + 'pdo' => array( + 'nok' => '找不到 PDO 或其中一种支持的驱动(pdo_mysql、pdo_sqlite、pdo_pgsql)', + 'ok' => '已找到 PDO 和至少一种支持的驱动(pdo_mysql、pdo_sqlite、pdo_pgsql)', + ), + 'php' => array( + 'nok' => '你的 PHP 版本为 %s,但 FreshRSS 最低需要 %s', + 'ok' => '你的 PHP 版本为 %s,与 FreshRSS 兼容', + ), + 'reload' => '再检查一遍', + 'tmp' => array( + 'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => '缓存目录权限正常。', + ), + 'unknown_process_username' => '未知', + 'users' => array( + 'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。', + 'ok' => 'users 目录权限正常', + ), + 'xml' => array( + 'nok' => '找不到用于 XML 解析库', + 'ok' => '已找到 XML 解析库', + ), + ), + 'conf' => array( + '_' => '常规配置', + 'ok' => '常规配置已保存', + ), + 'congratulations' => '恭喜!', + 'default_user' => array( + '_' => '默认用户名', + 'max_char' => '最多 16 个数字或字母', + ), + 'fix_errors_before' => '请在继续下一步前修复错误', + 'javascript_is_better' => '启用 JavaScript 会使 FreshRSS 工作得更好', + 'js' => array( + 'confirm_reinstall' => '重新安装 FreshRSS 将会重置之前的配置,你确定要继续吗?', + ), + 'language' => array( + '_' => '语言', + 'choose' => '为 FreshRSS 选择语言', + 'defined' => '语言已指定', + ), + 'missing_applied_migrations' => '出现错误,你需要手动创建一个空文件 %s。', + 'ok' => '安装成功', + 'session' => array( + 'nok' => 'Web 服务器似乎未正确配置 PHP 会话所需的 cookie!', + ), + 'step' => '步骤 %d', + 'steps' => '步骤', + 'this_is_the_end' => '最后一步', + 'title' => '安装 FreshRSS', +); diff --git a/app/i18n/zh-CN/sub.php b/app/i18n/zh-CN/sub.php new file mode 100644 index 000000000..4769893d5 --- /dev/null +++ b/app/i18n/zh-CN/sub.php @@ -0,0 +1,307 @@ + array( + 'documentation' => '复制以下地址,以供外部工具使用', + 'title' => 'API', // IGNORE + ), + 'bookmarklet' => array( + 'documentation' => '拖动此书签到你的书签栏或者右键选择「收藏此链接」,然后在你想要订阅的页面上点击「订阅」按钮。', + 'label' => '订阅', + 'title' => '书签', + ), + 'category' => array( + '_' => '分类', + 'add' => '添加分类', + 'archiving' => '归档', + 'dynamic_opml' => array( + '_' => '动态订阅', + 'help' => '使用 URL 上的 OPML 文件 中的订阅源填充这一分类', + ), + 'empty' => '空分类', + 'expand' => 'Expand category', // TODO + 'information' => '信息', + 'open' => 'Open category', // TODO + 'opml_url' => 'OPML URL', // IGNORE + 'position' => '显示位置', + 'position_help' => '控制分类排列顺序', + 'title' => '标题', + ), + 'feed' => array( + 'accept_cookies' => '接受 Cookies', + 'accept_cookies_help' => '允许订阅源服务器设置 Cookies(仅在请求期间存储在内存中)', + 'add' => '添加订阅源', + 'advanced' => '高级', + 'archiving' => '归档', + 'auth' => array( + 'configuration' => '认证', + 'help' => '用于连接启用 HTTP 认证的订阅源', + 'http' => 'HTTP 认证', + 'password' => 'HTTP 密码', + 'username' => 'HTTP 用户名', + ), + 'change_favicon' => 'Change…', // TODO + 'clear_cache' => '总是清除缓存', + 'content_action' => array( + '_' => '获取原文后的操作', + 'append' => '添加在现有内容后部', + 'prepend' => '添加在现有内容前部', + 'replace' => '替换现有内容', + ), + 'content_retrieval' => 'Content retrieval', // TODO + 'css_cookie' => '获取原文时的 Cookies', + 'css_cookie_help' => '例:foo=bar; gdpr_consent=true; cookie=value', + 'css_help' => '用于获取全文(注意,这将耗费更多时间!)', + 'css_path' => '原文的 CSS 选择器', + 'css_path_filter' => array( + '_' => '需移除元素的 CSS 选择器', + 'help' => '可设置多个 CSS 选择器,例如:footer, aside, p[data-sanitized-class~="menu"]', + ), + 'description' => '描述', + 'empty' => '此源为空。请确认它是否正常更新。', + 'error' => '此源遇到一些问题。请在确认是否能正常访问后重试。', // DIRTY + 'export-as-opml' => array( + 'download' => '下载', + 'help' => 'XML 文件 (data subset. See documentation)', // DIRTY + 'label' => '导出为 OPML', + ), + 'ext_favicon' => 'Set automatically', // TODO + 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // TODO + 'filteractions' => array( + '_' => '过滤动作', + 'help' => '每行写一条过滤规则,过滤规则可见 文档。', + ), + 'http_headers' => 'HTTP Headers', // TODO + 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // TODO + 'icon' => 'Icon', // TODO + 'information' => '信息', + 'keep_min' => '至少保存的文章数', + 'kind' => array( + '_' => '订阅源类型', + 'html_json' => array( + '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // TODO + 'xpath' => array( + '_' => 'XPath for JSON in HTML', // TODO + 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // TODO + ), + ), + 'html_xpath' => array( + '_' => 'HTML + XPath (Web 抓取)', + 'feed_title' => array( + '_' => '订阅源标题', + 'help' => '如 //title 或是静态字符串如: "My custom feed"', + ), + 'help' => 'XPath 1.0 是为资深用户准备的标准查询语言,FreshRSS 用以实现 Web 抓取.', + 'item' => array( + '_' => '以寻找 文章
(很重要)', + 'help' => '例如 //div[@class="news-item"]', + ), + 'item_author' => array( + '_' => '文章作者', + 'help' => '可以是静态字符串,例如 "Anonymous"', + ), + 'item_categories' => '文章标签', + 'item_content' => array( + '_' => '文章内容', + 'help' => '例如使用 . 将整个对象作为文章内容', + ), + 'item_thumbnail' => array( + '_' => '文章缩略图', + 'help' => '例如 descendant::img/@src', + ), + 'item_timeFormat' => array( + '_' => '自定义日期/时间格式', + 'help' => '可选项, 格式参见 DateTime::createFromFormat() 例如 d-m-Y H:i:s', + ), + 'item_timestamp' => array( + '_' => '文章日期:', + 'help' => '结果将被 strtotime() 解析', + ), + 'item_title' => array( + '_' => '文章标题', + 'help' => '注意使用 XPath 轴 descendant::,例如 descendant::h2', + ), + 'item_uid' => array( + '_' => '文章唯一 ID', + 'help' => '可选,例如: descendant::div/@data-uri', + ), + 'item_uri' => array( + '_' => '文章链接 (URL)', + 'help' => '例如 descendant::a/@href', + ), + 'relative' => 'XPath(文章):', + 'xpath' => 'XPath 定位:', + ), + 'json_dotnotation' => array( + '_' => 'JSON (点表达式)', + 'feed_title' => array( + '_' => '订阅源标题', + 'help' => '例如: meta.title 或一个静态的字符串: "My custom feed"', + ), + 'help' => 'JSON 点表达式(JSON 路径)在对象之间使用点,在数组中使用中括号 (例如 data.items[0].title)', + 'item' => array( + '_' => '寻找新的 文章
(最重要的参数)', + 'help' => '包含文章数组的 JSON 路径, 例如 $ or newsItems', // DIRTY + ), + 'item_author' => '文章作者', + 'item_categories' => '文章标签', + 'item_content' => array( + '_' => '文章内容', + 'help' => '用于找到文章内容的键, 例如 content', + ), + 'item_thumbnail' => array( + '_' => '文章缩略图', + 'help' => '例如: image', + ), + 'item_timeFormat' => array( + '_' => '自定义时间格式', + 'help' => '可选项. 被 DateTime::createFromFormat() 支持的日期格式。例如 d-m-Y H:i:s', + ), + 'item_timestamp' => array( + '_' => '文章时间', + 'help' => '结果会被 strtotime() 解析', + ), + 'item_title' => '文章标题', + 'item_uid' => '文章唯一ID', + 'item_uri' => array( + '_' => '文章链接 (URL)', + 'help' => '例如: permalink', + ), + 'json' => 'JSON 路径:', + 'relative' => 'JSON 路径(相对于文章):', + ), + 'jsonfeed' => 'JSON 订阅源', + 'rss' => 'RSS / Atom (默认)', + 'xml_xpath' => 'XML + XPath', // IGNORE + ), + 'maintenance' => array( + 'clear_cache' => '清理缓存', + 'clear_cache_help' => '清除该feed的缓存', + 'reload_articles' => '重载文章', + 'reload_articles_help' => '重载 n 篇文章并抓取内容(若设置了 CSS 选择器)', + 'title' => '维护', + ), + 'max_http_redir' => '最大 HTTP 重定向', + 'max_http_redir_help' => '设置为 0 或留空以禁用,-1 表示无限重定向', + 'method' => array( + '_' => 'HTTP 方式', + ), + 'method_help' => '如果荷载非空且是合法的 JSON,HTTP 请求标头将被自动设为 application/json,否则使用 application/x-www-form-urlencoded', + 'method_postparams' => 'POST 荷载', + 'moved_category_deleted' => '删除分类时,其中的订阅源会自动归类到 %s', + 'mute' => array( + '_' => '暂停', + 'state_is_muted' => 'This feed is muted', // TODO + ), + 'no_selected' => '未选择订阅源', + 'number_entries' => '%d 篇文章', + 'open_feed' => 'Open feed %s', // TODO + 'path_entries_conditions' => 'Conditions for content retrieval', // TODO + 'priority' => array( + '_' => '可见性', + 'category' => '在分类中显示', + 'feed' => 'Show in its feed', // TODO + 'hidden' => '不显示', + 'important' => '在“重要的订阅”中显示', + 'main_stream' => '在首页中显示', + ), + 'proxy' => '获取订阅源时的代理', + 'proxy_help' => '选择协议(例:SOCKS5)和代理地址(例:127.0.0.1:1080 或者 username:password@127.0.0.1:1080)', + 'reset_favicon' => 'Reset to default', // TODO + 'selector_preview' => array( + 'show_raw' => '显示源码', + 'show_rendered' => '显示内容', + ), + 'show' => array( + 'all' => '显示所有订阅源', + 'error' => '仅显示有错误的订阅源', + ), + 'showing' => array( + 'error' => '正在显示有错误的订阅源', + ), + 'ssl_verify' => '验证 SSL 证书安全', + 'stats' => '统计', + 'think_to_add' => '你可以添加一些订阅源。', + 'timeout' => '超时时间(秒)', + 'title' => '标题', + 'title_add' => '添加订阅源', + 'ttl' => '最小自动更新间隔', + 'unicityCriteria' => array( + '_' => 'Article unicity criteria', // TODO + 'forced' => 'forced', // TODO + 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // TODO + 'id' => 'Standard ID (default)', // TODO + 'link' => 'Link', // TODO + 'sha1:content' => 'Content', // TODO + 'sha1:content_published' => 'Content + Date', // TODO + 'sha1:link_published' => 'Link + Date', // TODO + 'sha1:link_published_title' => 'Link + Date + Title', // TODO + 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // TODO + 'sha1:published' => 'Date', // TODO + 'sha1:title' => 'Title', // TODO + 'sha1:title_published' => 'Title + Date', // TODO + 'sha1:title_published_content' => 'Title + Date + Content', // TODO + ), + 'url' => '源地址', + 'useragent' => '设置用于获取此源的 User Agent', + 'useragent_help' => '例:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', + 'validator' => '检查订阅源有效性', + 'website' => '网站地址', + 'websub' => 'WebSub 即时通知', + ), + 'import_export' => array( + 'export' => array( + '_' => '导出', + 'sqlite' => 'Download user database as SQLite', // TODO + ), + 'export_labelled' => '导出有标签的文章', + 'export_opml' => '导出订阅源列表(OPML)', + 'export_starred' => '导出你的收藏', + 'feed_list' => '%s 文章列表', + 'file_to_import' => '需要导入的文件
(OPML、JSON 或 ZIP)', + 'file_to_import_no_zip' => '需要导入的文件
(OPML 或 JSON)', + 'import' => '导入', + 'starred_list' => '收藏文章列表', + 'title' => '导入/导出', + ), + 'menu' => array( + 'add' => '添加订阅源或分类', + 'import_export' => '导入/导出', + 'label_management' => '标签管理', + 'stats' => array( + 'idle' => '长期无更新订阅源', + 'main' => '主要统计', + 'repartition' => '文章分布', + ), + 'subscription_management' => '订阅管理', + 'subscription_tools' => '订阅工具', + ), + 'tag' => array( + 'auto_label' => '给新文章打标签', + 'name' => '名称', + 'new_name' => '新名称', + 'old_name' => '旧名称', + ), + 'title' => array( + '_' => '订阅管理', + 'add' => '添加订阅源或分类', + 'add_category' => '添加分类', + 'add_dynamic_opml' => '添加订阅源动态列表', + 'add_feed' => '添加订阅源', + 'add_label' => '打标签', + 'add_opml_category' => 'OPML category name', // TODO + 'delete_label' => '删除标签', + 'feed_management' => '订阅源管理', + 'subscription_tools' => '订阅工具', + ), +); diff --git a/app/i18n/zh-CN/user.php b/app/i18n/zh-CN/user.php new file mode 100644 index 000000000..1684623d9 --- /dev/null +++ b/app/i18n/zh-CN/user.php @@ -0,0 +1,54 @@ + array( + 'feedback' => array( + 'invalid' => '邮箱地址无效', + 'required' => '必须填写邮箱地址', + ), + 'validation' => array( + 'change_email' => '你可以在 用户管理 中变更你的邮箱地址', + 'email_sent_to' => '我们已通过 %s 发送验证邮件给你,请按其中指示来验证邮箱地址。', + 'feedback' => array( + 'email_failed' => '由于服务器配置错误,我们无法向你发送邮件。', + 'email_sent' => '邮件已发送到你的邮箱中', + 'error' => '邮箱地址无法通过验证', + 'ok' => '邮箱地址已成功通过验证', + 'unnecessary' => '该邮箱地址已被验证', + 'wrong_token' => '由于令牌错误,邮箱地址无法通过验证。', + ), + 'need_to' => '你需要先验证邮箱地址才能使用 %s', + 'resend_email' => '重发邮件', + 'title' => '验证邮箱地址', + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'body' => '%s,欢迎', + 'title' => '你需要验证你的帐户', + 'welcome' => '你已注册 %s 现在只需点击下方链接通过邮箱验证即可完成注册:', + ), + ), + 'password' => array( + 'invalid' => '无效密码', + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => '你必须接受服务条款才能注册', + ), + ), + 'username' => array( + 'invalid' => '无效用户名', + 'taken' => '已存在此用户名', + ), +); diff --git a/app/i18n/zh-TW/admin.php b/app/i18n/zh-TW/admin.php new file mode 100644 index 000000000..e19660e39 --- /dev/null +++ b/app/i18n/zh-TW/admin.php @@ -0,0 +1,240 @@ + array( + 'allow_anonymous' => '允許匿名閱讀預設使用者(%s)的文章', + 'allow_anonymous_refresh' => '允許匿名刷新文章', + 'api_enabled' => '允許 API 訪問 (用於手機應用 and sharing user queries)', // DIRTY + 'form' => '網頁表單(傳統方式, 需要 JavaScript)', + 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // TODO + 'none' => '無認證(危險)', + 'title' => '認證', + 'token' => '主要驗證權杖', + 'token_help' => '允許存取使用者的所有 RSS 輸出以及重整源而無需身份驗證:', + 'type' => '認證方式', + 'unsafe_autologin' => '允許不安全的自動登入方式:', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => '請檢查 ./data/cache 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'cache 目錄權限正常', + ), + 'categories' => array( + 'nok' => 'Category 表配置錯誤', + 'ok' => 'Category 表正常', + ), + 'connection' => array( + 'nok' => '資料庫連接失敗', + 'ok' => '資料庫連接正常', + ), + 'ctype' => array( + 'nok' => '找不到字元類型檢測庫(php-ctype)', + 'ok' => '已找到字元類型檢測庫 (php-ctype)', + ), + 'curl' => array( + 'nok' => '找不到 cURL 庫(php-cURL)', + 'ok' => '已找到 cURL 庫(php-cURL)', + ), + 'data' => array( + 'nok' => '請檢查 ./data 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'data 目錄權限正常', + ), + 'database' => '資料庫相關', + 'dom' => array( + 'nok' => '找不到用於瀏覽 DOM 的庫(php-xml)', + 'ok' => '已找到用於瀏覽 DOM 的庫(php-xml)', + ), + 'entries' => array( + 'nok' => 'Entry 表配置錯誤', + 'ok' => 'Entry 表正常', + ), + 'favicons' => array( + 'nok' => '請檢查 ./data/favicons 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'favicons 目錄權限正常', + ), + 'feeds' => array( + 'nok' => 'Feed 表配置錯誤', + 'ok' => 'Feed 表正常', + ), + 'fileinfo' => array( + 'nok' => '找不到 fileinfo 庫(php-fileinfo)', + 'ok' => '已找到 fileinfo 庫(php-fileinfo)', + ), + 'files' => '文件相關', + 'json' => array( + 'nok' => '找不到 JSON 擴展(php-json )', + 'ok' => '已找到 JSON 擴展(php-json)', + ), + 'mbstring' => array( + 'nok' => '找不到推薦的 Unicode 解析庫(mbstring)', + 'ok' => '已找到推薦的 Unicode 解析庫(mbstring)', + ), + 'pcre' => array( + 'nok' => '找不到正則表達式解析庫(php-pcre)', + 'ok' => '已找到正則表達式解析庫(php-pcre)', + ), + 'pdo' => array( + 'nok' => '找不到 PDO 或支持的驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', + 'ok' => '已找到 PDO 和支持的至少一種驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', + ), + 'php' => array( + '_' => 'PHP 相關', + 'nok' => '你的 PHP 版本為 %s,但 FreshRSS 最低需要 %s', + 'ok' => '你的 PHP 版本為 %s,與 FreshRSS 相容', + ), + 'tables' => array( + 'nok' => '資料庫中缺少一個或多個表', + 'ok' => '資料庫中相關表存在', + ), + 'title' => '環境檢查', + 'tokens' => array( + 'nok' => '請檢查 ./data/tokens 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'tokens 目錄權限正常', + ), + 'users' => array( + 'nok' => '請檢查 ./data/users 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'users 目錄權限正常', + ), + 'zip' => array( + 'nok' => '找不到 ZIP 擴展(php-zip)', + 'ok' => '已找到 ZIP 擴展', + ), + ), + 'extensions' => array( + 'author' => '作者', + 'community' => '可用的社群擴充功能', + 'description' => '描述', + 'disabled' => '已禁用', + 'empty_list' => '沒有已安裝的擴充功能', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO + 'enabled' => '已啟用', + 'latest' => '已安裝', + 'name' => '名稱', + 'no_configure_view' => '此擴充功能不能配置。', + 'system' => array( + '_' => '系統擴充功能', + 'no_rights' => '系統擴充功能(你無權修改)', + ), + 'title' => '擴充功能', + 'update' => '更新可用', + 'user' => '用戶擴充功能', + 'version' => '版本', + ), + 'stats' => array( + '_' => '統計', + 'all_feeds' => '所有訂閱源', + 'category' => '分類', + 'entry_count' => '文章數', + 'entry_per_category' => '各分類文章數', + 'entry_per_day' => '近三十日每日文章數', + 'entry_per_day_of_week' => '一週各日(平均:%.2f 條消息)', + 'entry_per_hour' => '各小時(平均:%.2f 條消息)', + 'entry_per_month' => '各月(平均:%.2f 條消息)', + 'entry_repartition' => '文章分布', + 'feed' => '訂閱源', + 'feed_per_category' => '各分類訂閱源數', + 'idle' => '長期無更新訂閱源', + 'main' => '主要統計', + 'main_stream' => '首頁', + 'no_idle' => '訂閱源近期皆有更新!', + 'number_entries' => '%d 篇文章', + 'overview' => 'Overview', // TODO + 'percent_of_total' => '%', + 'repartition' => '文章分布: %s', // DIRTY + 'status_favorites' => '收藏', + 'status_read' => '已讀', + 'status_total' => '總計', + 'status_unread' => '未讀', + 'title' => '統計', + 'top_feed' => '前十訂閱源', + ), + 'system' => array( + '_' => '系統配置', + 'auto-update-url' => '自動升級伺服器地址', + 'base-url' => array( + '_' => '基本URL', + 'recommendation' => '自動推薦: %s', + ), + 'cookie-duration' => array( + 'help' => '單位(秒)', + 'number' => '保持登錄的時長', + ), + 'force_email_validation' => '強制驗證郵箱地址', + 'instance-name' => '實例名稱', + 'max-categories' => '各使用者分類數限制', + 'max-feeds' => '各使用者訂閱源數限制', + 'registration' => array( + 'number' => '最大使用者數', + 'select' => array( + 'label' => '註冊表單', + 'option' => array( + 'noform' => '禁用,無註冊表單', + 'nolimit' => '啟用,且無帳號限制', + 'setaccountsnumber' => '設置使用者數的最大值', + ), + ), + 'status' => array( + 'disabled' => '註冊表單禁用', + 'enabled' => '註冊表單啟用', + ), + 'title' => '使用者註冊表單', + ), + 'sensitive-parameter' => '敏感參數。手動編輯於 ./data/config.php', + 'tos' => array( + 'disabled' => '未被給予', + 'enabled' => '為啟用的', + 'help' => '如何 啟用服務條款', + ), + 'websub' => array( + 'help' => '關於 WebSub', + ), + ), + 'update' => array( + '_' => '更新系統', + 'apply' => '應用', + 'changelog' => '更新紀錄', + 'check' => '檢查更新', + 'copiedFromURL' => 'update.php 複製從 %s 至 ./data', + 'current_version' => '當前 版本為', + 'last' => '上次檢查', + 'loading' => '更新中…', + 'none' => '沒有可用更新', + 'releaseChannel' => array( + '_' => '發佈通道', + 'edge' => '滾動式發佈(“edge”)', + 'latest' => '穩定式發佈(“latest”)', + ), + 'title' => '系統更新', + 'viaGit' => '從git並由GitHub.com開始', + ), + 'user' => array( + 'admin' => '管理員', + 'article_count' => '文章數', + 'back_to_manage' => '← 返回使用者列表', + 'create' => '新增使用者', + 'database_size' => '資料庫大小', + 'email' => '郵箱地址', + 'enabled' => '已啟用', + 'feed_count' => '訂閱源數', + 'is_admin' => '管理員', + 'language' => '語言', + 'last_user_activity' => '上次使用者活躍', + 'list' => '使用者列表', + 'number' => '已有 %d 個使用者', + 'numbers' => '已有 %d 個使用者', + 'password_form' => '密碼
(用於網頁表單登錄方式)', + 'password_format' => '至少 7 個字元', + 'title' => '使用者管理', + 'username' => '使用者名稱', + ), +); diff --git a/app/i18n/zh-TW/api.php b/app/i18n/zh-TW/api.php new file mode 100644 index 000000000..0021dfa98 --- /dev/null +++ b/app/i18n/zh-TW/api.php @@ -0,0 +1,33 @@ + array( + 'address' => 'Your API address:', // TODO + '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 + ), + 'test' => array( + 'fever' => 'Fever API configuration test:', // TODO + 'greader' => 'Google Reader API configuration test:', // TODO + ), + 'title' => array( + '_' => 'FreshRSS API endpoints', // TODO + 'extension' => 'API for extensions', // TODO + 'fever' => 'Fever compatible API', // TODO + 'greader' => 'Google Reader compatible API', // TODO + ), + ), +); diff --git a/app/i18n/zh-TW/conf.php b/app/i18n/zh-TW/conf.php new file mode 100644 index 000000000..ac83b7c1f --- /dev/null +++ b/app/i18n/zh-TW/conf.php @@ -0,0 +1,372 @@ + array( + '_' => '歸檔', + 'exception' => '高級清理策略', + 'help' => '具體選項位於各訂閱源的設置', + 'keep_favourites' => '不清理已收藏的文章', + 'keep_labels' => '不清理標籤', + 'keep_max' => '最多保留的文章數', // DIRTY + 'keep_min_by_feed' => '至少保留的文章數', + 'keep_period' => '文章最多保留', + 'keep_unreads' => '不清理未讀文章', + 'maintenance' => '優化', + 'optimize' => '優化資料庫', + 'optimize_help' => '偶爾執行優化可以減少資料庫大小', + 'policy' => '清理策略', + 'policy_warning' => '如果未選擇清理策略,則將保留全部文章。', + 'purge_now' => '立即清除', + 'title' => '存檔', + 'ttl' => '最小自動刷新間隔', + ), + 'display' => array( + '_' => '顯示', + 'darkMode' => array( + '_' => '自動黑暗模式', + 'auto' => '自動', + 'help' => '僅適用於相容主題', + 'no' => '否', + ), + 'icon' => array( + 'bottom_line' => '底欄', + 'display_authors' => '作者', + 'entry' => '文章圖示', + 'publication_date' => '更新日期', + 'related_tags' => '相關標籤', + 'sharing' => '分享', + 'summary' => '摘要', + 'top_line' => '頂欄', + ), + 'language' => '語言', + 'notif_html5' => array( + 'seconds' => '秒(0 表示不超時)', + 'timeout' => 'HTML5 通知超時時間', + ), + 'show_nav_buttons' => '顯示導航按鈕', + 'theme' => array( + '_' => '主題', + 'deprecated' => array( + '_' => '已廢棄', + 'description' => '此主題不再被支援且將不再可用在 未來FreshRSS的更新', + ), + ), + 'theme_not_available' => '“%s” 主題不再可用,請選擇其他主題。', + 'thumbnail' => array( + 'label' => '縮圖', + 'landscape' => '風景', + 'none' => '無', + 'portrait' => '肖像', + 'square' => '方塊', + ), + 'timezone' => '時區', + 'title' => '顯示', + 'website' => array( + 'full' => '圖示及名稱', + 'icon' => '僅圖示', + 'label' => '網站', + 'name' => '僅名稱', + 'none' => '無', + ), + 'width' => array( + 'content' => '內容寬度', + 'large' => '寬', + 'medium' => '中', + 'no_limit' => '無限制', + 'thin' => '窄', + ), + ), + 'logs' => array( + 'loglist' => array( + 'level' => '日誌等級', + 'message' => '訊息', + 'timestamp' => '時間', + ), + 'pagination' => array( + 'first' => '首頁', + 'last' => '末頁', + 'next' => '下一頁', + 'previous' => '上一頁', + ), + ), + 'mark_read_button' => array( + '_' => '“Mark all as read” button', // TODO + 'big' => 'Big', // TODO + 'none' => 'None', // TODO + 'small' => 'Small', // TODO + ), + 'notification_timeout' => array( + 'bad' => array( + 'label' => 'Show warning banner', // TODO + 'seconds' => 'seconds (at least 1)', // TODO + ), + 'good' => array( + 'label' => 'Show acknowledgement banner', // TODO + 'seconds' => 'seconds (0 means not shown)', // TODO + ), + ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), + 'profile' => array( + '_' => '個人資料管理', + 'api' => array( + '_' => 'API 管理', + 'api_not_set' => 'API password not set', // TODO + 'api_set' => 'API password set', // TODO + 'check_link' => 'Check API status via: %s', // TODO + 'disabled' => 'The API access is disabled.', // TODO + 'documentation_link' => 'See the documentation and list of known apps', // TODO + 'help' => 'See documentation', // TODO + ), + 'change_password' => 'Change password', // TODO + 'confirm_new_password' => 'Confirm new password', // TODO + 'current_password' => 'Current password
(for the Web-form login method)', // TODO + 'delete' => array( + '_' => '帳號刪除', + 'warn' => '你的帳號及所有相關資料將被刪除。', + ), + 'email' => '郵箱地址', + 'new_password' => 'New password', // TODO + 'password_api' => 'API 密碼
(例如用於手機應用)', + 'password_format' => '至少 7 個字元', + 'title' => '個人資料', + ), + 'query' => array( + '_' => '自定義查詢', + 'deprecated' => '此查詢不再有效。相關的分類或訂閱源已被刪除。', + 'description' => 'Description', // TODO + 'filter' => array( + '_' => '生效的過濾器:', + 'categories' => '按分類顯示', + 'feeds' => '按訂閱源顯示', + 'order' => '按日期排序', + 'search' => '表達式', + 'shareOpml' => '啟用透過對應類別和源的OPML分享', + 'shareRss' => '啟用透過HTML分享 & RSS', + 'state' => '狀態', + 'tags' => '按標籤顯示', + 'type' => '類型', + ), + 'get_A' => 'Show all feeds, also those shown in their category', // TODO + 'get_Z' => 'Show all feeds, also archived ones', // TODO + 'get_all' => '顯示所有文章', + 'get_all_labels' => '顯示任何標籤的文章', + 'get_category' => '顯示分類 “%s”', + 'get_favorite' => '顯示收藏文章', + 'get_feed' => '顯示訂閱源 “%s”', + 'get_important' => '顯示來自重要源的文章', + 'get_label' => '顯示帶有 “%s” 標籤的文章', + 'help' => '請參閱 有關使用者查詢和透過 HTML / RSS / OPML 重新共用的文件.', + 'image_url' => '影像網址', + 'name' => '名稱', + 'no_filter' => '無過濾器', + 'no_queries' => array( + '_' => 'No user queries are saved yet.', // TODO + 'help' => 'See documentation', // TODO + ), + 'number' => '查詢 n°%d', + 'order_asc' => '由舊至新顯示文章', + 'order_desc' => '由新至舊顯示文章', + 'search' => '搜尋 “%s”', + 'share' => array( + '_' => '透過連結分享此查詢', + 'disabled' => array( + '_' => 'disabled', // TODO + 'title' => 'Sharing', // TODO + ), + 'greader' => 'GReader JSON的可共享連結', + 'help' => '如果您想與任何人分享此查詢,請提供此連結', + 'html' => 'HTML頁面的可共享連結', + 'opml' => 'OPML源列表的可共享連結', + 'rss' => 'RSS源的可共享連結', + ), + 'state_0' => '顯示所有文章', + 'state_1' => '顯示已讀文章', + 'state_2' => '顯示未讀文章', + 'state_3' => '顯示所有文章', + 'state_4' => '顯示收藏文章', + 'state_5' => '顯示已讀的收藏文章', + 'state_6' => '顯示未讀的收藏文章', + 'state_7' => '顯示收藏文章', + 'state_8' => '顯示未收藏文章', + 'state_9' => '顯示已讀的未收藏文章', + 'state_10' => '顯示未讀的未收藏文章', + 'state_11' => '顯示未收藏文章', + 'state_12' => '顯示所有文章', + 'state_13' => '顯示已讀文章', + 'state_14' => '顯示未讀文章', + 'state_15' => '顯示所有文章', + 'title' => '自定義查詢', + ), + 'reading' => array( + '_' => '閱讀', + 'after_onread' => '「全部標記為已讀」後', + 'always_show_favorites' => '預設顯示收藏夾中所有的文章', + 'apply_to_individual_feed' => 'Applies to feeds individually', // TODO + 'article' => array( + 'authors_date' => array( + '_' => '作者和日期', + 'both' => '兩者都顯示', + 'footer' => '僅頁腳顯示', + 'header' => '僅頁眉顯示', + 'none' => '不顯示', + ), + 'feed_name' => array( + 'above_title' => '在文章標題和標籤上方', + 'none' => '不顯示', + 'with_authors' => '與作者和日期一行', + ), + 'feed_title' => '訂閱源標題', + 'icons' => array( + '_' => '文章圖示的位置
(限閱讀視圖)', + 'above_title' => '標題之上', + 'with_authors' => '在作者和日期列中', + ), + 'tags' => array( + '_' => '文章標籤', + 'both' => '兩者都顯示', + 'footer' => '僅頁腳顯示', + 'header' => '僅頁眉顯示', + 'none' => '不顯示', + ), + 'tags_max' => array( + '_' => '標籤最多顯示個數', + 'help' => '0 標識顯示所有標籤', + ), + ), + 'articles_per_page' => '每頁文章數', + 'auto_load_more' => '在頁面底部載入更多文章', + 'auto_remove_article' => '閱讀後隱藏文章', + 'confirm_enabled' => '「全部標記為已讀」時顯示確認對話框', + 'display_articles_unfolded' => '預設展開顯示文章', + 'display_categories_unfolded' => '要展開的分類', + 'headline' => array( + 'articles' => '文章:打開/關閉', + 'articles_header_footer' => '文章: 頁眉/頁腳', + 'categories' => '左側導航:分類', + 'mark_as_read' => '標為已讀選項', + 'misc' => '其它', + 'view' => '瀏覽', + ), + 'hide_read_feeds' => '隱藏沒有未讀文章的分類和訂閱源 (啟用「顯示所有文章」後不生效)', + 'img_with_lazyload' => '延遲加載圖片', + 'jump_next' => '跳轉到下一未讀項', + 'mark_updated_article_unread' => '將更新的文章設為未讀', + 'number_divided_when_reader' => '閱讀視圖中顯示一半', + 'read' => array( + 'article_open_on_website' => '在打開原文章後', + 'article_viewed' => '在文章被瀏覽後', + 'focus' => '當注意力集中時(重要的源除外)', + 'keep_max_n_unread' => '未讀最多保留 n 條', + 'scroll' => '在滾動瀏覽後(重要的源除外)', // DIRTY + 'upon_gone' => '在被原訂閱源移除後', + 'upon_reception' => '在接收文章後', + 'when' => '何時將文章標記為已讀', + 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // TODO + 'when_same_title_in_feed' => '已存在 n 條相同標題文章 (of the feed)', // DIRTY + ), + 'show' => array( + '_' => '文章顯示', + 'active_category' => '啟用的分類', + 'adaptive' => 'Show unreads if any, all articles otherwise', // TODO + 'all_articles' => '顯示所有', + 'all_categories' => '所有分類', + 'no_category' => '無分類', + 'remember_categories' => '記住打開的分類', + 'unread' => '只顯示未讀', + 'unread_or_favorite' => 'Show unreads and favourites', // TODO + ), + 'show_fav_unread_help' => '同樣適用於標籤', + 'sides_close_article' => '點擊文章區域外以關閉', + 'sort' => array( + '_' => '排列順序', + 'newer_first' => '由新至舊', + 'older_first' => '由舊至新', + ), + 'star' => array( + 'when' => '標記一篇文章為最愛…', + ), + 'sticky_post' => '打開文章時將其置於頁首', + 'title' => '閱讀', + 'view' => array( + 'default' => '預設視圖', + 'global' => '全屏視圖', + 'normal' => '普通視圖', + 'reader' => '閱讀視圖', + ), + ), + 'sharing' => array( + '_' => '分享', + 'add' => '新增分享方式', + 'bluesky' => 'Bluesky', // TODO + 'deprecated' => '這項功能已廢棄並在將來版本的 FreshRSS 中移除,詳情請見 說明文檔.', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => '郵箱', // IGNORE + 'facebook' => '臉書', // IGNORE + 'more_information' => '更多資訊', + 'print' => '列印', + 'raindrop' => 'Raindrop.io', // IGNORE + 'remove' => '刪除分享方式', + 'shaarli' => 'Shaarli', // IGNORE + 'share_name' => '名稱', + 'share_url' => '地址', + 'title' => '分享', + 'twitter' => '推特', // IGNORE + 'wallabag' => 'Wallabag', // IGNORE + ), + 'shortcut' => array( + '_' => '快捷鍵', + 'article_action' => '文章操作', + 'auto_share' => '分享', + 'auto_share_help' => '如果有多種分享方式,則會按照它們的序號依次訪問。', + 'close_menus' => '關閉菜單', + 'collapse_article' => '收起文章', + 'first_article' => '打開第一篇文章', + 'focus_search' => '聚焦到搜尋框', + 'global_view' => '切換到全屏視圖', + 'help' => '顯示幫助文檔', + 'javascript' => '若要使用快捷鍵,必須啟用 JavaScript', + 'last_article' => '打開最後一篇文章', + 'load_more' => '載入更多文章', + 'mark_favorite' => '加入收藏', + 'mark_read' => '設為已讀', + 'navigation' => '瀏覽', + 'navigation_help' => '組合 ⇧ Shift 鍵,瀏覽快捷鍵將生效於訂閱源。
組合 Alt ⎇ 鍵,瀏覽快捷鍵將生效於分類。', + 'navigation_no_mod_help' => '以下快捷鍵不支持組合鍵(Shift 或 Alt)', + 'next_article' => '打開下一篇文章', + 'next_unread_article' => '打開下一篇未讀文章', + 'non_standard' => '這些鍵 (%s) 可能不能作為快捷鍵', + 'normal_view' => '切換到普通視圖', + 'other_action' => '其它操作', + 'previous_article' => '打開上一篇文章', + 'reading_view' => '切換到閱讀視圖', + 'rss_view' => '切換到 RSS 視圖', + 'see_on_website' => '在原網站中查看', + 'shift_for_all_read' => '組合 Alt ⎇鍵 將上方的文章標記為已讀
組合 ⇧ Shift按鍵 可以將全部文章設為已讀', + 'skip_next_article' => '跳轉到下一篇文章而不打開', + 'skip_previous_article' => '跳轉到上一篇文章而不打開', + 'title' => '快捷鍵', + 'toggle_media' => '播放/暫停媒體', + 'user_filter' => '顯示自定義查詢', + 'user_filter_help' => '如果有多個自定義過濾器,則會按照它們的序號依次訪問。', + 'views' => '視圖', + ), + 'user' => array( + 'articles_and_size' => '%s 篇文章 (%s)', + 'current' => '當前使用者', + 'is_admin' => '該使用者為管理員', + 'users' => '使用者', + ), +); diff --git a/app/i18n/zh-TW/feedback.php b/app/i18n/zh-TW/feedback.php new file mode 100644 index 000000000..4bdf243a4 --- /dev/null +++ b/app/i18n/zh-TW/feedback.php @@ -0,0 +1,152 @@ + array( + 'denied' => '你無權訪問此頁面', + 'not_found' => '你尋找的頁面不存在', + ), + 'admin' => array( + 'optimization_complete' => '優化完成', + ), + 'api' => array( + 'password' => array( + 'failed' => '您的密碼無法修改', + 'updated' => '您的密碼已修改', + ), + ), + 'auth' => array( + 'login' => array( + 'invalid' => '使用者名或密碼無效', + 'success' => '登入成功', + ), + 'logout' => array( + 'success' => '已登出', + ), + ), + 'conf' => array( + 'error' => '保存配置時出錯', + 'query_created' => '查詢 “%s” 已創建。', + 'shortcuts_updated' => '快捷鍵已更新', + 'updated' => '配置已更新', + ), + 'extensions' => array( + 'already_enabled' => '%s 已啟用', + 'cannot_remove' => '無法刪除 %s', + 'disable' => array( + 'ko' => '禁用 %s 失敗。檢查 FreshRSS 日誌 查看詳情。', + 'ok' => '%s 現已禁用', + ), + 'enable' => array( + 'ko' => '%s 啟用失敗。檢查 FreshRSS 日誌 查看詳情。', + 'ok' => '%s 現已啟用', + ), + 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // TODO + 'no_access' => '你無權訪問 %s', + 'not_enabled' => '%s 未啟用', + 'not_found' => '%s 不存在', + 'removed' => '%s 已刪除', + ), + 'import_export' => array( + 'export_no_zip_extension' => '伺服器未啟用 ZIP 擴展。請嘗試逐個導出文件。', + 'feeds_imported' => '你的訂閱已導入,即將刷新 / Your feeds have been imported. If you are done importing, you can now click the Update feeds button.', + 'feeds_imported_with_errors' => '你的訂閱源已導入,但發生錯誤 / Your feeds have been imported, but some errors occurred. If you are done importing, you can now click the Update feeds button.', + 'file_cannot_be_uploaded' => '文件未能上傳!', + 'no_zip_extension' => '伺服器未啟用 ZIP 擴展。', + 'zip_error' => '導入 ZIP 文件時出錯', // DIRTY + ), + 'profile' => array( + 'error' => '你的帳戶修改失敗', + 'passwords_dont_match' => 'Passwords don’t match', // TODO + 'updated' => '你的帳戶已修改', + ), + 'sub' => array( + 'actualize' => '獲取', + 'articles' => array( + 'marked_read' => '文章已標記為已讀', + 'marked_unread' => '文章已標記為未讀', + ), + 'category' => array( + 'created' => '已創建分類 %s', + 'deleted' => '已刪除分類', + 'emptied' => '已清空分類', + 'error' => '更新分類失敗', + 'name_exists' => '分類名已存在', + 'no_id' => '你必須明確分類編號', + 'no_name' => '分類名不能為空', + 'not_delete_default' => '你不能刪除默認分類!', + 'not_exist' => '分類不存在!', + 'over_max' => '你已達到分類數上限(%d)', + 'updated' => '已更新分類', + ), + 'feed' => array( + 'actualized' => '已更新 %s', + 'actualizeds' => '已更新訂閱源', + 'added' => '訂閱源 %s 已添加', + 'already_subscribed' => '你已訂閱 %s', + 'cache_cleared' => '%s 緩存已清理', + 'deleted' => '已刪除訂閱源', + 'error' => '訂閱源更新失敗', + 'favicon' => array( + 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // TODO + 'unsupported_format' => 'Unsupported image file format!', // TODO + ), + 'internal_problem' => '訂閱源添加失敗。檢查 FreshRSS 日誌 查看詳情。你可以在地址連結後附加 #force_feed 從而嘗試強制添加。', + 'invalid_url' => '地址鏈接 %s 無效', + 'n_actualized' => '已更新 %d 個訂閱源', + 'n_entries_deleted' => '已刪除 %d 篇文章', + 'no_refresh' => '沒有可刷新的訂閱源…', + 'not_added' => '%s 添加失敗', + 'not_found' => '無法找到訂閱', + 'over_max' => '你已達到訂閱源數上限(%d)', + 'reloaded' => '%s 已重置', + 'selector_preview' => array( + 'http_error' => '無法加載網站內容。', + 'no_entries' => '您的訂閱中沒有任何條目。您至少需要一個條目來創建一個預覽。', + 'no_feed' => '網絡錯誤(訂閱源不存在)', + 'no_result' => '選擇器沒有匹配到任何東西。作為備用,原始的feed文本將被顯示出來。', + 'selector_empty' => '選擇器是空的。你需要一個來創建預覽。', + ), + 'updated' => '已更新訂閱源', + ), + 'purge_completed' => '清除完成(已刪除 %d 篇文章)', + ), + 'tag' => array( + 'created' => '標籤 “%s” 已創建。', + 'error' => '無法更新標籤!', + 'name_exists' => '標籤名已存在。', + 'renamed' => '標籤 “%s” 已被重命名為 “%s”。', + 'updated' => '已更新標籤。', + ), + 'update' => array( + 'can_apply' => 'FreshRSS 將更新到 版本 %s。', + 'error' => '更新出錯:%s', + 'file_is_nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'finished' => '更新完成!', + 'none' => '沒有可用更新', + 'server_not_found' => '找不到更新伺服器 [%s]', + ), + 'user' => array( + 'created' => array( + '_' => '已創建使用者 %s', + 'error' => '創建使用者 %s 失敗', + ), + 'deleted' => array( + '_' => '已刪除使用者 %s', + 'error' => '刪除使用者 %s 失敗', + ), + 'updated' => array( + '_' => '已更新使用者 %s', + 'error' => '更新使用者 %s 失敗', + ), + ), +); diff --git a/app/i18n/zh-TW/gen.php b/app/i18n/zh-TW/gen.php new file mode 100644 index 000000000..d7216765a --- /dev/null +++ b/app/i18n/zh-TW/gen.php @@ -0,0 +1,277 @@ + array( + 'actualize' => '更新提要', + 'add' => '新增', + 'back_to_rss_feeds' => '← 返回訂閱源', + 'cancel' => '取消', + 'close' => 'Close', // TODO + 'create' => '創建', + 'delete_all_feeds' => 'Delete all feeds', // TODO + 'delete_errored_feeds' => 'Delete feeds with errors', // TODO + 'delete_muted_feeds' => '刪除已暫停的訂閱源', + 'demote' => '撤銷管理員', + 'disable' => '禁用', + 'download' => 'Download', // TODO + 'empty' => '清空', + 'enable' => '啟用', + 'export' => '導出', + 'filter' => '過濾', + 'import' => '導入', + 'load_default_shortcuts' => '重置快捷鍵', + 'manage' => '管理', + 'mark_read' => '標記已讀', + 'menu' => array( + 'open' => '開啟選單', + ), + 'nav_buttons' => array( + 'next' => '下一篇文章', + 'prev' => '預覽文章', + 'up' => '回上一篇', + ), + 'open_url' => '打開連結', + 'promote' => '設為管理員', + 'purge' => '清理', + 'refresh_opml' => '更新訂閱源動態列表', + 'remove' => '刪除', + 'rename' => '重命名', + 'see_website' => '網站中查看', + 'submit' => '提交', + 'truncate' => '刪除所有文章', + 'update' => '更新訂閱', + ), + 'auth' => array( + 'accept_tos' => '我接受 服務條款', + 'email' => 'Email 地址', + 'keep_logged_in' => '%s 天內保持登入', + 'login' => '登入', + 'logout' => '登出', + 'password' => array( + '_' => '密碼', + 'format' => '至少 7 個字元', + ), + 'reauth' => array( + 'header' => 'Reauthentication is required', // TODO + 'tip' => 'You won’t be asked to sign in again for %d minutes', // TODO + 'title' => 'Reauthentication', // TODO + ), + 'registration' => array( + '_' => '新使用者', + 'ask' => '創建新使用者?', + 'title' => '使用者創建', + ), + 'username' => array( + '_' => '帳號', + 'format' => '最多 16 個數字或字母', + ), + ), + 'date' => array( + 'Apr' => '\\四\\月', + 'Aug' => '\\八\\月', + 'Dec' => '\\十\\二\\月', + 'Feb' => '\\二\\月', + 'Jan' => '\\一\\月', + 'Jul' => '\\七\\月', + 'Jun' => '\\六\\月', + 'Mar' => '\\三\\月', + 'May' => '\\五\\月', + 'Nov' => '\\十\\一\\月', + 'Oct' => '\\十\\月', + 'Sep' => '\\九\\月', + 'apr' => '四月', + 'april' => '四月', + 'aug' => '八月', + 'august' => '八月', + 'before_yesterday' => '昨天以前', + 'dec' => '十二月', + 'december' => '十二月', + 'feb' => '二月', + 'february' => '二月', + 'format_date' => 'Y\\年n\\月j\\日', + 'format_date_hour' => 'Y\\年n\\月j\\日 H\\:i', + 'fri' => '週五', + 'jan' => '一月', + 'january' => '一月', + 'jul' => '七月', + 'july' => '七月', + 'jun' => '六月', + 'june' => '六月', + 'last_2_year' => '過去兩年', + 'last_3_month' => '最近三個月', + 'last_3_year' => '過去三年', + 'last_5_year' => '過去五年', + 'last_6_month' => '最近六個月', + 'last_month' => '上月', + 'last_week' => '上週', + 'last_year' => '去年', + 'mar' => '三月', + 'march' => '三月', + 'may' => '五月', + 'may_' => '五月', + 'mon' => '週一', + 'month' => '個月', + 'nov' => '十一月', + 'november' => '十一月', + 'oct' => '十月', + 'october' => '十月', + 'sat' => '週六', + 'sep' => '九月', + 'september' => '九月', + 'sun' => '週日', + 'thu' => '週四', + 'today' => '今天', + 'tue' => '週二', + 'wed' => '週三', + 'yesterday' => '昨天', + ), + 'dir' => 'ltr', // IGNORE + 'freshrss' => array( + '_' => 'FreshRSS', // IGNORE + 'about' => '關於 FreshRSS', + ), + 'js' => array( + 'category_empty' => '清空分類', + 'confirm_action' => '你確定要執行此操作嗎?這將不可撤銷!', + 'confirm_action_feed_cat' => '你確定要執行此操作嗎?你將丟失相關的收藏和自定義查詢。這將不可撤銷!', + 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // TODO + 'feedback' => array( + 'body_new_articles' => 'FreshRSS 中有 %%d 篇文章等待閱讀。', + 'body_unread_articles' => '(未讀: %%d)', + 'request_failed' => '請求失敗,這可能是因為網絡連接問題。', + 'title_new_articles' => 'FreshRSS: 新文章!', + ), + 'labels_empty' => '沒有標籤', + 'new_article' => '發現新文章,點擊刷新頁面。', + 'should_be_activated' => '必須啟用 JavaScript', + 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // TODO + ), + 'lang' => array( + 'cs' => 'Čeština', // IGNORE + 'de' => 'Deutsch', // IGNORE + 'el' => 'Ελληνικά', // IGNORE + 'en' => 'English', // IGNORE + 'en-US' => 'English (United States)', // IGNORE + 'es' => 'Español', // IGNORE + 'fa' => 'فارسی', // IGNORE + 'fi' => 'Suomi', // IGNORE + 'fr' => 'Français', // IGNORE + 'he' => 'עברית', // IGNORE + 'hu' => 'Magyar', // IGNORE + 'id' => 'Bahasa Indonesia', // IGNORE + 'it' => 'Italiano', // IGNORE + 'ja' => '日本語', // IGNORE + 'ko' => '한국어', // IGNORE + 'lv' => 'Latviešu', // IGNORE + 'nl' => 'Nederlands', // IGNORE + 'oc' => 'Occitan', // IGNORE + 'pl' => 'Polski', // IGNORE + 'pt-BR' => 'Português (Brasil)', // IGNORE + 'pt-PT' => 'Português (Portugal)', // IGNORE + 'ru' => 'Русский', // IGNORE + 'sk' => 'Slovenčina', // IGNORE + 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE + 'zh-CN' => '简体中文', // IGNORE + 'zh-TW' => '正體中文', // IGNORE + ), + 'menu' => array( + 'about' => '關於', + 'account' => '帳號', + 'admin' => '管理', + 'archiving' => '歸檔', + 'authentication' => '認證', + 'check_install' => '環境檢查', + 'configuration' => '配置', + 'display' => '顯示', + 'extensions' => '擴充功能', + 'logs' => '日誌', + 'privacy' => 'Privacy', // TODO + 'queries' => '自定義查詢', + 'reading' => '閱讀', + 'search' => '搜尋內容或#標簽', + 'search_help' => '請見文檔內的進階的搜尋參數', + 'sharing' => '分享', + 'shortcuts' => '快捷鍵', + 'stats' => '統計', + 'system' => '系統配置', + 'update' => '更新', + 'user_management' => '使用者管理', + 'user_profile' => '使用者資訊', + ), + 'period' => array( + 'days' => '天', + 'hours' => '時', + 'months' => '月', + 'weeks' => '週', + 'years' => '年', + ), + 'readme' => array( + 'contribute' => 'contribute', // IGNORE + 'language' => 'Language', // IGNORE + 'translated' => 'Progress', // IGNORE + ), + 'share' => array( + 'Known' => '基於 Known 的站點', + 'archiveIS' => 'archive.is', // IGNORE + 'archiveORG' => 'archive.org', // IGNORE + 'archivePH' => 'archive.ph', // IGNORE + 'bluesky' => 'Bluesky', // IGNORE + 'buffer' => 'Buffer', // IGNORE + 'clipboard' => '剪貼板', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => '郵箱', // IGNORE + 'email-webmail-firefox-fix' => 'Email (webmail - Firefox專用修正)', + 'facebook' => '臉書', // IGNORE + 'gnusocial' => 'GNU social', // IGNORE + 'jdh' => 'Journal du hacker', // IGNORE + 'lemmy' => 'Lemmy', // IGNORE + 'linkding' => 'Linkding', // IGNORE + 'linkedin' => 'LinkedIn', // IGNORE + 'mastodon' => 'Mastodon', // IGNORE + 'movim' => 'Movim', // IGNORE + 'omnivore' => 'Omnivore', // IGNORE + 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // IGNORE + 'pocket' => 'Pocket', // IGNORE + 'print' => '打印', + 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // IGNORE + 'shaarli' => 'Shaarli', // IGNORE + 'telegram' => 'Telegram', // IGNORE + 'twitter' => '推特', // IGNORE + 'wallabag' => 'Wallabag v1', // IGNORE + 'wallabagv2' => 'Wallabag v2', // IGNORE + 'web-sharing-api' => 'Web分享', + 'whatsapp' => 'Whatsapp', // IGNORE + 'xing' => 'Xing', // IGNORE + ), + 'short' => array( + 'attention' => '警告!', + 'blank_to_disable' => '留空以禁用', + 'by_author' => '作者', + 'by_default' => '預設', + 'damn' => '錯誤!', + 'default_category' => '未分類', + 'no' => '否', + 'not_applicable' => '不可用', + 'ok' => '正常!', + 'or' => '或', + 'yes' => '是', + ), + 'stream' => array( + 'load_more' => '載入更多文章', + 'mark_all_read' => '全部設為已讀', + 'nothing_to_load' => '沒有更多文章', + ), +); diff --git a/app/i18n/zh-TW/index.php b/app/i18n/zh-TW/index.php new file mode 100644 index 000000000..4fcae7478 --- /dev/null +++ b/app/i18n/zh-TW/index.php @@ -0,0 +1,110 @@ + array( + '_' => '關於', + 'agpl3' => 'AGPL 3', // IGNORE + 'bug_reports' => array( + 'environment_information' => array( + '_' => 'System information', // TODO + 'browser' => 'Browser', // TODO + 'database' => 'Database', // TODO + 'server_software' => 'Server software', // TODO + 'version_curl' => 'cURL version', // TODO + 'version_frss' => 'FreshRSS version', // TODO + 'version_php' => 'PHP version', // TODO + ), + ), + 'bugs_reports' => '報告錯誤', + 'documentation' => 'Documentation', // TODO + 'freshrss_description' => 'FreshRSS 是一個自托管的 RSS 聚合服務。 它不僅輕快又易用,而且強大又易於配置。', + 'github' => 'GitHub Issues', + 'license' => '授權', + 'project_website' => '項目網站', + 'title' => '關於', + 'version' => '版本', + ), + 'feed' => array( + 'empty' => '暫時沒有文章可顯示。', + 'received' => array( + 'before_yesterday' => 'Received before yesterday', // TODO + 'today' => 'Received today', // TODO + 'yesterday' => 'Received yesterday', // TODO + ), + 'rss_of' => '%s 的訂閱源', + 'title' => '首頁', + 'title_fav' => '收藏', + 'title_global' => '全局視圖', + ), + 'log' => array( + '_' => '日誌', + 'clear' => '清除日誌', + 'empty' => '日誌文件為空', + 'title' => '日誌', + ), + 'menu' => array( + 'about' => '關於 FreshRSS', + 'before_one_day' => '一天前', + 'before_one_week' => '一週前', + 'bookmark_query' => '收藏當前查詢', + 'favorites' => '收藏(%s)', + 'global_view' => '全局視圖', + 'important' => '重要的源', + 'main_stream' => '首頁', + 'mark_all_read' => '全部設為已讀', + 'mark_cat_read' => '此分類設為已讀', + 'mark_feed_read' => '此訂閱源設為已讀', + 'mark_selection_unread' => '選中設為已讀', + 'mylabels' => '我的標籤', + 'newer_first' => '由新至舊', + 'non-starred' => '顯示未收藏', + 'normal_view' => '普通視圖', + 'older_first' => '由舊至新', + 'queries' => '自定義查詢', + 'read' => '顯示已讀', + 'reader_view' => '閱讀視圖', + 'rss_view' => '訂閱源', + 'search_short' => '搜尋', + 'sort' => array( + '_' => 'Sorting criteria', // TODO + 'c' => array( + 'name_asc' => 'Category, feed titles A→Z', // TODO + 'name_desc' => 'Category, feed titles Z→A', // TODO + ), + 'date_asc' => 'Publication date 1→9', // TODO + 'date_desc' => 'Publication date 9→1', // TODO + 'f' => array( + 'name_asc' => 'Feed title A→Z', // TODO + 'name_desc' => 'Feed title Z→A', // TODO + ), + 'id_asc' => 'Freshly received last', // TODO + 'id_desc' => 'Freshly received first', // TODO + 'link_asc' => 'Link A→Z', // TODO + 'link_desc' => 'Link Z→A', // TODO + 'rand' => 'Random order', // TODO + 'title_asc' => 'Title A→Z', // TODO + 'title_desc' => 'Title Z→A', // TODO + ), + 'starred' => '顯示收藏', + 'stats' => '統計', + 'subscription' => '訂閱管理', + 'unread' => '顯示未讀', + ), + 'share' => '分享', + 'tag' => array( + 'related' => '文章標籤', + ), + 'tos' => array( + 'title' => '服務條款', + ), +); diff --git a/app/i18n/zh-TW/install.php b/app/i18n/zh-TW/install.php new file mode 100644 index 000000000..85efc75b2 --- /dev/null +++ b/app/i18n/zh-TW/install.php @@ -0,0 +1,128 @@ + array( + 'finish' => '完成安裝', + 'fix_errors_before' => '請在繼續下一步前修復錯誤', + 'keep_install' => '保留當前配置', + 'next_step' => '下一步', + 'reinstall' => '重新安裝 FreshRSS', + ), + 'bdd' => array( + '_' => '資料庫', + 'conf' => array( + '_' => '資料庫配置', + 'ko' => '請驗證你的資料庫資訊', + 'ok' => '數據庫配置已保存', + ), + 'host' => '主機', + 'password' => '密碼', + 'prefix' => '表前綴', + 'type' => '資料庫類型', + 'username' => '使用者名', + ), + 'check' => array( + '_' => '檢查', + 'already_installed' => '我們檢測到 FreshRSS 已經安裝!', + 'cache' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'cache 目錄權限正常', + ), + 'ctype' => array( + 'nok' => '找不到字符類型檢測庫(php-ctype)', + 'ok' => '已找到字符類型檢測庫', + ), + 'curl' => array( + 'nok' => '找不到 cURL 庫(php-curl)', + 'ok' => '已找到 cURL 庫', + ), + 'data' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'data 目錄權限正常', + ), + 'dom' => array( + 'nok' => '找不到用於瀏覽 DOM 的庫(php-xml)', + 'ok' => '已找到用於瀏覽 DOM 的庫', + ), + 'favicons' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'favicons 目錄權限正常', + ), + 'fileinfo' => array( + 'nok' => '找不到 PHP fileinfo 庫(php-fileinfo)', + 'ok' => '已找到 fileinfo 庫', + ), + 'json' => array( + 'nok' => '找不到推薦的 JSON 解析庫', + 'ok' => '已找到推薦的 JSON 解析庫', + ), + 'mbstring' => array( + 'nok' => '找不到推薦的 Unicode 解析庫(mbstring)', + 'ok' => '已找到推薦的 Unicode 解析庫', + ), + 'pcre' => array( + 'nok' => '找不到正則表達式解析庫(php-pcre)', + 'ok' => '已找到正則表達式解析庫', + ), + 'pdo' => array( + 'nok' => '找不到 PDO 或支持的驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', + 'ok' => '已找到 PDO 和支持的至少一種驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', + ), + 'php' => array( + 'nok' => '你的 PHP 版本為 %s,但 FreshRSS 最低需要 %s', + 'ok' => '你的 PHP 版本為 %s,與 FreshRSS 兼容', + ), + 'reload' => '再檢查一遍', + 'tmp' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => '緩存目錄權限正常。', + ), + 'unknown_process_username' => '未知', + 'users' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'users 目錄權限正常', + ), + 'xml' => array( + 'nok' => '找不到用於 XML 解析庫', + 'ok' => '已找到 XML 解析庫', + ), + ), + 'conf' => array( + '_' => '常規配置', + 'ok' => '常規配置已保存', + ), + 'congratulations' => '恭喜!', + 'default_user' => array( + '_' => '預設使用者名', + 'max_char' => '最多 16 個數字或字母', + ), + 'fix_errors_before' => '請在繼續下一步前修復錯誤', + 'javascript_is_better' => '啟用 JavaScript 會使 FreshRSS 工作得更好', + 'js' => array( + 'confirm_reinstall' => '重新安裝 FreshRSS 將會重置之前的配置。你確定要繼續嗎?', + ), + 'language' => array( + '_' => '語言', + 'choose' => '為 FreshRSS 選擇語言', + 'defined' => '語言已指定', + ), + 'missing_applied_migrations' => '出現錯誤,你需要手動創建一個空白檔案 %s。', + 'ok' => '安裝成功', + 'session' => array( + 'nok' => 'Web 伺服器似乎未正確配置 PHP 會話所需的 cookie!', + ), + 'step' => '步驟 %d', + 'steps' => '步驟', + 'this_is_the_end' => '最後一步', + 'title' => '安裝 FreshRSS', +); diff --git a/app/i18n/zh-TW/sub.php b/app/i18n/zh-TW/sub.php new file mode 100644 index 000000000..836de4795 --- /dev/null +++ b/app/i18n/zh-TW/sub.php @@ -0,0 +1,307 @@ + array( + 'documentation' => '複製以下地址,以供外部工具使用', + 'title' => 'API', // IGNORE + ), + 'bookmarklet' => array( + 'documentation' => '拖動此書簽到你的書簽欄或者右鍵選擇「收藏此連結」,然後在你想要訂閱的頁面上點擊「訂閱」按鈕', + 'label' => '訂閱', + 'title' => '書簽應用', + ), + 'category' => array( + '_' => '分類', + 'add' => '添加分類', + 'archiving' => '歸檔', + 'dynamic_opml' => array( + '_' => '動態訂閱', + 'help' => '使用地址上的 OPML 文件 中的訂閱源填充這一分類', + ), + 'empty' => '空分類', + 'expand' => '展開分類', + 'information' => '資訊', + 'open' => '打開分類', + 'opml_url' => 'OPML 地址', + 'position' => '顯示位置', + 'position_help' => '控制分類排列順序', + 'title' => '標題', + ), + 'feed' => array( + 'accept_cookies' => '接受 Cookies', + 'accept_cookies_help' => '允許提要伺服器設置 Cookies(僅在請求期間存儲在內存中)', + 'add' => '添加訂閱源', + 'advanced' => '高級', + 'archiving' => '歸檔', + 'auth' => array( + 'configuration' => '認證', + 'help' => '用於連接啟用 HTTP 認證的訂閱源', + 'http' => 'HTTP 認證', + 'password' => 'HTTP 密碼', + 'username' => 'HTTP 用戶名', + ), + 'change_favicon' => 'Change…', // TODO + 'clear_cache' => '總是清除暫存', + 'content_action' => array( + '_' => '獲取原文後的操作', + 'append' => '添加在現有內容後部', + 'prepend' => '添加在現有內容前部', + 'replace' => '替換現有內容', + ), + 'content_retrieval' => 'Content retrieval', // TODO + 'css_cookie' => '獲取原文時的 Cookies', + 'css_cookie_help' => '例:foo=bar; gdpr_consent=true; cookie=value', + 'css_help' => '用於獲取全文(注意,這將耗費更多時間!)', + 'css_path' => '原文的 CSS 選擇器', + 'css_path_filter' => array( + '_' => '需移除元素的 CSS 選擇器', + 'help' => '可設置多個 CSS 選擇器,例如:footer, aside, p[data-sanitized-class~="menu"]', + ), + 'description' => '描述', + 'empty' => '此源為空。請確認它是否正常更新。', + 'error' => '此源遇到一些問題。請在確認是否能正常訪問後重試。', // DIRTY + 'export-as-opml' => array( + 'download' => '下載', + 'help' => 'XML file (data subset. See documentation)', // TODO + 'label' => '匯出為OPML', + ), + 'ext_favicon' => 'Set automatically', // TODO + 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // TODO + 'filteractions' => array( + '_' => '過濾動作', + 'help' => '每行寫一條過濾搜尋 Operators see documentation.', // DIRTY + ), + 'http_headers' => 'HTTP Headers', // TODO + 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // TODO + 'icon' => 'Icon', // TODO + 'information' => '信息', + 'keep_min' => '至少保存的文章數', + 'kind' => array( + '_' => '訂閱源類型', + 'html_json' => array( + '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // TODO + 'xpath' => array( + '_' => 'XPath for JSON in HTML', // TODO + 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // TODO + ), + ), + 'html_xpath' => array( + '_' => 'HTML + XPath (Web 抓取)', + 'feed_title' => array( + '_' => '提要標題', + 'help' => '如 //title 或是靜態字元串如 "My custom feed"', + ), + 'help' => 'XPath 1.0 是為資深用戶準備的標準查詢語言,FreshRSS 用以實現 Web 抓取.', + 'item' => array( + '_' => '以尋找 文章
(很重要)', + 'help' => '例如 //div[@class="news-item"]', + ), + 'item_author' => array( + '_' => '文章作者', + 'help' => '可以是靜態字元串,例如 "Anonymous"', + ), + 'item_categories' => '文章標籤', + 'item_content' => array( + '_' => '文章內容', + 'help' => '例如使用 . 將整個對象作為文章內容', + ), + 'item_thumbnail' => array( + '_' => '文章縮圖', + 'help' => '例如 descendant::img/@src', + ), + 'item_timeFormat' => array( + '_' => '自訂日期/時間格式', + 'help' => '可選的。支援的格式DateTime::createFromFormat() 例如 d-m-Y H:i:s', + ), + 'item_timestamp' => array( + '_' => '文章日期:', + 'help' => '結果將被 strtotime() 解析', + ), + 'item_title' => array( + '_' => '文章標題', + 'help' => '注意使用 XPath 軸 descendant::,例如 descendant::h2', + ), + 'item_uid' => array( + '_' => '文章唯一標識', + 'help' => '可選,例如: descendant::div/@data-uri', + ), + 'item_uri' => array( + '_' => '文章鏈接 (URL)', + 'help' => '例如 descendant::a/@href', + ), + 'relative' => 'XPath(文章):', + 'xpath' => 'XPath 定位:', + ), + 'json_dotnotation' => array( + '_' => 'JSON (點「.」符號)', + 'feed_title' => array( + '_' => '源標題', + 'help' => '範例: meta.title 或固定的字串: "My custom feed"', + ), + 'help' => 'A JSON dot notated uses dots between objects and brackets for arrays (e.g. data.items[0].title)', // TODO + 'item' => array( + '_' => '找尋新聞 項目
(最重要的)', + 'help' => 'JSON path to the array containing the items, e.g. $ or newsItems', // TODO + ), + 'item_author' => '項目作者', + 'item_categories' => '項目標籤', + 'item_content' => array( + '_' => '項目內容', + 'help' => '可以在其下方找到內容的關鍵字, e.g. content', + ), + 'item_thumbnail' => array( + '_' => '項目縮圖', + 'help' => '範例: image', + ), + 'item_timeFormat' => array( + '_' => '自訂 日期/時間 格式', + 'help' => '選用項目。 支援以DateTime::createFromFormat() 表達的格式,例如 d-m-Y H:i:s', + ), + 'item_timestamp' => array( + '_' => '項目日期', + 'help' => 'The result will be parsed by strtotime()', // TODO + ), + 'item_title' => '項目標題', + 'item_uid' => '項目專用ID', + 'item_uri' => array( + '_' => '項目連結(URL)', + 'help' => '範例: 永久連結', + ), + 'json' => 'dot notation for:', // TODO + 'relative' => 'dot notated path (relative to item) for:', // TODO + ), + 'jsonfeed' => 'JSON Feed', // TODO + 'rss' => 'RSS / Atom (預設)', + 'xml_xpath' => 'XML + XPath', // TODO + ), + 'maintenance' => array( + 'clear_cache' => '清理暫存', + 'clear_cache_help' => '清除該feed的暫存', + 'reload_articles' => '重載文章', + 'reload_articles_help' => '重載 n 篇文章並抓取內容(若設置了 CSS 選擇器)', + 'title' => '維護', + ), + 'max_http_redir' => '最大 HTTP 重定向', + 'max_http_redir_help' => '設置為 0 或留空以禁用,-1 表示無限重定向', + 'method' => array( + '_' => 'HTTP 方法', + ), + 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO + 'method_postparams' => 'Payload for POST', // TODO + 'moved_category_deleted' => '刪除分類時,其中的訂閱源會自動歸類到 %s', + 'mute' => array( + '_' => '暫停', + 'state_is_muted' => 'This feed is muted', // TODO + ), + 'no_selected' => '未選擇訂閱源', + 'number_entries' => '%d 篇文章', + 'open_feed' => 'Open feed %s', // TODO + 'path_entries_conditions' => 'Conditions for content retrieval', // TODO + 'priority' => array( + '_' => '可見性', + 'category' => '在分類中顯示', + 'feed' => 'Show in its feed', // TODO + 'hidden' => '不顯示', + 'important' => '顯示在重要的源', + 'main_stream' => '在首頁中顯示', + ), + 'proxy' => '獲取訂閱源時的代理', + 'proxy_help' => '選擇協議(例:SOCKS5)和代理地址(例:127.0.0.1:1080 or username:password@127.0.0.1:1080)', // DIRTY + 'reset_favicon' => 'Reset to default', // TODO + 'selector_preview' => array( + 'show_raw' => '顯示源碼', + 'show_rendered' => '顯示內容', + ), + 'show' => array( + 'all' => '顯示所有訂閱源', + 'error' => '僅顯示有錯誤的訂閱源', + ), + 'showing' => array( + 'error' => '正在顯示有錯誤的訂閱源', + ), + 'ssl_verify' => '驗證 SSL 證書安全', + 'stats' => '統計', + 'think_to_add' => '你可以添加一些訂閱源。', + 'timeout' => '超時時間(秒)', + 'title' => '標題', + 'title_add' => '添加訂閱源', + 'ttl' => '最小自動更新間隔', + 'unicityCriteria' => array( + '_' => 'Article unicity criteria', // TODO + 'forced' => 'forced', // TODO + 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // TODO + 'id' => 'Standard ID (default)', // TODO + 'link' => 'Link', // TODO + 'sha1:content' => 'Content', // TODO + 'sha1:content_published' => 'Content + Date', // TODO + 'sha1:link_published' => 'Link + Date', // TODO + 'sha1:link_published_title' => 'Link + Date + Title', // TODO + 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // TODO + 'sha1:published' => 'Date', // TODO + 'sha1:title' => 'Title', // TODO + 'sha1:title_published' => 'Title + Date', // TODO + 'sha1:title_published_content' => 'Title + Date + Content', // TODO + ), + 'url' => '源地址', + 'useragent' => '設置用於獲取此源的 User Agent', + 'useragent_help' => '例:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', + 'validator' => '檢查訂閱源有效性', + 'website' => '網站地址', + 'websub' => 'WebSub 即時通知', + ), + 'import_export' => array( + 'export' => array( + '_' => '導出', + 'sqlite' => 'Download user database as SQLite', // TODO + ), + 'export_labelled' => '導出有標籤的文章', + 'export_opml' => '導出訂閱源列表(OPML)', + 'export_starred' => '導出你的收藏', + 'feed_list' => '%s 文章列表', + 'file_to_import' => '需要導入的文件
(OPML、JSON 或 ZIP)', + 'file_to_import_no_zip' => '需要導入的文件
(OPML 或 JSON)', + 'import' => '導入', + 'starred_list' => '收藏文章列表', + 'title' => '導入/導出', + ), + 'menu' => array( + 'add' => '添加訂閱源或分類', + 'import_export' => '導入/導出', + 'label_management' => '標籤管理', + 'stats' => array( + 'idle' => '長期無更新訂閱源', + 'main' => '主要統計', + 'repartition' => '文章分布', + ), + 'subscription_management' => '訂閱管理', + 'subscription_tools' => '訂閱工具', + ), + 'tag' => array( + 'auto_label' => '新增標籤給新文章', + 'name' => '名稱', + 'new_name' => '新名稱', + 'old_name' => '舊名稱', + ), + 'title' => array( + '_' => '訂閱管理', + 'add' => '添加訂閱源或分類', + 'add_category' => '添加分類', + 'add_dynamic_opml' => '添加訂閱源動態列表', + 'add_feed' => '添加訂閱源', + 'add_label' => '添加標籤', + 'add_opml_category' => 'OPML category name', // TODO + 'delete_label' => '刪除標籤', + 'feed_management' => '訂閱源管理', + 'subscription_tools' => '訂閱工具', + ), +); diff --git a/app/i18n/zh-TW/user.php b/app/i18n/zh-TW/user.php new file mode 100644 index 000000000..1ef0f5a12 --- /dev/null +++ b/app/i18n/zh-TW/user.php @@ -0,0 +1,54 @@ + array( + 'feedback' => array( + 'invalid' => '電子郵箱地址無效', + 'required' => '必須填寫郵箱地址', + ), + 'validation' => array( + 'change_email' => '您可以在 使用者管理 中變更您的郵箱地址', + 'email_sent_to' => '我們已通過 %s 發送驗證郵件給您,請按其中指示來驗證郵箱地址。', + 'feedback' => array( + 'email_failed' => '由於伺服器配置錯誤,我們無法向您發送郵件。', + 'email_sent' => '郵件已發送到您的郵箱中', + 'error' => '郵箱地址無法通過驗證', + 'ok' => '郵箱地址已成功通過驗證', + 'unnecessary' => '該郵箱地址已被驗證', + 'wrong_token' => '由於令牌錯誤,郵箱地址無法通過驗證。', + ), + 'need_to' => '您需要先驗證郵箱地址才能使用 %s', + 'resend_email' => '重發郵件', + 'title' => '驗證郵箱地址', + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'body' => '%s,歡迎', + 'title' => '您需要驗證您的帳號', + 'welcome' => '您已註冊 %s 現在只需點擊下方連結通過郵箱驗證即可完成註冊:', + ), + ), + 'password' => array( + 'invalid' => '無效密碼', + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => '您必須接受服務條款才能註冊', + ), + ), + 'username' => array( + 'invalid' => '無效用戶名', + 'taken' => '已存在此用戶名', + ), +); diff --git a/app/i18n/zh-cn/admin.php b/app/i18n/zh-cn/admin.php deleted file mode 100644 index 8bf7d5fed..000000000 --- a/app/i18n/zh-cn/admin.php +++ /dev/null @@ -1,240 +0,0 @@ - array( - 'allow_anonymous' => '允许匿名阅读默认用户(%s)的文章', - 'allow_anonymous_refresh' => '允许匿名刷新文章', - 'api_enabled' => '允许 API 访问 (用于手机应用 and sharing user queries)', // DIRTY - 'form' => '网页表单(传统方式, 需要 JavaScript)', - 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // TODO - 'none' => '无(危险)', - 'title' => '认证', - 'token' => '主验证 token', - 'token_help' => '允许不验证而访问用户的全部 RSS 输出以及刷新订阅源:', - 'type' => '认证方式', - 'unsafe_autologin' => '允许不安全的自动登陆方式:', - ), - 'check_install' => array( - 'cache' => array( - 'nok' => '请检查 ./data/cache 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'cache 目录权限正常', - ), - 'categories' => array( - 'nok' => 'Category 表配置错误', - 'ok' => 'Category 表正常', - ), - 'connection' => array( - 'nok' => '数据库连接失败', - 'ok' => '数据库连接正常', - ), - 'ctype' => array( - 'nok' => '找不到字符类型检测库(php-ctype)', - 'ok' => '已找到字符类型检测库(ctype)', - ), - 'curl' => array( - 'nok' => '找不到 cURL 库(php-curl 包)', - 'ok' => '已找到 cURL 库', - ), - 'data' => array( - 'nok' => '请检查 ./data 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'data 目录权限正常', - ), - 'database' => '数据库安装', - 'dom' => array( - 'nok' => '找不到用于浏览 DOM 的库(php-xml 包)', - 'ok' => '已找到用于浏览 DOM 的库', - ), - 'entries' => array( - 'nok' => 'Entry 表配置错误', - 'ok' => 'Entry 表配置正常', - ), - 'favicons' => array( - 'nok' => '请检查 ./data/favicons 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'favicons 目录权限正常', - ), - 'feeds' => array( - 'nok' => 'Feed 表配置错误', - 'ok' => 'Feed 表正常', - ), - 'fileinfo' => array( - 'nok' => '找不到 PHP fileinfo 库(php-fileinfo 包)', - 'ok' => '已找到 fileinfo 库', - ), - 'files' => '文件相关', - 'json' => array( - 'nok' => '找不到 JSON 扩展(php-json 包)', - 'ok' => '已找到 JSON 扩展', - ), - 'mbstring' => array( - 'nok' => '找不到推荐用于 Unicode 的 mbstring 库', - 'ok' => '已找到推荐用于 Unicode 的 mbstring 库', - ), - 'pcre' => array( - 'nok' => '找不到正则表达式解析库(php-pcre)', - 'ok' => '已找到正则表达式解析库(PCRE)', - ), - 'pdo' => array( - 'nok' => '找不到 PDO 或其中一种支持的驱动(pdo_mysql、pdo_sqlite、pdo_pgsql)', - 'ok' => '已找到 PDO 和至少一种支持的驱动(pdo_mysql、pdo_sqlite、pdo_pgsql)', - ), - 'php' => array( - '_' => 'PHP 安装', - 'nok' => '你的 PHP 版本为 %s,但 FreshRSS 最低需要 %s', - 'ok' => '你的 PHP 版本为 %s,与 FreshRSS 兼容', - ), - 'tables' => array( - 'nok' => '数据库中缺少一个或多个表', - 'ok' => '数据库中存在正确的表', - ), - 'title' => '环境检查', - 'tokens' => array( - 'nok' => '请检查 ./data/tokens 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'tokens 目录权限正常', - ), - 'users' => array( - 'nok' => '请检查 ./data/users 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'users 目录权限正常', - ), - 'zip' => array( - 'nok' => '找不到 ZIP 扩展(php-zip 包)', - 'ok' => '已找到 ZIP 扩展', - ), - ), - 'extensions' => array( - 'author' => '作者', - 'community' => '可用的社区扩展', - 'description' => '描述', - 'disabled' => '已禁用', - 'empty_list' => '没有已安装的扩展', - 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO - 'enabled' => '已启用', - 'latest' => '已安装', - 'name' => '名称', - 'no_configure_view' => '此扩展无法配置。', - 'system' => array( - '_' => '系统扩展', - 'no_rights' => '系统扩展(你没有所需权限)', - ), - 'title' => '扩展', - 'update' => '更新可用', - 'user' => '用户扩展', - 'version' => '版本', - ), - 'stats' => array( - '_' => '统计数据', - 'all_feeds' => '所有订阅源', - 'category' => '分类', - 'entry_count' => '文章数', - 'entry_per_category' => '各分类文章数', - 'entry_per_day' => '每日文章数(近三十日)', - 'entry_per_day_of_week' => '一周中(平均:%.2f 条消息)', - 'entry_per_hour' => '各小时(平均:%.2f 条消息)', - 'entry_per_month' => '各月(平均:%.2f 条消息)', - 'entry_repartition' => '文章分布', - 'feed' => '订阅源', - 'feed_per_category' => '各分类订阅源数', - 'idle' => '长期无更新订阅源', - 'main' => '主要统计数据', - 'main_stream' => '首页', - 'no_idle' => '订阅源近期皆有更新!', - 'number_entries' => '%d 篇文章', - 'overview' => 'Overview', // TODO - 'percent_of_total' => '%', - 'repartition' => '文章分布: %s', // DIRTY - 'status_favorites' => '收藏', - 'status_read' => '已读', - 'status_total' => '总计', - 'status_unread' => '未读', - 'title' => '统计', - 'top_feed' => '前十订阅源', - ), - 'system' => array( - '_' => '系统配置', - 'auto-update-url' => '自动更新服务器 URL', - 'base-url' => array( - '_' => '基础 URL', - 'recommendation' => '推荐: %s', - ), - 'cookie-duration' => array( - 'help' => '单位:秒', - 'number' => '保持登录的时长', - ), - 'force_email_validation' => '强制验证邮箱地址', - 'instance-name' => '实例名称', - 'max-categories' => '各用户分类数限制', - 'max-feeds' => '各用户订阅源数限制', - 'registration' => array( - 'number' => '最大用户数', - 'select' => array( - 'label' => '注册表单', - 'option' => array( - 'noform' => '禁用,无注册表单', - 'nolimit' => '启用,且无账户限制', - 'setaccountsnumber' => '设置用户数的最大值', - ), - ), - 'status' => array( - 'disabled' => '注册表单已禁用', - 'enabled' => '注册表单已启用', - ), - 'title' => '用户注册表单', - ), - 'sensitive-parameter' => '敏感参数。在 ./data/config.php 中手动修改', - 'tos' => array( - 'disabled' => '没有提供', - 'enabled' => '已启用', - 'help' => '如何启用服务条款', - ), - 'websub' => array( - 'help' => '关于 WebSub', - ), - ), - 'update' => array( - '_' => '更新系统', - 'apply' => '应用', - 'changelog' => '更新记录', - 'check' => '检查更新', - 'copiedFromURL' => '从 %s 复制 update.php 到 ./data', - 'current_version' => '当前 版本为', - 'last' => '上次检查', - 'loading' => '更新中…', - 'none' => '没有可用更新', - 'releaseChannel' => array( - '_' => '发布通道', - 'edge' => '滚动发布 (“edge”)', - 'latest' => '稳定版本 (“latest”)', - ), - 'title' => '更新系统', - 'viaGit' => '开始通过 git and GitHub.com 更新', - ), - 'user' => array( - 'admin' => '管理员', - 'article_count' => '文章数', - 'back_to_manage' => '← 返回用户列表', - 'create' => '创建新用户', - 'database_size' => '数据库大小', - 'email' => '邮箱地址', - 'enabled' => '已启用', - 'feed_count' => '订阅源数', - 'is_admin' => '管理员', - 'language' => '语言', - 'last_user_activity' => '上次用户活跃', - 'list' => '用户列表', - 'number' => '已有 %d 个用户', - 'numbers' => '已有 %d 个用户', - 'password_form' => '密码
(用于网页表单登录方式)', - 'password_format' => '至少 7 个字符', - 'title' => '用户管理', - 'username' => '用户名', - ), -); diff --git a/app/i18n/zh-cn/api.php b/app/i18n/zh-cn/api.php deleted file mode 100644 index 0021dfa98..000000000 --- a/app/i18n/zh-cn/api.php +++ /dev/null @@ -1,33 +0,0 @@ - array( - 'address' => 'Your API address:', // TODO - '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 - ), - 'test' => array( - 'fever' => 'Fever API configuration test:', // TODO - 'greader' => 'Google Reader API configuration test:', // TODO - ), - 'title' => array( - '_' => 'FreshRSS API endpoints', // TODO - 'extension' => 'API for extensions', // TODO - 'fever' => 'Fever compatible API', // TODO - 'greader' => 'Google Reader compatible API', // TODO - ), - ), -); diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php deleted file mode 100644 index 1ee9bf404..000000000 --- a/app/i18n/zh-cn/conf.php +++ /dev/null @@ -1,372 +0,0 @@ - array( - '_' => '归档', - 'exception' => '清理例外', - 'help' => '更多可用选项位于各订阅源的设置', - 'keep_favourites' => '永不删除已收藏的文章', - 'keep_labels' => '永不删除打了标签的文章', - 'keep_max' => '每订阅源最多保留的文章数', - 'keep_min_by_feed' => '至少保留的文章数', - 'keep_period' => '文章最多保留', - 'keep_unreads' => '永不删除未读文章', - 'maintenance' => '维护', - 'optimize' => '优化数据库', - 'optimize_help' => '偶尔执行可以减少数据库大小', - 'policy' => '清理策略', - 'policy_warning' => '如果未选择清理策略,则将保留全部文章。', - 'purge_now' => '立即清除', - 'title' => '存档', - 'ttl' => '最小自动刷新间隔', - ), - 'display' => array( - '_' => '显示', - 'darkMode' => array( - '_' => '自动黑暗模式', - 'auto' => '启动', - 'help' => '仅适用于兼容性主题', - 'no' => '关闭', - ), - 'icon' => array( - 'bottom_line' => '底栏', - 'display_authors' => '作者', - 'entry' => '文章图标', - 'publication_date' => '更新日期', - 'related_tags' => '文章标签', - 'sharing' => '分享', - 'summary' => '摘要', - 'top_line' => '顶栏', - ), - 'language' => '语言', - 'notif_html5' => array( - 'seconds' => '秒(0 表示不超时)', - 'timeout' => 'HTML5 通知超时时间', - ), - 'show_nav_buttons' => '显示导航按钮', - 'theme' => array( - '_' => '主题', - 'deprecated' => array( - '_' => '已弃用', - 'description' => '这个主题已经不再被支持并且会在将来版本的 FreshRSS 中删除', - ), - ), - 'theme_not_available' => '“%s” 主题不再可用,请选择其他主题。', - 'thumbnail' => array( - 'label' => '缩略图', - 'landscape' => '横向', - 'none' => '无', - 'portrait' => '纵向', - 'square' => '方形', - ), - 'timezone' => '时区', - 'title' => '显示', - 'website' => array( - 'full' => '图标和名称', - 'icon' => '仅图标', - 'label' => '网页显示', - 'name' => '仅名称', - 'none' => '无', - ), - 'width' => array( - 'content' => '内容宽度', - 'large' => '宽', - 'medium' => '中', - 'no_limit' => '无限制', - 'thin' => '窄', - ), - ), - 'logs' => array( - 'loglist' => array( - 'level' => '日志等级', - 'message' => '信息', - 'timestamp' => '时间', - ), - 'pagination' => array( - 'first' => '首页', - 'last' => '末页', - 'next' => '下一页', - 'previous' => '上一页', - ), - ), - 'mark_read_button' => array( - '_' => '“全部标记为已读”按钮', - 'big' => '大', - 'none' => '无', - 'small' => '小', - ), - 'notification_timeout' => array( - 'bad' => array( - 'label' => 'Show warning banner', // TODO - 'seconds' => 'seconds (at least 1)', // TODO - ), - 'good' => array( - 'label' => 'Show acknowledgement banner', // TODO - 'seconds' => 'seconds (0 means not shown)', // TODO - ), - ), - 'privacy' => array( - '_' => 'Privacy', // TODO - 'retrieve_extension_list' => '获取扩展列表', - ), - 'profile' => array( - '_' => '账户管理', - 'api' => array( - '_' => 'API 管理', - 'api_not_set' => 'API密码未设置', - 'api_set' => 'API密码已设置', - 'check_link' => 'Check API status via: %s', // TODO - 'disabled' => 'The API access is disabled.', // TODO - 'documentation_link' => 'See the documentation and list of known apps', // TODO - 'help' => 'See documentation', // TODO - ), - 'change_password' => '修改密码', - 'confirm_new_password' => '确认新密码', - 'current_password' => 'Current password
(for the Web-form login method)', // TODO - 'delete' => array( - '_' => '账户删除', - 'warn' => '你的帐户以及所有相关数据将被删除。', - ), - 'email' => '邮箱地址', - 'new_password' => '新密码', - 'password_api' => 'API 密码
(例如用于手机应用)', - 'password_format' => '至少 7 个字符', - 'title' => '账户', - ), - 'query' => array( - '_' => '自定义查询', - 'deprecated' => '此查询不再有效。相关的分类或订阅源已被删除。', - 'description' => 'Description', // TODO - 'filter' => array( - '_' => '生效的过滤器:', - 'categories' => '按分类显示', - 'feeds' => '按订阅源显示', - 'order' => '按日期排序', - 'search' => '表达式', - 'shareOpml' => '启用相应类别和 feed 的 OPML 分享', - 'shareRss' => '启用 HTML 和 RSS 分享', - 'state' => '状态', - 'tags' => '按标签显示', - 'type' => '类型', - ), - 'get_A' => 'Show all feeds, also those shown in their category', // TODO - 'get_Z' => 'Show all feeds, also archived ones', // TODO - 'get_all' => '显示所有文章', - 'get_all_labels' => '显示所有打了标签的文章', - 'get_category' => '显示分类“%s”', - 'get_favorite' => '显示收藏文章', - 'get_feed' => '显示订阅源“%s”', - 'get_important' => '显示来自“重要的订阅”的文章', - 'get_label' => '显示打了“%s”标签的文章', - 'help' => '参见文档: queries and resharing by HTML / RSS / OPML.', - 'image_url' => 'Image URL', // TODO - 'name' => '名称', - 'no_filter' => '无过滤器', - 'no_queries' => array( - '_' => 'No user queries are saved yet.', // TODO - 'help' => 'See documentation', // TODO - ), - 'number' => '查询 n°%d', - 'order_asc' => '由旧至新显示文章', - 'order_desc' => '由新至旧显示文章', - 'search' => '搜索 “%s”', - 'share' => array( - '_' => '分享您的自定义查询', - 'disabled' => array( - '_' => '已禁用', - 'title' => '分享', - ), - 'greader' => 'Shareable link to the GReader JSON', // TODO - 'help' => '获取此自定义查询的分享链接', - 'html' => 'HTML 页面的分享链接', - 'opml' => '订阅源 OPML 的分享链接', - 'rss' => 'RSS feed 的分享链接', - ), - 'state_0' => '显示所有文章', - 'state_1' => '显示已读文章', - 'state_2' => '显示未读文章', - 'state_3' => '显示所有文章', - 'state_4' => '显示收藏文章', - 'state_5' => '显示已读的收藏文章', - 'state_6' => '显示未读的收藏文章', - 'state_7' => '显示收藏文章', - 'state_8' => '显示未收藏文章', - 'state_9' => '显示已读的未收藏文章', - 'state_10' => '显示未读的未收藏文章', - 'state_11' => '显示未收藏文章', - 'state_12' => '显示所有文章', - 'state_13' => '显示已读文章', - 'state_14' => '显示未读文章', - 'state_15' => '显示所有文章', - 'title' => '自定义查询', - ), - 'reading' => array( - '_' => '阅读', - 'after_onread' => '“全部标记为已读”后', - 'always_show_favorites' => '默认显示收藏夹中所有的文章', - 'apply_to_individual_feed' => 'Applies to feeds individually', // TODO - 'article' => array( - 'authors_date' => array( - '_' => '作者和日期', - 'both' => '页脚与页眉', - 'footer' => '页脚', - 'header' => '页眉', - 'none' => '不显示', - ), - 'feed_name' => array( - 'above_title' => '在标题/标签上方', - 'none' => '不显示', - 'with_authors' => '与作者和日期一行', - ), - 'feed_title' => '订阅源标题', - 'icons' => array( - '_' => '文章图标位置
(仅阅读视图)', - 'above_title' => '标题之上', - 'with_authors' => '与作者和日期在同一行', - ), - 'tags' => array( - '_' => '文章标签', - 'both' => '页脚与页眉', - 'footer' => '页脚', - 'header' => '页眉', - 'none' => '不显示', - ), - 'tags_max' => array( - '_' => '标签最多显示个数', - 'help' => '0 表示:显示所有标签且不折叠', - ), - ), - 'articles_per_page' => '每页文章数', - 'auto_load_more' => '在页面底部载入更多文章', - 'auto_remove_article' => '阅读后隐藏文章', - 'confirm_enabled' => '“全部标记为已读”时显示确认对话框', - 'display_articles_unfolded' => '默认展开显示文章', - 'display_categories_unfolded' => '展开的分类', - 'headline' => array( - 'articles' => '文章:打开/关闭', - 'articles_header_footer' => '文章: 页眉/页脚', - 'categories' => '左侧导航栏:分类', - 'mark_as_read' => '标为已读选项', - 'misc' => '其它', - 'view' => '浏览', - ), - 'hide_read_feeds' => '隐藏没有未读文章的分类和订阅源(启用“显示所有文章”后不生效)', - 'img_with_lazyload' => '延迟加载图片', - 'jump_next' => '跳转到下一未读项', - 'mark_updated_article_unread' => '将有更新的文章设为未读', - 'number_divided_when_reader' => '阅读视图中显示一半', - 'read' => array( - 'article_open_on_website' => '在打开原文章后', - 'article_viewed' => '在文章被浏览后', - 'focus' => '被聚焦时(除了重要订阅)', - 'keep_max_n_unread' => '未读最多保留 n 条', - 'scroll' => '在滚动浏览后(除了重要订阅)', - 'upon_gone' => '在被原订阅源被移除后', - 'upon_reception' => '在接收文章后', - 'when' => '何时将文章标记为已读', - 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // TODO - 'when_same_title_in_feed' => '已存在 n 条相同标题文章 (of the feed)', // DIRTY - ), - 'show' => array( - '_' => '文章显示', - 'active_category' => '活跃的分类', - 'adaptive' => '若有未读项就显示未读,否则显示所有文章', - 'all_articles' => '显示所有', - 'all_categories' => '所有分类', - 'no_category' => '无分类', - 'remember_categories' => '记住打开的分类', - 'unread' => '只显示未读', - 'unread_or_favorite' => '显示未读及收藏', - ), - 'show_fav_unread_help' => '同样适用于标签', - 'sides_close_article' => '点击文章文本区域外关闭文章', - 'sort' => array( - '_' => '排列顺序', - 'newer_first' => '由新至旧', - 'older_first' => '由旧至新', - ), - 'star' => array( - 'when' => 'Mark an article as favourite…', // TODO - ), - 'sticky_post' => '打开文章时将其置顶', - 'title' => '阅读', - 'view' => array( - 'default' => '默认视图', - 'global' => '全屏视图', - 'normal' => '普通视图', - 'reader' => '阅读视图', - ), - ), - 'sharing' => array( - '_' => '分享', - 'add' => '添加分享方式', - 'bluesky' => 'Bluesky', // IGNORE - 'deprecated' => '此功能已被废弃并会在未来的 FreshRSS 版本中移除,详情见 说明文档.', - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => 'Email', // IGNORE - 'facebook' => 'Facebook', // IGNORE - 'more_information' => '更多信息', - 'print' => '打印', - 'raindrop' => 'Raindrop.io', // IGNORE - 'remove' => '删除分享方式', - 'shaarli' => 'Shaarli', // IGNORE - 'share_name' => '显示名称', - 'share_url' => '用于分享的 URL', - 'title' => '分享', - 'twitter' => 'Twitter', // IGNORE - 'wallabag' => 'wallabag', // IGNORE - ), - 'shortcut' => array( - '_' => '快捷键', - 'article_action' => '文章操作', - 'auto_share' => '分享', - 'auto_share_help' => '如果有多种分享方式,则会按照它们的序号依次访问。', - 'close_menus' => '关闭菜单', - 'collapse_article' => '折叠文章', - 'first_article' => '打开第一篇文章', - 'focus_search' => '访问搜索框', - 'global_view' => '切换到全屏视图', - 'help' => '显示帮助文档', - 'javascript' => '若要使用快捷键,必须启用 JavaScript', - 'last_article' => '打开最后一篇文章', - 'load_more' => '载入更多文章', - 'mark_favorite' => '加入收藏', - 'mark_read' => '设为已读', - 'navigation' => '浏览', - 'navigation_help' => '组合 ⇧ Shift 键,导航快捷键将应用于订阅源。
组合 Alt ⎇ 键,导航快捷键将应用于分类。', - 'navigation_no_mod_help' => '以下快捷键不支持组合键(Shift 或 Alt)', - 'next_article' => '打开下一篇文章', - 'next_unread_article' => '打开下一篇未读文章', - 'non_standard' => '这些键(%s)可能不能作为快捷键', - 'normal_view' => '切换到普通视图', - 'other_action' => '其他操作', - 'previous_article' => '打开上一篇文章', - 'reading_view' => '切换到阅读视图', - 'rss_view' => '切换到 RSS 视图', - 'see_on_website' => '在原网站中查看', - 'shift_for_all_read' => '+ Alt ⎇ 键将上方的文章标记为已读
+ ⇧ Shift 键将所有文章设为已读', - 'skip_next_article' => '跳转到下一篇文章而不打开', - 'skip_previous_article' => '跳转到上一篇文章而不打开', - 'title' => '快捷键', - 'toggle_media' => '播放/暂停媒体', - 'user_filter' => '显示自定义查询', - 'user_filter_help' => '如果有多个自定义过滤器,则会按照它们的序号依次访问。', - 'views' => '视图', - ), - 'user' => array( - 'articles_and_size' => '%s 篇文章(%s)', - 'current' => '当前用户', - 'is_admin' => '该用户为管理员', - 'users' => '用户', - ), -); diff --git a/app/i18n/zh-cn/feedback.php b/app/i18n/zh-cn/feedback.php deleted file mode 100644 index 3aa767f95..000000000 --- a/app/i18n/zh-cn/feedback.php +++ /dev/null @@ -1,152 +0,0 @@ - array( - 'denied' => '你无权访问此页面', - 'not_found' => '你寻找的页面不存在', - ), - 'admin' => array( - 'optimization_complete' => '优化完成', - ), - 'api' => array( - 'password' => array( - 'failed' => '你的密码无法修改', - 'updated' => '你的密码已修改', - ), - ), - 'auth' => array( - 'login' => array( - 'invalid' => '用户名或密码无效', - 'success' => '登录成功', - ), - 'logout' => array( - 'success' => '已登出', - ), - ), - 'conf' => array( - 'error' => '保存配置时出错', - 'query_created' => '查询 “%s” 已创建。', - 'shortcuts_updated' => '快捷键已更新', - 'updated' => '配置已更新', - ), - 'extensions' => array( - 'already_enabled' => '%s 已启用', - 'cannot_remove' => '无法删除 %s', - 'disable' => array( - 'ko' => '无法禁用 %s。检查 FreshRSS 日志 查看详情。', - 'ok' => '%s 现已禁用', - ), - 'enable' => array( - 'ko' => '%s 启用失败。检查 FreshRSS 日志 查看详情。', - 'ok' => '%s 现已启用', - ), - 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // TODO - 'no_access' => '你无权访问 %s', - 'not_enabled' => '%s 未启用', - 'not_found' => '%s 不存在', - 'removed' => '%s 已删除', - ), - 'import_export' => array( - 'export_no_zip_extension' => '服务器未启用 ZIP 扩展,请尝试逐个导出文件。', - 'feeds_imported' => '你的订阅源已导入,你可以点击 更新订阅 按钮以完成导入。', - 'feeds_imported_with_errors' => '你的订阅源已导入,但发生错误。你可以点击 更新订阅 按钮以完成导入。', - 'file_cannot_be_uploaded' => '文件未能上传!', - 'no_zip_extension' => '服务器未启用 ZIP 扩展。', - 'zip_error' => '导入 ZIP 文件时出错', // DIRTY - ), - 'profile' => array( - 'error' => '你的帐户无法修改', - 'passwords_dont_match' => 'Passwords don’t match', // TODO - 'updated' => '你的帐户已修改', - ), - 'sub' => array( - 'actualize' => '获取', - 'articles' => array( - 'marked_read' => '文章已标记为已读', - 'marked_unread' => '文章已标记为未读', - ), - 'category' => array( - 'created' => '已创建分类 %s', - 'deleted' => '已删除分类', - 'emptied' => '已清空分类', - 'error' => '更新分类失败', - 'name_exists' => '分类名已存在', - 'no_id' => '你必须指定分类 ID', - 'no_name' => '分类名不能为空', - 'not_delete_default' => '你不能删除默认分类!', - 'not_exist' => '分类不存在!', - 'over_max' => '你已达到分类数上限(%d)', - 'updated' => '已更新分类', - ), - 'feed' => array( - 'actualized' => '已更新 %s', - 'actualizeds' => '已更新订阅源', - 'added' => '订阅源 %s 已添加', - 'already_subscribed' => '你已订阅 %s', - 'cache_cleared' => '%s 缓存已清理', - 'deleted' => '已删除订阅源', - 'error' => '订阅源更新失败', - 'favicon' => array( - 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // TODO - 'unsupported_format' => 'Unsupported image file format!', // TODO - ), - 'internal_problem' => '订阅源添加失败,检查 FreshRSS 日志 查看详情。你可以在 URL 后添加 #force_feed 尝试强制添加。', - 'invalid_url' => 'URL %s 无效', - 'n_actualized' => '已更新 %d 个订阅源', - 'n_entries_deleted' => '已删除 %d 篇文章', - 'no_refresh' => '没有可刷新的订阅源', - 'not_added' => '%s 添加失败', - 'not_found' => '无法找到订阅', - 'over_max' => '你已达到订阅源数上限(%d)', - 'reloaded' => '%s 已重新加载', - 'selector_preview' => array( - 'http_error' => '无法加载网站内容。', - 'no_entries' => '你的订阅中没有任何条目,你至少需要一个条目来创建一个预览。', - 'no_feed' => '网络错误(订阅源不存在)', - 'no_result' => '选择器没有匹配到任何东西,回退显示原始的订阅源文本。', - 'selector_empty' => '选择器是空的,你需要一个来创建预览。', - ), - 'updated' => '已更新订阅源', - ), - 'purge_completed' => '清除完成(已删除 %d 篇文章)', - ), - 'tag' => array( - 'created' => '标签“%s”已创建。', - 'error' => '标签无法被更新!', - 'name_exists' => '标签名已存在。', - 'renamed' => '标签“%s”已被重命名为“%s”。', - 'updated' => '标签已更新。', - ), - 'update' => array( - 'can_apply' => 'FreshRSS 将更新到 版本 %s。', - 'error' => '更新出错:%s', - 'file_is_nok' => '请检查 %s 目录权限。HTTP 服务器必须拥有写入权限。', - 'finished' => '更新完成!', - 'none' => '没有可用更新', - 'server_not_found' => '找不到更新服务器。 [%s]', - ), - 'user' => array( - 'created' => array( - '_' => '已创建用户 %s', - 'error' => '创建用户 %s 失败', - ), - 'deleted' => array( - '_' => '已删除用户 %s', - 'error' => '删除用户 %s 失败', - ), - 'updated' => array( - '_' => '已更新用户 %s', - 'error' => '更新用户 %s 失败', - ), - ), -); diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php deleted file mode 100644 index 71fdc1416..000000000 --- a/app/i18n/zh-cn/gen.php +++ /dev/null @@ -1,277 +0,0 @@ - array( - 'actualize' => '更新订阅源', - 'add' => '添加', - 'back_to_rss_feeds' => '← 返回订阅源', - 'cancel' => '取消', - 'close' => 'Close', // TODO - 'create' => '创建', - 'delete_all_feeds' => 'Delete all feeds', // TODO - 'delete_errored_feeds' => 'Delete feeds with errors', // TODO - 'delete_muted_feeds' => '删除已暂停的订阅源', - 'demote' => '撤销管理员', - 'disable' => '禁用', - 'download' => 'Download', // TODO - 'empty' => '清空', - 'enable' => '启用', - 'export' => '导出', - 'filter' => '过滤', - 'import' => '导入', - 'load_default_shortcuts' => '加载默认快捷键', - 'manage' => '管理', - 'mark_read' => '标记已读', - 'menu' => array( - 'open' => 'Open menu', // TODO - ), - 'nav_buttons' => array( - 'next' => 'Next article', // TODO - 'prev' => 'Previous article', // TODO - 'up' => 'Go up', // TODO - ), - 'open_url' => '打开链接', - 'promote' => '设为管理员', - 'purge' => '清理', - 'refresh_opml' => '刷新订阅源动态列表', - 'remove' => '删除', - 'rename' => '重命名', - 'see_website' => '网站中查看', - 'submit' => '提交', - 'truncate' => '删除所有文章', - 'update' => '更新', - ), - 'auth' => array( - 'accept_tos' => '我接受 服务条款', - 'email' => 'Email 地址', - 'keep_logged_in' => '%s 天内保持登录', - 'login' => '登录', - 'logout' => '登出', - 'password' => array( - '_' => '密码', - 'format' => '至少 7 个字符', - ), - 'reauth' => array( - 'header' => 'Reauthentication is required', // TODO - 'tip' => 'You won’t be asked to sign in again for %d minutes', // TODO - 'title' => 'Reauthentication', // TODO - ), - 'registration' => array( - '_' => '新用户', - 'ask' => '创建新用户?', - 'title' => '用户创建', - ), - 'username' => array( - '_' => '用户名', - 'format' => '最多 16 个数字或字母', - ), - ), - 'date' => array( - 'Apr' => '\\四\\月', - 'Aug' => '\\八\\月', - 'Dec' => '\\十\\二\\月', - 'Feb' => '\\二\\月', - 'Jan' => '\\一\\月', - 'Jul' => '\\七\\月', - 'Jun' => '\\六\\月', - 'Mar' => '\\三\\月', - 'May' => '\\五\\月', - 'Nov' => '\\十\\一\\月', - 'Oct' => '\\十\\月', - 'Sep' => '\\九\\月', - 'apr' => '四月', - 'april' => '四月', - 'aug' => '八月', - 'august' => '八月', - 'before_yesterday' => '昨天以前', - 'dec' => '十二月', - 'december' => '十二月', - 'feb' => '二月', - 'february' => '二月', - 'format_date' => 'Y\\年n\\月j\\日', - 'format_date_hour' => 'Y\\年n\\月j\\日 H\\:i', - 'fri' => '周五', - 'jan' => '一月', - 'january' => '一月', - 'jul' => '七月', - 'july' => '七月', - 'jun' => '六月', - 'june' => '六月', - 'last_2_year' => '过去两年', - 'last_3_month' => '最近三个月', - 'last_3_year' => '过去三年', - 'last_5_year' => '过去五年', - 'last_6_month' => '最近六个月', - 'last_month' => '上月', - 'last_week' => '上周', - 'last_year' => '去年', - 'mar' => '三月', - 'march' => '三月', - 'may' => '五月', - 'may_' => '五月', - 'mon' => '周一', - 'month' => '个月', - 'nov' => '十一月', - 'november' => '十一月', - 'oct' => '十月', - 'october' => '十月', - 'sat' => '周六', - 'sep' => '九月', - 'september' => '九月', - 'sun' => '周日', - 'thu' => '周四', - 'today' => '今天', - 'tue' => '周二', - 'wed' => '周三', - 'yesterday' => '昨天', - ), - 'dir' => 'ltr', // IGNORE - 'freshrss' => array( - '_' => 'FreshRSS', // IGNORE - 'about' => '关于 FreshRSS', - ), - 'js' => array( - 'category_empty' => '清空分类', - 'confirm_action' => '你确定要执行此操作吗?这将不可撤销!', - 'confirm_action_feed_cat' => '你确定要执行此操作吗?你将丢失相关的收藏和自定义查询,这将不可撤销!', - 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // TODO - 'feedback' => array( - 'body_new_articles' => 'FreshRSS 中有 %%d 篇文章等待阅读。', - 'body_unread_articles' => '(未读: %%d)', - 'request_failed' => '请求失败,这可能是因为网络连接问题。', - 'title_new_articles' => 'FreshRSS: 新文章!', - ), - 'labels_empty' => '无标签', - 'new_article' => '发现新文章,点击刷新页面。', - 'should_be_activated' => '必须启用 JavaScript', - 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // TODO - ), - 'lang' => array( - 'cs' => 'Čeština', // IGNORE - 'de' => 'Deutsch', // IGNORE - 'el' => 'Ελληνικά', // IGNORE - 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE - 'es' => 'Español', // IGNORE - 'fa' => 'فارسی', // IGNORE - 'fi' => 'Suomi', // IGNORE - 'fr' => 'Français', // IGNORE - 'he' => 'עברית', // IGNORE - 'hu' => 'Magyar', // IGNORE - 'id' => 'Bahasa Indonesia', // IGNORE - 'it' => 'Italiano', // IGNORE - 'ja' => '日本語', // IGNORE - 'ko' => '한국어', // IGNORE - 'lv' => 'Latviešu', // IGNORE - 'nl' => 'Nederlands', // IGNORE - 'oc' => 'Occitan', // IGNORE - 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE - 'ru' => 'Русский', // IGNORE - 'sk' => 'Slovenčina', // IGNORE - 'tr' => 'Türkçe', // IGNORE - 'uk' => 'Українська', // IGNORE - 'zh-cn' => '简体中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE - ), - 'menu' => array( - 'about' => '关于', - 'account' => '账户', - 'admin' => '管理', - 'archiving' => '归档', - 'authentication' => '认证', - 'check_install' => '环境检查', - 'configuration' => '配置', - 'display' => '显示', - 'extensions' => '扩展', - 'logs' => '日志', - 'privacy' => 'Privacy', // TODO - 'queries' => '自定义查询', - 'reading' => '阅读', - 'search' => '搜索内容或#文章标签', - 'search_help' => '查阅文档获取支持的 搜索参数', - 'sharing' => '分享', - 'shortcuts' => '快捷键', - 'stats' => '统计', - 'system' => '系统配置', - 'update' => '更新', - 'user_management' => '用户管理', - 'user_profile' => '帐户', - ), - 'period' => array( - 'days' => '天', - 'hours' => '时', - 'months' => '月', - 'weeks' => '周', - 'years' => '年', - ), - 'readme' => array( - 'contribute' => 'contribute', // IGNORE - 'language' => 'Language', // IGNORE - 'translated' => 'Progress', // IGNORE - ), - 'share' => array( - 'Known' => '基于 Known 的站点', - 'archiveIS' => 'archive.is', // IGNORE - 'archiveORG' => 'archive.org', // IGNORE - 'archivePH' => 'archive.ph', // IGNORE - 'bluesky' => 'Bluesky', // IGNORE - 'buffer' => 'Buffer', // IGNORE - 'clipboard' => '剪贴板', - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => 'Email', // IGNORE - 'email-webmail-firefox-fix' => 'Email (webmail - 兼容 Firefox)', - 'facebook' => 'Facebook', // IGNORE - 'gnusocial' => 'GNU social', // IGNORE - 'jdh' => 'Journal du hacker', // IGNORE - 'lemmy' => 'Lemmy', // IGNORE - 'linkding' => 'Linkding', // IGNORE - 'linkedin' => 'LinkedIn', // IGNORE - 'mastodon' => 'Mastodon', // IGNORE - 'movim' => 'Movim', // IGNORE - 'omnivore' => 'Omnivore', // IGNORE - 'pinboard' => 'Pinboard', // IGNORE - 'pinterest' => 'Pinterest', // IGNORE - 'pocket' => 'Pocket', // IGNORE - 'print' => '打印', - 'raindrop' => 'Raindrop.io', // IGNORE - 'reddit' => 'Reddit', // IGNORE - 'shaarli' => 'Shaarli', // IGNORE - 'telegram' => 'Telegram', // IGNORE - 'twitter' => 'Twitter', // IGNORE - 'wallabag' => 'Wallabag v1', // IGNORE - 'wallabagv2' => 'Wallabag v2', // IGNORE - 'web-sharing-api' => '系统分享', - 'whatsapp' => 'Whatsapp', // IGNORE - 'xing' => 'Xing', // IGNORE - ), - 'short' => array( - 'attention' => '警告!', - 'blank_to_disable' => '留空以禁用', - 'by_author' => '作者', - 'by_default' => '默认', - 'damn' => '错误!', - 'default_category' => '未分类', - 'no' => '否', - 'not_applicable' => '不可用', - 'ok' => '正常!', - 'or' => '或', - 'yes' => '是', - ), - 'stream' => array( - 'load_more' => '载入更多文章', - 'mark_all_read' => '全部设为已读', - 'nothing_to_load' => '没有更多文章', - ), -); diff --git a/app/i18n/zh-cn/index.php b/app/i18n/zh-cn/index.php deleted file mode 100644 index 33c9998b0..000000000 --- a/app/i18n/zh-cn/index.php +++ /dev/null @@ -1,110 +0,0 @@ - array( - '_' => '关于', - 'agpl3' => 'AGPL 3', // IGNORE - 'bug_reports' => array( - 'environment_information' => array( - '_' => 'System information', // TODO - 'browser' => 'Browser', // TODO - 'database' => 'Database', // TODO - 'server_software' => 'Server software', // TODO - 'version_curl' => 'cURL version', // TODO - 'version_frss' => 'FreshRSS version', // TODO - 'version_php' => 'PHP version', // TODO - ), - ), - 'bugs_reports' => '报告错误', - 'documentation' => '文档', - 'freshrss_description' => 'FreshRSS 是一个自托管的 RSS 聚合服务。 它不仅轻快易用,并且强大又易于配置。', - 'github' => 'GitHub Issues', - 'license' => '授权', - 'project_website' => '项目网站', - 'title' => '关于', - 'version' => '版本', - ), - 'feed' => array( - 'empty' => '没有文章可以显示。', - 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO - 'today' => 'Received today', // TODO - 'yesterday' => 'Received yesterday', // TODO - ), - 'rss_of' => '%s 的订阅源', - 'title' => '首页', - 'title_fav' => '收藏', - 'title_global' => '全局视图', - ), - 'log' => array( - '_' => '日志', - 'clear' => '清除日志', - 'empty' => '日志文件为空', - 'title' => '日志', - ), - 'menu' => array( - 'about' => '关于 FreshRSS', - 'before_one_day' => '一天前', - 'before_one_week' => '一周前', - 'bookmark_query' => '收藏当前查询', - 'favorites' => '收藏(%s)', - 'global_view' => '全局视图', - 'important' => '重要的订阅', - 'main_stream' => '首页', - 'mark_all_read' => '全部设为已读', - 'mark_cat_read' => '此分类设为已读', - 'mark_feed_read' => '此订阅源设为已读', - 'mark_selection_unread' => '将筛选结果标记为未读', - 'mylabels' => '我的标签', - 'newer_first' => '由新至旧', - 'non-starred' => '显示未收藏', - 'normal_view' => '普通视图', - 'older_first' => '由旧至新', - 'queries' => '自定义查询', - 'read' => '显示已读', - 'reader_view' => '阅读视图', - 'rss_view' => '订阅源', - 'search_short' => '搜索', - 'sort' => array( - '_' => 'Sorting criteria', // TODO - 'c' => array( - 'name_asc' => 'Category, feed titles A→Z', // TODO - 'name_desc' => 'Category, feed titles Z→A', // TODO - ), - 'date_asc' => 'Publication date 1→9', // TODO - 'date_desc' => 'Publication date 9→1', // TODO - 'f' => array( - 'name_asc' => 'Feed title A→Z', // TODO - 'name_desc' => 'Feed title Z→A', // TODO - ), - 'id_asc' => 'Freshly received last', // TODO - 'id_desc' => 'Freshly received first', // TODO - 'link_asc' => 'Link A→Z', // TODO - 'link_desc' => 'Link Z→A', // TODO - 'rand' => 'Random order', // TODO - 'title_asc' => 'Title A→Z', // TODO - 'title_desc' => 'Title Z→A', // TODO - ), - 'starred' => '显示收藏', - 'stats' => '统计', - 'subscription' => '订阅管理', - 'unread' => '显示未读', - ), - 'share' => '分享', - 'tag' => array( - 'related' => '文章标签', - ), - 'tos' => array( - 'title' => '服务条款', - ), -); diff --git a/app/i18n/zh-cn/install.php b/app/i18n/zh-cn/install.php deleted file mode 100644 index f4c9480e9..000000000 --- a/app/i18n/zh-cn/install.php +++ /dev/null @@ -1,128 +0,0 @@ - array( - 'finish' => '完成安装', - 'fix_errors_before' => '请在继续下一步前修复错误', - 'keep_install' => '保留当前配置', - 'next_step' => '下一步', - 'reinstall' => '重新安装 FreshRSS', - ), - 'bdd' => array( - '_' => '数据库', - 'conf' => array( - '_' => '数据库配置', - 'ko' => '验证你的数据库信息', - 'ok' => '数据库配置已保存', - ), - 'host' => '主机', - 'password' => '数据库密码', - 'prefix' => '表前缀', - 'type' => '数据库类型', - 'username' => '数据库用户名', - ), - 'check' => array( - '_' => '检查', - 'already_installed' => '我们检测到 FreshRSS 已经安装!', - 'cache' => array( - 'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'cache 目录权限正常', - ), - 'ctype' => array( - 'nok' => '找不到字符类型检测库(php-ctype)', - 'ok' => '已找到字符类型检测库(ctype)', - ), - 'curl' => array( - 'nok' => '找不到 cURL 库(php-curl 包)', - 'ok' => '已找到 cURL 库', - ), - 'data' => array( - 'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'data 目录权限正常', - ), - 'dom' => array( - 'nok' => '找不到用于浏览 DOM 的库(php-xml 包)', - 'ok' => '已找到用于浏览 DOM 的库', - ), - 'favicons' => array( - 'nok' => '请检查 ./data/favicons 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'favicons 目录权限正常', - ), - 'fileinfo' => array( - 'nok' => '找不到 PHP fileinfo 库(fileinfo 包)', - 'ok' => '已找到 fileinfo 库', - ), - 'json' => array( - 'nok' => '找不到 JSON 扩展(php-json 包)', - 'ok' => '已找到 JSON 扩展', - ), - 'mbstring' => array( - 'nok' => '找不到推荐用于 Unicode 的 mbstring 库', - 'ok' => '已找到推荐用于 Unicode 的 mbstring 库', - ), - 'pcre' => array( - 'nok' => '找不到正则表达式解析库(php-pcre)', - 'ok' => '已找到正则表达式解析库(PCRE)', - ), - 'pdo' => array( - 'nok' => '找不到 PDO 或其中一种支持的驱动(pdo_mysql、pdo_sqlite、pdo_pgsql)', - 'ok' => '已找到 PDO 和至少一种支持的驱动(pdo_mysql、pdo_sqlite、pdo_pgsql)', - ), - 'php' => array( - 'nok' => '你的 PHP 版本为 %s,但 FreshRSS 最低需要 %s', - 'ok' => '你的 PHP 版本为 %s,与 FreshRSS 兼容', - ), - 'reload' => '再检查一遍', - 'tmp' => array( - 'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => '缓存目录权限正常。', - ), - 'unknown_process_username' => '未知', - 'users' => array( - 'nok' => '请检查 %s 目录权限,HTTP 服务器必须拥有写入权限。', - 'ok' => 'users 目录权限正常', - ), - 'xml' => array( - 'nok' => '找不到用于 XML 解析库', - 'ok' => '已找到 XML 解析库', - ), - ), - 'conf' => array( - '_' => '常规配置', - 'ok' => '常规配置已保存', - ), - 'congratulations' => '恭喜!', - 'default_user' => array( - '_' => '默认用户名', - 'max_char' => '最多 16 个数字或字母', - ), - 'fix_errors_before' => '请在继续下一步前修复错误', - 'javascript_is_better' => '启用 JavaScript 会使 FreshRSS 工作得更好', - 'js' => array( - 'confirm_reinstall' => '重新安装 FreshRSS 将会重置之前的配置,你确定要继续吗?', - ), - 'language' => array( - '_' => '语言', - 'choose' => '为 FreshRSS 选择语言', - 'defined' => '语言已指定', - ), - 'missing_applied_migrations' => '出现错误,你需要手动创建一个空文件 %s。', - 'ok' => '安装成功', - 'session' => array( - 'nok' => 'Web 服务器似乎未正确配置 PHP 会话所需的 cookie!', - ), - 'step' => '步骤 %d', - 'steps' => '步骤', - 'this_is_the_end' => '最后一步', - 'title' => '安装 FreshRSS', -); diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php deleted file mode 100644 index 4769893d5..000000000 --- a/app/i18n/zh-cn/sub.php +++ /dev/null @@ -1,307 +0,0 @@ - array( - 'documentation' => '复制以下地址,以供外部工具使用', - 'title' => 'API', // IGNORE - ), - 'bookmarklet' => array( - 'documentation' => '拖动此书签到你的书签栏或者右键选择「收藏此链接」,然后在你想要订阅的页面上点击「订阅」按钮。', - 'label' => '订阅', - 'title' => '书签', - ), - 'category' => array( - '_' => '分类', - 'add' => '添加分类', - 'archiving' => '归档', - 'dynamic_opml' => array( - '_' => '动态订阅', - 'help' => '使用 URL 上的 OPML 文件 中的订阅源填充这一分类', - ), - 'empty' => '空分类', - 'expand' => 'Expand category', // TODO - 'information' => '信息', - 'open' => 'Open category', // TODO - 'opml_url' => 'OPML URL', // IGNORE - 'position' => '显示位置', - 'position_help' => '控制分类排列顺序', - 'title' => '标题', - ), - 'feed' => array( - 'accept_cookies' => '接受 Cookies', - 'accept_cookies_help' => '允许订阅源服务器设置 Cookies(仅在请求期间存储在内存中)', - 'add' => '添加订阅源', - 'advanced' => '高级', - 'archiving' => '归档', - 'auth' => array( - 'configuration' => '认证', - 'help' => '用于连接启用 HTTP 认证的订阅源', - 'http' => 'HTTP 认证', - 'password' => 'HTTP 密码', - 'username' => 'HTTP 用户名', - ), - 'change_favicon' => 'Change…', // TODO - 'clear_cache' => '总是清除缓存', - 'content_action' => array( - '_' => '获取原文后的操作', - 'append' => '添加在现有内容后部', - 'prepend' => '添加在现有内容前部', - 'replace' => '替换现有内容', - ), - 'content_retrieval' => 'Content retrieval', // TODO - 'css_cookie' => '获取原文时的 Cookies', - 'css_cookie_help' => '例:foo=bar; gdpr_consent=true; cookie=value', - 'css_help' => '用于获取全文(注意,这将耗费更多时间!)', - 'css_path' => '原文的 CSS 选择器', - 'css_path_filter' => array( - '_' => '需移除元素的 CSS 选择器', - 'help' => '可设置多个 CSS 选择器,例如:footer, aside, p[data-sanitized-class~="menu"]', - ), - 'description' => '描述', - 'empty' => '此源为空。请确认它是否正常更新。', - 'error' => '此源遇到一些问题。请在确认是否能正常访问后重试。', // DIRTY - 'export-as-opml' => array( - 'download' => '下载', - 'help' => 'XML 文件 (data subset. See documentation)', // DIRTY - 'label' => '导出为 OPML', - ), - 'ext_favicon' => 'Set automatically', // TODO - 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // TODO - 'filteractions' => array( - '_' => '过滤动作', - 'help' => '每行写一条过滤规则,过滤规则可见 文档。', - ), - 'http_headers' => 'HTTP Headers', // TODO - 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // TODO - 'icon' => 'Icon', // TODO - 'information' => '信息', - 'keep_min' => '至少保存的文章数', - 'kind' => array( - '_' => '订阅源类型', - 'html_json' => array( - '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // TODO - 'xpath' => array( - '_' => 'XPath for JSON in HTML', // TODO - 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // TODO - ), - ), - 'html_xpath' => array( - '_' => 'HTML + XPath (Web 抓取)', - 'feed_title' => array( - '_' => '订阅源标题', - 'help' => '如 //title 或是静态字符串如: "My custom feed"', - ), - 'help' => 'XPath 1.0 是为资深用户准备的标准查询语言,FreshRSS 用以实现 Web 抓取.', - 'item' => array( - '_' => '以寻找 文章
(很重要)', - 'help' => '例如 //div[@class="news-item"]', - ), - 'item_author' => array( - '_' => '文章作者', - 'help' => '可以是静态字符串,例如 "Anonymous"', - ), - 'item_categories' => '文章标签', - 'item_content' => array( - '_' => '文章内容', - 'help' => '例如使用 . 将整个对象作为文章内容', - ), - 'item_thumbnail' => array( - '_' => '文章缩略图', - 'help' => '例如 descendant::img/@src', - ), - 'item_timeFormat' => array( - '_' => '自定义日期/时间格式', - 'help' => '可选项, 格式参见 DateTime::createFromFormat() 例如 d-m-Y H:i:s', - ), - 'item_timestamp' => array( - '_' => '文章日期:', - 'help' => '结果将被 strtotime() 解析', - ), - 'item_title' => array( - '_' => '文章标题', - 'help' => '注意使用 XPath 轴 descendant::,例如 descendant::h2', - ), - 'item_uid' => array( - '_' => '文章唯一 ID', - 'help' => '可选,例如: descendant::div/@data-uri', - ), - 'item_uri' => array( - '_' => '文章链接 (URL)', - 'help' => '例如 descendant::a/@href', - ), - 'relative' => 'XPath(文章):', - 'xpath' => 'XPath 定位:', - ), - 'json_dotnotation' => array( - '_' => 'JSON (点表达式)', - 'feed_title' => array( - '_' => '订阅源标题', - 'help' => '例如: meta.title 或一个静态的字符串: "My custom feed"', - ), - 'help' => 'JSON 点表达式(JSON 路径)在对象之间使用点,在数组中使用中括号 (例如 data.items[0].title)', - 'item' => array( - '_' => '寻找新的 文章
(最重要的参数)', - 'help' => '包含文章数组的 JSON 路径, 例如 $ or newsItems', // DIRTY - ), - 'item_author' => '文章作者', - 'item_categories' => '文章标签', - 'item_content' => array( - '_' => '文章内容', - 'help' => '用于找到文章内容的键, 例如 content', - ), - 'item_thumbnail' => array( - '_' => '文章缩略图', - 'help' => '例如: image', - ), - 'item_timeFormat' => array( - '_' => '自定义时间格式', - 'help' => '可选项. 被 DateTime::createFromFormat() 支持的日期格式。例如 d-m-Y H:i:s', - ), - 'item_timestamp' => array( - '_' => '文章时间', - 'help' => '结果会被 strtotime() 解析', - ), - 'item_title' => '文章标题', - 'item_uid' => '文章唯一ID', - 'item_uri' => array( - '_' => '文章链接 (URL)', - 'help' => '例如: permalink', - ), - 'json' => 'JSON 路径:', - 'relative' => 'JSON 路径(相对于文章):', - ), - 'jsonfeed' => 'JSON 订阅源', - 'rss' => 'RSS / Atom (默认)', - 'xml_xpath' => 'XML + XPath', // IGNORE - ), - 'maintenance' => array( - 'clear_cache' => '清理缓存', - 'clear_cache_help' => '清除该feed的缓存', - 'reload_articles' => '重载文章', - 'reload_articles_help' => '重载 n 篇文章并抓取内容(若设置了 CSS 选择器)', - 'title' => '维护', - ), - 'max_http_redir' => '最大 HTTP 重定向', - 'max_http_redir_help' => '设置为 0 或留空以禁用,-1 表示无限重定向', - 'method' => array( - '_' => 'HTTP 方式', - ), - 'method_help' => '如果荷载非空且是合法的 JSON,HTTP 请求标头将被自动设为 application/json,否则使用 application/x-www-form-urlencoded', - 'method_postparams' => 'POST 荷载', - 'moved_category_deleted' => '删除分类时,其中的订阅源会自动归类到 %s', - 'mute' => array( - '_' => '暂停', - 'state_is_muted' => 'This feed is muted', // TODO - ), - 'no_selected' => '未选择订阅源', - 'number_entries' => '%d 篇文章', - 'open_feed' => 'Open feed %s', // TODO - 'path_entries_conditions' => 'Conditions for content retrieval', // TODO - 'priority' => array( - '_' => '可见性', - 'category' => '在分类中显示', - 'feed' => 'Show in its feed', // TODO - 'hidden' => '不显示', - 'important' => '在“重要的订阅”中显示', - 'main_stream' => '在首页中显示', - ), - 'proxy' => '获取订阅源时的代理', - 'proxy_help' => '选择协议(例:SOCKS5)和代理地址(例:127.0.0.1:1080 或者 username:password@127.0.0.1:1080)', - 'reset_favicon' => 'Reset to default', // TODO - 'selector_preview' => array( - 'show_raw' => '显示源码', - 'show_rendered' => '显示内容', - ), - 'show' => array( - 'all' => '显示所有订阅源', - 'error' => '仅显示有错误的订阅源', - ), - 'showing' => array( - 'error' => '正在显示有错误的订阅源', - ), - 'ssl_verify' => '验证 SSL 证书安全', - 'stats' => '统计', - 'think_to_add' => '你可以添加一些订阅源。', - 'timeout' => '超时时间(秒)', - 'title' => '标题', - 'title_add' => '添加订阅源', - 'ttl' => '最小自动更新间隔', - 'unicityCriteria' => array( - '_' => 'Article unicity criteria', // TODO - 'forced' => 'forced', // TODO - 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // TODO - 'id' => 'Standard ID (default)', // TODO - 'link' => 'Link', // TODO - 'sha1:content' => 'Content', // TODO - 'sha1:content_published' => 'Content + Date', // TODO - 'sha1:link_published' => 'Link + Date', // TODO - 'sha1:link_published_title' => 'Link + Date + Title', // TODO - 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // TODO - 'sha1:published' => 'Date', // TODO - 'sha1:title' => 'Title', // TODO - 'sha1:title_published' => 'Title + Date', // TODO - 'sha1:title_published_content' => 'Title + Date + Content', // TODO - ), - 'url' => '源地址', - 'useragent' => '设置用于获取此源的 User Agent', - 'useragent_help' => '例:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', - 'validator' => '检查订阅源有效性', - 'website' => '网站地址', - 'websub' => 'WebSub 即时通知', - ), - 'import_export' => array( - 'export' => array( - '_' => '导出', - 'sqlite' => 'Download user database as SQLite', // TODO - ), - 'export_labelled' => '导出有标签的文章', - 'export_opml' => '导出订阅源列表(OPML)', - 'export_starred' => '导出你的收藏', - 'feed_list' => '%s 文章列表', - 'file_to_import' => '需要导入的文件
(OPML、JSON 或 ZIP)', - 'file_to_import_no_zip' => '需要导入的文件
(OPML 或 JSON)', - 'import' => '导入', - 'starred_list' => '收藏文章列表', - 'title' => '导入/导出', - ), - 'menu' => array( - 'add' => '添加订阅源或分类', - 'import_export' => '导入/导出', - 'label_management' => '标签管理', - 'stats' => array( - 'idle' => '长期无更新订阅源', - 'main' => '主要统计', - 'repartition' => '文章分布', - ), - 'subscription_management' => '订阅管理', - 'subscription_tools' => '订阅工具', - ), - 'tag' => array( - 'auto_label' => '给新文章打标签', - 'name' => '名称', - 'new_name' => '新名称', - 'old_name' => '旧名称', - ), - 'title' => array( - '_' => '订阅管理', - 'add' => '添加订阅源或分类', - 'add_category' => '添加分类', - 'add_dynamic_opml' => '添加订阅源动态列表', - 'add_feed' => '添加订阅源', - 'add_label' => '打标签', - 'add_opml_category' => 'OPML category name', // TODO - 'delete_label' => '删除标签', - 'feed_management' => '订阅源管理', - 'subscription_tools' => '订阅工具', - ), -); diff --git a/app/i18n/zh-cn/user.php b/app/i18n/zh-cn/user.php deleted file mode 100644 index 1684623d9..000000000 --- a/app/i18n/zh-cn/user.php +++ /dev/null @@ -1,54 +0,0 @@ - array( - 'feedback' => array( - 'invalid' => '邮箱地址无效', - 'required' => '必须填写邮箱地址', - ), - 'validation' => array( - 'change_email' => '你可以在 用户管理 中变更你的邮箱地址', - 'email_sent_to' => '我们已通过 %s 发送验证邮件给你,请按其中指示来验证邮箱地址。', - 'feedback' => array( - 'email_failed' => '由于服务器配置错误,我们无法向你发送邮件。', - 'email_sent' => '邮件已发送到你的邮箱中', - 'error' => '邮箱地址无法通过验证', - 'ok' => '邮箱地址已成功通过验证', - 'unnecessary' => '该邮箱地址已被验证', - 'wrong_token' => '由于令牌错误,邮箱地址无法通过验证。', - ), - 'need_to' => '你需要先验证邮箱地址才能使用 %s', - 'resend_email' => '重发邮件', - 'title' => '验证邮箱地址', - ), - ), - 'mailer' => array( - 'email_need_validation' => array( - 'body' => '%s,欢迎', - 'title' => '你需要验证你的帐户', - 'welcome' => '你已注册 %s 现在只需点击下方链接通过邮箱验证即可完成注册:', - ), - ), - 'password' => array( - 'invalid' => '无效密码', - ), - 'tos' => array( - 'feedback' => array( - 'invalid' => '你必须接受服务条款才能注册', - ), - ), - 'username' => array( - 'invalid' => '无效用户名', - 'taken' => '已存在此用户名', - ), -); diff --git a/app/i18n/zh-tw/admin.php b/app/i18n/zh-tw/admin.php deleted file mode 100644 index e19660e39..000000000 --- a/app/i18n/zh-tw/admin.php +++ /dev/null @@ -1,240 +0,0 @@ - array( - 'allow_anonymous' => '允許匿名閱讀預設使用者(%s)的文章', - 'allow_anonymous_refresh' => '允許匿名刷新文章', - 'api_enabled' => '允許 API 訪問 (用於手機應用 and sharing user queries)', // DIRTY - 'form' => '網頁表單(傳統方式, 需要 JavaScript)', - 'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)', // TODO - 'none' => '無認證(危險)', - 'title' => '認證', - 'token' => '主要驗證權杖', - 'token_help' => '允許存取使用者的所有 RSS 輸出以及重整源而無需身份驗證:', - 'type' => '認證方式', - 'unsafe_autologin' => '允許不安全的自動登入方式:', - ), - 'check_install' => array( - 'cache' => array( - 'nok' => '請檢查 ./data/cache 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'cache 目錄權限正常', - ), - 'categories' => array( - 'nok' => 'Category 表配置錯誤', - 'ok' => 'Category 表正常', - ), - 'connection' => array( - 'nok' => '資料庫連接失敗', - 'ok' => '資料庫連接正常', - ), - 'ctype' => array( - 'nok' => '找不到字元類型檢測庫(php-ctype)', - 'ok' => '已找到字元類型檢測庫 (php-ctype)', - ), - 'curl' => array( - 'nok' => '找不到 cURL 庫(php-cURL)', - 'ok' => '已找到 cURL 庫(php-cURL)', - ), - 'data' => array( - 'nok' => '請檢查 ./data 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'data 目錄權限正常', - ), - 'database' => '資料庫相關', - 'dom' => array( - 'nok' => '找不到用於瀏覽 DOM 的庫(php-xml)', - 'ok' => '已找到用於瀏覽 DOM 的庫(php-xml)', - ), - 'entries' => array( - 'nok' => 'Entry 表配置錯誤', - 'ok' => 'Entry 表正常', - ), - 'favicons' => array( - 'nok' => '請檢查 ./data/favicons 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'favicons 目錄權限正常', - ), - 'feeds' => array( - 'nok' => 'Feed 表配置錯誤', - 'ok' => 'Feed 表正常', - ), - 'fileinfo' => array( - 'nok' => '找不到 fileinfo 庫(php-fileinfo)', - 'ok' => '已找到 fileinfo 庫(php-fileinfo)', - ), - 'files' => '文件相關', - 'json' => array( - 'nok' => '找不到 JSON 擴展(php-json )', - 'ok' => '已找到 JSON 擴展(php-json)', - ), - 'mbstring' => array( - 'nok' => '找不到推薦的 Unicode 解析庫(mbstring)', - 'ok' => '已找到推薦的 Unicode 解析庫(mbstring)', - ), - 'pcre' => array( - 'nok' => '找不到正則表達式解析庫(php-pcre)', - 'ok' => '已找到正則表達式解析庫(php-pcre)', - ), - 'pdo' => array( - 'nok' => '找不到 PDO 或支持的驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', - 'ok' => '已找到 PDO 和支持的至少一種驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', - ), - 'php' => array( - '_' => 'PHP 相關', - 'nok' => '你的 PHP 版本為 %s,但 FreshRSS 最低需要 %s', - 'ok' => '你的 PHP 版本為 %s,與 FreshRSS 相容', - ), - 'tables' => array( - 'nok' => '資料庫中缺少一個或多個表', - 'ok' => '資料庫中相關表存在', - ), - 'title' => '環境檢查', - 'tokens' => array( - 'nok' => '請檢查 ./data/tokens 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'tokens 目錄權限正常', - ), - 'users' => array( - 'nok' => '請檢查 ./data/users 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'users 目錄權限正常', - ), - 'zip' => array( - 'nok' => '找不到 ZIP 擴展(php-zip)', - 'ok' => '已找到 ZIP 擴展', - ), - ), - 'extensions' => array( - 'author' => '作者', - 'community' => '可用的社群擴充功能', - 'description' => '描述', - 'disabled' => '已禁用', - 'empty_list' => '沒有已安裝的擴充功能', - 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO - 'enabled' => '已啟用', - 'latest' => '已安裝', - 'name' => '名稱', - 'no_configure_view' => '此擴充功能不能配置。', - 'system' => array( - '_' => '系統擴充功能', - 'no_rights' => '系統擴充功能(你無權修改)', - ), - 'title' => '擴充功能', - 'update' => '更新可用', - 'user' => '用戶擴充功能', - 'version' => '版本', - ), - 'stats' => array( - '_' => '統計', - 'all_feeds' => '所有訂閱源', - 'category' => '分類', - 'entry_count' => '文章數', - 'entry_per_category' => '各分類文章數', - 'entry_per_day' => '近三十日每日文章數', - 'entry_per_day_of_week' => '一週各日(平均:%.2f 條消息)', - 'entry_per_hour' => '各小時(平均:%.2f 條消息)', - 'entry_per_month' => '各月(平均:%.2f 條消息)', - 'entry_repartition' => '文章分布', - 'feed' => '訂閱源', - 'feed_per_category' => '各分類訂閱源數', - 'idle' => '長期無更新訂閱源', - 'main' => '主要統計', - 'main_stream' => '首頁', - 'no_idle' => '訂閱源近期皆有更新!', - 'number_entries' => '%d 篇文章', - 'overview' => 'Overview', // TODO - 'percent_of_total' => '%', - 'repartition' => '文章分布: %s', // DIRTY - 'status_favorites' => '收藏', - 'status_read' => '已讀', - 'status_total' => '總計', - 'status_unread' => '未讀', - 'title' => '統計', - 'top_feed' => '前十訂閱源', - ), - 'system' => array( - '_' => '系統配置', - 'auto-update-url' => '自動升級伺服器地址', - 'base-url' => array( - '_' => '基本URL', - 'recommendation' => '自動推薦: %s', - ), - 'cookie-duration' => array( - 'help' => '單位(秒)', - 'number' => '保持登錄的時長', - ), - 'force_email_validation' => '強制驗證郵箱地址', - 'instance-name' => '實例名稱', - 'max-categories' => '各使用者分類數限制', - 'max-feeds' => '各使用者訂閱源數限制', - 'registration' => array( - 'number' => '最大使用者數', - 'select' => array( - 'label' => '註冊表單', - 'option' => array( - 'noform' => '禁用,無註冊表單', - 'nolimit' => '啟用,且無帳號限制', - 'setaccountsnumber' => '設置使用者數的最大值', - ), - ), - 'status' => array( - 'disabled' => '註冊表單禁用', - 'enabled' => '註冊表單啟用', - ), - 'title' => '使用者註冊表單', - ), - 'sensitive-parameter' => '敏感參數。手動編輯於 ./data/config.php', - 'tos' => array( - 'disabled' => '未被給予', - 'enabled' => '為啟用的', - 'help' => '如何 啟用服務條款', - ), - 'websub' => array( - 'help' => '關於 WebSub', - ), - ), - 'update' => array( - '_' => '更新系統', - 'apply' => '應用', - 'changelog' => '更新紀錄', - 'check' => '檢查更新', - 'copiedFromURL' => 'update.php 複製從 %s 至 ./data', - 'current_version' => '當前 版本為', - 'last' => '上次檢查', - 'loading' => '更新中…', - 'none' => '沒有可用更新', - 'releaseChannel' => array( - '_' => '發佈通道', - 'edge' => '滾動式發佈(“edge”)', - 'latest' => '穩定式發佈(“latest”)', - ), - 'title' => '系統更新', - 'viaGit' => '從git並由GitHub.com開始', - ), - 'user' => array( - 'admin' => '管理員', - 'article_count' => '文章數', - 'back_to_manage' => '← 返回使用者列表', - 'create' => '新增使用者', - 'database_size' => '資料庫大小', - 'email' => '郵箱地址', - 'enabled' => '已啟用', - 'feed_count' => '訂閱源數', - 'is_admin' => '管理員', - 'language' => '語言', - 'last_user_activity' => '上次使用者活躍', - 'list' => '使用者列表', - 'number' => '已有 %d 個使用者', - 'numbers' => '已有 %d 個使用者', - 'password_form' => '密碼
(用於網頁表單登錄方式)', - 'password_format' => '至少 7 個字元', - 'title' => '使用者管理', - 'username' => '使用者名稱', - ), -); diff --git a/app/i18n/zh-tw/api.php b/app/i18n/zh-tw/api.php deleted file mode 100644 index 0021dfa98..000000000 --- a/app/i18n/zh-tw/api.php +++ /dev/null @@ -1,33 +0,0 @@ - array( - 'address' => 'Your API address:', // TODO - '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 - ), - 'test' => array( - 'fever' => 'Fever API configuration test:', // TODO - 'greader' => 'Google Reader API configuration test:', // TODO - ), - 'title' => array( - '_' => 'FreshRSS API endpoints', // TODO - 'extension' => 'API for extensions', // TODO - 'fever' => 'Fever compatible API', // TODO - 'greader' => 'Google Reader compatible API', // TODO - ), - ), -); diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php deleted file mode 100644 index ac83b7c1f..000000000 --- a/app/i18n/zh-tw/conf.php +++ /dev/null @@ -1,372 +0,0 @@ - array( - '_' => '歸檔', - 'exception' => '高級清理策略', - 'help' => '具體選項位於各訂閱源的設置', - 'keep_favourites' => '不清理已收藏的文章', - 'keep_labels' => '不清理標籤', - 'keep_max' => '最多保留的文章數', // DIRTY - 'keep_min_by_feed' => '至少保留的文章數', - 'keep_period' => '文章最多保留', - 'keep_unreads' => '不清理未讀文章', - 'maintenance' => '優化', - 'optimize' => '優化資料庫', - 'optimize_help' => '偶爾執行優化可以減少資料庫大小', - 'policy' => '清理策略', - 'policy_warning' => '如果未選擇清理策略,則將保留全部文章。', - 'purge_now' => '立即清除', - 'title' => '存檔', - 'ttl' => '最小自動刷新間隔', - ), - 'display' => array( - '_' => '顯示', - 'darkMode' => array( - '_' => '自動黑暗模式', - 'auto' => '自動', - 'help' => '僅適用於相容主題', - 'no' => '否', - ), - 'icon' => array( - 'bottom_line' => '底欄', - 'display_authors' => '作者', - 'entry' => '文章圖示', - 'publication_date' => '更新日期', - 'related_tags' => '相關標籤', - 'sharing' => '分享', - 'summary' => '摘要', - 'top_line' => '頂欄', - ), - 'language' => '語言', - 'notif_html5' => array( - 'seconds' => '秒(0 表示不超時)', - 'timeout' => 'HTML5 通知超時時間', - ), - 'show_nav_buttons' => '顯示導航按鈕', - 'theme' => array( - '_' => '主題', - 'deprecated' => array( - '_' => '已廢棄', - 'description' => '此主題不再被支援且將不再可用在 未來FreshRSS的更新', - ), - ), - 'theme_not_available' => '“%s” 主題不再可用,請選擇其他主題。', - 'thumbnail' => array( - 'label' => '縮圖', - 'landscape' => '風景', - 'none' => '無', - 'portrait' => '肖像', - 'square' => '方塊', - ), - 'timezone' => '時區', - 'title' => '顯示', - 'website' => array( - 'full' => '圖示及名稱', - 'icon' => '僅圖示', - 'label' => '網站', - 'name' => '僅名稱', - 'none' => '無', - ), - 'width' => array( - 'content' => '內容寬度', - 'large' => '寬', - 'medium' => '中', - 'no_limit' => '無限制', - 'thin' => '窄', - ), - ), - 'logs' => array( - 'loglist' => array( - 'level' => '日誌等級', - 'message' => '訊息', - 'timestamp' => '時間', - ), - 'pagination' => array( - 'first' => '首頁', - 'last' => '末頁', - 'next' => '下一頁', - 'previous' => '上一頁', - ), - ), - 'mark_read_button' => array( - '_' => '“Mark all as read” button', // TODO - 'big' => 'Big', // TODO - 'none' => 'None', // TODO - 'small' => 'Small', // TODO - ), - 'notification_timeout' => array( - 'bad' => array( - 'label' => 'Show warning banner', // TODO - 'seconds' => 'seconds (at least 1)', // TODO - ), - 'good' => array( - 'label' => 'Show acknowledgement banner', // TODO - 'seconds' => 'seconds (0 means not shown)', // TODO - ), - ), - 'privacy' => array( - '_' => 'Privacy', // TODO - 'retrieve_extension_list' => 'Retrieve extension list', // TODO - ), - 'profile' => array( - '_' => '個人資料管理', - 'api' => array( - '_' => 'API 管理', - 'api_not_set' => 'API password not set', // TODO - 'api_set' => 'API password set', // TODO - 'check_link' => 'Check API status via: %s', // TODO - 'disabled' => 'The API access is disabled.', // TODO - 'documentation_link' => 'See the documentation and list of known apps', // TODO - 'help' => 'See documentation', // TODO - ), - 'change_password' => 'Change password', // TODO - 'confirm_new_password' => 'Confirm new password', // TODO - 'current_password' => 'Current password
(for the Web-form login method)', // TODO - 'delete' => array( - '_' => '帳號刪除', - 'warn' => '你的帳號及所有相關資料將被刪除。', - ), - 'email' => '郵箱地址', - 'new_password' => 'New password', // TODO - 'password_api' => 'API 密碼
(例如用於手機應用)', - 'password_format' => '至少 7 個字元', - 'title' => '個人資料', - ), - 'query' => array( - '_' => '自定義查詢', - 'deprecated' => '此查詢不再有效。相關的分類或訂閱源已被刪除。', - 'description' => 'Description', // TODO - 'filter' => array( - '_' => '生效的過濾器:', - 'categories' => '按分類顯示', - 'feeds' => '按訂閱源顯示', - 'order' => '按日期排序', - 'search' => '表達式', - 'shareOpml' => '啟用透過對應類別和源的OPML分享', - 'shareRss' => '啟用透過HTML分享 & RSS', - 'state' => '狀態', - 'tags' => '按標籤顯示', - 'type' => '類型', - ), - 'get_A' => 'Show all feeds, also those shown in their category', // TODO - 'get_Z' => 'Show all feeds, also archived ones', // TODO - 'get_all' => '顯示所有文章', - 'get_all_labels' => '顯示任何標籤的文章', - 'get_category' => '顯示分類 “%s”', - 'get_favorite' => '顯示收藏文章', - 'get_feed' => '顯示訂閱源 “%s”', - 'get_important' => '顯示來自重要源的文章', - 'get_label' => '顯示帶有 “%s” 標籤的文章', - 'help' => '請參閱 有關使用者查詢和透過 HTML / RSS / OPML 重新共用的文件.', - 'image_url' => '影像網址', - 'name' => '名稱', - 'no_filter' => '無過濾器', - 'no_queries' => array( - '_' => 'No user queries are saved yet.', // TODO - 'help' => 'See documentation', // TODO - ), - 'number' => '查詢 n°%d', - 'order_asc' => '由舊至新顯示文章', - 'order_desc' => '由新至舊顯示文章', - 'search' => '搜尋 “%s”', - 'share' => array( - '_' => '透過連結分享此查詢', - 'disabled' => array( - '_' => 'disabled', // TODO - 'title' => 'Sharing', // TODO - ), - 'greader' => 'GReader JSON的可共享連結', - 'help' => '如果您想與任何人分享此查詢,請提供此連結', - 'html' => 'HTML頁面的可共享連結', - 'opml' => 'OPML源列表的可共享連結', - 'rss' => 'RSS源的可共享連結', - ), - 'state_0' => '顯示所有文章', - 'state_1' => '顯示已讀文章', - 'state_2' => '顯示未讀文章', - 'state_3' => '顯示所有文章', - 'state_4' => '顯示收藏文章', - 'state_5' => '顯示已讀的收藏文章', - 'state_6' => '顯示未讀的收藏文章', - 'state_7' => '顯示收藏文章', - 'state_8' => '顯示未收藏文章', - 'state_9' => '顯示已讀的未收藏文章', - 'state_10' => '顯示未讀的未收藏文章', - 'state_11' => '顯示未收藏文章', - 'state_12' => '顯示所有文章', - 'state_13' => '顯示已讀文章', - 'state_14' => '顯示未讀文章', - 'state_15' => '顯示所有文章', - 'title' => '自定義查詢', - ), - 'reading' => array( - '_' => '閱讀', - 'after_onread' => '「全部標記為已讀」後', - 'always_show_favorites' => '預設顯示收藏夾中所有的文章', - 'apply_to_individual_feed' => 'Applies to feeds individually', // TODO - 'article' => array( - 'authors_date' => array( - '_' => '作者和日期', - 'both' => '兩者都顯示', - 'footer' => '僅頁腳顯示', - 'header' => '僅頁眉顯示', - 'none' => '不顯示', - ), - 'feed_name' => array( - 'above_title' => '在文章標題和標籤上方', - 'none' => '不顯示', - 'with_authors' => '與作者和日期一行', - ), - 'feed_title' => '訂閱源標題', - 'icons' => array( - '_' => '文章圖示的位置
(限閱讀視圖)', - 'above_title' => '標題之上', - 'with_authors' => '在作者和日期列中', - ), - 'tags' => array( - '_' => '文章標籤', - 'both' => '兩者都顯示', - 'footer' => '僅頁腳顯示', - 'header' => '僅頁眉顯示', - 'none' => '不顯示', - ), - 'tags_max' => array( - '_' => '標籤最多顯示個數', - 'help' => '0 標識顯示所有標籤', - ), - ), - 'articles_per_page' => '每頁文章數', - 'auto_load_more' => '在頁面底部載入更多文章', - 'auto_remove_article' => '閱讀後隱藏文章', - 'confirm_enabled' => '「全部標記為已讀」時顯示確認對話框', - 'display_articles_unfolded' => '預設展開顯示文章', - 'display_categories_unfolded' => '要展開的分類', - 'headline' => array( - 'articles' => '文章:打開/關閉', - 'articles_header_footer' => '文章: 頁眉/頁腳', - 'categories' => '左側導航:分類', - 'mark_as_read' => '標為已讀選項', - 'misc' => '其它', - 'view' => '瀏覽', - ), - 'hide_read_feeds' => '隱藏沒有未讀文章的分類和訂閱源 (啟用「顯示所有文章」後不生效)', - 'img_with_lazyload' => '延遲加載圖片', - 'jump_next' => '跳轉到下一未讀項', - 'mark_updated_article_unread' => '將更新的文章設為未讀', - 'number_divided_when_reader' => '閱讀視圖中顯示一半', - 'read' => array( - 'article_open_on_website' => '在打開原文章後', - 'article_viewed' => '在文章被瀏覽後', - 'focus' => '當注意力集中時(重要的源除外)', - 'keep_max_n_unread' => '未讀最多保留 n 條', - 'scroll' => '在滾動瀏覽後(重要的源除外)', // DIRTY - 'upon_gone' => '在被原訂閱源移除後', - 'upon_reception' => '在接收文章後', - 'when' => '何時將文章標記為已讀', - 'when_same_title_in_category' => 'if an identical title already exists in the top n newest articles of the category', // TODO - 'when_same_title_in_feed' => '已存在 n 條相同標題文章 (of the feed)', // DIRTY - ), - 'show' => array( - '_' => '文章顯示', - 'active_category' => '啟用的分類', - 'adaptive' => 'Show unreads if any, all articles otherwise', // TODO - 'all_articles' => '顯示所有', - 'all_categories' => '所有分類', - 'no_category' => '無分類', - 'remember_categories' => '記住打開的分類', - 'unread' => '只顯示未讀', - 'unread_or_favorite' => 'Show unreads and favourites', // TODO - ), - 'show_fav_unread_help' => '同樣適用於標籤', - 'sides_close_article' => '點擊文章區域外以關閉', - 'sort' => array( - '_' => '排列順序', - 'newer_first' => '由新至舊', - 'older_first' => '由舊至新', - ), - 'star' => array( - 'when' => '標記一篇文章為最愛…', - ), - 'sticky_post' => '打開文章時將其置於頁首', - 'title' => '閱讀', - 'view' => array( - 'default' => '預設視圖', - 'global' => '全屏視圖', - 'normal' => '普通視圖', - 'reader' => '閱讀視圖', - ), - ), - 'sharing' => array( - '_' => '分享', - 'add' => '新增分享方式', - 'bluesky' => 'Bluesky', // TODO - 'deprecated' => '這項功能已廢棄並在將來版本的 FreshRSS 中移除,詳情請見 說明文檔.', - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => '郵箱', // IGNORE - 'facebook' => '臉書', // IGNORE - 'more_information' => '更多資訊', - 'print' => '列印', - 'raindrop' => 'Raindrop.io', // IGNORE - 'remove' => '刪除分享方式', - 'shaarli' => 'Shaarli', // IGNORE - 'share_name' => '名稱', - 'share_url' => '地址', - 'title' => '分享', - 'twitter' => '推特', // IGNORE - 'wallabag' => 'Wallabag', // IGNORE - ), - 'shortcut' => array( - '_' => '快捷鍵', - 'article_action' => '文章操作', - 'auto_share' => '分享', - 'auto_share_help' => '如果有多種分享方式,則會按照它們的序號依次訪問。', - 'close_menus' => '關閉菜單', - 'collapse_article' => '收起文章', - 'first_article' => '打開第一篇文章', - 'focus_search' => '聚焦到搜尋框', - 'global_view' => '切換到全屏視圖', - 'help' => '顯示幫助文檔', - 'javascript' => '若要使用快捷鍵,必須啟用 JavaScript', - 'last_article' => '打開最後一篇文章', - 'load_more' => '載入更多文章', - 'mark_favorite' => '加入收藏', - 'mark_read' => '設為已讀', - 'navigation' => '瀏覽', - 'navigation_help' => '組合 ⇧ Shift 鍵,瀏覽快捷鍵將生效於訂閱源。
組合 Alt ⎇ 鍵,瀏覽快捷鍵將生效於分類。', - 'navigation_no_mod_help' => '以下快捷鍵不支持組合鍵(Shift 或 Alt)', - 'next_article' => '打開下一篇文章', - 'next_unread_article' => '打開下一篇未讀文章', - 'non_standard' => '這些鍵 (%s) 可能不能作為快捷鍵', - 'normal_view' => '切換到普通視圖', - 'other_action' => '其它操作', - 'previous_article' => '打開上一篇文章', - 'reading_view' => '切換到閱讀視圖', - 'rss_view' => '切換到 RSS 視圖', - 'see_on_website' => '在原網站中查看', - 'shift_for_all_read' => '組合 Alt ⎇鍵 將上方的文章標記為已讀
組合 ⇧ Shift按鍵 可以將全部文章設為已讀', - 'skip_next_article' => '跳轉到下一篇文章而不打開', - 'skip_previous_article' => '跳轉到上一篇文章而不打開', - 'title' => '快捷鍵', - 'toggle_media' => '播放/暫停媒體', - 'user_filter' => '顯示自定義查詢', - 'user_filter_help' => '如果有多個自定義過濾器,則會按照它們的序號依次訪問。', - 'views' => '視圖', - ), - 'user' => array( - 'articles_and_size' => '%s 篇文章 (%s)', - 'current' => '當前使用者', - 'is_admin' => '該使用者為管理員', - 'users' => '使用者', - ), -); diff --git a/app/i18n/zh-tw/feedback.php b/app/i18n/zh-tw/feedback.php deleted file mode 100644 index 4bdf243a4..000000000 --- a/app/i18n/zh-tw/feedback.php +++ /dev/null @@ -1,152 +0,0 @@ - array( - 'denied' => '你無權訪問此頁面', - 'not_found' => '你尋找的頁面不存在', - ), - 'admin' => array( - 'optimization_complete' => '優化完成', - ), - 'api' => array( - 'password' => array( - 'failed' => '您的密碼無法修改', - 'updated' => '您的密碼已修改', - ), - ), - 'auth' => array( - 'login' => array( - 'invalid' => '使用者名或密碼無效', - 'success' => '登入成功', - ), - 'logout' => array( - 'success' => '已登出', - ), - ), - 'conf' => array( - 'error' => '保存配置時出錯', - 'query_created' => '查詢 “%s” 已創建。', - 'shortcuts_updated' => '快捷鍵已更新', - 'updated' => '配置已更新', - ), - 'extensions' => array( - 'already_enabled' => '%s 已啟用', - 'cannot_remove' => '無法刪除 %s', - 'disable' => array( - 'ko' => '禁用 %s 失敗。檢查 FreshRSS 日誌 查看詳情。', - 'ok' => '%s 現已禁用', - ), - 'enable' => array( - 'ko' => '%s 啟用失敗。檢查 FreshRSS 日誌 查看詳情。', - 'ok' => '%s 現已啟用', - ), - 'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.', // TODO - 'no_access' => '你無權訪問 %s', - 'not_enabled' => '%s 未啟用', - 'not_found' => '%s 不存在', - 'removed' => '%s 已刪除', - ), - 'import_export' => array( - 'export_no_zip_extension' => '伺服器未啟用 ZIP 擴展。請嘗試逐個導出文件。', - 'feeds_imported' => '你的訂閱已導入,即將刷新 / Your feeds have been imported. If you are done importing, you can now click the Update feeds button.', - 'feeds_imported_with_errors' => '你的訂閱源已導入,但發生錯誤 / Your feeds have been imported, but some errors occurred. If you are done importing, you can now click the Update feeds button.', - 'file_cannot_be_uploaded' => '文件未能上傳!', - 'no_zip_extension' => '伺服器未啟用 ZIP 擴展。', - 'zip_error' => '導入 ZIP 文件時出錯', // DIRTY - ), - 'profile' => array( - 'error' => '你的帳戶修改失敗', - 'passwords_dont_match' => 'Passwords don’t match', // TODO - 'updated' => '你的帳戶已修改', - ), - 'sub' => array( - 'actualize' => '獲取', - 'articles' => array( - 'marked_read' => '文章已標記為已讀', - 'marked_unread' => '文章已標記為未讀', - ), - 'category' => array( - 'created' => '已創建分類 %s', - 'deleted' => '已刪除分類', - 'emptied' => '已清空分類', - 'error' => '更新分類失敗', - 'name_exists' => '分類名已存在', - 'no_id' => '你必須明確分類編號', - 'no_name' => '分類名不能為空', - 'not_delete_default' => '你不能刪除默認分類!', - 'not_exist' => '分類不存在!', - 'over_max' => '你已達到分類數上限(%d)', - 'updated' => '已更新分類', - ), - 'feed' => array( - 'actualized' => '已更新 %s', - 'actualizeds' => '已更新訂閱源', - 'added' => '訂閱源 %s 已添加', - 'already_subscribed' => '你已訂閱 %s', - 'cache_cleared' => '%s 緩存已清理', - 'deleted' => '已刪除訂閱源', - 'error' => '訂閱源更新失敗', - 'favicon' => array( - 'too_large' => 'Uploaded icon is too large. The maximum file size is %s.', // TODO - 'unsupported_format' => 'Unsupported image file format!', // TODO - ), - 'internal_problem' => '訂閱源添加失敗。檢查 FreshRSS 日誌 查看詳情。你可以在地址連結後附加 #force_feed 從而嘗試強制添加。', - 'invalid_url' => '地址鏈接 %s 無效', - 'n_actualized' => '已更新 %d 個訂閱源', - 'n_entries_deleted' => '已刪除 %d 篇文章', - 'no_refresh' => '沒有可刷新的訂閱源…', - 'not_added' => '%s 添加失敗', - 'not_found' => '無法找到訂閱', - 'over_max' => '你已達到訂閱源數上限(%d)', - 'reloaded' => '%s 已重置', - 'selector_preview' => array( - 'http_error' => '無法加載網站內容。', - 'no_entries' => '您的訂閱中沒有任何條目。您至少需要一個條目來創建一個預覽。', - 'no_feed' => '網絡錯誤(訂閱源不存在)', - 'no_result' => '選擇器沒有匹配到任何東西。作為備用,原始的feed文本將被顯示出來。', - 'selector_empty' => '選擇器是空的。你需要一個來創建預覽。', - ), - 'updated' => '已更新訂閱源', - ), - 'purge_completed' => '清除完成(已刪除 %d 篇文章)', - ), - 'tag' => array( - 'created' => '標籤 “%s” 已創建。', - 'error' => '無法更新標籤!', - 'name_exists' => '標籤名已存在。', - 'renamed' => '標籤 “%s” 已被重命名為 “%s”。', - 'updated' => '已更新標籤。', - ), - 'update' => array( - 'can_apply' => 'FreshRSS 將更新到 版本 %s。', - 'error' => '更新出錯:%s', - 'file_is_nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'finished' => '更新完成!', - 'none' => '沒有可用更新', - 'server_not_found' => '找不到更新伺服器 [%s]', - ), - 'user' => array( - 'created' => array( - '_' => '已創建使用者 %s', - 'error' => '創建使用者 %s 失敗', - ), - 'deleted' => array( - '_' => '已刪除使用者 %s', - 'error' => '刪除使用者 %s 失敗', - ), - 'updated' => array( - '_' => '已更新使用者 %s', - 'error' => '更新使用者 %s 失敗', - ), - ), -); diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php deleted file mode 100644 index 24442f281..000000000 --- a/app/i18n/zh-tw/gen.php +++ /dev/null @@ -1,277 +0,0 @@ - array( - 'actualize' => '更新提要', - 'add' => '新增', - 'back_to_rss_feeds' => '← 返回訂閱源', - 'cancel' => '取消', - 'close' => 'Close', // TODO - 'create' => '創建', - 'delete_all_feeds' => 'Delete all feeds', // TODO - 'delete_errored_feeds' => 'Delete feeds with errors', // TODO - 'delete_muted_feeds' => '刪除已暫停的訂閱源', - 'demote' => '撤銷管理員', - 'disable' => '禁用', - 'download' => 'Download', // TODO - 'empty' => '清空', - 'enable' => '啟用', - 'export' => '導出', - 'filter' => '過濾', - 'import' => '導入', - 'load_default_shortcuts' => '重置快捷鍵', - 'manage' => '管理', - 'mark_read' => '標記已讀', - 'menu' => array( - 'open' => '開啟選單', - ), - 'nav_buttons' => array( - 'next' => '下一篇文章', - 'prev' => '預覽文章', - 'up' => '回上一篇', - ), - 'open_url' => '打開連結', - 'promote' => '設為管理員', - 'purge' => '清理', - 'refresh_opml' => '更新訂閱源動態列表', - 'remove' => '刪除', - 'rename' => '重命名', - 'see_website' => '網站中查看', - 'submit' => '提交', - 'truncate' => '刪除所有文章', - 'update' => '更新訂閱', - ), - 'auth' => array( - 'accept_tos' => '我接受 服務條款', - 'email' => 'Email 地址', - 'keep_logged_in' => '%s 天內保持登入', - 'login' => '登入', - 'logout' => '登出', - 'password' => array( - '_' => '密碼', - 'format' => '至少 7 個字元', - ), - 'reauth' => array( - 'header' => 'Reauthentication is required', // TODO - 'tip' => 'You won’t be asked to sign in again for %d minutes', // TODO - 'title' => 'Reauthentication', // TODO - ), - 'registration' => array( - '_' => '新使用者', - 'ask' => '創建新使用者?', - 'title' => '使用者創建', - ), - 'username' => array( - '_' => '帳號', - 'format' => '最多 16 個數字或字母', - ), - ), - 'date' => array( - 'Apr' => '\\四\\月', - 'Aug' => '\\八\\月', - 'Dec' => '\\十\\二\\月', - 'Feb' => '\\二\\月', - 'Jan' => '\\一\\月', - 'Jul' => '\\七\\月', - 'Jun' => '\\六\\月', - 'Mar' => '\\三\\月', - 'May' => '\\五\\月', - 'Nov' => '\\十\\一\\月', - 'Oct' => '\\十\\月', - 'Sep' => '\\九\\月', - 'apr' => '四月', - 'april' => '四月', - 'aug' => '八月', - 'august' => '八月', - 'before_yesterday' => '昨天以前', - 'dec' => '十二月', - 'december' => '十二月', - 'feb' => '二月', - 'february' => '二月', - 'format_date' => 'Y\\年n\\月j\\日', - 'format_date_hour' => 'Y\\年n\\月j\\日 H\\:i', - 'fri' => '週五', - 'jan' => '一月', - 'january' => '一月', - 'jul' => '七月', - 'july' => '七月', - 'jun' => '六月', - 'june' => '六月', - 'last_2_year' => '過去兩年', - 'last_3_month' => '最近三個月', - 'last_3_year' => '過去三年', - 'last_5_year' => '過去五年', - 'last_6_month' => '最近六個月', - 'last_month' => '上月', - 'last_week' => '上週', - 'last_year' => '去年', - 'mar' => '三月', - 'march' => '三月', - 'may' => '五月', - 'may_' => '五月', - 'mon' => '週一', - 'month' => '個月', - 'nov' => '十一月', - 'november' => '十一月', - 'oct' => '十月', - 'october' => '十月', - 'sat' => '週六', - 'sep' => '九月', - 'september' => '九月', - 'sun' => '週日', - 'thu' => '週四', - 'today' => '今天', - 'tue' => '週二', - 'wed' => '週三', - 'yesterday' => '昨天', - ), - 'dir' => 'ltr', // IGNORE - 'freshrss' => array( - '_' => 'FreshRSS', // IGNORE - 'about' => '關於 FreshRSS', - ), - 'js' => array( - 'category_empty' => '清空分類', - 'confirm_action' => '你確定要執行此操作嗎?這將不可撤銷!', - 'confirm_action_feed_cat' => '你確定要執行此操作嗎?你將丟失相關的收藏和自定義查詢。這將不可撤銷!', - 'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?', // TODO - 'feedback' => array( - 'body_new_articles' => 'FreshRSS 中有 %%d 篇文章等待閱讀。', - 'body_unread_articles' => '(未讀: %%d)', - 'request_failed' => '請求失敗,這可能是因為網絡連接問題。', - 'title_new_articles' => 'FreshRSS: 新文章!', - ), - 'labels_empty' => '沒有標籤', - 'new_article' => '發現新文章,點擊刷新頁面。', - 'should_be_activated' => '必須啟用 JavaScript', - 'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. See documentation', // TODO - ), - 'lang' => array( - 'cs' => 'Čeština', // IGNORE - 'de' => 'Deutsch', // IGNORE - 'el' => 'Ελληνικά', // IGNORE - 'en' => 'English', // IGNORE - 'en-us' => 'English (United States)', // IGNORE - 'es' => 'Español', // IGNORE - 'fa' => 'فارسی', // IGNORE - 'fi' => 'Suomi', // IGNORE - 'fr' => 'Français', // IGNORE - 'he' => 'עברית', // IGNORE - 'hu' => 'Magyar', // IGNORE - 'id' => 'Bahasa Indonesia', // IGNORE - 'it' => 'Italiano', // IGNORE - 'ja' => '日本語', // IGNORE - 'ko' => '한국어', // IGNORE - 'lv' => 'Latviešu', // IGNORE - 'nl' => 'Nederlands', // IGNORE - 'oc' => 'Occitan', // IGNORE - 'pl' => 'Polski', // IGNORE - 'pt-br' => 'Português (Brasil)', // IGNORE - 'pt-pt' => 'Português (Portugal)', // IGNORE - 'ru' => 'Русский', // IGNORE - 'sk' => 'Slovenčina', // IGNORE - 'tr' => 'Türkçe', // IGNORE - 'uk' => 'Українська', // IGNORE - 'zh-cn' => '簡體中文', // IGNORE - 'zh-tw' => '正體中文', // IGNORE - ), - 'menu' => array( - 'about' => '關於', - 'account' => '帳號', - 'admin' => '管理', - 'archiving' => '歸檔', - 'authentication' => '認證', - 'check_install' => '環境檢查', - 'configuration' => '配置', - 'display' => '顯示', - 'extensions' => '擴充功能', - 'logs' => '日誌', - 'privacy' => 'Privacy', // TODO - 'queries' => '自定義查詢', - 'reading' => '閱讀', - 'search' => '搜尋內容或#標簽', - 'search_help' => '請見文檔內的進階的搜尋參數', - 'sharing' => '分享', - 'shortcuts' => '快捷鍵', - 'stats' => '統計', - 'system' => '系統配置', - 'update' => '更新', - 'user_management' => '使用者管理', - 'user_profile' => '使用者資訊', - ), - 'period' => array( - 'days' => '天', - 'hours' => '時', - 'months' => '月', - 'weeks' => '週', - 'years' => '年', - ), - 'readme' => array( - 'contribute' => 'contribute', // IGNORE - 'language' => 'Language', // IGNORE - 'translated' => 'Progress', // IGNORE - ), - 'share' => array( - 'Known' => '基於 Known 的站點', - 'archiveIS' => 'archive.is', // IGNORE - 'archiveORG' => 'archive.org', // IGNORE - 'archivePH' => 'archive.ph', // IGNORE - 'bluesky' => 'Bluesky', // IGNORE - 'buffer' => 'Buffer', // IGNORE - 'clipboard' => '剪貼板', - 'diaspora' => 'Diaspora*', // IGNORE - 'email' => '郵箱', // IGNORE - 'email-webmail-firefox-fix' => 'Email (webmail - Firefox專用修正)', - 'facebook' => '臉書', // IGNORE - 'gnusocial' => 'GNU social', // IGNORE - 'jdh' => 'Journal du hacker', // IGNORE - 'lemmy' => 'Lemmy', // IGNORE - 'linkding' => 'Linkding', // IGNORE - 'linkedin' => 'LinkedIn', // IGNORE - 'mastodon' => 'Mastodon', // IGNORE - 'movim' => 'Movim', // IGNORE - 'omnivore' => 'Omnivore', // IGNORE - 'pinboard' => 'Pinboard', // IGNORE - 'pinterest' => 'Pinterest', // IGNORE - 'pocket' => 'Pocket', // IGNORE - 'print' => '打印', - 'raindrop' => 'Raindrop.io', // IGNORE - 'reddit' => 'Reddit', // IGNORE - 'shaarli' => 'Shaarli', // IGNORE - 'telegram' => 'Telegram', // IGNORE - 'twitter' => '推特', // IGNORE - 'wallabag' => 'Wallabag v1', // IGNORE - 'wallabagv2' => 'Wallabag v2', // IGNORE - 'web-sharing-api' => 'Web分享', - 'whatsapp' => 'Whatsapp', // IGNORE - 'xing' => 'Xing', // IGNORE - ), - 'short' => array( - 'attention' => '警告!', - 'blank_to_disable' => '留空以禁用', - 'by_author' => '作者', - 'by_default' => '預設', - 'damn' => '錯誤!', - 'default_category' => '未分類', - 'no' => '否', - 'not_applicable' => '不可用', - 'ok' => '正常!', - 'or' => '或', - 'yes' => '是', - ), - 'stream' => array( - 'load_more' => '載入更多文章', - 'mark_all_read' => '全部設為已讀', - 'nothing_to_load' => '沒有更多文章', - ), -); diff --git a/app/i18n/zh-tw/index.php b/app/i18n/zh-tw/index.php deleted file mode 100644 index 4fcae7478..000000000 --- a/app/i18n/zh-tw/index.php +++ /dev/null @@ -1,110 +0,0 @@ - array( - '_' => '關於', - 'agpl3' => 'AGPL 3', // IGNORE - 'bug_reports' => array( - 'environment_information' => array( - '_' => 'System information', // TODO - 'browser' => 'Browser', // TODO - 'database' => 'Database', // TODO - 'server_software' => 'Server software', // TODO - 'version_curl' => 'cURL version', // TODO - 'version_frss' => 'FreshRSS version', // TODO - 'version_php' => 'PHP version', // TODO - ), - ), - 'bugs_reports' => '報告錯誤', - 'documentation' => 'Documentation', // TODO - 'freshrss_description' => 'FreshRSS 是一個自托管的 RSS 聚合服務。 它不僅輕快又易用,而且強大又易於配置。', - 'github' => 'GitHub Issues', - 'license' => '授權', - 'project_website' => '項目網站', - 'title' => '關於', - 'version' => '版本', - ), - 'feed' => array( - 'empty' => '暫時沒有文章可顯示。', - 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO - 'today' => 'Received today', // TODO - 'yesterday' => 'Received yesterday', // TODO - ), - 'rss_of' => '%s 的訂閱源', - 'title' => '首頁', - 'title_fav' => '收藏', - 'title_global' => '全局視圖', - ), - 'log' => array( - '_' => '日誌', - 'clear' => '清除日誌', - 'empty' => '日誌文件為空', - 'title' => '日誌', - ), - 'menu' => array( - 'about' => '關於 FreshRSS', - 'before_one_day' => '一天前', - 'before_one_week' => '一週前', - 'bookmark_query' => '收藏當前查詢', - 'favorites' => '收藏(%s)', - 'global_view' => '全局視圖', - 'important' => '重要的源', - 'main_stream' => '首頁', - 'mark_all_read' => '全部設為已讀', - 'mark_cat_read' => '此分類設為已讀', - 'mark_feed_read' => '此訂閱源設為已讀', - 'mark_selection_unread' => '選中設為已讀', - 'mylabels' => '我的標籤', - 'newer_first' => '由新至舊', - 'non-starred' => '顯示未收藏', - 'normal_view' => '普通視圖', - 'older_first' => '由舊至新', - 'queries' => '自定義查詢', - 'read' => '顯示已讀', - 'reader_view' => '閱讀視圖', - 'rss_view' => '訂閱源', - 'search_short' => '搜尋', - 'sort' => array( - '_' => 'Sorting criteria', // TODO - 'c' => array( - 'name_asc' => 'Category, feed titles A→Z', // TODO - 'name_desc' => 'Category, feed titles Z→A', // TODO - ), - 'date_asc' => 'Publication date 1→9', // TODO - 'date_desc' => 'Publication date 9→1', // TODO - 'f' => array( - 'name_asc' => 'Feed title A→Z', // TODO - 'name_desc' => 'Feed title Z→A', // TODO - ), - 'id_asc' => 'Freshly received last', // TODO - 'id_desc' => 'Freshly received first', // TODO - 'link_asc' => 'Link A→Z', // TODO - 'link_desc' => 'Link Z→A', // TODO - 'rand' => 'Random order', // TODO - 'title_asc' => 'Title A→Z', // TODO - 'title_desc' => 'Title Z→A', // TODO - ), - 'starred' => '顯示收藏', - 'stats' => '統計', - 'subscription' => '訂閱管理', - 'unread' => '顯示未讀', - ), - 'share' => '分享', - 'tag' => array( - 'related' => '文章標籤', - ), - 'tos' => array( - 'title' => '服務條款', - ), -); diff --git a/app/i18n/zh-tw/install.php b/app/i18n/zh-tw/install.php deleted file mode 100644 index 85efc75b2..000000000 --- a/app/i18n/zh-tw/install.php +++ /dev/null @@ -1,128 +0,0 @@ - array( - 'finish' => '完成安裝', - 'fix_errors_before' => '請在繼續下一步前修復錯誤', - 'keep_install' => '保留當前配置', - 'next_step' => '下一步', - 'reinstall' => '重新安裝 FreshRSS', - ), - 'bdd' => array( - '_' => '資料庫', - 'conf' => array( - '_' => '資料庫配置', - 'ko' => '請驗證你的資料庫資訊', - 'ok' => '數據庫配置已保存', - ), - 'host' => '主機', - 'password' => '密碼', - 'prefix' => '表前綴', - 'type' => '資料庫類型', - 'username' => '使用者名', - ), - 'check' => array( - '_' => '檢查', - 'already_installed' => '我們檢測到 FreshRSS 已經安裝!', - 'cache' => array( - 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'cache 目錄權限正常', - ), - 'ctype' => array( - 'nok' => '找不到字符類型檢測庫(php-ctype)', - 'ok' => '已找到字符類型檢測庫', - ), - 'curl' => array( - 'nok' => '找不到 cURL 庫(php-curl)', - 'ok' => '已找到 cURL 庫', - ), - 'data' => array( - 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'data 目錄權限正常', - ), - 'dom' => array( - 'nok' => '找不到用於瀏覽 DOM 的庫(php-xml)', - 'ok' => '已找到用於瀏覽 DOM 的庫', - ), - 'favicons' => array( - 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'favicons 目錄權限正常', - ), - 'fileinfo' => array( - 'nok' => '找不到 PHP fileinfo 庫(php-fileinfo)', - 'ok' => '已找到 fileinfo 庫', - ), - 'json' => array( - 'nok' => '找不到推薦的 JSON 解析庫', - 'ok' => '已找到推薦的 JSON 解析庫', - ), - 'mbstring' => array( - 'nok' => '找不到推薦的 Unicode 解析庫(mbstring)', - 'ok' => '已找到推薦的 Unicode 解析庫', - ), - 'pcre' => array( - 'nok' => '找不到正則表達式解析庫(php-pcre)', - 'ok' => '已找到正則表達式解析庫', - ), - 'pdo' => array( - 'nok' => '找不到 PDO 或支持的驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', - 'ok' => '已找到 PDO 和支持的至少一種驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', - ), - 'php' => array( - 'nok' => '你的 PHP 版本為 %s,但 FreshRSS 最低需要 %s', - 'ok' => '你的 PHP 版本為 %s,與 FreshRSS 兼容', - ), - 'reload' => '再檢查一遍', - 'tmp' => array( - 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => '緩存目錄權限正常。', - ), - 'unknown_process_username' => '未知', - 'users' => array( - 'nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', - 'ok' => 'users 目錄權限正常', - ), - 'xml' => array( - 'nok' => '找不到用於 XML 解析庫', - 'ok' => '已找到 XML 解析庫', - ), - ), - 'conf' => array( - '_' => '常規配置', - 'ok' => '常規配置已保存', - ), - 'congratulations' => '恭喜!', - 'default_user' => array( - '_' => '預設使用者名', - 'max_char' => '最多 16 個數字或字母', - ), - 'fix_errors_before' => '請在繼續下一步前修復錯誤', - 'javascript_is_better' => '啟用 JavaScript 會使 FreshRSS 工作得更好', - 'js' => array( - 'confirm_reinstall' => '重新安裝 FreshRSS 將會重置之前的配置。你確定要繼續嗎?', - ), - 'language' => array( - '_' => '語言', - 'choose' => '為 FreshRSS 選擇語言', - 'defined' => '語言已指定', - ), - 'missing_applied_migrations' => '出現錯誤,你需要手動創建一個空白檔案 %s。', - 'ok' => '安裝成功', - 'session' => array( - 'nok' => 'Web 伺服器似乎未正確配置 PHP 會話所需的 cookie!', - ), - 'step' => '步驟 %d', - 'steps' => '步驟', - 'this_is_the_end' => '最後一步', - 'title' => '安裝 FreshRSS', -); diff --git a/app/i18n/zh-tw/sub.php b/app/i18n/zh-tw/sub.php deleted file mode 100644 index 836de4795..000000000 --- a/app/i18n/zh-tw/sub.php +++ /dev/null @@ -1,307 +0,0 @@ - array( - 'documentation' => '複製以下地址,以供外部工具使用', - 'title' => 'API', // IGNORE - ), - 'bookmarklet' => array( - 'documentation' => '拖動此書簽到你的書簽欄或者右鍵選擇「收藏此連結」,然後在你想要訂閱的頁面上點擊「訂閱」按鈕', - 'label' => '訂閱', - 'title' => '書簽應用', - ), - 'category' => array( - '_' => '分類', - 'add' => '添加分類', - 'archiving' => '歸檔', - 'dynamic_opml' => array( - '_' => '動態訂閱', - 'help' => '使用地址上的 OPML 文件 中的訂閱源填充這一分類', - ), - 'empty' => '空分類', - 'expand' => '展開分類', - 'information' => '資訊', - 'open' => '打開分類', - 'opml_url' => 'OPML 地址', - 'position' => '顯示位置', - 'position_help' => '控制分類排列順序', - 'title' => '標題', - ), - 'feed' => array( - 'accept_cookies' => '接受 Cookies', - 'accept_cookies_help' => '允許提要伺服器設置 Cookies(僅在請求期間存儲在內存中)', - 'add' => '添加訂閱源', - 'advanced' => '高級', - 'archiving' => '歸檔', - 'auth' => array( - 'configuration' => '認證', - 'help' => '用於連接啟用 HTTP 認證的訂閱源', - 'http' => 'HTTP 認證', - 'password' => 'HTTP 密碼', - 'username' => 'HTTP 用戶名', - ), - 'change_favicon' => 'Change…', // TODO - 'clear_cache' => '總是清除暫存', - 'content_action' => array( - '_' => '獲取原文後的操作', - 'append' => '添加在現有內容後部', - 'prepend' => '添加在現有內容前部', - 'replace' => '替換現有內容', - ), - 'content_retrieval' => 'Content retrieval', // TODO - 'css_cookie' => '獲取原文時的 Cookies', - 'css_cookie_help' => '例:foo=bar; gdpr_consent=true; cookie=value', - 'css_help' => '用於獲取全文(注意,這將耗費更多時間!)', - 'css_path' => '原文的 CSS 選擇器', - 'css_path_filter' => array( - '_' => '需移除元素的 CSS 選擇器', - 'help' => '可設置多個 CSS 選擇器,例如:footer, aside, p[data-sanitized-class~="menu"]', - ), - 'description' => '描述', - 'empty' => '此源為空。請確認它是否正常更新。', - 'error' => '此源遇到一些問題。請在確認是否能正常訪問後重試。', // DIRTY - 'export-as-opml' => array( - 'download' => '下載', - 'help' => 'XML file (data subset. See documentation)', // TODO - 'label' => '匯出為OPML', - ), - 'ext_favicon' => 'Set automatically', // TODO - 'favicon_changed_by_ext' => 'The icon has been set by the %s extension.', // TODO - 'filteractions' => array( - '_' => '過濾動作', - 'help' => '每行寫一條過濾搜尋 Operators see documentation.', // DIRTY - ), - 'http_headers' => 'HTTP Headers', // TODO - 'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: Accept: application/atom+xml
Authorization: Bearer some-token
).', // TODO - 'icon' => 'Icon', // TODO - 'information' => '信息', - 'keep_min' => '至少保存的文章數', - 'kind' => array( - '_' => '訂閱源類型', - 'html_json' => array( - '_' => 'HTML + XPath + JSON dot notation (JSON in HTML)', // TODO - 'xpath' => array( - '_' => 'XPath for JSON in HTML', // TODO - 'help' => 'Example: normalize-space(//script[@type="application/json"]) (single JSON)
or: //script[@type="application/ld+json"] (one JSON object per article)', // TODO - ), - ), - 'html_xpath' => array( - '_' => 'HTML + XPath (Web 抓取)', - 'feed_title' => array( - '_' => '提要標題', - 'help' => '如 //title 或是靜態字元串如 "My custom feed"', - ), - 'help' => 'XPath 1.0 是為資深用戶準備的標準查詢語言,FreshRSS 用以實現 Web 抓取.', - 'item' => array( - '_' => '以尋找 文章
(很重要)', - 'help' => '例如 //div[@class="news-item"]', - ), - 'item_author' => array( - '_' => '文章作者', - 'help' => '可以是靜態字元串,例如 "Anonymous"', - ), - 'item_categories' => '文章標籤', - 'item_content' => array( - '_' => '文章內容', - 'help' => '例如使用 . 將整個對象作為文章內容', - ), - 'item_thumbnail' => array( - '_' => '文章縮圖', - 'help' => '例如 descendant::img/@src', - ), - 'item_timeFormat' => array( - '_' => '自訂日期/時間格式', - 'help' => '可選的。支援的格式DateTime::createFromFormat() 例如 d-m-Y H:i:s', - ), - 'item_timestamp' => array( - '_' => '文章日期:', - 'help' => '結果將被 strtotime() 解析', - ), - 'item_title' => array( - '_' => '文章標題', - 'help' => '注意使用 XPath 軸 descendant::,例如 descendant::h2', - ), - 'item_uid' => array( - '_' => '文章唯一標識', - 'help' => '可選,例如: descendant::div/@data-uri', - ), - 'item_uri' => array( - '_' => '文章鏈接 (URL)', - 'help' => '例如 descendant::a/@href', - ), - 'relative' => 'XPath(文章):', - 'xpath' => 'XPath 定位:', - ), - 'json_dotnotation' => array( - '_' => 'JSON (點「.」符號)', - 'feed_title' => array( - '_' => '源標題', - 'help' => '範例: meta.title 或固定的字串: "My custom feed"', - ), - 'help' => 'A JSON dot notated uses dots between objects and brackets for arrays (e.g. data.items[0].title)', // TODO - 'item' => array( - '_' => '找尋新聞 項目
(最重要的)', - 'help' => 'JSON path to the array containing the items, e.g. $ or newsItems', // TODO - ), - 'item_author' => '項目作者', - 'item_categories' => '項目標籤', - 'item_content' => array( - '_' => '項目內容', - 'help' => '可以在其下方找到內容的關鍵字, e.g. content', - ), - 'item_thumbnail' => array( - '_' => '項目縮圖', - 'help' => '範例: image', - ), - 'item_timeFormat' => array( - '_' => '自訂 日期/時間 格式', - 'help' => '選用項目。 支援以DateTime::createFromFormat() 表達的格式,例如 d-m-Y H:i:s', - ), - 'item_timestamp' => array( - '_' => '項目日期', - 'help' => 'The result will be parsed by strtotime()', // TODO - ), - 'item_title' => '項目標題', - 'item_uid' => '項目專用ID', - 'item_uri' => array( - '_' => '項目連結(URL)', - 'help' => '範例: 永久連結', - ), - 'json' => 'dot notation for:', // TODO - 'relative' => 'dot notated path (relative to item) for:', // TODO - ), - 'jsonfeed' => 'JSON Feed', // TODO - 'rss' => 'RSS / Atom (預設)', - 'xml_xpath' => 'XML + XPath', // TODO - ), - 'maintenance' => array( - 'clear_cache' => '清理暫存', - 'clear_cache_help' => '清除該feed的暫存', - 'reload_articles' => '重載文章', - 'reload_articles_help' => '重載 n 篇文章並抓取內容(若設置了 CSS 選擇器)', - 'title' => '維護', - ), - 'max_http_redir' => '最大 HTTP 重定向', - 'max_http_redir_help' => '設置為 0 或留空以禁用,-1 表示無限重定向', - 'method' => array( - '_' => 'HTTP 方法', - ), - 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO - 'method_postparams' => 'Payload for POST', // TODO - 'moved_category_deleted' => '刪除分類時,其中的訂閱源會自動歸類到 %s', - 'mute' => array( - '_' => '暫停', - 'state_is_muted' => 'This feed is muted', // TODO - ), - 'no_selected' => '未選擇訂閱源', - 'number_entries' => '%d 篇文章', - 'open_feed' => 'Open feed %s', // TODO - 'path_entries_conditions' => 'Conditions for content retrieval', // TODO - 'priority' => array( - '_' => '可見性', - 'category' => '在分類中顯示', - 'feed' => 'Show in its feed', // TODO - 'hidden' => '不顯示', - 'important' => '顯示在重要的源', - 'main_stream' => '在首頁中顯示', - ), - 'proxy' => '獲取訂閱源時的代理', - 'proxy_help' => '選擇協議(例:SOCKS5)和代理地址(例:127.0.0.1:1080 or username:password@127.0.0.1:1080)', // DIRTY - 'reset_favicon' => 'Reset to default', // TODO - 'selector_preview' => array( - 'show_raw' => '顯示源碼', - 'show_rendered' => '顯示內容', - ), - 'show' => array( - 'all' => '顯示所有訂閱源', - 'error' => '僅顯示有錯誤的訂閱源', - ), - 'showing' => array( - 'error' => '正在顯示有錯誤的訂閱源', - ), - 'ssl_verify' => '驗證 SSL 證書安全', - 'stats' => '統計', - 'think_to_add' => '你可以添加一些訂閱源。', - 'timeout' => '超時時間(秒)', - 'title' => '標題', - 'title_add' => '添加訂閱源', - 'ttl' => '最小自動更新間隔', - 'unicityCriteria' => array( - '_' => 'Article unicity criteria', // TODO - 'forced' => 'forced', // TODO - 'help' => 'Relevant for invalid feeds.
⚠️ Changing the policy will create duplicates.', // TODO - 'id' => 'Standard ID (default)', // TODO - 'link' => 'Link', // TODO - 'sha1:content' => 'Content', // TODO - 'sha1:content_published' => 'Content + Date', // TODO - 'sha1:link_published' => 'Link + Date', // TODO - 'sha1:link_published_title' => 'Link + Date + Title', // TODO - 'sha1:link_published_title_content' => 'Link + Date + Title + Content', // TODO - 'sha1:published' => 'Date', // TODO - 'sha1:title' => 'Title', // TODO - 'sha1:title_published' => 'Title + Date', // TODO - 'sha1:title_published_content' => 'Title + Date + Content', // TODO - ), - 'url' => '源地址', - 'useragent' => '設置用於獲取此源的 User Agent', - 'useragent_help' => '例:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', - 'validator' => '檢查訂閱源有效性', - 'website' => '網站地址', - 'websub' => 'WebSub 即時通知', - ), - 'import_export' => array( - 'export' => array( - '_' => '導出', - 'sqlite' => 'Download user database as SQLite', // TODO - ), - 'export_labelled' => '導出有標籤的文章', - 'export_opml' => '導出訂閱源列表(OPML)', - 'export_starred' => '導出你的收藏', - 'feed_list' => '%s 文章列表', - 'file_to_import' => '需要導入的文件
(OPML、JSON 或 ZIP)', - 'file_to_import_no_zip' => '需要導入的文件
(OPML 或 JSON)', - 'import' => '導入', - 'starred_list' => '收藏文章列表', - 'title' => '導入/導出', - ), - 'menu' => array( - 'add' => '添加訂閱源或分類', - 'import_export' => '導入/導出', - 'label_management' => '標籤管理', - 'stats' => array( - 'idle' => '長期無更新訂閱源', - 'main' => '主要統計', - 'repartition' => '文章分布', - ), - 'subscription_management' => '訂閱管理', - 'subscription_tools' => '訂閱工具', - ), - 'tag' => array( - 'auto_label' => '新增標籤給新文章', - 'name' => '名稱', - 'new_name' => '新名稱', - 'old_name' => '舊名稱', - ), - 'title' => array( - '_' => '訂閱管理', - 'add' => '添加訂閱源或分類', - 'add_category' => '添加分類', - 'add_dynamic_opml' => '添加訂閱源動態列表', - 'add_feed' => '添加訂閱源', - 'add_label' => '添加標籤', - 'add_opml_category' => 'OPML category name', // TODO - 'delete_label' => '刪除標籤', - 'feed_management' => '訂閱源管理', - 'subscription_tools' => '訂閱工具', - ), -); diff --git a/app/i18n/zh-tw/user.php b/app/i18n/zh-tw/user.php deleted file mode 100644 index 1ef0f5a12..000000000 --- a/app/i18n/zh-tw/user.php +++ /dev/null @@ -1,54 +0,0 @@ - array( - 'feedback' => array( - 'invalid' => '電子郵箱地址無效', - 'required' => '必須填寫郵箱地址', - ), - 'validation' => array( - 'change_email' => '您可以在 使用者管理 中變更您的郵箱地址', - 'email_sent_to' => '我們已通過 %s 發送驗證郵件給您,請按其中指示來驗證郵箱地址。', - 'feedback' => array( - 'email_failed' => '由於伺服器配置錯誤,我們無法向您發送郵件。', - 'email_sent' => '郵件已發送到您的郵箱中', - 'error' => '郵箱地址無法通過驗證', - 'ok' => '郵箱地址已成功通過驗證', - 'unnecessary' => '該郵箱地址已被驗證', - 'wrong_token' => '由於令牌錯誤,郵箱地址無法通過驗證。', - ), - 'need_to' => '您需要先驗證郵箱地址才能使用 %s', - 'resend_email' => '重發郵件', - 'title' => '驗證郵箱地址', - ), - ), - 'mailer' => array( - 'email_need_validation' => array( - 'body' => '%s,歡迎', - 'title' => '您需要驗證您的帳號', - 'welcome' => '您已註冊 %s 現在只需點擊下方連結通過郵箱驗證即可完成註冊:', - ), - ), - 'password' => array( - 'invalid' => '無效密碼', - ), - 'tos' => array( - 'feedback' => array( - 'invalid' => '您必須接受服務條款才能註冊', - ), - ), - 'username' => array( - 'invalid' => '無效用戶名', - 'taken' => '已存在此用戶名', - ), -); diff --git a/cli/check.translation.php b/cli/check.translation.php index 5c0873099..dbb5d0fe4 100755 --- a/cli/check.translation.php +++ b/cli/check.translation.php @@ -124,16 +124,8 @@ if ($cliOptions->generateReadme) { $ghSearchUrl = 'https://github.com/search?q=' . urlencode("repo:FreshRSS/FreshRSS path:app/i18n/$lang /(TODO|DIRTY)$/"); - // 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); - } - $markdownTable .= '| ' . implode(' | ', [ - _t('gen.lang.' . $lang) . " ($bcp47)", + _t('gen.lang.' . $lang) . " ($lang)", $progressBar . ' ' . $percentageInt . '%', "[__contribute__]($ghSearchUrl)", ]) . " |\n"; diff --git a/docs/en/users/05_Configuration.md b/docs/en/users/05_Configuration.md index 499e770d0..65eef7dfd 100644 --- a/docs/en/users/05_Configuration.md +++ b/docs/en/users/05_Configuration.md @@ -19,8 +19,10 @@ Available languages are: | German | Deutsch | de | | Greek | Ελληνικά | el | | English | English | en | -| English (United States) | English (United States) | en-us | +| English (United States) | English (United States) | en-US | | Spanish | Español | es | +| Farsi | فارسی | fa | +| Finnish | Suomi | fi | | French | Français | fr | | Hebrew | עברית | he | | Hungarian | Magyar | hu | @@ -32,12 +34,16 @@ Available languages are: | Dutch | Nederlands | nl | | Occitan | Occitan | oc | | Polish | Polski | pl | -| Brazilian Portuguese | Português (Brasil) | pt-br | +| Brazilian Portuguese | Português (Brasil) | pt-BR | +| Portuguese | Português (Portugal) | pt-PT | | Russian | Русский | ru | | Slovak | Slovenčina | sk | | Turkish | Türkçe | tr | -| Chinese (Simplified, People’s Republic of China) | 简体中文 | zh-cn | -| Chinese (Traditional, Taiwan) | 正體中文 | zh-tw | +| Ukrainian | Українська | uk | +| Chinese (Simplified, People’s Republic of China) | 简体中文 | zh-CN | +| Chinese (Traditional, Taiwan) | 正體中文 | zh-TW | + +**Note** for regional languages, we are following the recommendations of _ISO-639-1_ and _ISO-3166-1 alpha-2_. ### Theme diff --git a/docs/fr/users/05_Configuration.md b/docs/fr/users/05_Configuration.md index 8e0174fa4..8e25fec7d 100644 --- a/docs/fr/users/05_Configuration.md +++ b/docs/fr/users/05_Configuration.md @@ -25,10 +25,13 @@ Les langues disponibles sont: | Allemand | Deutsch | de | | Grec | Ελληνικά | el | | Anglais | English | en | -| Anglais (États-Unis) | English (United States) | en-us | +| Anglais (États-Unis) | English (United States) | en-US | | Espagnol | Español | es | +| Farsi | فارسی | fa | +| Finnois | Suomi | fi | | Français | Français | fr | | Hébreu | עברית | he | +| Hongrois | Magyar | hu | | Indonésien | Bahasa Indonesia | id | | Italien | Italiano | it | | Japonais | 日本語 | ja | @@ -37,12 +40,16 @@ Les langues disponibles sont: | Néerlandais | Nederlands | nl | | Occitan | Occitan | oc | | Polonais | Polski | pl | -| Portugais brésilien | Português (Brasil) | pt-br | +| Portugais brésilien | Português (Brasil) | pt-BR | +| Portugais | Português (Portugal) | pt-PT | | Russe | Русский | ru | | Slovaque | Slovenčina | sk | | Turc | Türkçe | tr | -| Chinois (simplifié, République populaire de Chine) | 简体中文 | zh-cn | -| Chinois (traditionnel, Taïwan) | 正體中文 | zh-tw | +| Ukrainien | Українська | uk | +| Chinois (simplifié, République populaire de Chine) | 简体中文 | zh-CN | +| Chinois (traditionnel, Taïwan) | 正體中文 | zh-TW | + +**Note** pour les langues régionales, nous suivons les recommandations de _ISO-639-1_ et _ISO-3166-1 alpha-2_. ### Thème -- cgit v1.2.3