Browse Source

Merge branch 'dev'

This is the end of the `dev` branch. Good bye old friend!
Marien Fressinaud 6 years ago
parent
commit
2b1f8e67f7
100 changed files with 2208 additions and 1749 deletions
  1. 4 0
      CHANGELOG.md
  2. 1 0
      CREDITS.md
  3. 65 6
      Makefile
  4. 10 11
      README.fr.md
  5. 6 7
      README.md
  6. 47 0
      app/Controllers/apiController.php
  7. 12 0
      app/Controllers/feedController.php
  8. 1 1
      app/Controllers/javascriptController.php
  9. 68 65
      app/Controllers/userController.php
  10. 1 0
      app/FreshRSS.php
  11. 33 0
      app/Models/FeedDAO.php
  12. 0 1
      app/Models/FeedDAOSQLite.php
  13. 17 1
      app/Models/Share.php
  14. 80 0
      app/Utils/feverUtil.php
  15. 27 0
      app/Utils/passwordUtil.php
  16. 31 25
      app/i18n/cz/admin.php
  17. 46 45
      app/i18n/cz/conf.php
  18. 21 15
      app/i18n/cz/feedback.php
  19. 53 51
      app/i18n/cz/gen.php
  20. 10 10
      app/i18n/cz/index.php
  21. 8 8
      app/i18n/cz/install.php
  22. 32 32
      app/i18n/cz/sub.php
  23. 21 21
      app/i18n/cz/user.php
  24. 20 14
      app/i18n/de/admin.php
  25. 33 32
      app/i18n/de/conf.php
  26. 17 11
      app/i18n/de/feedback.php
  27. 53 51
      app/i18n/de/gen.php
  28. 11 11
      app/i18n/de/index.php
  29. 7 7
      app/i18n/de/install.php
  30. 17 17
      app/i18n/de/sub.php
  31. 21 21
      app/i18n/de/user.php
  32. 16 10
      app/i18n/en/admin.php
  33. 16 15
      app/i18n/en/conf.php
  34. 17 11
      app/i18n/en/feedback.php
  35. 8 7
      app/i18n/en/gen.php
  36. 6 6
      app/i18n/en/index.php
  37. 6 6
      app/i18n/en/install.php
  38. 6 6
      app/i18n/en/sub.php
  39. 6 6
      app/i18n/en/user.php
  40. 31 25
      app/i18n/es/admin.php
  41. 43 42
      app/i18n/es/conf.php
  42. 21 15
      app/i18n/es/feedback.php
  43. 51 49
      app/i18n/es/gen.php
  44. 10 10
      app/i18n/es/index.php
  45. 8 8
      app/i18n/es/install.php
  46. 28 28
      app/i18n/es/sub.php
  47. 21 21
      app/i18n/es/user.php
  48. 18 12
      app/i18n/fr/admin.php
  49. 17 16
      app/i18n/fr/conf.php
  50. 17 11
      app/i18n/fr/feedback.php
  51. 14 12
      app/i18n/fr/gen.php
  52. 6 6
      app/i18n/fr/index.php
  53. 6 6
      app/i18n/fr/install.php
  54. 7 7
      app/i18n/fr/sub.php
  55. 7 7
      app/i18n/fr/user.php
  56. 78 72
      app/i18n/he/admin.php
  57. 53 52
      app/i18n/he/conf.php
  58. 44 38
      app/i18n/he/feedback.php
  59. 86 84
      app/i18n/he/gen.php
  60. 10 10
      app/i18n/he/index.php
  61. 28 28
      app/i18n/he/install.php
  62. 31 31
      app/i18n/he/sub.php
  63. 21 21
      app/i18n/he/user.php
  64. 31 25
      app/i18n/it/admin.php
  65. 44 43
      app/i18n/it/conf.php
  66. 21 15
      app/i18n/it/feedback.php
  67. 56 54
      app/i18n/it/gen.php
  68. 12 12
      app/i18n/it/index.php
  69. 11 11
      app/i18n/it/install.php
  70. 32 32
      app/i18n/it/sub.php
  71. 21 21
      app/i18n/it/user.php
  72. 17 11
      app/i18n/kr/admin.php
  73. 22 21
      app/i18n/kr/conf.php
  74. 17 11
      app/i18n/kr/feedback.php
  75. 16 14
      app/i18n/kr/gen.php
  76. 6 6
      app/i18n/kr/index.php
  77. 7 7
      app/i18n/kr/install.php
  78. 10 10
      app/i18n/kr/sub.php
  79. 21 21
      app/i18n/kr/user.php
  80. 17 11
      app/i18n/nl/admin.php
  81. 16 15
      app/i18n/nl/conf.php
  82. 18 12
      app/i18n/nl/feedback.php
  83. 24 6
      app/i18n/nl/gen.php
  84. 7 7
      app/i18n/nl/index.php
  85. 7 7
      app/i18n/nl/install.php
  86. 7 7
      app/i18n/nl/sub.php
  87. 6 6
      app/i18n/nl/user.php
  88. 15 9
      app/i18n/oc/admin.php
  89. 16 16
      app/i18n/oc/conf.php
  90. 18 12
      app/i18n/oc/feedback.php
  91. 14 12
      app/i18n/oc/gen.php
  92. 8 8
      app/i18n/oc/index.php
  93. 6 6
      app/i18n/oc/install.php
  94. 8 8
      app/i18n/oc/sub.php
  95. 6 6
      app/i18n/oc/user.php
  96. 31 25
      app/i18n/pt-br/admin.php
  97. 44 43
      app/i18n/pt-br/conf.php
  98. 23 17
      app/i18n/pt-br/feedback.php
  99. 51 49
      app/i18n/pt-br/gen.php
  100. 12 12
      app/i18n/pt-br/index.php

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 # FreshRSS changelog
 # FreshRSS changelog
 
 
+## 20XX-XX-XX FreshRSS 1.15.4-dev
+
+
+
 ## 2019-11-22 FreshRSS 1.15.3
 ## 2019-11-22 FreshRSS 1.15.3
 
 
 * Bug fixing (regressions from 1.15.x)
 * Bug fixing (regressions from 1.15.x)

+ 1 - 0
CREDITS.md

@@ -68,6 +68,7 @@ People are sorted by name so please keep this order.
 * [Quentin Dufour](https://github.com/superboum): [contributions](https://github.com/FreshRSS/documentation/commits?author=superboum), [Web](http://quentin.dufour.io/)
 * [Quentin Dufour](https://github.com/superboum): [contributions](https://github.com/FreshRSS/documentation/commits?author=superboum), [Web](http://quentin.dufour.io/)
 * [Quentin Pagès](https://github.com/Quenty31): [contributions](https://github.com/FreshRSS/documentation/commits?author=Quenty31)
 * [Quentin Pagès](https://github.com/Quenty31): [contributions](https://github.com/FreshRSS/documentation/commits?author=Quenty31)
 * [Ramón Cutanda](https://github.com/rcutanda): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rcutanda)
 * [Ramón Cutanda](https://github.com/rcutanda): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rcutanda)
+* [Rezad](https://github.com/rezad1393): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rezad1393)
 * [Robert Kaussow](https://github.com/xoxys): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:xoxys), [Web](https://geeklabor.de/)
 * [Robert Kaussow](https://github.com/xoxys): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:xoxys), [Web](https://geeklabor.de/)
 * [rocka](https://github.com/rocka): [contributions](https://github.com/FreshRSS/FreshRss/commits/dev?author=rocka)
 * [rocka](https://github.com/rocka): [contributions](https://github.com/FreshRSS/FreshRss/commits/dev?author=rocka)
 * [romibi](https://github.com/romibi): [contributions](https://github.com/FreshRSS/FreshRSS/commits/dev?author=romibi)
 * [romibi](https://github.com/romibi): [contributions](https://github.com/FreshRSS/FreshRSS/commits/dev?author=romibi)

+ 65 - 6
Makefile

@@ -1,10 +1,11 @@
 .DEFAULT_GOAL := help
 .DEFAULT_GOAL := help
 
 
 ifndef TAG
 ifndef TAG
-	TAG=dev-alpine
+	TAG=alpine
 endif
 endif
 
 
 PORT ?= 8080
 PORT ?= 8080
+PHP := $(shell sh -c 'which php')
 
 
 ifeq ($(findstring alpine,$(TAG)),alpine)
 ifeq ($(findstring alpine,$(TAG)),alpine)
 	DOCKERFILE=Dockerfile-Alpine
 	DOCKERFILE=Dockerfile-Alpine
@@ -14,20 +15,23 @@ else
 	DOCKERFILE=Dockerfile
 	DOCKERFILE=Dockerfile
 endif
 endif
 
 
+############
+## Docker ##
+############
 .PHONY: build
 .PHONY: build
 build: ## Build a Docker image
 build: ## Build a Docker image
 	docker build \
 	docker build \
 		--pull \
 		--pull \
 		--tag freshrss/freshrss:$(TAG) \
 		--tag freshrss/freshrss:$(TAG) \
-		-f Docker/$(DOCKERFILE) .
+		--file Docker/$(DOCKERFILE) .
 
 
 .PHONY: start
 .PHONY: start
 start: ## Start the development environment (use Docker)
 start: ## Start the development environment (use Docker)
 	docker run \
 	docker run \
 		--rm \
 		--rm \
-		-v $(shell pwd):/var/www/FreshRSS:z \
-		-p $(PORT):80 \
-		-e FRESHRSS_ENV=development \
+		--volume $(shell pwd):/var/www/FreshRSS:z \
+		--publish $(PORT):80 \
+		--env FRESHRSS_ENV=development \
 		--name freshrss-dev \
 		--name freshrss-dev \
 		freshrss/freshrss:$(TAG)
 		freshrss/freshrss:$(TAG)
 
 
@@ -35,6 +39,61 @@ start: ## Start the development environment (use Docker)
 stop: ## Stop FreshRSS container if any
 stop: ## Stop FreshRSS container if any
 	docker stop freshrss-dev
 	docker stop freshrss-dev
 
 
+##########
+## I18N ##
+##########
+.PHONY: i18n-format
+i18n-format: ## Format I18N files
+	@$(PHP) ./cli/manipulate.translation.php -a format
+	@echo Files formatted.
+
+.PHONY: i18n-add-language
+i18n-add-language: ## Add a new supported language
+ifndef lang
+	@echo To add a new language, you need to provide one in the "lang" variable.
+	@exit 10
+endif
+	@$(PHP) ./cli/manipulate.translation.php -a add -l $(lang)
+	@echo Language added.
+
+.PHONY: i18n-add-key
+i18n-add-key: ## Add a translation key to all supported languages
+ifndef key
+	@echo To add a key, you need to provide one in the "key" variable.
+	@exit 10
+endif
+ifndef value
+	@echo To add a key, you need to provide its value in the "value" variable.
+	@exit 10
+endif
+	@$(PHP) ./cli/manipulate.translation.php -a add -k $(key) -v "$(value)"
+	@echo Key added.
+
+.PHONY: i18n-remove-key
+i18n-remove-key: ## Remove a translation key from all supported languages
+ifndef key
+	@echo To remove a key, you need to provide one in the "key" variable.
+	@exit 10
+endif
+	@$(PHP) ./cli/manipulate.translation.php -a delete -k $(key)
+	@echo Key removed.
+
+.PHONY: i18n-ignore-key
+i18n-ignore-key: ## Ignore a translation key for the selected language
+ifndef lang
+	@echo To ignore a key, you need to provide a language in the "lang" variable.
+	@exit 10
+endif
+ifndef key
+	@echo To ignore a key, you need to provide one in the "key" variable.
+	@exit 10
+endif
+	@$(PHP) ./cli/manipulate.translation.php -a ignore -k $(key) -l $(lang)
+	@echo Key ignored.
+
+##########
+## HELP ##
+##########
 .PHONY: help
 .PHONY: help
 help:
 help:
-	@grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
+	@grep --extended-regexp '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

+ 10 - 11
README.fr.md

@@ -32,10 +32,10 @@ FreshRSS n’est fourni avec aucune garantie.
 ![Capture d’écran de FreshRSS](docs/img/FreshRSS-screenshot.png)
 ![Capture d’écran de FreshRSS](docs/img/FreshRSS-screenshot.png)
 
 
 # [Documentation](https://freshrss.github.io/FreshRSS/fr/)
 # [Documentation](https://freshrss.github.io/FreshRSS/fr/)
-* La [documentation utilisateurs](https://freshrss.github.io/FreshRSS/fr/users/02_First_steps.md) pour découvrir les fonctionnalités de FreshRSS.
-* La [documentation administrateurs](https://freshrss.github.io/FreshRSS/fr/users/01_Installation.md) pour l’installation et la maintenance de FreshRSS.
-* La [documentation développeurs](https://freshrss.github.io/FreshRSS/fr/developers/01_First_steps.md) pour savoir comment contribuer et mieux comprendre le code source de FreshRSS.
-* Le [guide de contribution](https://freshrss.github.io/FreshRSS/fr/contributing.md) pour nous aider à développer FreshRSS.
+* La [documentation utilisateurs](https://freshrss.github.io/FreshRSS/fr/users/02_First_steps.html) pour découvrir les fonctionnalités de FreshRSS.
+* La [documentation administrateurs](https://freshrss.github.io/FreshRSS/fr/users/01_Installation.html) pour l’installation et la maintenance de FreshRSS.
+* La [documentation développeurs](https://freshrss.github.io/FreshRSS/fr/developers/01_First_steps.html) pour savoir comment contribuer et mieux comprendre le code source de FreshRSS.
+* Le [guide de contribution](https://freshrss.github.io/FreshRSS/fr/contributing.html) pour nous aider à développer FreshRSS.
 
 
 # Prérequis
 # Prérequis
 * Un navigateur Web récent tel que Firefox / IceCat, Internet Explorer 11 / Edge (sauf certains détails), Chromium / Chrome, Opera, Safari.
 * Un navigateur Web récent tel que Firefox / IceCat, Internet Explorer 11 / Edge (sauf certains détails), Chromium / Chrome, Opera, Safari.
@@ -50,11 +50,10 @@ FreshRSS n’est fourni avec aucune garantie.
 
 
 
 
 # Téléchargement
 # Téléchargement
-Voir la [liste des versions](../../releases).
 
 
-## À propos des branches
-* Utilisez [la branche master](https://github.com/FreshRSS/FreshRSS/tree/master/) si vous souhaitez des versions moins fréquentes et stables.
-* Utilisez [la branche dev](https://github.com/FreshRSS/FreshRSS/tree/dev) si vous vouler une publication continue (rolling release) avec les dernières nouveautés, ou bien aider à tester ou développer la future version stable.
+Si vous préférez que votre FreshRSS soit stable, vous devriez télécharger la dernière version. De nouvelles versions sont publiées tous les 2 ou 3 mois. Voir la [liste des versions](https://github.com/FreshRSS/FreshRSS/releases).
+
+Si vous voulez une publication continue (rolling release) avec les dernières nouveautés, ou bien aider à tester ou développer la future version stable, vous pouvez utiliser [la branche master](https://github.com/FreshRSS/FreshRSS/tree/master/).
 
 
 
 
 # [Installation](https://freshrss.github.io/FreshRSS/fr/users/01_Installation.html)
 # [Installation](https://freshrss.github.io/FreshRSS/fr/users/01_Installation.html)
@@ -74,7 +73,7 @@ Voir la [liste des versions](../../releases).
 6. Des paramètres de configuration avancés peuvent être vus dans [config.default.php](config.default.php) et modifiés dans `data/config.php`.
 6. Des paramètres de configuration avancés peuvent être vus dans [config.default.php](config.default.php) et modifiés dans `data/config.php`.
 7. Avec Apache, activer [`AllowEncodedSlashes`](https://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes) pour une meilleure compatibilité avec les clients mobiles.
 7. Avec Apache, activer [`AllowEncodedSlashes`](https://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes) pour une meilleure compatibilité avec les clients mobiles.
 
 
-Plus d’informations sur l’installation et la configuration serveur peuvent être trouvées dans [notre documentation](https://freshrss.github.io/FreshRSS/fr/users/01_Installation.md).
+Plus d’informations sur l’installation et la configuration serveur peuvent être trouvées dans [notre documentation](https://freshrss.github.io/FreshRSS/fr/users/01_Installation.html).
 
 
 ### Exemple d’installation complète sur Linux Debian/Ubuntu
 ### Exemple d’installation complète sur Linux Debian/Ubuntu
 ```sh
 ```sh
@@ -97,8 +96,8 @@ sudo apt-get install git
 sudo git clone https://github.com/FreshRSS/FreshRSS.git
 sudo git clone https://github.com/FreshRSS/FreshRSS.git
 cd FreshRSS
 cd FreshRSS
 
 
-# Si vous souhaitez utiliser la branche développement de FreshRSS
-sudo git checkout -b dev origin/dev
+# Si vous souhaitez utiliser la dernière version stable de FreshRSS
+sudo git checkout $(git describe --tags --abbrev=0)
 
 
 # Mettre les droits d’accès pour le serveur Web
 # Mettre les droits d’accès pour le serveur Web
 sudo chown -R :www-data . && sudo chmod -R g+r . && sudo chmod -R g+w ./data/
 sudo chown -R :www-data . && sudo chmod -R g+r . && sudo chmod -R g+w ./data/

+ 6 - 7
README.md

@@ -35,7 +35,7 @@ FreshRSS comes with absolutely no warranty.
 * [User documentation](https://freshrss.github.io/FreshRSS/en/users/02_First_steps.html), where you can discover all the possibilities offered by FreshRSS
 * [User documentation](https://freshrss.github.io/FreshRSS/en/users/02_First_steps.html), where you can discover all the possibilities offered by FreshRSS
 * [Administrator documentation](https://freshrss.github.io/FreshRSS/en/admins/01_Index.html) for detailed installation and maintenance related tasks
 * [Administrator documentation](https://freshrss.github.io/FreshRSS/en/admins/01_Index.html) for detailed installation and maintenance related tasks
 * [Developer documentation](https://freshrss.github.io/FreshRSS/en/developers/01_First_steps.html) to guide you in the source code of FreshRSS and to help you if you want to contribute
 * [Developer documentation](https://freshrss.github.io/FreshRSS/en/developers/01_First_steps.html) to guide you in the source code of FreshRSS and to help you if you want to contribute
-* [Contributor guidelines](https://freshrss.github.io/FreshRSS/en/contributing.md) for those who want to help improve FreshRSS
+* [Contributor guidelines](https://freshrss.github.io/FreshRSS/en/contributing.html) for those who want to help improve FreshRSS
 
 
 # Requirements
 # Requirements
 * A recent browser like Firefox / IceCat, Internet Explorer 11 / Edge (minus a few details), Chromium / Chrome, Opera, Safari.
 * A recent browser like Firefox / IceCat, Internet Explorer 11 / Edge (minus a few details), Chromium / Chrome, Opera, Safari.
@@ -50,14 +50,13 @@ FreshRSS comes with absolutely no warranty.
 
 
 
 
 # Releases
 # Releases
-See the [list of releases](../../releases).
 
 
-## About branches
-* Use [the master branch](https://github.com/FreshRSS/FreshRSS/tree/master/) if you need less frequent stable versions.
-* Use [the dev branch](https://github.com/FreshRSS/FreshRSS/tree/dev) if you want a rolling release with the newest features, or help testing or developing the next stable version.
+The latest stable release can be found [here](https://github.com/FreshRSS/FreshRSS/releases/latest). New versions are released every two to three months.
 
 
+If you want a rolling release with the newest features, or want to help testing or developing the next stable version, you can use [the `master` branch](https://github.com/FreshRSS/FreshRSS/tree/master/).
 
 
-# [Installation](https://freshrss.github.io/FreshRSS/en/admins/02_Installation.html)
+
+# [Installation](https://freshrss.github.io/FreshRSS/en/admins/03_Installation.html)
 
 
 ## Automated install
 ## Automated install
 * [![Docker](https://www.docker.com/sites/default/files/horizontal.png)](./Docker/)
 * [![Docker](https://www.docker.com/sites/default/files/horizontal.png)](./Docker/)
@@ -74,7 +73,7 @@ See the [list of releases](../../releases).
 6. Advanced configuration settings can be found in [config.default.php](config.default.php) and modified in `data/config.php`.
 6. Advanced configuration settings can be found in [config.default.php](config.default.php) and modified in `data/config.php`.
 7. When using Apache, enable [`AllowEncodedSlashes`](https://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes) for better compatibility with mobile clients.
 7. When using Apache, enable [`AllowEncodedSlashes`](https://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes) for better compatibility with mobile clients.
 
 
-More detailed information about installation and server configuration can be found in [our documentation](https://freshrss.github.io/FreshRSS/en/admins/02_Installation.html).
+More detailed information about installation and server configuration can be found in [our documentation](https://freshrss.github.io/FreshRSS/en/admins/03_Installation.html).
 
 
 ## Advice
 ## Advice
 * For better security, expose only the `./p/` folder to the Web.
 * For better security, expose only the `./p/` folder to the Web.

+ 47 - 0
app/Controllers/apiController.php

@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * This controller manage API-related features.
+ */
+class FreshRSS_api_Controller extends Minz_ActionController {
+	/**
+	 * This action updates the user API password.
+	 *
+	 * Parameter is:
+	 * - apiPasswordPlain: the new user password
+	 */
+	public function updatePasswordAction() {
+		if (!FreshRSS_Auth::hasAccess()) {
+			Minz_Error::error(403);
+		}
+
+		$return_url = array('c' => 'user', 'a' => 'profile');
+
+		if (!Minz_Request::isPost()) {
+			Minz_Request::forward($return_url, true);
+		}
+
+		$apiPasswordPlain = Minz_Request::param('apiPasswordPlain', '', true);
+		if ($apiPasswordPlain == '') {
+			Minz_Request::forward($return_url, true);
+		}
+
+		$username = Minz_Session::param('currentUser');
+		$userConfig = FreshRSS_Context::$user_conf;
+
+		$apiPasswordHash = FreshRSS_password_Util::hash($apiPasswordPlain);
+		$userConfig->apiPasswordHash = $apiPasswordHash;
+
+		$feverKey = FreshRSS_fever_Util::updateKey($username, $apiPasswordPlain);
+		if (!$feverKey) {
+			Minz_Request::bad(_t('feedback.api.password.failed'), $return_url);
+		}
+
+		$userConfig->feverKey = $feverKey;
+		if ($userConfig->save()) {
+			Minz_Request::good(_t('feedback.api.password.updated'), $return_url);
+		} else {
+			Minz_Request::bad(_t('feedback.api.password.failed'), $return_url);
+		}
+	}
+}

+ 12 - 0
app/Controllers/feedController.php

@@ -47,6 +47,12 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
 
 
 		$url = trim($url);
 		$url = trim($url);
 
 
+		/** @var $url */
+		$url = Minz_ExtensionManager::callHook('check_url_before_add', $url);
+		if (null === $url) {
+			throw new FreshRSS_FeedNotAdded_Exception($url, $title);
+		}
+
 		$cat = null;
 		$cat = null;
 		if ($new_cat_name != '') {
 		if ($new_cat_name != '') {
 			$new_cat_id = $catDAO->addCategory(array('name' => $new_cat_name));
 			$new_cat_id = $catDAO->addCategory(array('name' => $new_cat_name));
@@ -274,6 +280,12 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
 		$updated_feeds = 0;
 		$updated_feeds = 0;
 		$nb_new_articles = 0;
 		$nb_new_articles = 0;
 		foreach ($feeds as $feed) {
 		foreach ($feeds as $feed) {
+			/** @var FreshRSS_Feed $feed */
+			$feed = Minz_ExtensionManager::callHook('feed_before_actualize', $feed);
+			if (null === $feed) {
+				continue;
+			}
+
 			$url = $feed->url();	//For detection of HTTP 301
 			$url = $feed->url();	//For detection of HTTP 301
 
 
 			$pubSubHubbubEnabled = $pubsubhubbubEnabledGeneral && $feed->pubSubHubbubEnabled();
 			$pubSubHubbubEnabled = $pubsubhubbubEnabledGeneral && $feed->pubSubHubbubEnabled();

+ 1 - 1
app/Controllers/javascriptController.php

@@ -47,7 +47,7 @@ class FreshRSS_javascript_Controller extends Minz_ActionController {
 			Minz_Log::notice('Nonce failure due to invalid username!');
 			Minz_Log::notice('Nonce failure due to invalid username!');
 		}
 		}
 		//Failure: Return random data.
 		//Failure: Return random data.
-		$this->view->salt1 = sprintf('$2a$%02d$', FreshRSS_user_Controller::BCRYPT_COST);
+		$this->view->salt1 = sprintf('$2a$%02d$', FreshRSS_password_Util::BCRYPT_COST);
 		$alphabet = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
 		$alphabet = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
 		for ($i = 22; $i > 0; $i--) {
 		for ($i = 22; $i > 0; $i--) {
 			$this->view->salt1 .= $alphabet[mt_rand(0, 63)];
 			$this->view->salt1 .= $alphabet[mt_rand(0, 63)];

+ 68 - 65
app/Controllers/userController.php

@@ -4,17 +4,6 @@
  * Controller to handle user actions.
  * Controller to handle user actions.
  */
  */
 class FreshRSS_user_Controller extends Minz_ActionController {
 class FreshRSS_user_Controller extends Minz_ActionController {
-	// Will also have to be computed client side on mobile devices,
-	// so do not use a too high cost
-	const BCRYPT_COST = 9;
-
-	public static function hashPassword($passwordPlain) {
-		$passwordHash = password_hash($passwordPlain, PASSWORD_BCRYPT, array('cost' => self::BCRYPT_COST));
-		$passwordPlain = '';
-		$passwordHash = preg_replace('/^\$2[xy]\$/', '\$2a\$', $passwordHash);	//Compatibility with bcrypt.js
-		return $passwordHash == '' ? '' : $passwordHash;
-	}
-
 	/**
 	/**
 	 * The username is also used as folder name, file name, and part of SQL table name.
 	 * The username is also used as folder name, file name, and part of SQL table name.
 	 * '_' is a reserved internal username.
 	 * '_' is a reserved internal username.
@@ -25,15 +14,7 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 		return preg_match('/^' . self::USERNAME_PATTERN . '$/', $username) === 1;
 		return preg_match('/^' . self::USERNAME_PATTERN . '$/', $username) === 1;
 	}
 	}
 
 
-	public static function deleteFeverKey($username) {
-		$userConfig = get_user_configuration($username);
-		if ($userConfig !== null && ctype_xdigit($userConfig->feverKey)) {
-			return @unlink(DATA_PATH . '/fever/.key-' . sha1(FreshRSS_Context::$system_conf->salt) . '-' . $userConfig->feverKey . '.txt');
-		}
-		return false;
-	}
-
-	public static function updateUser($user, $email, $passwordPlain, $apiPasswordPlain, $userConfigUpdated = array()) {
+	public static function updateUser($user, $email, $passwordPlain, $userConfigUpdated = array()) {
 		$userConfig = get_user_configuration($user);
 		$userConfig = get_user_configuration($user);
 		if ($userConfig === null) {
 		if ($userConfig === null) {
 			return false;
 			return false;
@@ -51,33 +32,10 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 		}
 		}
 
 
 		if ($passwordPlain != '') {
 		if ($passwordPlain != '') {
-			$passwordHash = self::hashPassword($passwordPlain);
+			$passwordHash = FreshRSS_password_Util::hash($passwordPlain);
 			$userConfig->passwordHash = $passwordHash;
 			$userConfig->passwordHash = $passwordHash;
 		}
 		}
 
 
-		if ($apiPasswordPlain != '') {
-			$apiPasswordHash = self::hashPassword($apiPasswordPlain);
-			$userConfig->apiPasswordHash = $apiPasswordHash;
-
-			$feverPath = DATA_PATH . '/fever/';
-
-			if (!file_exists($feverPath)) {
-				@mkdir($feverPath, 0770, true);
-			}
-
-			if (!is_writable($feverPath)) {
-				Minz_Log::error("Could not save Fever API credentials. The directory does not have write access.");
-			} else {
-				self::deleteFeverKey($user);
-				$userConfig->feverKey = strtolower(md5("{$user}:{$apiPasswordPlain}"));
-				$ok = file_put_contents($feverPath . '.key-' . sha1(FreshRSS_Context::$system_conf->salt) . '-' . $userConfig->feverKey . '.txt', $user) !== false;
-
-				if (!$ok) {
-					Minz_Log::warning('Could not save Fever API credentials. Unknown error.', ADMIN_LOG);
-				}
-			}
-		}
-
 		if (is_array($userConfigUpdated)) {
 		if (is_array($userConfigUpdated)) {
 			foreach ($userConfigUpdated as $configName => $configValue) {
 			foreach ($userConfigUpdated as $configName => $configValue) {
 				if ($configValue !== null) {
 				if ($configValue !== null) {
@@ -100,10 +58,8 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 			Minz_Request::_param('newPasswordPlain');	//Discard plain-text password ASAP
 			Minz_Request::_param('newPasswordPlain');	//Discard plain-text password ASAP
 			$_POST['newPasswordPlain'] = '';
 			$_POST['newPasswordPlain'] = '';
 
 
-			$apiPasswordPlain = Minz_Request::param('apiPasswordPlain', '', true);
-
 			$username = Minz_Request::param('username');
 			$username = Minz_Request::param('username');
-			$ok = self::updateUser($username, null, $passwordPlain, $apiPasswordPlain, array(
+			$ok = self::updateUser($username, null, $passwordPlain, array(
 				'token' => Minz_Request::param('token', null),
 				'token' => Minz_Request::param('token', null),
 			));
 			));
 
 
@@ -118,7 +74,6 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 				Minz_Request::bad(_t('feedback.user.updated.error', $username),
 				Minz_Request::bad(_t('feedback.user.updated.error', $username),
 				                  array('c' => 'user', 'a' => 'manage'));
 				                  array('c' => 'user', 'a' => 'manage'));
 			}
 			}
-
 		}
 		}
 	}
 	}
 
 
@@ -130,7 +85,7 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 			Minz_Error::error(403);
 			Minz_Error::error(403);
 		}
 		}
 
 
-		$email_not_verified = FreshRSS_Context::$user_conf->email_validation_token !== '';
+		$email_not_verified = FreshRSS_Context::$user_conf->email_validation_token != '';
 		$this->view->disable_aside = false;
 		$this->view->disable_aside = false;
 		if ($email_not_verified) {
 		if ($email_not_verified) {
 			$this->view->_layout('simple');
 			$this->view->_layout('simple');
@@ -151,8 +106,6 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 			Minz_Request::_param('newPasswordPlain');	//Discard plain-text password ASAP
 			Minz_Request::_param('newPasswordPlain');	//Discard plain-text password ASAP
 			$_POST['newPasswordPlain'] = '';
 			$_POST['newPasswordPlain'] = '';
 
 
-			$apiPasswordPlain = Minz_Request::param('apiPasswordPlain', '', true);
-
 			if ($system_conf->force_email_validation && empty($email)) {
 			if ($system_conf->force_email_validation && empty($email)) {
 				Minz_Request::bad(
 				Minz_Request::bad(
 					_t('user.email.feedback.required'),
 					_t('user.email.feedback.required'),
@@ -171,7 +124,6 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 				Minz_Session::param('currentUser'),
 				Minz_Session::param('currentUser'),
 				$email,
 				$email,
 				$passwordPlain,
 				$passwordPlain,
-				$apiPasswordPlain,
 				array(
 				array(
 					'token' => Minz_Request::param('token', null),
 					'token' => Minz_Request::param('token', null),
 				)
 				)
@@ -194,6 +146,23 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 		}
 		}
 	}
 	}
 
 
+	public function purgeAction() {
+		if (!FreshRSS_Auth::hasAccess('admin')) {
+			Minz_Error::error(403);
+		}
+
+		if (Minz_Request::isPost()) {
+			$username = Minz_Request::param('username');
+
+			if (!FreshRSS_UserDAO::exists($username)) {
+				Minz_Error::error(404);
+			}
+
+			$feedDAO = FreshRSS_Factory::createFeedDao($username);
+			$feedDAO->purge();
+		}
+	}
+
 	/**
 	/**
 	 * This action displays the user management page.
 	 * This action displays the user management page.
 	 */
 	 */
@@ -204,22 +173,26 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 
 
 		Minz_View::prependTitle(_t('admin.user.title') . ' · ');
 		Minz_View::prependTitle(_t('admin.user.title') . ' · ');
 
 
+		if (Minz_Request::isPost()) {
+			$action = Minz_Request::param('action');
+			if ('delete' === $action) {
+				$this->deleteAction();
+			} elseif ('update' === $action) {
+				$this->updateAction();
+			} elseif ('purge' === $action) {
+				$this->purgeAction();
+			}
+		}
+
 		$this->view->show_email_field = FreshRSS_Context::$system_conf->force_email_validation;
 		$this->view->show_email_field = FreshRSS_Context::$system_conf->force_email_validation;
 		$this->view->current_user = Minz_Request::param('u');
 		$this->view->current_user = Minz_Request::param('u');
 
 
-		$this->view->nb_articles = 0;
-		$this->view->size_user = 0;
-		if ($this->view->current_user) {
-			// Get information about the current user.
-			$entryDAO = FreshRSS_Factory::createEntryDao($this->view->current_user);
-			$this->view->nb_articles = $entryDAO->count();
-
-			$databaseDAO = FreshRSS_Factory::createDatabaseDAO($this->view->current_user);
-			$this->view->size_user = $databaseDAO->size();
+		foreach (listUsers() as $user) {
+			$this->view->users[$user] = $this->retrieveUserDetails($user);
 		}
 		}
 	}
 	}
 
 
-	public static function createUser($new_user_name, $email, $passwordPlain, $apiPasswordPlain = '', $userConfigOverride = [], $insertDefaultFeeds = true) {
+	public static function createUser($new_user_name, $email, $passwordPlain, $userConfigOverride = [], $insertDefaultFeeds = true) {
 		$userConfig = [];
 		$userConfig = [];
 
 
 		$customUserConfigPath = join_path(DATA_PATH, 'config-user.custom.php');
 		$customUserConfigPath = join_path(DATA_PATH, 'config-user.custom.php');
@@ -271,7 +244,7 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 				}
 				}
 			}
 			}
 
 
-			$ok &= self::updateUser($new_user_name, $email, $passwordPlain, $apiPasswordPlain);
+			$ok &= self::updateUser($new_user_name, $email, $passwordPlain);
 		}
 		}
 		return $ok;
 		return $ok;
 	}
 	}
@@ -326,7 +299,7 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 				);
 				);
 			}
 			}
 
 
-			$ok = self::createUser($new_user_name, $email, $passwordPlain, '', array('language' => $new_user_language));
+			$ok = self::createUser($new_user_name, $email, $passwordPlain, array('language' => $new_user_language));
 			Minz_Request::_param('new_user_passwordPlain');	//Discard plain-text password ASAP
 			Minz_Request::_param('new_user_passwordPlain');	//Discard plain-text password ASAP
 			$_POST['new_user_passwordPlain'] = '';
 			$_POST['new_user_passwordPlain'] = '';
 			invalidateHttpCache();
 			invalidateHttpCache();
@@ -366,7 +339,7 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 		$user_data = join_path(DATA_PATH, 'users', $username);
 		$user_data = join_path(DATA_PATH, 'users', $username);
 		$ok &= is_dir($user_data);
 		$ok &= is_dir($user_data);
 		if ($ok) {
 		if ($ok) {
-			self::deleteFeverKey($username);
+			FreshRSS_fever_Util::deleteKey($username);
 			$oldUserDAO = FreshRSS_Factory::createUserDao($username);
 			$oldUserDAO = FreshRSS_Factory::createUserDao($username);
 			$ok &= $oldUserDAO->deleteUser();
 			$ok &= $oldUserDAO->deleteUser();
 			$ok &= recursive_unlink($user_data);
 			$ok &= recursive_unlink($user_data);
@@ -542,4 +515,34 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 
 
 		Minz_Request::forward($redirect_url, true);
 		Minz_Request::forward($redirect_url, true);
 	}
 	}
+
+	public function detailsAction() {
+		if (!FreshRSS_Auth::hasAccess('admin')) {
+			Minz_Error::error(403);
+		}
+
+		$username = Minz_Request::param('username');
+		if (!FreshRSS_UserDAO::exists($username)) {
+			Minz_Error::error(404);
+		}
+
+		$this->view->username = $username;
+		$this->view->details = $this->retrieveUserDetails($username);
+	}
+
+	private function retrieveUserDetails($username) {
+		$feedDAO = FreshRSS_Factory::createFeedDao($username);
+		$entryDAO = FreshRSS_Factory::createEntryDao($username);
+		$databaseDAO = FreshRSS_Factory::createDatabaseDAO($username);
+
+		$userConfiguration = get_user_configuration($username);
+
+		return array(
+			'feed_count' => $feedDAO->count(),
+			'article_count' => $entryDAO->count(),
+			'database_size' => $databaseDAO->size(),
+			'language' => $userConfiguration->language,
+			'mail_login' => $userConfiguration->mail_login,
+		);
+	}
 }
 }

+ 1 - 0
app/FreshRSS.php

@@ -155,6 +155,7 @@ class FreshRSS extends Minz_FrontController {
 			Minz_Request::is('user', 'profile') ||
 			Minz_Request::is('user', 'profile') ||
 			Minz_Request::is('user', 'delete') ||
 			Minz_Request::is('user', 'delete') ||
 			Minz_Request::is('auth', 'logout') ||
 			Minz_Request::is('auth', 'logout') ||
+			Minz_Request::is('feed', 'actualize') ||
 			Minz_Request::is('javascript', 'nonce')
 			Minz_Request::is('javascript', 'nonce')
 		);
 		);
 		if ($email_not_verified && !$action_is_allowed) {
 		if ($email_not_verified && !$action_is_allowed) {

+ 33 - 0
app/Models/FeedDAO.php

@@ -421,6 +421,29 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
 		return $affected;
 		return $affected;
 	}
 	}
 
 
+	public function purge() {
+		$sql = 'DELETE FROM `_entry`';
+		$stm = $this->pdo->prepare($sql);
+		$this->pdo->beginTransaction();
+		if (!($stm && $stm->execute())) {
+			$info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo();
+			Minz_Log::error('SQL error truncate: ' . $info[2]);
+			$this->pdo->rollBack();
+			return false;
+		}
+
+		$sql = 'UPDATE `_feed` SET `cache_nbEntries` = 0, `cache_nbUnreads` = 0';
+		$stm = $this->pdo->prepare($sql);
+		if (!($stm && $stm->execute())) {
+			$info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo();
+			Minz_Log::error('SQL error truncate: ' . $info[2]);
+			$this->pdo->rollBack();
+			return false;
+		}
+
+		$this->pdo->commit();
+	}
+
 	public static function daoToFeed($listDAO, $catID = null) {
 	public static function daoToFeed($listDAO, $catID = null) {
 		$list = array();
 		$list = array();
 
 
@@ -481,4 +504,14 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
 			$stm->execute(array(':new_value' => -3600, ':old_value' => -1));
 			$stm->execute(array(':new_value' => -3600, ':old_value' => -1));
 		}
 		}
 	}
 	}
+
+	public function count() {
+		$sql = 'SELECT COUNT(e.id) AS count FROM `_feed` e';
+		$stm = $this->pdo->query($sql);
+		if ($stm == false) {
+			return false;
+		}
+		$res = $stm->fetchAll(PDO::FETCH_COLUMN, 0);
+		return isset($res[0]) ? $res[0] : 0;
+	}
 }
 }

+ 0 - 1
app/Models/FeedDAOSQLite.php

@@ -13,5 +13,4 @@ class FreshRSS_FeedDAOSQLite extends FreshRSS_FeedDAO {
 		}
 		}
 		return false;
 		return false;
 	}
 	}
-
 }
 }

+ 17 - 1
app/Models/Share.php

@@ -76,6 +76,7 @@ class FreshRSS_Share {
 	private $help_url = '';
 	private $help_url = '';
 	private $custom_name = null;
 	private $custom_name = null;
 	private $base_url = null;
 	private $base_url = null;
+	private $id = null;
 	private $title = null;
 	private $title = null;
 	private $link = null;
 	private $link = null;
 	private $method = 'GET';
 	private $method = 'GET';
@@ -118,12 +119,13 @@ class FreshRSS_Share {
 	/**
 	/**
 	 * Update a FreshRSS_Share object with information from an array.
 	 * Update a FreshRSS_Share object with information from an array.
 	 * @param $options is a list of informations to update where keys should be
 	 * @param $options is a list of informations to update where keys should be
-	 *        in this list: name, url, title, link.
+	 *        in this list: name, url, id, title, link.
 	 */
 	 */
 	public function update($options) {
 	public function update($options) {
 		$available_options = array(
 		$available_options = array(
 			'name' => 'custom_name',
 			'name' => 'custom_name',
 			'url' => 'base_url',
 			'url' => 'base_url',
+			'id' => 'id',
 			'title' => 'title',
 			'title' => 'title',
 			'link' => 'link',
 			'link' => 'link',
 			'method' => 'method',
 			'method' => 'method',
@@ -196,11 +198,13 @@ class FreshRSS_Share {
 	 */
 	 */
 	public function url() {
 	public function url() {
 		$matches = array(
 		$matches = array(
+			'~ID~',
 			'~URL~',
 			'~URL~',
 			'~TITLE~',
 			'~TITLE~',
 			'~LINK~',
 			'~LINK~',
 		);
 		);
 		$replaces = array(
 		$replaces = array(
+			$this->id(),
 			$this->base_url,
 			$this->base_url,
 			$this->title(),
 			$this->title(),
 			$this->link(),
 			$this->link(),
@@ -208,6 +212,18 @@ class FreshRSS_Share {
 		return str_replace($matches, $replaces, $this->url_transform);
 		return str_replace($matches, $replaces, $this->url_transform);
 	}
 	}
 
 
+	/**
+	 * Return the id.
+	 * @param $raw true if we should get the id without transformations.
+	 */
+	public function id($raw = false) {
+		if ($raw) {
+			return $this->id;
+		}
+
+		return $this->transform($this->id, $this->getTransform('id'));
+	}
+
 	/**
 	/**
 	 * Return the title.
 	 * Return the title.
 	 * @param $raw true if we should get the title without transformations.
 	 * @param $raw true if we should get the title without transformations.

+ 80 - 0
app/Utils/feverUtil.php

@@ -0,0 +1,80 @@
+<?php
+
+class FreshRSS_fever_Util {
+	const FEVER_PATH = DATA_PATH . '/fever';
+
+	/**
+	 * Make sure the fever path exists and is writable.
+	 *
+	 * @return boolean true if the path is writable, else false.
+	 */
+	public static function checkFeverPath() {
+		if (!file_exists(self::FEVER_PATH)) {
+			@mkdir(self::FEVER_PATH, 0770, true);
+		}
+
+		$ok = is_writable(self::FEVER_PATH);
+		if (!$ok) {
+			Minz_Log::error("Could not save Fever API credentials. The directory does not have write access.");
+		}
+		return $ok;
+	}
+
+	/**
+	 * Return the corresponding path for a fever key.
+	 *
+	 * @param string
+	 * @return string
+	 */
+	public static function getKeyPath($feverKey) {
+		$salt = sha1(FreshRSS_Context::$system_conf->salt);
+		return self::FEVER_PATH . '/.key-' . $salt . '-' . $feverKey . '.txt';
+	}
+
+	/**
+	 * Update the fever key of a user.
+	 *
+	 * @param string
+	 * @param string
+	 * @return string the Fever key, or false if the update failed
+	 */
+	public static function updateKey($username, $passwordPlain) {
+		$ok = self::checkFeverPath();
+		if (!$ok) {
+			return false;
+		}
+
+		self::deleteKey($username);
+
+		$feverKey = strtolower(md5("{$username}:{$passwordPlain}"));
+		$feverKeyPath = self::getKeyPath($feverKey);
+		$res = file_put_contents($feverKeyPath, $username);
+		if ($res !== false) {
+			return $feverKey;
+		} else {
+			Minz_Log::warning('Could not save Fever API credentials. Unknown error.', ADMIN_LOG);
+			return false;
+		}
+	}
+
+	/**
+	 * Delete the Fever key of a user.
+	 *
+	 * @param string
+	 * @return boolean true if the deletion succeeded, else false.
+	 */
+	public static function deleteKey($username) {
+		$userConfig = get_user_configuration($username);
+		if ($userConfig === null) {
+			return false;
+		}
+
+		$feverKey = $userConfig->feverKey;
+		if (!ctype_xdigit($feverKey)) {
+			return false;
+		}
+
+		$feverKeyPath = self::getKeyPath($feverKey);
+		return @unlink($feverKeyPath);
+	}
+}

+ 27 - 0
app/Utils/passwordUtil.php

@@ -0,0 +1,27 @@
+<?php
+
+class FreshRSS_password_Util {
+	// Will also have to be computed client side on mobile devices,
+	// so do not use a too high cost
+	const BCRYPT_COST = 9;
+
+	/**
+	 * Return a hash of a plain password, using BCRYPT
+	 *
+	 * @param string
+	 * @return string
+	 */
+	public static function hash($passwordPlain) {
+		$passwordHash = password_hash(
+			$passwordPlain,
+			PASSWORD_BCRYPT,
+			array('cost' => self::BCRYPT_COST)
+		);
+		$passwordPlain = '';
+
+		// Compatibility with bcrypt.js
+		$passwordHash = preg_replace('/^\$2[xy]\$/', '\$2a\$', $passwordHash);
+
+		return $passwordHash == '' ? '' : $passwordHash;
+	}
+}

+ 31 - 25
app/i18n/cz/admin.php

@@ -67,8 +67,8 @@ return array(
 			'ok' => 'Máte rozšíření JSON.',
 			'ok' => 'Máte rozšíření JSON.',
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
 			'nok' => 'Nemáte framework Minz.',
 			'nok' => 'Nemáte framework Minz.',
@@ -83,9 +83,9 @@ return array(
 			'ok' => 'Máte PDO a alespoň jeden z podporovaných ovladačů (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => 'Máte PDO a alespoň jeden z podporovaných ovladačů (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'PHP instalace',
 			'nok' => 'Vaše verze PHP je %s, ale FreshRSS vyžaduje alespoň verzi %s.',
 			'nok' => 'Vaše verze PHP je %s, ale FreshRSS vyžaduje alespoň verzi %s.',
 			'ok' => 'Vaše verze PHP je %s a je kompatibilní s FreshRSS.',
 			'ok' => 'Vaše verze PHP je %s a je kompatibilní s FreshRSS.',
+			'_' => 'PHP instalace',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'V databázi chybí jedna nevo více tabulek.',
 			'nok' => 'V databázi chybí jedna nevo více tabulek.',
@@ -106,26 +106,25 @@ return array(
 		),
 		),
 	),
 	),
 	'extensions' => array(
 	'extensions' => array(
-		'author' => 'Author',	//TODO - Translation
-		'community' => 'Available community extensions',	//TODO - Translation
-		'description' => 'Description',	//TODO - Translation
+		'author' => 'Author',	// TODO - Translation
+		'community' => 'Available community extensions',	// TODO - Translation
+		'description' => 'Description',	// TODO - Translation
 		'disabled' => 'Vypnuto',
 		'disabled' => 'Vypnuto',
 		'empty_list' => 'Není naistalováno žádné rozšíření',
 		'empty_list' => 'Není naistalováno žádné rozšíření',
 		'enabled' => 'Zapnuto',
 		'enabled' => 'Zapnuto',
-		'latest' => 'Installed',	//TODO - Translation
-		'name' => 'Name',	//TODO - Translation
+		'latest' => 'Installed',	// TODO - Translation
+		'name' => 'Name',	// TODO - Translation
 		'no_configure_view' => 'Toto rozšíření nemá žádné možnosti nastavení.',
 		'no_configure_view' => 'Toto rozšíření nemá žádné možnosti nastavení.',
 		'system' => array(
 		'system' => array(
-			'_' => 'Systémová rozšíření',
 			'no_rights' => 'Systémová rozšíření (na ně nemáte oprávnění)',
 			'no_rights' => 'Systémová rozšíření (na ně nemáte oprávnění)',
+			'_' => 'Systémová rozšíření',
 		),
 		),
 		'title' => 'Rozšíření',
 		'title' => 'Rozšíření',
-		'update' => 'Update available',	//TODO - Translation
+		'update' => 'Update available',	// TODO - Translation
 		'user' => 'Uživatelská rozšíření',
 		'user' => 'Uživatelská rozšíření',
-		'version' => 'Version',	//TODO - Translation
+		'version' => 'Version',	// TODO - Translation
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Statistika',
 		'all_feeds' => 'Všechny kanály',
 		'all_feeds' => 'Všechny kanály',
 		'category' => 'Kategorie',
 		'category' => 'Kategorie',
 		'entry_count' => 'Počet článků',
 		'entry_count' => 'Počet článků',
@@ -155,46 +154,53 @@ return array(
 		'status_unread' => 'Nepřečtené',
 		'status_unread' => 'Nepřečtené',
 		'title' => 'Statistika',
 		'title' => 'Statistika',
 		'top_feed' => 'Top ten kanálů',
 		'top_feed' => 'Top ten kanálů',
+		'_' => 'Statistika',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'System configuration', //TODO - Translation
-		'auto-update-url' => 'Auto-update server URL', //TODO - Translation
+		'auto-update-url' => 'Auto-update server URL',	// TODO - Translation
 		'cookie-duration' => array(
 		'cookie-duration' => array(
-			'help' => 'in seconds', //TODO - Translation
-			'number' => 'Duration to keep logged in', //TODO - Translation
+			'help' => 'in seconds',	// TODO - Translation
+			'number' => 'Duration to keep logged in',	// TODO - Translation
 		),
 		),
-		'force_email_validation' => 'Force email addresses validation', //TODO - Translation
-		'instance-name' => 'Instance name', //TODO - Translation
-		'max-categories' => 'Categories per user limit', //TODO - Translation
-		'max-feeds' => 'Feeds per user limit', //TODO - Translation
+		'force_email_validation' => 'Force email addresses validation',	// TODO - Translation
+		'instance-name' => 'Instance name',	// TODO - Translation
+		'max-categories' => 'Categories per user limit',	// TODO - Translation
+		'max-feeds' => 'Feeds per user limit',	// TODO - Translation
 		'registration' => array(
 		'registration' => array(
 			'help' => '0 znamená žádná omezení účtu',
 			'help' => '0 znamená žádná omezení účtu',
 			'number' => 'Maximální počet účtů',
 			'number' => 'Maximální počet účtů',
 		),
 		),
+		'_' => 'System configuration',	// TODO - Translation
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'Aktualizace systému',
 		'apply' => 'Použít',
 		'apply' => 'Použít',
 		'check' => 'Zkontrolovat aktualizace',
 		'check' => 'Zkontrolovat aktualizace',
 		'current_version' => 'Vaše instalace FreshRSS je verze %s.',
 		'current_version' => 'Vaše instalace FreshRSS je verze %s.',
 		'last' => 'Poslední kontrola: %s',
 		'last' => 'Poslední kontrola: %s',
 		'none' => 'Žádné nové aktualizace',
 		'none' => 'Žádné nové aktualizace',
 		'title' => 'Aktualizovat systém',
 		'title' => 'Aktualizovat systém',
+		'_' => 'Aktualizace systému',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s článků (%s)',
 		'articles_and_size' => '%s článků (%s)',
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => 'Vytvořit nového uživatele',
 		'create' => 'Vytvořit nového uživatele',
-		'delete_users' => 'Delete user',	//TODO - Translation
+		'database_size' => 'Database size',	// TODO - Translation
+		'delete_users' => 'Delete user',	// TODO - Translation
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => 'Jazyk',
 		'language' => 'Jazyk',
+		'list' => 'User list',	// TODO - Translation
 		'number' => 'Zatím je vytvořen %d účet',
 		'number' => 'Zatím je vytvořen %d účet',
 		'numbers' => 'Zatím je vytvořeno %d účtů',
 		'numbers' => 'Zatím je vytvořeno %d účtů',
 		'password_form' => 'Heslo<br /><small>(pro přihlášení webovým formulářem)</small>',
 		'password_form' => 'Heslo<br /><small>(pro přihlášení webovým formulářem)</small>',
 		'password_format' => 'Alespoň 7 znaků',
 		'password_format' => 'Alespoň 7 znaků',
-		'selected' => 'Selected user',	//TODO - Translation
+		'selected' => 'Selected user',	// TODO - Translation
 		'title' => 'Správa uživatelů',
 		'title' => 'Správa uživatelů',
-		'update_users' => 'Update user',	//TODO - Translation
-		'user_list' => 'Seznam uživatelů',
+		'update_users' => 'Update user',	// TODO - Translation
 		'username' => 'Přihlašovací jméno',
 		'username' => 'Přihlašovací jméno',
 		'users' => 'Uživatelé',
 		'users' => 'Uživatelé',
+		'user_list' => 'Seznam uživatelů',
 	),
 	),
 );
 );

+ 46 - 45
app/i18n/cz/conf.php

@@ -2,34 +2,33 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Archivace',
 		'delete_after' => 'Smazat články starší než',
 		'delete_after' => 'Smazat články starší než',
-		'exception' => 'Purge exception',	//TODO - Translation
+		'exception' => 'Purge exception',	// TODO - Translation
 		'help' => 'Více možností je dostupných v nastavení jednotlivých kanálů',
 		'help' => 'Více možností je dostupných v nastavení jednotlivých kanálů',
-		'keep_favourites' => 'Never delete favourites',	//TODO - Translation
+		'keep_favourites' => 'Never delete favourites',	// TODO - Translation
+		'keep_labels' => 'Never delete labels',	// TODO - Translation
+		'keep_max' => 'Maximum number of articles to keep',	// TODO - Translation
 		'keep_min_by_feed' => 'Zachovat tento minimální počet článků v každém kanálu',
 		'keep_min_by_feed' => 'Zachovat tento minimální počet článků v každém kanálu',
-		'keep_labels' => 'Never delete labels',	//TODO - Translation
-		'keep_unreads' => 'Never delete unreads',	//TODO - Translation
-		'maintenance' => 'Maintenance',	//TODO - Translation
+		'keep_period' => 'Maximum age of articles to keep',	// TODO - Translation
+		'keep_unreads' => 'Never delete unreads',	// TODO - Translation
+		'maintenance' => 'Maintenance',	// TODO - Translation
 		'optimize' => 'Optimalizovat databázi',
 		'optimize' => 'Optimalizovat databázi',
 		'optimize_help' => 'Občasná údržba zmenší velikost databáze',
 		'optimize_help' => 'Občasná údržba zmenší velikost databáze',
-		'policy' => 'Purge policy',	//TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	//TODO - Translation
+		'policy' => 'Purge policy',	// TODO - Translation
+		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	// TODO - Translation
 		'purge_now' => 'Vyčistit nyní',
 		'purge_now' => 'Vyčistit nyní',
-		'keep_max' => 'Maximum number of articles to keep',	//TODO - Translation
-		'keep_period' => 'Maximum age of articles to keep',	//TODO - Translation
 		'title' => 'Archivace',
 		'title' => 'Archivace',
 		'ttl' => 'Neaktualizovat častěji než',
 		'ttl' => 'Neaktualizovat častěji než',
+		'_' => 'Archivace',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Zobrazení',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Spodní řádek',
 			'bottom_line' => 'Spodní řádek',
+			'display_authors' => 'Authors',	// TODO - Translation
 			'entry' => 'Ikony článků',
 			'entry' => 'Ikony článků',
 			'publication_date' => 'Datum vydání',
 			'publication_date' => 'Datum vydání',
-			'related_tags' => 'Související tagy',	//TODO - Translation
+			'related_tags' => 'Související tagy',
 			'sharing' => 'Sdílení',
 			'sharing' => 'Sdílení',
-			'display_authors' => 'Authors',  //TODO - Translation
 			'top_line' => 'Horní řádek',
 			'top_line' => 'Horní řádek',
 		),
 		),
 		'language' => 'Jazyk',
 		'language' => 'Jazyk',
@@ -37,7 +36,7 @@ return array(
 			'seconds' => 'sekund (0 znamená žádný timeout)',
 			'seconds' => 'sekund (0 znamená žádný timeout)',
 			'timeout' => 'Timeout HTML5 notifikací',
 			'timeout' => 'Timeout HTML5 notifikací',
 		),
 		),
-		'show_nav_buttons' => 'Show the navigation buttons',	//TODO - Translation
+		'show_nav_buttons' => 'Show the navigation buttons',	// TODO - Translation
 		'theme' => 'Vzhled',
 		'theme' => 'Vzhled',
 		'title' => 'Zobrazení',
 		'title' => 'Zobrazení',
 		'width' => array(
 		'width' => array(
@@ -47,34 +46,35 @@ return array(
 			'no_limit' => 'Bez limitu',
 			'no_limit' => 'Bez limitu',
 			'thin' => 'Tenká',
 			'thin' => 'Tenká',
 		),
 		),
+		'_' => 'Zobrazení',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Správa profilu',
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Smazání účtu',
 			'warn' => 'Váš účet bude smazán spolu se všemi souvisejícími daty',
 			'warn' => 'Váš účet bude smazán spolu se všemi souvisejícími daty',
+			'_' => 'Smazání účtu',
 		),
 		),
 		'email' => 'Email',
 		'email' => 'Email',
 		'password_api' => 'Password API<br /><small>(tzn. pro mobilní aplikace)</small>',
 		'password_api' => 'Password API<br /><small>(tzn. pro mobilní aplikace)</small>',
 		'password_form' => 'Heslo<br /><small>(pro přihlášení webovým formulářem)</small>',
 		'password_form' => 'Heslo<br /><small>(pro přihlášení webovým formulářem)</small>',
 		'password_format' => 'Alespoň 7 znaků',
 		'password_format' => 'Alespoň 7 znaků',
 		'title' => 'Profil',
 		'title' => 'Profil',
+		'_' => 'Správa profilu',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'Uživatelské dotazy',
 		'deprecated' => 'Tento dotaz již není platný. Odkazovaná kategorie nebo kanál byly smazány.',
 		'deprecated' => 'Tento dotaz již není platný. Odkazovaná kategorie nebo kanál byly smazány.',
-		'display' => 'Display user query results',	//TODO - Translation
+		'display' => 'Display user query results',	// TODO - Translation
 		'filter' => 'Filtr aplikován:',
 		'filter' => 'Filtr aplikován:',
 		'get_all' => 'Zobrazit všechny články',
 		'get_all' => 'Zobrazit všechny články',
 		'get_category' => 'Zobrazit "%s" kategorii',
 		'get_category' => 'Zobrazit "%s" kategorii',
 		'get_favorite' => 'Zobrazit oblíbené články',
 		'get_favorite' => 'Zobrazit oblíbené články',
 		'get_feed' => 'Zobrazit "%s" článkek',
 		'get_feed' => 'Zobrazit "%s" článkek',
-		'no_filter' => 'Zrušit filtr',
 		'none' => 'Ještě jste nevytvořil žádný uživatelský dotaz.',
 		'none' => 'Ještě jste nevytvořil žádný uživatelský dotaz.',
+		'no_filter' => 'Zrušit filtr',
 		'number' => 'Dotaz n°%d',
 		'number' => 'Dotaz n°%d',
 		'order_asc' => 'Zobrazit nejdříve nejstarší články',
 		'order_asc' => 'Zobrazit nejdříve nejstarší články',
 		'order_desc' => 'Zobrazit nejdříve nejnovější články',
 		'order_desc' => 'Zobrazit nejdříve nejnovější články',
-		'remove' => 'Remove user query',	//TODO - Translation
+		'remove' => 'Remove user query',	// TODO - Translation
 		'search' => 'Hledat "%s"',
 		'search' => 'Hledat "%s"',
 		'state_0' => 'Zobrazit všechny články',
 		'state_0' => 'Zobrazit všechny články',
 		'state_1' => 'Zobrazit přečtené články',
 		'state_1' => 'Zobrazit přečtené články',
@@ -85,17 +85,17 @@ return array(
 		'state_6' => 'Zobrazit oblíbené nepřečtené články',
 		'state_6' => 'Zobrazit oblíbené nepřečtené články',
 		'state_7' => 'Zobrazit oblíbené články',
 		'state_7' => 'Zobrazit oblíbené články',
 		'state_8' => 'Zobrazit všechny články vyjma oblíbených',
 		'state_8' => 'Zobrazit všechny články vyjma oblíbených',
-		'state_9' => 'Zobrazit všechny přečtené články vyjma  oblíbených',
-		'state_10' => 'Zobrazit všechny nepřečtené články vyjma  oblíbených',
+		'state_9' => 'Zobrazit všechny přečtené články vyjma oblíbených',
+		'state_10' => 'Zobrazit všechny nepřečtené články vyjma oblíbených',
 		'state_11' => 'Zobrazit všechny články vyjma oblíbených',
 		'state_11' => 'Zobrazit všechny články vyjma oblíbených',
 		'state_12' => 'Zobrazit všechny články',
 		'state_12' => 'Zobrazit všechny články',
 		'state_13' => 'Zobrazit přečtené články',
 		'state_13' => 'Zobrazit přečtené články',
 		'state_14' => 'Zobrazit nepřečtené články',
 		'state_14' => 'Zobrazit nepřečtené články',
 		'state_15' => 'Zobrazit všechny články',
 		'state_15' => 'Zobrazit všechny články',
 		'title' => 'Uživatelské dotazy',
 		'title' => 'Uživatelské dotazy',
+		'_' => 'Uživatelské dotazy',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Čtení',
 		'after_onread' => 'Po “označit vše jako přečtené”,',
 		'after_onread' => 'Po “označit vše jako přečtené”,',
 		'articles_per_page' => 'Počet článků na stranu',
 		'articles_per_page' => 'Počet článků na stranu',
 		'auto_load_more' => 'Načítat další články dole na stránce',
 		'auto_load_more' => 'Načítat další články dole na stránce',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'Označit článek jako přečtený…',
 			'when' => 'Označit článek jako přečtený…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Počet zobrazených článků',
 			'adaptive' => 'Vyberte zobrazení',
 			'adaptive' => 'Vyberte zobrazení',
 			'all_articles' => 'Zobrazit všechny články',
 			'all_articles' => 'Zobrazit všechny články',
 			'unread' => 'Zobrazit jen nepřečtené',
 			'unread' => 'Zobrazit jen nepřečtené',
+			'_' => 'Počet zobrazených článků',
 		),
 		),
-		'sides_close_article' => 'Clicking outside of article text area closes the article',	//TODO - Translation
+		'sides_close_article' => 'Clicking outside of article text area closes the article',	// TODO - Translation
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Řazení',
 			'newer_first' => 'Nejdříve nejnovější',
 			'newer_first' => 'Nejdříve nejnovější',
 			'older_first' => 'Nejdříve nejstarší',
 			'older_first' => 'Nejdříve nejstarší',
+			'_' => 'Řazení',
 		),
 		),
 		'sticky_post' => 'Při otevření posunout článek nahoru',
 		'sticky_post' => 'Při otevření posunout článek nahoru',
 		'title' => 'Čtení',
 		'title' => 'Čtení',
@@ -135,26 +135,26 @@ return array(
 			'normal' => 'Normální',
 			'normal' => 'Normální',
 			'reader' => 'Čtení',
 			'reader' => 'Čtení',
 		),
 		),
+		'_' => 'Čtení',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Sdílení',
-		'add' => 'Add a sharing method',	//TODO - Translation
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
-		'email' => 'Email',
-		'facebook' => 'Facebook',
+		'add' => 'Add a sharing method',	// TODO - Translation
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
+		'email' => 'Email',	// TODO - Translation
+		'facebook' => 'Facebook',	// TODO - Translation
 		'more_information' => 'Více informací',
 		'more_information' => 'Více informací',
 		'print' => 'Tisk',
 		'print' => 'Tisk',
-		'remove' => 'Remove sharing method',	//TODO - Translation
-		'shaarli' => 'Shaarli',
+		'remove' => 'Remove sharing method',	// TODO - Translation
+		'shaarli' => 'Shaarli',	// TODO - Translation
 		'share_name' => 'Jméno pro zobrazení',
 		'share_name' => 'Jméno pro zobrazení',
 		'share_url' => 'Jakou URL použít pro sdílení',
 		'share_url' => 'Jakou URL použít pro sdílení',
 		'title' => 'Sdílení',
 		'title' => 'Sdílení',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag',
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag',	// TODO - Translation
+		'_' => 'Sdílení',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Zkratky',
 		'article_action' => 'Články - akce',
 		'article_action' => 'Články - akce',
 		'auto_share' => 'Sdílet',
 		'auto_share' => 'Sdílet',
 		'auto_share_help' => 'Je-li nastavena pouze jedna možnost sdílení, bude použita. Další možnosti jsou dostupné pomocí jejich čísla.',
 		'auto_share_help' => 'Je-li nastavena pouze jedna možnost sdílení, bude použita. Další možnosti jsou dostupné pomocí jejich čísla.',
@@ -162,7 +162,7 @@ return array(
 		'collapse_article' => 'Srolovat',
 		'collapse_article' => 'Srolovat',
 		'first_article' => 'Skočit na první článek',
 		'first_article' => 'Skočit na první článek',
 		'focus_search' => 'Hledání',
 		'focus_search' => 'Hledání',
-		'global_view' => 'Switch to global view',	//TODO - Translation
+		'global_view' => 'Switch to global view',	// TODO - Translation
 		'help' => 'Zobrazit documentaci',
 		'help' => 'Zobrazit documentaci',
 		'javascript' => 'Pro použití zkratek musí být povolen JavaScript',
 		'javascript' => 'Pro použití zkratek musí být povolen JavaScript',
 		'last_article' => 'Skočit na poslední článek',
 		'last_article' => 'Skočit na poslední článek',
@@ -171,21 +171,22 @@ return array(
 		'mark_read' => 'Označit jako přečtené',
 		'mark_read' => 'Označit jako přečtené',
 		'navigation' => 'Navigace',
 		'navigation' => 'Navigace',
 		'navigation_help' => 'Pomocí přepínače "Shift" fungují navigační zkratky v rámci kanálů.<br/>Pomocí přepínače "Alt" fungují v rámci kategorií.',
 		'navigation_help' => 'Pomocí přepínače "Shift" fungují navigační zkratky v rámci kanálů.<br/>Pomocí přepínače "Alt" fungují v rámci kategorií.',
-		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	//TODO - Translation
+		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Skočit na další článek',
 		'next_article' => 'Skočit na další článek',
-		'normal_view' => 'Switch to normal view',	//TODO - Translation
+		'normal_view' => 'Switch to normal view',	// TODO - Translation
 		'other_action' => 'Ostatní akce',
 		'other_action' => 'Ostatní akce',
 		'previous_article' => 'Skočit na předchozí článek',
 		'previous_article' => 'Skočit na předchozí článek',
-		'reading_view' => 'Switch to reading view',	//TODO - Translation
-		'rss_view' => 'Open RSS view in a new tab',	//TODO - Translation
+		'reading_view' => 'Switch to reading view',	// TODO - Translation
+		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'Navštívit původní webovou stránku',
 		'see_on_website' => 'Navštívit původní webovou stránku',
 		'shift_for_all_read' => '+ <code>shift</code> označí vše jako přečtené',
 		'shift_for_all_read' => '+ <code>shift</code> označí vše jako přečtené',
-		'skip_next_article' => 'Focus next without opening',	//TODO - Translation
-		'skip_previous_article' => 'Focus previous without opening',	//TODO - Translation
+		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
+		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Zkratky',
 		'title' => 'Zkratky',
 		'user_filter' => 'Aplikovat uživatelské filtry',
 		'user_filter' => 'Aplikovat uživatelské filtry',
 		'user_filter_help' => 'Je-li nastaven pouze jeden filtr, bude použit. Další filtry jsou dostupné pomocí jejich čísla.',
 		'user_filter_help' => 'Je-li nastaven pouze jeden filtr, bude použit. Další filtry jsou dostupné pomocí jejich čísla.',
-		'views' => 'Views',	//TODO - Translation
+		'views' => 'Views',	// TODO - Translation
+		'_' => 'Zkratky',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s článků (%s)',
 		'articles_and_size' => '%s článků (%s)',

+ 21 - 15
app/i18n/cz/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Optimalizace dokončena',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'Nemáte oprávnění přistupovat na tuto stránku',
 		'denied' => 'Nemáte oprávnění přistupovat na tuto stránku',
 		'not_found' => 'Tato stránka neexistuje',
 		'not_found' => 'Tato stránka neexistuje',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'Optimalizace dokončena',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'Nastal problém s konfigurací přihlašovacího systému. Zkuste to prosím později.',
 			'not_set' => 'Nastal problém s konfigurací přihlašovacího systému. Zkuste to prosím později.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s nelze zapnout. Pro více detailů <a href="%s">zkontrolujte logy FreshRSS</a>.',
 			'ko' => '%s nelze zapnout. Pro více detailů <a href="%s">zkontrolujte logy FreshRSS</a>.',
 			'ok' => '%s je nyní zapnut',
 			'ok' => '%s je nyní zapnut',
 		),
 		),
-		'no_access' => 'Nemáte přístup k %s',
 		'not_enabled' => '%s není ještě zapnut',
 		'not_enabled' => '%s není ještě zapnut',
 		'not_found' => '%s neexistuje',
 		'not_found' => '%s neexistuje',
+		'no_access' => 'Nemáte přístup k %s',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'Na serveru není naistalována podpora ZIP. Zkuste prosím exportovat soubory jeden po druhém.',
 		'export_no_zip_extension' => 'Na serveru není naistalována podpora ZIP. Zkuste prosím exportovat soubory jeden po druhém.',
@@ -57,8 +63,8 @@ return array(
 	'sub' => array(
 	'sub' => array(
 		'actualize' => 'Aktualizovat',
 		'actualize' => 'Aktualizovat',
 		'articles' => array(
 		'articles' => array(
-			'marked_read' => 'The selected articles have been marked as read.',	//TODO - Translation
-			'marked_unread' => 'The articles have been marked as unread.',	//TODO - Translation
+			'marked_read' => 'The selected articles have been marked as read.',	// TODO - Translation
+			'marked_unread' => 'The articles have been marked as unread.',	// TODO - Translation
 		),
 		),
 		'category' => array(
 		'category' => array(
 			'created' => 'Kategorie %s byla vytvořena.',
 			'created' => 'Kategorie %s byla vytvořena.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'Kategorie byla vyprázdněna',
 			'emptied' => 'Kategorie byla vyprázdněna',
 			'error' => 'Kategorii nelze aktualizovat',
 			'error' => 'Kategorii nelze aktualizovat',
 			'name_exists' => 'Název kategorie již existuje.',
 			'name_exists' => 'Název kategorie již existuje.',
-			'no_id' => 'Musíte upřesnit id kategorie.',
-			'no_name' => 'Název kategorie nemůže být prázdný.',
 			'not_delete_default' => 'Nelze smazat výchozí kategorii!',
 			'not_delete_default' => 'Nelze smazat výchozí kategorii!',
 			'not_exist' => 'Tato kategorie neexistuje!',
 			'not_exist' => 'Tato kategorie neexistuje!',
+			'no_id' => 'Musíte upřesnit id kategorie.',
+			'no_name' => 'Název kategorie nemůže být prázdný.',
 			'over_max' => 'Dosáhl jste maximálního počtu kategorií (%d)',
 			'over_max' => 'Dosáhl jste maximálního počtu kategorií (%d)',
 			'updated' => 'Kategorie byla aktualizována.',
 			'updated' => 'Kategorie byla aktualizována.',
 		),
 		),
@@ -80,12 +86,12 @@ return array(
 			'already_subscribed' => 'Již jste přihlášen k odběru <em>%s</em>',
 			'already_subscribed' => 'Již jste přihlášen k odběru <em>%s</em>',
 			'deleted' => 'Kanál byl smazán',
 			'deleted' => 'Kanál byl smazán',
 			'error' => 'Kanál nelze aktualizovat',
 			'error' => 'Kanál nelze aktualizovat',
-			'internal_problem' => 'RSS kanál nelze přidat. Pro detaily <a href="%s">zkontrolujte logy FreshRSS</a>.',	//TODO - Translation
+			'internal_problem' => 'RSS kanál nelze přidat. Pro detaily <a href="%s">zkontrolujte logy FreshRSS</a>.',
 			'invalid_url' => 'URL <em>%s</em> není platné',
 			'invalid_url' => 'URL <em>%s</em> není platné',
+			'not_added' => '<em>%s</em> nemůže být přidán',
+			'no_refresh' => 'Nelze obnovit žádné kanály…',
 			'n_actualized' => '%d kanálů bylo aktualizováno',
 			'n_actualized' => '%d kanálů bylo aktualizováno',
 			'n_entries_deleted' => '%d článků bylo smazáno',
 			'n_entries_deleted' => '%d článků bylo smazáno',
-			'no_refresh' => 'Nelze obnovit žádné kanály…',
-			'not_added' => '<em>%s</em> nemůže být přidán',
 			'over_max' => 'Dosáhl jste maximálního počtu kanálů (%d)',
 			'over_max' => 'Dosáhl jste maximálního počtu kanálů (%d)',
 			'updated' => 'Kanál byl aktualizován',
 			'updated' => 'Kanál byl aktualizován',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'Uživatel %s byl vytvořen',
 			'error' => 'Uživatele %s nelze vytvořit',
 			'error' => 'Uživatele %s nelze vytvořit',
+			'_' => 'Uživatel %s byl vytvořen',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'Uživatel %s byl smazán',
 			'error' => 'Uživatele %s nelze smazat',
 			'error' => 'Uživatele %s nelze smazat',
+			'_' => 'Uživatel %s byl smazán',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'User %s has been updated',	//TODO - Translation
-			'error' => 'User %s has not been updated',	//TODO - Translation
+			'error' => 'User %s has not been updated',	// TODO - Translation
+			'_' => 'User %s has been updated',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 53 - 51
app/i18n/cz/gen.php

@@ -3,45 +3,46 @@
 return array(
 return array(
 	'action' => array(
 	'action' => array(
 		'actualize' => 'Aktualizovat',
 		'actualize' => 'Aktualizovat',
-		'back' => '← Go back', //TODO - Translation
+		'back' => '← Go back',	// TODO - Translation
 		'back_to_rss_feeds' => '← Zpět na seznam RSS kanálů',
 		'back_to_rss_feeds' => '← Zpět na seznam RSS kanálů',
 		'cancel' => 'Zrušit',
 		'cancel' => 'Zrušit',
 		'create' => 'Vytvořit',
 		'create' => 'Vytvořit',
 		'disable' => 'Zakázat',
 		'disable' => 'Zakázat',
 		'empty' => 'Vyprázdnit',
 		'empty' => 'Vyprázdnit',
 		'enable' => 'Povolit',
 		'enable' => 'Povolit',
-		'export' => 'Export',
+		'export' => 'Export',	// TODO - Translation
 		'filter' => 'Filtrovat',
 		'filter' => 'Filtrovat',
-		'import' => 'Import',
+		'import' => 'Import',	// TODO - Translation
 		'manage' => 'Spravovat',
 		'manage' => 'Spravovat',
 		'mark_favorite' => 'Označit jako oblíbené',
 		'mark_favorite' => 'Označit jako oblíbené',
 		'mark_read' => 'Označit jako přečtené',
 		'mark_read' => 'Označit jako přečtené',
+		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Odstranit',
 		'remove' => 'Odstranit',
 		'see_website' => 'Navštívit WWW stránku',
 		'see_website' => 'Navštívit WWW stránku',
 		'submit' => 'Odeslat',
 		'submit' => 'Odeslat',
 		'truncate' => 'Smazat všechny články',
 		'truncate' => 'Smazat všechny články',
-		'update' => 'Update',	//TODO - Translation
+		'update' => 'Update',	// TODO - Translation
 	),
 	),
 	'auth' => array(
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.', // TODO - Translation
+		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.',	// TODO - Translation
 		'email' => 'Email',
 		'email' => 'Email',
 		'keep_logged_in' => 'Zapamatovat přihlášení <small>(%s dny)</small>',
 		'keep_logged_in' => 'Zapamatovat přihlášení <small>(%s dny)</small>',
-		'login' => 'Login',
+		'login' => 'Login',	// TODO - Translation
 		'logout' => 'Odhlášení',
 		'logout' => 'Odhlášení',
 		'password' => array(
 		'password' => array(
-			'_' => 'Heslo',
 			'format' => '<small>Alespoň 7 znaků</small>',
 			'format' => '<small>Alespoň 7 znaků</small>',
+			'_' => 'Heslo',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'Nový účet',
 			'ask' => 'Vytvořit účet?',
 			'ask' => 'Vytvořit účet?',
 			'title' => 'Vytvoření účtu',
 			'title' => 'Vytvoření účtu',
+			'_' => 'Nový účet',
 		),
 		),
 		'reset' => 'Reset přihlášení',
 		'reset' => 'Reset přihlášení',
 		'username' => array(
 		'username' => array(
-			'_' => 'Uživatel',
 			'admin' => 'Název administrátorského účtu',
 			'admin' => 'Název administrátorského účtu',
 			'format' => '<small>maximálně 16 alfanumerických znaků</small>',
 			'format' => '<small>maximálně 16 alfanumerických znaků</small>',
+			'_' => 'Uživatel',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -64,8 +65,8 @@ return array(
 		'Jan' => '\\L\\e\\d\\e\\n',
 		'Jan' => '\\L\\e\\d\\e\\n',
 		'jan' => 'led',
 		'jan' => 'led',
 		'january' => 'Led',
 		'january' => 'Led',
-		'Jul' => '\\Č\\e\\r\\v\\e\\n\\e\\c',
 		'jul' => 'čvn',
 		'jul' => 'čvn',
+		'Jul' => '\\Č\\e\\r\\v\\e\\n\\e\\c',
 		'july' => 'Čvn',
 		'july' => 'Čvn',
 		'Jun' => '\\Č\\e\\r\\v\\e\\n',
 		'Jun' => '\\Č\\e\\r\\v\\e\\n',
 		'jun' => 'čer',
 		'jun' => 'čer',
@@ -75,8 +76,8 @@ return array(
 		'last_month' => 'Minulý měsíc',
 		'last_month' => 'Minulý měsíc',
 		'last_week' => 'Minulý týden',
 		'last_week' => 'Minulý týden',
 		'last_year' => 'Minulý rok',
 		'last_year' => 'Minulý rok',
-		'Mar' => '\\B\\ř\\e\\z\\e\\n',
 		'mar' => 'bře',
 		'mar' => 'bře',
+		'Mar' => '\\B\\ř\\e\\z\\e\\n',
 		'march' => 'Bře',
 		'march' => 'Bře',
 		'May' => '\\K\\v\\ě\\t\\e\\n',
 		'May' => '\\K\\v\\ě\\t\\e\\n',
 		'may' => 'Květen',
 		'may' => 'Květen',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => 'Včera',
 		'yesterday' => 'Včera',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'O FreshRSS',
 		'about' => 'O FreshRSS',
+		'_' => 'FreshRSS',	// TODO - Translation
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Prázdná kategorie',
 		'category_empty' => 'Prázdná kategorie',
@@ -117,20 +118,21 @@ return array(
 		'should_be_activated' => 'JavaScript musí být povolen',
 		'should_be_activated' => 'JavaScript musí být povolen',
 	),
 	),
 	'lang' => array(
 	'lang' => array(
-		'cz' => 'Čeština',
-		'de' => 'Deutsch',
-		'en' => 'English',
-		'es' => 'Español',
-		'fr' => 'Français',
-		'he' => 'עברית',
-		'it' => 'Italiano',
-		'kr' => '한국어',
-		'nl' => 'Nederlands',
-		'oc' => 'Occitan',
-		'pt-br' => 'Português (Brasil)',
-		'ru' => 'Русский',
-		'tr' => 'Türkçe',
-		'zh-cn' => '简体中文',
+		'cz' => 'Čeština',	// TODO - Translation
+		'de' => 'Deutsch',	// TODO - Translation
+		'en' => 'English',	// TODO - Translation
+		'es' => 'Español',	// TODO - Translation
+		'fr' => 'Français',	// TODO - Translation
+		'he' => 'עברית',	// TODO - Translation
+		'it' => 'Italiano',	// TODO - Translation
+		'kr' => '한국어',	// TODO - Translation
+		'nl' => 'Nederlands',	// TODO - Translation
+		'oc' => 'Occitan',	// TODO - Translation
+		'pt-br' => 'Português (Brasil)',	// TODO - Translation
+		'ru' => 'Русский',	// TODO - Translation
+		'sk' => 'Slovenčina',	// TODO - Translation
+		'tr' => 'Türkçe',	// TODO - Translation
+		'zh-cn' => '简体中文',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'O aplikaci',
 		'about' => 'O aplikaci',
@@ -148,7 +150,7 @@ return array(
 		'sharing' => 'Sdílení',
 		'sharing' => 'Sdílení',
 		'shortcuts' => 'Zkratky',
 		'shortcuts' => 'Zkratky',
 		'stats' => 'Statistika',
 		'stats' => 'Statistika',
-		'system' => 'System configuration',	//TODO - Translation
+		'system' => 'System configuration',	// TODO - Translation
 		'update' => 'Aktualizace',
 		'update' => 'Aktualizace',
 		'user_management' => 'Správa uživatelů',
 		'user_management' => 'Správa uživatelů',
 		'user_profile' => 'Profil',
 		'user_profile' => 'Profil',
@@ -163,31 +165,31 @@ return array(
 		'previous' => 'Předchozí',
 		'previous' => 'Předchozí',
 	),
 	),
 	'period' => array(
 	'period' => array(
-		'days' => 'days',	//TODO - Translation
-		'hours' => 'hours',	//TODO - Translation
-		'months' => 'months',	//TODO - Translation
-		'weeks' => 'weeks',	//TODO - Translation
-		'years' => 'years',	//TODO - Translation
+		'days' => 'days',	// TODO - Translation
+		'hours' => 'hours',	// TODO - Translation
+		'months' => 'months',	// TODO - Translation
+		'weeks' => 'weeks',	// TODO - Translation
+		'years' => 'years',	// TODO - Translation
 	),
 	),
 	'share' => array(
 	'share' => array(
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
-		'email' => 'Email',
-		'facebook' => 'Facebook',
-		'gnusocial' => 'GNU social',
-		'jdh' => 'Journal du hacker',
-		'Known' => 'Known based sites',
-		'lemmy' => 'Lemmy',
-		'linkedin' => 'LinkedIn',
-		'mastodon' => 'Mastodon',
-		'movim' => 'Movim',
-		'pinboard' => 'Pinboard',
-		'pocket' => 'Pocket',
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
+		'email' => 'Email',	// TODO - Translation
+		'facebook' => 'Facebook',	// TODO - Translation
+		'gnusocial' => 'GNU social',	// TODO - Translation
+		'jdh' => 'Journal du hacker',	// TODO - Translation
+		'Known' => 'Known based sites',	// TODO - Translation
+		'lemmy' => 'Lemmy',	// TODO - Translation
+		'linkedin' => 'LinkedIn',	// TODO - Translation
+		'mastodon' => 'Mastodon',	// TODO - Translation
+		'movim' => 'Movim',	// TODO - Translation
+		'pinboard' => 'Pinboard',	// TODO - Translation
+		'pocket' => 'Pocket',	// TODO - Translation
 		'print' => 'Tisk',
 		'print' => 'Tisk',
-		'shaarli' => 'Shaarli',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag v1',
-		'wallabagv2' => 'wallabag v2',
+		'shaarli' => 'Shaarli',	// TODO - Translation
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag v1',	// TODO - Translation
+		'wallabagv2' => 'wallabag v2',	// TODO - Translation
 	),
 	),
 	'short' => array(
 	'short' => array(
 		'attention' => 'Upozornění!',
 		'attention' => 'Upozornění!',
@@ -197,8 +199,8 @@ return array(
 		'damn' => 'Sakra!',
 		'damn' => 'Sakra!',
 		'default_category' => 'Nezařazeno',
 		'default_category' => 'Nezařazeno',
 		'no' => 'Ne',
 		'no' => 'Ne',
-		'not_applicable' => 'Not available',	//TODO - Translation
-		'ok' => 'Ok!',
+		'not_applicable' => 'Not available',	// TODO - Translation
+		'ok' => 'Ok!',	// TODO - Translation
 		'or' => 'nebo',
 		'or' => 'nebo',
 		'yes' => 'Ano',
 		'yes' => 'Ano',
 	),
 	),

+ 10 - 10
app/i18n/cz/index.php

@@ -2,8 +2,7 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'O FreshRSS',
-		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// TODO - Translation
 		'bugs_reports' => 'Hlášení chyb',
 		'bugs_reports' => 'Hlášení chyb',
 		'credits' => 'Poděkování',
 		'credits' => 'Poděkování',
 		'credits_content' => 'Některé designové prvky pocházejí z <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, FreshRSS ale tuto platformu nevyužívá. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ikony</a> pocházejí z <a href="https://www.gnome.org/">GNOME projektu</a>. Font <em>Open Sans</em> vytvořil <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS je založen na PHP framework <a href="https://github.com/marienfressinaud/MINZ">Minz</a>.',
 		'credits_content' => 'Některé designové prvky pocházejí z <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, FreshRSS ale tuto platformu nevyužívá. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ikony</a> pocházejí z <a href="https://www.gnome.org/">GNOME projektu</a>. Font <em>Open Sans</em> vytvořil <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS je založen na PHP framework <a href="https://github.com/marienfressinaud/MINZ">Minz</a>.',
@@ -14,23 +13,21 @@ return array(
 		'title' => 'O FreshRSS',
 		'title' => 'O FreshRSS',
 		'version' => 'Verze',
 		'version' => 'Verze',
 		'website' => 'Webové stránka',
 		'website' => 'Webové stránka',
-	),
-	'tos' => array(
-		'title' => 'Terms of Service', // TODO - Translation
+		'_' => 'O FreshRSS',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Můžete přidat kanály.',
 		'add' => 'Můžete přidat kanály.',
 		'empty' => 'Žádné články k zobrazení.',
 		'empty' => 'Žádné články k zobrazení.',
 		'rss_of' => 'RSS kanál %s',
 		'rss_of' => 'RSS kanál %s',
 		'title' => 'RSS kanály',
 		'title' => 'RSS kanály',
-		'title_global' => 'Přehled',
 		'title_fav' => 'Oblíbené',
 		'title_fav' => 'Oblíbené',
+		'title_global' => 'Přehled',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Logy',
 		'clear' => 'Vymazat logy',
 		'clear' => 'Vymazat logy',
 		'empty' => 'Log je prázdný',
 		'empty' => 'Log je prázdný',
 		'title' => 'Logy',
 		'title' => 'Logy',
+		'_' => 'Logy',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'O FreshRSS',
 		'about' => 'O FreshRSS',
@@ -43,7 +40,7 @@ return array(
 		'mark_all_read' => 'Označit vše jako přečtené',
 		'mark_all_read' => 'Označit vše jako přečtené',
 		'mark_cat_read' => 'Označit kategorii jako přečtenou',
 		'mark_cat_read' => 'Označit kategorii jako přečtenou',
 		'mark_feed_read' => 'Označit kanál jako přečtený',
 		'mark_feed_read' => 'Označit kanál jako přečtený',
-		'mark_selection_unread' => 'Mark selection as unread',	//TODO - Translation
+		'mark_selection_unread' => 'Mark selection as unread',	// TODO - Translation
 		'newer_first' => 'Nové nejdříve',
 		'newer_first' => 'Nové nejdříve',
 		'non-starred' => 'Zobrazit vše vyjma oblíbených',
 		'non-starred' => 'Zobrazit vše vyjma oblíbených',
 		'normal_view' => 'Normální',
 		'normal_view' => 'Normální',
@@ -56,11 +53,14 @@ return array(
 		'starred' => 'Zobrazit oblíbené',
 		'starred' => 'Zobrazit oblíbené',
 		'stats' => 'Statistika',
 		'stats' => 'Statistika',
 		'subscription' => 'Správa subskripcí',
 		'subscription' => 'Správa subskripcí',
-		'tags' => 'My labels',	//TODO - Translation
+		'tags' => 'My labels',	// TODO - Translation
 		'unread' => 'Zobrazovat nepřečtené',
 		'unread' => 'Zobrazovat nepřečtené',
 	),
 	),
 	'share' => 'Sdílet',
 	'share' => 'Sdílet',
 	'tag' => array(
 	'tag' => array(
-		'related' => 'Související tagy',	//TODO - Translation
+		'related' => 'Související tagy',
+	),
+	'tos' => array(
+		'title' => 'Terms of Service',	// TODO - Translation
 	),
 	),
 );
 );

+ 8 - 8
app/i18n/cz/install.php

@@ -17,20 +17,19 @@ return array(
 		'type' => 'Způsob přihlášení',
 		'type' => 'Způsob přihlášení',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'Databáze',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'Nastavení databáze',
 			'ko' => 'Ověřte informace o databázi.',
 			'ko' => 'Ověřte informace o databázi.',
 			'ok' => 'Nastavení databáze bylo uloženo.',
 			'ok' => 'Nastavení databáze bylo uloženo.',
+			'_' => 'Nastavení databáze',
 		),
 		),
 		'host' => 'Hostitel',
 		'host' => 'Hostitel',
 		'password' => 'Heslo',
 		'password' => 'Heslo',
 		'prefix' => 'Prefix tabulky',
 		'prefix' => 'Prefix tabulky',
 		'type' => 'Typ databáze',
 		'type' => 'Typ databáze',
 		'username' => 'Uživatel',
 		'username' => 'Uživatel',
+		'_' => 'Databáze',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'Kontrola',
 		'already_installed' => 'Zjistili jsme, že FreshRSS je již nainstalován!',
 		'already_installed' => 'Zjistili jsme, že FreshRSS je již nainstalován!',
 		'cache' => array(
 		'cache' => array(
 			'nok' => 'Zkontrolujte oprávnění adresáře <em>./data/cache</em>. HTTP server musí mít do tohoto adresáře práva zápisu',
 			'nok' => 'Zkontrolujte oprávnění adresáře <em>./data/cache</em>. HTTP server musí mít do tohoto adresáře práva zápisu',
@@ -69,8 +68,8 @@ return array(
 			'ok' => 'Máte doporučenou knihovnu pro parsování JSON.',
 			'ok' => 'Máte doporučenou knihovnu pro parsování JSON.',
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
 			'nok' => 'Nemáte framework Minz.',
 			'nok' => 'Nemáte framework Minz.',
@@ -96,10 +95,11 @@ return array(
 			'nok' => 'Pro parsování XML chybí požadovaná knihovna.',
 			'nok' => 'Pro parsování XML chybí požadovaná knihovna.',
 			'ok' => 'Máte požadovanou knihovnu pro parsování XML.',
 			'ok' => 'Máte požadovanou knihovnu pro parsování XML.',
 		),
 		),
+		'_' => 'Kontrola',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'Obecná nastavení',
 		'ok' => 'Nastavení bylo uloženo.',
 		'ok' => 'Nastavení bylo uloženo.',
+		'_' => 'Obecná nastavení',
 	),
 	),
 	'congratulations' => 'Gratulujeme!',
 	'congratulations' => 'Gratulujeme!',
 	'default_user' => 'Jméno výchozího uživatele <small>(maximálně 16 alfanumerických znaků)</small>',
 	'default_user' => 'Jméno výchozího uživatele <small>(maximálně 16 alfanumerických znaků)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'Reinstalací FreshRSS ztratíte předchozí konfiguraci. Opravdu chcete pokračovat?',
 		'confirm_reinstall' => 'Reinstalací FreshRSS ztratíte předchozí konfiguraci. Opravdu chcete pokračovat?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'Jazyk',
 		'choose' => 'Vyberte jazyk FreshRSS',
 		'choose' => 'Vyberte jazyk FreshRSS',
 		'defined' => 'Jazyk byl nastaven.',
 		'defined' => 'Jazyk byl nastaven.',
+		'_' => 'Jazyk',
 	),
 	),
 	'not_deleted' => 'Nastala chyba, soubor <em>%s</em> musíte smazat ručně.',
 	'not_deleted' => 'Nastala chyba, soubor <em>%s</em> musíte smazat ručně.',
 	'ok' => 'Instalace byla úspěšná.',
 	'ok' => 'Instalace byla úspěšná.',
 	'step' => 'krok %d',
 	'step' => 'krok %d',
 	'steps' => 'Kroky',
 	'steps' => 'Kroky',
-	'title' => 'Instalace · FreshRSS',
 	'this_is_the_end' => 'Konec',
 	'this_is_the_end' => 'Konec',
+	'title' => 'Instalace · FreshRSS',
 );
 );

+ 32 - 32
app/i18n/cz/sub.php

@@ -2,24 +2,24 @@
 
 
 return array(
 return array(
 	'api' => array(
 	'api' => array(
-		'documentation' => 'Copy the following URL to use it within an external tool.',	//TODO - Translation
-		'title' => 'API',	//TODO - Translation
+		'documentation' => 'Copy the following URL to use it within an external tool.',	// TODO - Translation
+		'title' => 'API',	// TODO - Translation
 	),
 	),
 	'bookmarklet' => array(
 	'bookmarklet' => array(
-		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',	//TODO - Translation
-		'label' => 'Subscribe',	//TODO - Translation
-		'title' => 'Bookmarklet',	//TODO - Translation
+		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',	// TODO - Translation
+		'label' => 'Subscribe',	// TODO - Translation
+		'title' => 'Bookmarklet',	// TODO - Translation
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'Kategorie',
 		'add' => 'Přidat kategorii',
 		'add' => 'Přidat kategorii',
 		'archiving' => 'Archivace',
 		'archiving' => 'Archivace',
 		'empty' => 'Vyprázdit kategorii',
 		'empty' => 'Vyprázdit kategorii',
 		'information' => 'Informace',
 		'information' => 'Informace',
 		'new' => 'Nová kategorie',
 		'new' => 'Nová kategorie',
-		'position' => 'Display position',	//TODO - Translation
-		'position_help' => 'To control category sort order',	//TODO - Translation
+		'position' => 'Display position',	// TODO - Translation
+		'position_help' => 'To control category sort order',	// TODO - Translation
 		'title' => 'Název',
 		'title' => 'Název',
+		'_' => 'Kategorie',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Přidat RSS kanál',
 		'add' => 'Přidat RSS kanál',
@@ -32,73 +32,73 @@ return array(
 			'password' => 'Heslo',
 			'password' => 'Heslo',
 			'username' => 'Přihlašovací jméno',
 			'username' => 'Přihlašovací jméno',
 		),
 		),
-		'clear_cache' => 'Always clear cache',	//TODO - Translation
+		'clear_cache' => 'Always clear cache',	// TODO - Translation
 		'css_help' => 'Stáhne zkrácenou verzi RSS kanálů (pozor, náročnější na čas!)',
 		'css_help' => 'Stáhne zkrácenou verzi RSS kanálů (pozor, náročnější na čas!)',
 		'css_path' => 'Původní CSS soubor článku z webových stránek',
 		'css_path' => 'Původní CSS soubor článku z webových stránek',
 		'description' => 'Popis',
 		'description' => 'Popis',
 		'empty' => 'Kanál je prázdný. Ověřte prosím zda je ještě autorem udržován.',
 		'empty' => 'Kanál je prázdný. Ověřte prosím zda je ještě autorem udržován.',
 		'error' => 'Vyskytl se problém s kanálem. Ověřte že je vždy dostupný, prosím, a poté jej aktualizujte.',
 		'error' => 'Vyskytl se problém s kanálem. Ověřte že je vždy dostupný, prosím, a poté jej aktualizujte.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filter actions',	//TODO - Translation
-			'help' => 'Write one search filter per line.',	//TODO - Translation
+			'help' => 'Write one search filter per line.',	// TODO - Translation
+			'_' => 'Filter actions',	// TODO - Translation
 		),
 		),
 		'information' => 'Informace',
 		'information' => 'Informace',
 		'keep_min' => 'Zachovat tento minimální počet článků',
 		'keep_min' => 'Zachovat tento minimální počet článků',
 		'moved_category_deleted' => 'Po smazání kategorie budou v ní obsažené kanály automaticky přesunuty do <em>%s</em>.',
 		'moved_category_deleted' => 'Po smazání kategorie budou v ní obsažené kanály automaticky přesunuty do <em>%s</em>.',
-		'mute' => 'mute',	//TODO - Translation
+		'mute' => 'mute',	// TODO - Translation
 		'no_selected' => 'Nejsou označeny žádné kanály.',
 		'no_selected' => 'Nejsou označeny žádné kanály.',
 		'number_entries' => '%d článků',
 		'number_entries' => '%d článků',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Visibility',	//TODO - Translation
-			'archived' => 'Do not show (archived)',	//TODO - Translation
+			'archived' => 'Do not show (archived)',	// TODO - Translation
 			'main_stream' => 'Zobrazit ve “Všechny kanály”',
 			'main_stream' => 'Zobrazit ve “Všechny kanály”',
-			'normal' => 'Show in its category',	//TODO - Translation
+			'normal' => 'Show in its category',	// TODO - Translation
+			'_' => 'Visibility',	// TODO - Translation
 		),
 		),
-		'websub' => 'Okamžité oznámení s WebSub',
 		'show' => array(
 		'show' => array(
-			'all' => 'Show all feeds',	//TODO - Translation
-			'error' => 'Show only feeds with error',	//TODO - Translation
+			'all' => 'Show all feeds',	// TODO - Translation
+			'error' => 'Show only feeds with error',	// TODO - Translation
 		),
 		),
 		'showing' => array(
 		'showing' => array(
-			'error' => 'Showing only feeds with error',	//TODO - Translation
+			'error' => 'Showing only feeds with error',	// TODO - Translation
 		),
 		),
-		'ssl_verify' => 'Verify SSL security',	//TODO - Translation
+		'ssl_verify' => 'Verify SSL security',	// TODO - Translation
 		'stats' => 'Statistika',
 		'stats' => 'Statistika',
 		'think_to_add' => 'Můžete přidat kanály.',
 		'think_to_add' => 'Můžete přidat kanály.',
-		'timeout' => 'Timeout in seconds',	//TODO - Translation
+		'timeout' => 'Timeout in seconds',	// TODO - Translation
 		'title' => 'Název',
 		'title' => 'Název',
 		'title_add' => 'Přidat RSS kanál',
 		'title_add' => 'Přidat RSS kanál',
 		'ttl' => 'Neobnovovat častěji než',
 		'ttl' => 'Neobnovovat častěji než',
 		'url' => 'URL kanálu',
 		'url' => 'URL kanálu',
 		'validator' => 'Zkontrolovat platnost kanálu',
 		'validator' => 'Zkontrolovat platnost kanálu',
 		'website' => 'URL webové stránky',
 		'website' => 'URL webové stránky',
+		'websub' => 'Okamžité oznámení s WebSub',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
-		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',// TODO
-		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	//TODO - Translation
-		'title' => 'Firefox feed reader',	//TODO - Translation
+		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	// TODO - Translation
+		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	// TODO - Translation
+		'title' => 'Firefox feed reader',	// TODO - Translation
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
-		'export' => 'Export',
+		'export' => 'Export',	// TODO - Translation
+		'export_labelled' => 'Export your labelled articles',	// TODO - Translation
 		'export_opml' => 'Exportovat seznam kanálů (OPML)',
 		'export_opml' => 'Exportovat seznam kanálů (OPML)',
 		'export_starred' => 'Exportovat oblíbené',
 		'export_starred' => 'Exportovat oblíbené',
-		'export_labelled' => 'Export your labelled articles',	//TODO
 		'feed_list' => 'Seznam %s článků',
 		'feed_list' => 'Seznam %s článků',
 		'file_to_import' => 'Soubor k importu<br />(OPML, JSON nebo ZIP)',
 		'file_to_import' => 'Soubor k importu<br />(OPML, JSON nebo ZIP)',
 		'file_to_import_no_zip' => 'Soubor k importu<br />(OPML nebo JSON)',
 		'file_to_import_no_zip' => 'Soubor k importu<br />(OPML nebo JSON)',
-		'import' => 'Import',
+		'import' => 'Import',	// TODO - Translation
 		'starred_list' => 'Seznam oblíbených článků',
 		'starred_list' => 'Seznam oblíbených článků',
-		'title' => 'Import / export',
+		'title' => 'Import / export',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'bookmark' => 'Přihlásit (FreshRSS bookmark)',
 		'bookmark' => 'Přihlásit (FreshRSS bookmark)',
-		'import_export' => 'Import / export',
+		'import_export' => 'Import / export',	// TODO - Translation
 		'subscription_management' => 'Správa subskripcí',
 		'subscription_management' => 'Správa subskripcí',
-		'subscription_tools' => 'Subscription tools',	//TODO - Translation
+		'subscription_tools' => 'Subscription tools',	// TODO - Translation
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'Správa subskripcí',
 		'feed_management' => 'Správa RSS kanálů',
 		'feed_management' => 'Správa RSS kanálů',
-		'subscription_tools' => 'Subscription tools',	//TODO - Translation
+		'subscription_tools' => 'Subscription tools',	// TODO - Translation
+		'_' => 'Správa subskripcí',
 	),
 	),
 );
 );

+ 21 - 21
app/i18n/cz/user.php

@@ -3,35 +3,35 @@
 return array(
 return array(
 	'email' => array(
 	'email' => array(
 		'feedback' => array(
 		'feedback' => array(
-			'invalid' => 'The email address is invalid.', //TODO - Translation
-			'required' => 'The email address is required.', //TODO - Translation
+			'invalid' => 'The email address is invalid.',	// TODO - Translation
+			'required' => 'The email address is required.',	// TODO - Translation
 		),
 		),
 		'validation' => array(
 		'validation' => array(
-			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.', //TODO - Translation
-			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.', //TODO - Translation
+			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.',	// TODO - Translation
+			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.',	// TODO - Translation
 			'feedback' => array(
 			'feedback' => array(
-				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.', //TODO - Translation
-				'email_sent' => 'An email has been sent to your address.', //TODO - Translation
-				'error' => 'The email address failed to be validated.', //TODO - Translation
-				'ok' => 'The email address has been validated.', //TODO - Translation
-				'unneccessary' => 'The email address was already validated.', //TODO - Translation
-				'wrong_token' => 'The email address failed to be validated due to a wrong token.', //TODO - Translation
+				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.',	// TODO - Translation
+				'email_sent' => 'An email has been sent to your address.',	// TODO - Translation
+				'error' => 'The email address failed to be validated.',	// TODO - Translation
+				'ok' => 'The email address has been validated.',	// TODO - Translation
+				'unneccessary' => 'The email address was already validated.',	// TODO - Translation
+				'wrong_token' => 'The email address failed to be validated due to a wrong token.',	// TODO - Translation
 			),
 			),
-			'need_to' => 'You need to validate your email address before being able to use %s.', //TODO - Translation
-			'resend_email' => 'Resend the email', //TODO - Translation
-			'title' => 'Email address validation', //TODO - Translation
-		),
-	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation
+			'need_to' => 'You need to validate your email address before being able to use %s.',	// TODO - Translation
+			'resend_email' => 'Resend the email',	// TODO - Translation
+			'title' => 'Email address validation',	// TODO - Translation
 		),
 		),
 	),
 	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
-			'title' => 'You need to validate your account', //TODO - Translation
-			'welcome' => 'Welcome %s,', //TODO - Translation
-			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:', //TODO - Translation
+			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:',	// TODO - Translation
+			'title' => 'You need to validate your account',	// TODO - Translation
+			'welcome' => 'Welcome %s,',	// TODO - Translation
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'You must accept the Terms of Service to be able to register.',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 20 - 14
app/i18n/de/admin.php

@@ -83,9 +83,9 @@ return array(
 			'ok' => 'Sie haben PDO und mindestens einen der unterstützten Treiber (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => 'Sie haben PDO und mindestens einen der unterstützten Treiber (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'PHP-Installation',
 			'nok' => 'Ihre PHP-Version ist %s aber FreshRSS benötigt mindestens Version %s.',
 			'nok' => 'Ihre PHP-Version ist %s aber FreshRSS benötigt mindestens Version %s.',
 			'ok' => 'Ihre PHP-Version ist %s, welche kompatibel mit FreshRSS ist.',
 			'ok' => 'Ihre PHP-Version ist %s, welche kompatibel mit FreshRSS ist.',
+			'_' => 'PHP-Installation',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'Es fehlen eine oder mehrere Tabellen in der Datenbank.',
 			'nok' => 'Es fehlen eine oder mehrere Tabellen in der Datenbank.',
@@ -113,19 +113,18 @@ return array(
 		'empty_list' => 'Es gibt keine installierte Erweiterung.',
 		'empty_list' => 'Es gibt keine installierte Erweiterung.',
 		'enabled' => 'Aktiviert',
 		'enabled' => 'Aktiviert',
 		'latest' => 'Installiert',
 		'latest' => 'Installiert',
-		'name' => 'Name',
+		'name' => 'Name',	// TODO - Translation
 		'no_configure_view' => 'Diese Erweiterung kann nicht konfiguriert werden.',
 		'no_configure_view' => 'Diese Erweiterung kann nicht konfiguriert werden.',
 		'system' => array(
 		'system' => array(
-			'_' => 'System-Erweiterungen',
 			'no_rights' => 'System-Erweiterung (Sie haben keine Berechtigung dafür)',
 			'no_rights' => 'System-Erweiterung (Sie haben keine Berechtigung dafür)',
+			'_' => 'System-Erweiterungen',
 		),
 		),
 		'title' => 'Erweiterungen',
 		'title' => 'Erweiterungen',
 		'update' => 'Update verfügbar',
 		'update' => 'Update verfügbar',
 		'user' => 'Benutzer-Erweiterungen',
 		'user' => 'Benutzer-Erweiterungen',
-		'version' => 'Version',
+		'version' => 'Version',	// TODO - Translation
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Statistiken',
 		'all_feeds' => 'Alle Feeds',
 		'all_feeds' => 'Alle Feeds',
 		'category' => 'Kategorie',
 		'category' => 'Kategorie',
 		'entry_count' => 'Anzahl der Einträge',
 		'entry_count' => 'Anzahl der Einträge',
@@ -135,7 +134,7 @@ return array(
 		'entry_per_hour' => 'Pro Stunde (Durchschnitt: %.2f Nachrichten)',
 		'entry_per_hour' => 'Pro Stunde (Durchschnitt: %.2f Nachrichten)',
 		'entry_per_month' => 'Pro Monat (Durchschnitt: %.2f Nachrichten)',
 		'entry_per_month' => 'Pro Monat (Durchschnitt: %.2f Nachrichten)',
 		'entry_repartition' => 'Einträge-Verteilung',
 		'entry_repartition' => 'Einträge-Verteilung',
-		'feed' => 'Feed',
+		'feed' => 'Feed',	// TODO - Translation
 		'feed_per_category' => 'Feeds pro Kategorie',
 		'feed_per_category' => 'Feeds pro Kategorie',
 		'idle' => 'Inaktive Feeds',
 		'idle' => 'Inaktive Feeds',
 		'main' => 'Haupt-Statistiken',
 		'main' => 'Haupt-Statistiken',
@@ -155,37 +154,44 @@ return array(
 		'status_unread' => 'Ungelesen',
 		'status_unread' => 'Ungelesen',
 		'title' => 'Statistiken',
 		'title' => 'Statistiken',
 		'top_feed' => 'Top 10-Feeds',
 		'top_feed' => 'Top 10-Feeds',
+		'_' => 'Statistiken',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'Systemeinstellungen',
 		'auto-update-url' => 'Auto-update URL',
 		'auto-update-url' => 'Auto-update URL',
-		'force_email_validation' => 'Force email addresses validation', //TODO - Translation
-		'instance-name' => 'Dein Reader Name',
-		'max-categories' => 'Anzahl erlaubter Kategorien pro Benutzer',
-		'max-feeds' => 'Anzahl erlaubter Feeds pro Benutzer',
 		'cookie-duration' => array(
 		'cookie-duration' => array(
 			'help' => 'in Sekunden',
 			'help' => 'in Sekunden',
-			'number' => 'Duration to keep logged in', // @todo translate
+			'number' => 'Eingeloggt bleiben für',
 		),
 		),
+		'force_email_validation' => 'E-Mail Adressvalidierung erzwingen',
+		'instance-name' => 'Dein Reader Name',
+		'max-categories' => 'Anzahl erlaubter Kategorien pro Benutzer',
+		'max-feeds' => 'Anzahl erlaubter Feeds pro Benutzer',
 		'registration' => array(
 		'registration' => array(
 			'help' => '0 meint, dass es kein Account Limit gibt',
 			'help' => '0 meint, dass es kein Account Limit gibt',
 			'number' => 'Maximale Anzahl von Accounts',
 			'number' => 'Maximale Anzahl von Accounts',
 		),
 		),
+		'_' => 'Systemeinstellungen',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'System aktualisieren',
 		'apply' => 'Anwenden',
 		'apply' => 'Anwenden',
 		'check' => 'Auf neue Aktualisierungen prüfen',
 		'check' => 'Auf neue Aktualisierungen prüfen',
 		'current_version' => 'Ihre aktuelle Version von FreshRSS ist %s.',
 		'current_version' => 'Ihre aktuelle Version von FreshRSS ist %s.',
 		'last' => 'Letzte Überprüfung: %s',
 		'last' => 'Letzte Überprüfung: %s',
 		'none' => 'Keine ausstehende Aktualisierung',
 		'none' => 'Keine ausstehende Aktualisierung',
 		'title' => 'System aktualisieren',
 		'title' => 'System aktualisieren',
+		'_' => 'System aktualisieren',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s Artikel (%s)',
 		'articles_and_size' => '%s Artikel (%s)',
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => 'Neuen Benutzer erstellen',
 		'create' => 'Neuen Benutzer erstellen',
+		'database_size' => 'Database size',	// TODO - Translation
 		'delete_users' => 'Lösche Benutzer',
 		'delete_users' => 'Lösche Benutzer',
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => 'Sprache',
 		'language' => 'Sprache',
+		'list' => 'User list',	// TODO - Translation
 		'number' => 'Es wurde bis jetzt %d Account erstellt',
 		'number' => 'Es wurde bis jetzt %d Account erstellt',
 		'numbers' => 'Es wurden bis jetzt %d Accounts erstellt',
 		'numbers' => 'Es wurden bis jetzt %d Accounts erstellt',
 		'password_form' => 'Passwort<br /><small>(für die Anmeldemethode per Webformular)</small>',
 		'password_form' => 'Passwort<br /><small>(für die Anmeldemethode per Webformular)</small>',
@@ -193,8 +199,8 @@ return array(
 		'selected' => 'Ausgewählter Benutzer',
 		'selected' => 'Ausgewählter Benutzer',
 		'title' => 'Benutzer verwalten',
 		'title' => 'Benutzer verwalten',
 		'update_users' => 'Aktualisiere Benutzer',
 		'update_users' => 'Aktualisiere Benutzer',
-		'user_list' => 'Liste der Benutzer',
 		'username' => 'Nutzername',
 		'username' => 'Nutzername',
 		'users' => 'Benutzer',
 		'users' => 'Benutzer',
+		'user_list' => 'Liste der Benutzer',
 	),
 	),
 );
 );

+ 33 - 32
app/i18n/de/conf.php

@@ -2,34 +2,33 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Archivierung',
 		'delete_after' => 'Entferne Artikel nach',
 		'delete_after' => 'Entferne Artikel nach',
-		'exception' => 'Purge exception',	//TODO - Translation
+		'exception' => 'Archivierungsausnahmen',
 		'help' => 'Weitere Optionen sind in den Einstellungen der individuellen Feeds verfügbar.',
 		'help' => 'Weitere Optionen sind in den Einstellungen der individuellen Feeds verfügbar.',
-		'keep_favourites' => 'Never delete favourites',	//TODO - Translation
+		'keep_favourites' => 'Lieblingsartikel behalten',
+		'keep_labels' => 'Artikel mit Label behalten',
+		'keep_max' => 'Maximale Anzahl an Artikeln die behalten werden',
 		'keep_min_by_feed' => 'Minimale Anzahl an Artikeln, die pro Feed behalten werden',
 		'keep_min_by_feed' => 'Minimale Anzahl an Artikeln, die pro Feed behalten werden',
-		'keep_labels' => 'Never delete labels',	//TODO - Translation
-		'keep_unreads' => 'Never delete unreads',	//TODO - Translation
-		'maintenance' => 'Maintenance',	//TODO - Translation
+		'keep_period' => 'Maximales Alter der zu behaltenden Artikel',
+		'keep_unreads' => 'Ungelesene Artikel behalten',
+		'maintenance' => 'Wartung',
 		'optimize' => 'Datenbank optimieren',
 		'optimize' => 'Datenbank optimieren',
 		'optimize_help' => 'Sollte gelegentlich durchgeführt werden, um die Größe der Datenbank zu reduzieren.',
 		'optimize_help' => 'Sollte gelegentlich durchgeführt werden, um die Größe der Datenbank zu reduzieren.',
-		'policy' => 'Purge policy',	//TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	//TODO - Translation
+		'policy' => 'Archivierungsrichtlinien',
+		'policy_warning' => 'Ohne Archivierungsrichtlinien werden alle Artikel behalten',
 		'purge_now' => 'Jetzt bereinigen',
 		'purge_now' => 'Jetzt bereinigen',
-		'keep_max' => 'Maximum number of articles to keep',	//TODO - Translation
-		'keep_period' => 'Maximum age of articles to keep',	//TODO - Translation
 		'title' => 'Archivierung',
 		'title' => 'Archivierung',
 		'ttl' => 'Aktualisiere automatisch nicht öfter als',
 		'ttl' => 'Aktualisiere automatisch nicht öfter als',
+		'_' => 'Archivierung',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Anzeige',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Fußzeile',
 			'bottom_line' => 'Fußzeile',
+			'display_authors' => 'Autoren',
 			'entry' => 'Artikel-Symbole',
 			'entry' => 'Artikel-Symbole',
 			'publication_date' => 'Datum der Veröffentlichung',
 			'publication_date' => 'Datum der Veröffentlichung',
 			'related_tags' => 'Verwandte Tags',
 			'related_tags' => 'Verwandte Tags',
 			'sharing' => 'Teilen',
 			'sharing' => 'Teilen',
-			'display_authors' => 'Authors',  //TODO - Translation
 			'top_line' => 'Kopfzeile',
 			'top_line' => 'Kopfzeile',
 		),
 		),
 		'language' => 'Sprache',
 		'language' => 'Sprache',
@@ -47,21 +46,22 @@ return array(
 			'no_limit' => 'Keine Begrenzung',
 			'no_limit' => 'Keine Begrenzung',
 			'thin' => 'Klein',
 			'thin' => 'Klein',
 		),
 		),
+		'_' => 'Anzeige',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Profil-Verwaltung',
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Accountlöschung',
 			'warn' => 'Dein Account und alle damit bezogenen Daten werden gelöscht.',
 			'warn' => 'Dein Account und alle damit bezogenen Daten werden gelöscht.',
+			'_' => 'Accountlöschung',
 		),
 		),
 		'email' => 'E-Mail-Adresse',
 		'email' => 'E-Mail-Adresse',
 		'password_api' => 'Passwort-API<br /><small>(z. B. für mobile Anwendungen)</small>',
 		'password_api' => 'Passwort-API<br /><small>(z. B. für mobile Anwendungen)</small>',
 		'password_form' => 'Passwort<br /><small>(für die Anmeldemethode per Webformular)</small>',
 		'password_form' => 'Passwort<br /><small>(für die Anmeldemethode per Webformular)</small>',
 		'password_format' => 'mindestens 7 Zeichen',
 		'password_format' => 'mindestens 7 Zeichen',
 		'title' => 'Profil',
 		'title' => 'Profil',
+		'_' => 'Profil-Verwaltung',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'Benutzerabfragen',
 		'deprecated' => 'Diese Abfrage ist nicht länger gültig. Die referenzierte Kategorie oder der Feed ist gelöscht worden.',
 		'deprecated' => 'Diese Abfrage ist nicht länger gültig. Die referenzierte Kategorie oder der Feed ist gelöscht worden.',
 		'display' => 'Zeige Abfrage Ergebnisse',
 		'display' => 'Zeige Abfrage Ergebnisse',
 		'filter' => 'Angewendeter Filter:',
 		'filter' => 'Angewendeter Filter:',
@@ -69,8 +69,8 @@ return array(
 		'get_category' => 'Kategorie "%s" anzeigen',
 		'get_category' => 'Kategorie "%s" anzeigen',
 		'get_favorite' => 'Lieblingsartikel anzeigen',
 		'get_favorite' => 'Lieblingsartikel anzeigen',
 		'get_feed' => 'Feed "%s" anzeigen',
 		'get_feed' => 'Feed "%s" anzeigen',
-		'no_filter' => 'Kein Filter',
 		'none' => 'Sie haben bisher keine Benutzerabfrage erstellt.',
 		'none' => 'Sie haben bisher keine Benutzerabfrage erstellt.',
+		'no_filter' => 'Kein Filter',
 		'number' => 'Abfrage Nr. %d',
 		'number' => 'Abfrage Nr. %d',
 		'order_asc' => 'Älteste Artikel zuerst anzeigen',
 		'order_asc' => 'Älteste Artikel zuerst anzeigen',
 		'order_desc' => 'Neueste Artikel zuerst anzeigen',
 		'order_desc' => 'Neueste Artikel zuerst anzeigen',
@@ -93,9 +93,9 @@ return array(
 		'state_14' => 'Ungelesene Artikel anzeigen',
 		'state_14' => 'Ungelesene Artikel anzeigen',
 		'state_15' => 'Alle Artikel anzeigen',
 		'state_15' => 'Alle Artikel anzeigen',
 		'title' => 'Benutzerabfragen',
 		'title' => 'Benutzerabfragen',
+		'_' => 'Benutzerabfragen',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Lesen',
 		'after_onread' => 'Nach „Alle als gelesen markieren“,',
 		'after_onread' => 'Nach „Alle als gelesen markieren“,',
 		'articles_per_page' => 'Anzahl der Artikel pro Seite',
 		'articles_per_page' => 'Anzahl der Artikel pro Seite',
 		'auto_load_more' => 'Die nächsten Artikel am Seitenende laden',
 		'auto_load_more' => 'Die nächsten Artikel am Seitenende laden',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'Artikel als gelesen markieren…',
 			'when' => 'Artikel als gelesen markieren…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Artikel zum Anzeigen',
 			'adaptive' => 'Anzeige anpassen',
 			'adaptive' => 'Anzeige anpassen',
 			'all_articles' => 'Alle Artikel zeigen',
 			'all_articles' => 'Alle Artikel zeigen',
 			'unread' => 'Nur ungelesene zeigen',
 			'unread' => 'Nur ungelesene zeigen',
+			'_' => 'Artikel zum Anzeigen',
 		),
 		),
 		'sides_close_article' => 'Klick außerhalb des Artikel-Textes schließt den Artikel',
 		'sides_close_article' => 'Klick außerhalb des Artikel-Textes schließt den Artikel',
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Sortierreihenfolge',
 			'newer_first' => 'Neuere zuerst',
 			'newer_first' => 'Neuere zuerst',
 			'older_first' => 'Ältere zuerst',
 			'older_first' => 'Ältere zuerst',
+			'_' => 'Sortierreihenfolge',
 		),
 		),
 		'sticky_post' => 'Wenn geöffnet, den Artikel ganz oben anheften',
 		'sticky_post' => 'Wenn geöffnet, den Artikel ganz oben anheften',
 		'title' => 'Lesen',
 		'title' => 'Lesen',
@@ -135,27 +135,27 @@ return array(
 			'normal' => 'Normale Ansicht',
 			'normal' => 'Normale Ansicht',
 			'reader' => 'Lese-Ansicht',
 			'reader' => 'Lese-Ansicht',
 		),
 		),
+		'_' => 'Lesen',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Teilen',
 		'add' => 'Füge eine Teilen-Dienst hinzu',
 		'add' => 'Füge eine Teilen-Dienst hinzu',
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
 		'email' => 'E-Mail',
 		'email' => 'E-Mail',
-		'facebook' => 'Facebook',
+		'facebook' => 'Facebook',	// TODO - Translation
 		'more_information' => 'Weitere Informationen',
 		'more_information' => 'Weitere Informationen',
 		'print' => 'Drucken',
 		'print' => 'Drucken',
 		'remove' => 'Entferne Teilen-Dienst',
 		'remove' => 'Entferne Teilen-Dienst',
-		'shaarli' => 'Shaarli',
+		'shaarli' => 'Shaarli',	// TODO - Translation
 		'share_name' => 'Anzuzeigender Teilen-Name',
 		'share_name' => 'Anzuzeigender Teilen-Name',
 		'share_url' => 'Zu verwendende Teilen-URL',
 		'share_url' => 'Zu verwendende Teilen-URL',
 		'title' => 'Teilen',
 		'title' => 'Teilen',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag',
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag',	// TODO - Translation
+		'_' => 'Teilen',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Tastenkombination',
-		'article_action' => 'Artikelaktionen',
+		'article_action' => 'Artikel',
 		'auto_share' => 'Teilen',
 		'auto_share' => 'Teilen',
 		'auto_share_help' => 'Wenn es nur eine Option zum Teilen gibt, wird diese verwendet. Ansonsten sind die Optionen über ihre Nummer erreichbar.',
 		'auto_share_help' => 'Wenn es nur eine Option zum Teilen gibt, wird diese verwendet. Ansonsten sind die Optionen über ihre Nummer erreichbar.',
 		'close_dropdown' => 'Menüs schließen',
 		'close_dropdown' => 'Menüs schließen',
@@ -169,9 +169,9 @@ return array(
 		'load_more' => 'Weitere Artikel laden',
 		'load_more' => 'Weitere Artikel laden',
 		'mark_favorite' => 'Als Favorit markieren',
 		'mark_favorite' => 'Als Favorit markieren',
 		'mark_read' => 'Als gelesen markieren',
 		'mark_read' => 'Als gelesen markieren',
-		'navigation' => 'Navigation',
+		'navigation' => 'Navigation',	// TODO - Translation
 		'navigation_help' => 'Mit der "Umschalttaste" finden die Tastenkombination auf Feeds Anwendung.<br/>Mit der "Alt-Taste" finden die Tastenkombination auf Kategorien Anwendung.',
 		'navigation_help' => 'Mit der "Umschalttaste" finden die Tastenkombination auf Feeds Anwendung.<br/>Mit der "Alt-Taste" finden die Tastenkombination auf Kategorien Anwendung.',
-		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	//TODO - Translation
+		'navigation_no_mod_help' => 'Die folgenden Navigationsverknüpfungen unterstützen keine Modifikatoren.',
 		'next_article' => 'Zum nächsten Artikel springen',
 		'next_article' => 'Zum nächsten Artikel springen',
 		'normal_view' => 'Wechsle zur normalen Ansicht',
 		'normal_view' => 'Wechsle zur normalen Ansicht',
 		'other_action' => 'Andere Aktionen',
 		'other_action' => 'Andere Aktionen',
@@ -180,12 +180,13 @@ return array(
 		'rss_view' => 'Öffne RSS Ansicht in neuem Tab',
 		'rss_view' => 'Öffne RSS Ansicht in neuem Tab',
 		'see_on_website' => 'Auf der Original-Webseite ansehen',
 		'see_on_website' => 'Auf der Original-Webseite ansehen',
 		'shift_for_all_read' => '+ <code>Umschalttaste</code>, um alle Artikel als gelesen zu markieren.',
 		'shift_for_all_read' => '+ <code>Umschalttaste</code>, um alle Artikel als gelesen zu markieren.',
-		'skip_next_article' => 'Focus next without opening',	//TODO - Translation
-		'skip_previous_article' => 'Focus previous without opening',	//TODO - Translation
+		'skip_next_article' => 'Nächsten markieren ohne zu öffnen',
+		'skip_previous_article' => 'Vorherigen markieren ohne zu öffnen',
 		'title' => 'Tastenkombination',
 		'title' => 'Tastenkombination',
 		'user_filter' => 'Auf Benutzerfilter zugreifen',
 		'user_filter' => 'Auf Benutzerfilter zugreifen',
 		'user_filter_help' => 'Wenn es nur einen Benutzerfilter gibt, wird dieser verwendet. Ansonsten sind die Filter über ihre Nummer erreichbar.',
 		'user_filter_help' => 'Wenn es nur einen Benutzerfilter gibt, wird dieser verwendet. Ansonsten sind die Filter über ihre Nummer erreichbar.',
 		'views' => 'Ansichten',
 		'views' => 'Ansichten',
+		'_' => 'Tastenkombination',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s Artikel (%s)',
 		'articles_and_size' => '%s Artikel (%s)',

+ 17 - 11
app/i18n/de/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Optimierung abgeschlossen',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'Sie haben nicht die Berechtigung, diese Seite aufzurufen',
 		'denied' => 'Sie haben nicht die Berechtigung, diese Seite aufzurufen',
 		'not_found' => 'Sie suchen nach einer Seite, die nicht existiert',
 		'not_found' => 'Sie suchen nach einer Seite, die nicht existiert',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'Optimierung abgeschlossen',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'Während der Konfiguration des Authentifikationssystems trat ein Fehler auf. Bitte versuchen Sie es später erneut.',
 			'not_set' => 'Während der Konfiguration des Authentifikationssystems trat ein Fehler auf. Bitte versuchen Sie es später erneut.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s kann nicht aktiviert werden. Für Details <a href="%s">prüfen Sie die FreshRSS-Protokolle</a>.',
 			'ko' => '%s kann nicht aktiviert werden. Für Details <a href="%s">prüfen Sie die FreshRSS-Protokolle</a>.',
 			'ok' => '%s ist jetzt aktiviert',
 			'ok' => '%s ist jetzt aktiviert',
 		),
 		),
-		'no_access' => 'Sie haben keinen Zugang zu %s',
 		'not_enabled' => '%s ist noch nicht aktiviert',
 		'not_enabled' => '%s ist noch nicht aktiviert',
 		'not_found' => '%s existiert nicht',
 		'not_found' => '%s existiert nicht',
+		'no_access' => 'Sie haben keinen Zugang zu %s',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'Die ZIP-Erweiterung fehlt auf Ihrem Server. Bitte versuchen Sie die Dateien eine nach der anderen zu exportieren.',
 		'export_no_zip_extension' => 'Die ZIP-Erweiterung fehlt auf Ihrem Server. Bitte versuchen Sie die Dateien eine nach der anderen zu exportieren.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'Die Kategorie ist geleert worden.',
 			'emptied' => 'Die Kategorie ist geleert worden.',
 			'error' => 'Die Kategorie kann nicht aktualisiert werden',
 			'error' => 'Die Kategorie kann nicht aktualisiert werden',
 			'name_exists' => 'Der Kategorie-Name existiert bereits.',
 			'name_exists' => 'Der Kategorie-Name existiert bereits.',
-			'no_id' => 'Sie müssen die ID der Kategorie präzisieren.',
-			'no_name' => 'Der Kategorie-Name kann nicht leer sein.',
 			'not_delete_default' => 'Sie können die Vorgabe-Kategorie nicht löschen!',
 			'not_delete_default' => 'Sie können die Vorgabe-Kategorie nicht löschen!',
 			'not_exist' => 'Die Kategorie existiert nicht!',
 			'not_exist' => 'Die Kategorie existiert nicht!',
+			'no_id' => 'Sie müssen die ID der Kategorie präzisieren.',
+			'no_name' => 'Der Kategorie-Name kann nicht leer sein.',
 			'over_max' => 'Sie haben Ihre Kategorien-Limite erreicht (%d)',
 			'over_max' => 'Sie haben Ihre Kategorien-Limite erreicht (%d)',
 			'updated' => 'Die Kategorie ist aktualisiert worden.',
 			'updated' => 'Die Kategorie ist aktualisiert worden.',
 		),
 		),
@@ -82,10 +88,10 @@ return array(
 			'error' => 'Der Feed kann nicht aktualisiert werden',
 			'error' => 'Der Feed kann nicht aktualisiert werden',
 			'internal_problem' => 'Der RSS-Feed konnte nicht hinzugefügt werden. Für Details <a href="%s">prüfen Sie die FreshRSS-Protokolle</a>.',
 			'internal_problem' => 'Der RSS-Feed konnte nicht hinzugefügt werden. Für Details <a href="%s">prüfen Sie die FreshRSS-Protokolle</a>.',
 			'invalid_url' => 'Die URL <em>%s</em> ist ungültig',
 			'invalid_url' => 'Die URL <em>%s</em> ist ungültig',
+			'not_added' => '<em>%s</em> konnte nicht hinzugefügt werden',
+			'no_refresh' => 'Es gibt keinen Feed zum Aktualisieren…',
 			'n_actualized' => 'Die %d Feeds sind aktualisiert worden',
 			'n_actualized' => 'Die %d Feeds sind aktualisiert worden',
 			'n_entries_deleted' => 'Die %d Artikel sind gelöscht worden',
 			'n_entries_deleted' => 'Die %d Artikel sind gelöscht worden',
-			'no_refresh' => 'Es gibt keinen Feed zum Aktualisieren…',
-			'not_added' => '<em>%s</em> konnte nicht hinzugefügt werden',
 			'over_max' => 'Sie haben Ihre Feeds-Limite erreicht (%d)',
 			'over_max' => 'Sie haben Ihre Feeds-Limite erreicht (%d)',
 			'updated' => 'Der Feed ist aktualisiert worden',
 			'updated' => 'Der Feed ist aktualisiert worden',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'Der Benutzer %s ist erstellt worden',
 			'error' => 'Der Benutzer %s kann nicht erstellt werden',
 			'error' => 'Der Benutzer %s kann nicht erstellt werden',
+			'_' => 'Der Benutzer %s ist erstellt worden',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'Der Benutzer %s ist gelöscht worden',
 			'error' => 'Der Benutzer %s kann nicht gelöscht werden',
 			'error' => 'Der Benutzer %s kann nicht gelöscht werden',
+			'_' => 'Der Benutzer %s ist gelöscht worden',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'Benutzer %s wurde aktualisiert',
 			'error' => 'Benutzer %s wurde nicht aktualisiert',
 			'error' => 'Benutzer %s wurde nicht aktualisiert',
+			'_' => 'Benutzer %s wurde aktualisiert',
 		),
 		),
 	),
 	),
 );
 );

+ 53 - 51
app/i18n/de/gen.php

@@ -3,7 +3,7 @@
 return array(
 return array(
 	'action' => array(
 	'action' => array(
 		'actualize' => 'Aktualisieren',
 		'actualize' => 'Aktualisieren',
-		'back' => '← Go back', //TODO - Translation
+		'back' => '← Zurück',
 		'back_to_rss_feeds' => '← Zurück zu Ihren RSS-Feeds gehen',
 		'back_to_rss_feeds' => '← Zurück zu Ihren RSS-Feeds gehen',
 		'cancel' => 'Abbrechen',
 		'cancel' => 'Abbrechen',
 		'create' => 'Erstellen',
 		'create' => 'Erstellen',
@@ -16,6 +16,7 @@ return array(
 		'manage' => 'Verwalten',
 		'manage' => 'Verwalten',
 		'mark_favorite' => 'Als Favorit markieren',
 		'mark_favorite' => 'Als Favorit markieren',
 		'mark_read' => 'Als gelesen markieren',
 		'mark_read' => 'Als gelesen markieren',
+		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Entfernen',
 		'remove' => 'Entfernen',
 		'see_website' => 'Webseite ansehen',
 		'see_website' => 'Webseite ansehen',
 		'submit' => 'Abschicken',
 		'submit' => 'Abschicken',
@@ -23,34 +24,34 @@ return array(
 		'update' => 'Aktualisieren',
 		'update' => 'Aktualisieren',
 	),
 	),
 	'auth' => array(
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.', // TODO - Translation
+		'accept_tos' => 'Ich akzeptiere die <a href="%s">Nutzungsbedingungen</a>.',
 		'email' => 'E-Mail-Adresse',
 		'email' => 'E-Mail-Adresse',
 		'keep_logged_in' => 'Eingeloggt bleiben <small>(%s Tage)</small>',
 		'keep_logged_in' => 'Eingeloggt bleiben <small>(%s Tage)</small>',
 		'login' => 'Anmelden',
 		'login' => 'Anmelden',
 		'logout' => 'Abmelden',
 		'logout' => 'Abmelden',
 		'password' => array(
 		'password' => array(
-			'_' => 'Passwort',
 			'format' => '<small>mindestens 7 Zeichen</small>',
 			'format' => '<small>mindestens 7 Zeichen</small>',
+			'_' => 'Passwort',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'Neuer Account',
 			'ask' => 'Erstelle einen Account?',
 			'ask' => 'Erstelle einen Account?',
 			'title' => 'Accounterstellung',
 			'title' => 'Accounterstellung',
+			'_' => 'Neuer Account',
 		),
 		),
 		'reset' => 'Zurücksetzen der Authentifizierung',
 		'reset' => 'Zurücksetzen der Authentifizierung',
 		'username' => array(
 		'username' => array(
-			'_' => 'Nutzername',
 			'admin' => 'Administrator-Nutzername',
 			'admin' => 'Administrator-Nutzername',
 			'format' => '<small>maximal 16 alphanumerische Zeichen</small>',
 			'format' => '<small>maximal 16 alphanumerische Zeichen</small>',
+			'_' => 'Nutzername',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',
+		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
 		'apr' => 'Apr',
 		'apr' => 'Apr',
-		'april' => 'April',
-		'Aug' => '\\A\\u\\g\\u\\s\\t',
+		'april' => 'April',	// TODO - Translation
+		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
 		'aug' => 'Aug',
 		'aug' => 'Aug',
-		'august' => 'August',
+		'august' => 'August',	// TODO - Translation
 		'before_yesterday' => 'Ältere Beiträge',
 		'before_yesterday' => 'Ältere Beiträge',
 		'Dec' => '\\D\\e\\z\\e\\m\\b\\e\\r',
 		'Dec' => '\\D\\e\\z\\e\\m\\b\\e\\r',
 		'dec' => 'Dez',
 		'dec' => 'Dez',
@@ -64,8 +65,8 @@ return array(
 		'Jan' => '\\J\\a\\n\\u\\a\\r',
 		'Jan' => '\\J\\a\\n\\u\\a\\r',
 		'jan' => 'Jan',
 		'jan' => 'Jan',
 		'january' => 'Januar',
 		'january' => 'Januar',
-		'Jul' => '\\J\\u\\l\\i',
 		'jul' => 'Jul',
 		'jul' => 'Jul',
+		'Jul' => '\\J\\u\\l\\i',
 		'july' => 'Juli',
 		'july' => 'Juli',
 		'Jun' => '\\J\\u\\n\\i',
 		'Jun' => '\\J\\u\\n\\i',
 		'jun' => 'Jun',
 		'jun' => 'Jun',
@@ -75,24 +76,24 @@ return array(
 		'last_month' => 'Letzter Monat',
 		'last_month' => 'Letzter Monat',
 		'last_week' => 'Letzte Woche',
 		'last_week' => 'Letzte Woche',
 		'last_year' => 'Letztes Jahr',
 		'last_year' => 'Letztes Jahr',
-		'Mar' => '\\M\\ä\\r\\z',
 		'mar' => 'Mär',
 		'mar' => 'Mär',
+		'Mar' => '\\M\\ä\\r\\z',
 		'march' => 'März',
 		'march' => 'März',
 		'May' => '\\M\\a\\i',
 		'May' => '\\M\\a\\i',
 		'may' => 'Mai',
 		'may' => 'Mai',
 		'may_' => 'Mai',
 		'may_' => 'Mai',
 		'mon' => 'Mo',
 		'mon' => 'Mo',
 		'month' => 'Monat(en)',
 		'month' => 'Monat(en)',
-		'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r',
+		'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r',	// TODO - Translation
 		'nov' => 'Nov',
 		'nov' => 'Nov',
-		'november' => 'November',
+		'november' => 'November',	// TODO - Translation
 		'Oct' => '\\O\\k\\t\\o\\b\\e\\r',
 		'Oct' => '\\O\\k\\t\\o\\b\\e\\r',
 		'oct' => 'Okt',
 		'oct' => 'Okt',
 		'october' => 'Oktober',
 		'october' => 'Oktober',
 		'sat' => 'Sa',
 		'sat' => 'Sa',
-		'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r',
+		'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r',	// TODO - Translation
 		'sep' => 'Sep',
 		'sep' => 'Sep',
-		'september' => 'September',
+		'september' => 'September',	// TODO - Translation
 		'sun' => 'So',
 		'sun' => 'So',
 		'thu' => 'Do',
 		'thu' => 'Do',
 		'today' => 'Heute',
 		'today' => 'Heute',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => 'Gestern',
 		'yesterday' => 'Gestern',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'Über FreshRSS',
 		'about' => 'Über FreshRSS',
+		'_' => 'FreshRSS',	// TODO - Translation
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Kategorie leeren',
 		'category_empty' => 'Kategorie leeren',
@@ -117,24 +118,25 @@ return array(
 		'should_be_activated' => 'JavaScript muss aktiviert sein',
 		'should_be_activated' => 'JavaScript muss aktiviert sein',
 	),
 	),
 	'lang' => array(
 	'lang' => array(
-		'cz' => 'Čeština',
-		'de' => 'Deutsch',
-		'en' => 'English',
-		'es' => 'Español',
-		'fr' => 'Français',
-		'he' => 'עברית',
-		'it' => 'Italiano',
-		'kr' => '한국어',
-		'nl' => 'Nederlands',
-		'oc' => 'Occitan',
-		'pt-br' => 'Português (Brasil)',
-		'ru' => 'Русский',
-		'tr' => 'Türkçe',
-		'zh-cn' => '简体中文',
+		'cz' => 'Čeština',	// TODO - Translation
+		'de' => 'Deutsch',	// TODO - Translation
+		'en' => 'English',	// TODO - Translation
+		'es' => 'Español',	// TODO - Translation
+		'fr' => 'Français',	// TODO - Translation
+		'he' => 'עברית',	// TODO - Translation
+		'it' => 'Italiano',	// TODO - Translation
+		'kr' => '한국어',	// TODO - Translation
+		'nl' => 'Nederlands',	// TODO - Translation
+		'oc' => 'Occitan',	// TODO - Translation
+		'pt-br' => 'Português (Brasil)',	// TODO - Translation
+		'ru' => 'Русский',	// TODO - Translation
+		'sk' => 'Slovenčina',	// TODO - Translation
+		'tr' => 'Türkçe',	// TODO - Translation
+		'zh-cn' => '简体中文',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Über',
 		'about' => 'Über',
-		'admin' => 'Administration',
+		'admin' => 'Administration',	// TODO - Translation
 		'archiving' => 'Archivierung',
 		'archiving' => 'Archivierung',
 		'authentication' => 'Authentifizierung',
 		'authentication' => 'Authentifizierung',
 		'check_install' => 'Installationsüberprüfung',
 		'check_install' => 'Installationsüberprüfung',
@@ -163,31 +165,31 @@ return array(
 		'previous' => 'Vorherige',
 		'previous' => 'Vorherige',
 	),
 	),
 	'period' => array(
 	'period' => array(
-		'days' => 'days',	//TODO - Translation
-		'hours' => 'hours',	//TODO - Translation
-		'months' => 'months',	//TODO - Translation
-		'weeks' => 'weeks',	//TODO - Translation
-		'years' => 'years',	//TODO - Translation
+		'days' => 'Tage',
+		'hours' => 'Stunden',
+		'months' => 'Monate',
+		'weeks' => 'Wochen',
+		'years' => 'Jahre',
 	),
 	),
 	'share' => array(
 	'share' => array(
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
 		'email' => 'E-Mail',
 		'email' => 'E-Mail',
-		'facebook' => 'Facebook',
-		'gnusocial' => 'GNU social',
-		'jdh' => 'Journal du hacker',
+		'facebook' => 'Facebook',	// TODO - Translation
+		'gnusocial' => 'GNU social',	// TODO - Translation
+		'jdh' => 'Journal du hacker',	// TODO - Translation
 		'Known' => 'Known-Seite (https://withknown.com)',
 		'Known' => 'Known-Seite (https://withknown.com)',
-		'lemmy' => 'Lemmy',
-		'linkedin' => 'LinkedIn',
-		'mastodon' => 'Mastodon',
-		'movim' => 'Movim',
-		'pinboard' => 'Pinboard',
-		'pocket' => 'Pocket',
+		'lemmy' => 'Lemmy',	// TODO - Translation
+		'linkedin' => 'LinkedIn',	// TODO - Translation
+		'mastodon' => 'Mastodon',	// TODO - Translation
+		'movim' => 'Movim',	// TODO - Translation
+		'pinboard' => 'Pinboard',	// TODO - Translation
+		'pocket' => 'Pocket',	// TODO - Translation
 		'print' => 'Drucken',
 		'print' => 'Drucken',
-		'shaarli' => 'Shaarli',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag v1',
-		'wallabagv2' => 'wallabag v2',
+		'shaarli' => 'Shaarli',	// TODO - Translation
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag v1',	// TODO - Translation
+		'wallabagv2' => 'wallabag v2',	// TODO - Translation
 	),
 	),
 	'short' => array(
 	'short' => array(
 		'attention' => 'Achtung!',
 		'attention' => 'Achtung!',

+ 11 - 11
app/i18n/de/index.php

@@ -2,35 +2,32 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'Über',
-		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// TODO - Translation
 		'bugs_reports' => 'Fehlerberichte',
 		'bugs_reports' => 'Fehlerberichte',
-		'credits' => 'Credits',
+		'credits' => 'Credits',	// TODO - Translation
 		'credits_content' => 'Einige Designelemente stammen von <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, obwohl FreshRSS dieses Framework nicht nutzt. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Icons</a> stammen vom <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> Font wurde von <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a> erstellt. FreshRSS basiert auf <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, einem PHP-Framework.',
 		'credits_content' => 'Einige Designelemente stammen von <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, obwohl FreshRSS dieses Framework nicht nutzt. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Icons</a> stammen vom <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> Font wurde von <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a> erstellt. FreshRSS basiert auf <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, einem PHP-Framework.',
 		'freshrss_description' => 'FreshRSS ist ein RSS-Feedsaggregator zum selbst hosten wie zum Beispiel <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> oder <a href="https://github.com/LeedRSS/Leed">Leed</a>. Er ist leicht und einfach zu handhaben und gleichzeitig ein leistungsstarkes und konfigurierbares Werkzeug.',
 		'freshrss_description' => 'FreshRSS ist ein RSS-Feedsaggregator zum selbst hosten wie zum Beispiel <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> oder <a href="https://github.com/LeedRSS/Leed">Leed</a>. Er ist leicht und einfach zu handhaben und gleichzeitig ein leistungsstarkes und konfigurierbares Werkzeug.',
-		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>',
+		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>',	// TODO - Translation
 		'license' => 'Lizenz',
 		'license' => 'Lizenz',
 		'project_website' => 'Projekt-Webseite',
 		'project_website' => 'Projekt-Webseite',
 		'title' => 'Über',
 		'title' => 'Über',
-		'version' => 'Version',
+		'version' => 'Version',	// TODO - Translation
 		'website' => 'Webseite',
 		'website' => 'Webseite',
-	),
-	'tos' => array(
-		'title' => 'Terms of Service', // TODO - Translation
+		'_' => 'Über',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Sie können Feeds hinzufügen.',
 		'add' => 'Sie können Feeds hinzufügen.',
 		'empty' => 'Es gibt keinen Artikel zum Anzeigen.',
 		'empty' => 'Es gibt keinen Artikel zum Anzeigen.',
 		'rss_of' => 'RSS-Feed von %s',
 		'rss_of' => 'RSS-Feed von %s',
 		'title' => 'Ihre RSS-Feeds',
 		'title' => 'Ihre RSS-Feeds',
-		'title_global' => 'Globale Ansicht',
 		'title_fav' => 'Ihre Favoriten',
 		'title_fav' => 'Ihre Favoriten',
+		'title_global' => 'Globale Ansicht',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Protokolle',
 		'clear' => 'Protokolle leeren',
 		'clear' => 'Protokolle leeren',
 		'empty' => 'Protokolldatei ist leer.',
 		'empty' => 'Protokolldatei ist leer.',
 		'title' => 'Protokolle',
 		'title' => 'Protokolle',
+		'_' => 'Protokolle',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Über FreshRSS',
 		'about' => 'Über FreshRSS',
@@ -56,11 +53,14 @@ return array(
 		'starred' => 'Nur Favoriten zeigen',
 		'starred' => 'Nur Favoriten zeigen',
 		'stats' => 'Statistiken',
 		'stats' => 'Statistiken',
 		'subscription' => 'Abonnementverwaltung',
 		'subscription' => 'Abonnementverwaltung',
-		'tags' => 'My labels',	//TODO - Translation
+		'tags' => 'Meine Tags',
 		'unread' => 'Nur ungelesene zeigen',
 		'unread' => 'Nur ungelesene zeigen',
 	),
 	),
 	'share' => 'Teilen',
 	'share' => 'Teilen',
 	'tag' => array(
 	'tag' => array(
 		'related' => 'Verwandte Tags',
 		'related' => 'Verwandte Tags',
 	),
 	),
+	'tos' => array(
+		'title' => 'Nutzungsbedingungen',
+	),
 );
 );

+ 7 - 7
app/i18n/de/install.php

@@ -17,20 +17,19 @@ return array(
 		'type' => 'Authentifizierungsmethode',
 		'type' => 'Authentifizierungsmethode',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'Datenbank',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'Datenbank-Konfiguration',
 			'ko' => 'Überprüfen Sie Ihre Datenbank-Information.',
 			'ko' => 'Überprüfen Sie Ihre Datenbank-Information.',
 			'ok' => 'Datenbank-Konfiguration ist gespeichert worden.',
 			'ok' => 'Datenbank-Konfiguration ist gespeichert worden.',
+			'_' => 'Datenbank-Konfiguration',
 		),
 		),
-		'host' => 'Host',
+		'host' => 'Host',	// TODO - Translation
 		'password' => 'SQL-Password',
 		'password' => 'SQL-Password',
 		'prefix' => 'Tabellen-Präfix',
 		'prefix' => 'Tabellen-Präfix',
 		'type' => 'Datenbank-Typ',
 		'type' => 'Datenbank-Typ',
 		'username' => 'SQL-Nutzername',
 		'username' => 'SQL-Nutzername',
+		'_' => 'Datenbank',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'Überprüfungen',
 		'already_installed' => 'Wir haben festgestellt, dass FreshRSS bereits installiert wurde!',
 		'already_installed' => 'Wir haben festgestellt, dass FreshRSS bereits installiert wurde!',
 		'cache' => array(
 		'cache' => array(
 			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>./data/cache</em>. Der HTTP-Server muss Schreibrechte besitzen.',
 			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>./data/cache</em>. Der HTTP-Server muss Schreibrechte besitzen.',
@@ -96,10 +95,11 @@ return array(
 			'nok' => 'Ihnen fehlt die benötigte Bibliothek um XML zu parsen.',
 			'nok' => 'Ihnen fehlt die benötigte Bibliothek um XML zu parsen.',
 			'ok' => 'Sie haben die benötigte Bibliothek um XML zu parsen.',
 			'ok' => 'Sie haben die benötigte Bibliothek um XML zu parsen.',
 		),
 		),
+		'_' => 'Überprüfungen',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'Allgemeine Konfiguration',
 		'ok' => 'Die allgemeine Konfiguration ist gespeichert worden.',
 		'ok' => 'Die allgemeine Konfiguration ist gespeichert worden.',
+		'_' => 'Allgemeine Konfiguration',
 	),
 	),
 	'congratulations' => 'Glückwunsch!',
 	'congratulations' => 'Glückwunsch!',
 	'default_user' => 'Nutzername des Standardbenutzers <small>(maximal 16 alphanumerische Zeichen)</small>',
 	'default_user' => 'Nutzername des Standardbenutzers <small>(maximal 16 alphanumerische Zeichen)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'Du wirst deine vorherige Konfiguration (Daten) verlieren FreshRSS. Bist du sicher, dass du fortfahren willst?',
 		'confirm_reinstall' => 'Du wirst deine vorherige Konfiguration (Daten) verlieren FreshRSS. Bist du sicher, dass du fortfahren willst?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'Sprache',
 		'choose' => 'Wählen Sie eine Sprache für FreshRSS',
 		'choose' => 'Wählen Sie eine Sprache für FreshRSS',
 		'defined' => 'Die Sprache ist festgelegt worden.',
 		'defined' => 'Die Sprache ist festgelegt worden.',
+		'_' => 'Sprache',
 	),
 	),
 	'not_deleted' => 'Etwas ist schiefgelaufen; Sie müssen die Datei <em>%s</em> manuell löschen.',
 	'not_deleted' => 'Etwas ist schiefgelaufen; Sie müssen die Datei <em>%s</em> manuell löschen.',
 	'ok' => 'Der Installationsvorgang war erfolgreich.',
 	'ok' => 'Der Installationsvorgang war erfolgreich.',
 	'step' => 'Schritt %d',
 	'step' => 'Schritt %d',
 	'steps' => 'Schritte',
 	'steps' => 'Schritte',
-	'title' => 'Installation · FreshRSS',
 	'this_is_the_end' => 'Das ist das Ende',
 	'this_is_the_end' => 'Das ist das Ende',
+	'title' => 'Installation · FreshRSS',	// TODO - Translation
 );
 );

+ 17 - 17
app/i18n/de/sub.php

@@ -3,23 +3,23 @@
 return array(
 return array(
 	'api' => array(
 	'api' => array(
 		'documentation' => 'Kopieren Sie die folgende URL, um sie in einem externen Tool zu verwenden.',
 		'documentation' => 'Kopieren Sie die folgende URL, um sie in einem externen Tool zu verwenden.',
-		'title' => 'API',
+		'title' => 'API',	// TODO - Translation
 	),
 	),
 	'bookmarklet' => array(
 	'bookmarklet' => array(
 		'documentation' => 'Ziehen Sie diese Schaltfläche auf Ihre Lesezeichen-Symbolleiste oder klicken Sie mit der rechten Maustaste darauf und wählen Sie "Als Lesezeichen hinzufügen". Klicken Sie dann auf einer beliebigen Seite, die Sie abonnieren möchten, auf die Schaltfläche "Abonnieren".',
 		'documentation' => 'Ziehen Sie diese Schaltfläche auf Ihre Lesezeichen-Symbolleiste oder klicken Sie mit der rechten Maustaste darauf und wählen Sie "Als Lesezeichen hinzufügen". Klicken Sie dann auf einer beliebigen Seite, die Sie abonnieren möchten, auf die Schaltfläche "Abonnieren".',
 		'label' => 'Abonnieren',
 		'label' => 'Abonnieren',
-		'title' => 'Bookmarklet',
+		'title' => 'Bookmarklet',	// TODO - Translation
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'Kategorie',
 		'add' => 'Eine Kategorie hinzufügen',
 		'add' => 'Eine Kategorie hinzufügen',
 		'archiving' => 'Archivierung',
 		'archiving' => 'Archivierung',
 		'empty' => 'Leere Kategorie',
 		'empty' => 'Leere Kategorie',
-		'information' => 'Information',
+		'information' => 'Information',	// TODO - Translation
 		'new' => 'Neue Kategorie',
 		'new' => 'Neue Kategorie',
-		'position' => 'Display position',	//TODO - Translation
-		'position_help' => 'To control category sort order',	//TODO - Translation
+		'position' => 'Reihenfolge',
+		'position_help' => 'Steuert die Kategoriesortierung',
 		'title' => 'Titel',
 		'title' => 'Titel',
+		'_' => 'Kategorie',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Einen RSS-Feed hinzufügen',
 		'add' => 'Einen RSS-Feed hinzufügen',
@@ -39,28 +39,27 @@ return array(
 		'empty' => 'Dieser Feed ist leer. Bitte stellen Sie sicher, dass er noch gepflegt wird.',
 		'empty' => 'Dieser Feed ist leer. Bitte stellen Sie sicher, dass er noch gepflegt wird.',
 		'error' => 'Dieser Feed ist auf ein Problem gestoßen. Bitte stellen Sie sicher, dass er immer lesbar ist und aktualisieren Sie ihn dann.',
 		'error' => 'Dieser Feed ist auf ein Problem gestoßen. Bitte stellen Sie sicher, dass er immer lesbar ist und aktualisieren Sie ihn dann.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filter actions',	//TODO - Translation
-			'help' => 'Write one search filter per line.',	//TODO - Translation
+			'help' => 'Ein Suchfilter pro Zeile',
+			'_' => 'Filteraktionen',
 		),
 		),
-		'information' => 'Information',
+		'information' => 'Information',	// TODO - Translation
 		'keep_min' => 'Minimale Anzahl an Artikeln, die behalten wird',
 		'keep_min' => 'Minimale Anzahl an Artikeln, die behalten wird',
 		'moved_category_deleted' => 'Wenn Sie eine Kategorie entfernen, werden deren Feeds automatisch in die Kategorie <em>%s</em> eingefügt.',
 		'moved_category_deleted' => 'Wenn Sie eine Kategorie entfernen, werden deren Feeds automatisch in die Kategorie <em>%s</em> eingefügt.',
 		'mute' => 'Stumm schalten',
 		'mute' => 'Stumm schalten',
 		'no_selected' => 'Kein Feed ausgewählt.',
 		'no_selected' => 'Kein Feed ausgewählt.',
 		'number_entries' => '%d Artikel',
 		'number_entries' => '%d Artikel',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Sichtbarkeit',
 			'archived' => 'Nicht anzeigen (archiviert)',
 			'archived' => 'Nicht anzeigen (archiviert)',
 			'main_stream' => 'In Haupt-Feeds zeigen',
 			'main_stream' => 'In Haupt-Feeds zeigen',
 			'normal' => 'Zeige in eigener Kategorie',
 			'normal' => 'Zeige in eigener Kategorie',
+			'_' => 'Sichtbarkeit',
 		),
 		),
-		'websub' => 'Sofortbenachrichtigung mit WebSub',
 		'show' => array(
 		'show' => array(
-			'all' => 'Show all feeds',	//TODO - Translation
-			'error' => 'Show only feeds with error',	//TODO - Translation
+			'all' => 'Alle Feeds zeigen',
+			'error' => 'Nur Feeds mit Fehlern zeigen',
 		),
 		),
 		'showing' => array(
 		'showing' => array(
-			'error' => 'Showing only feeds with error',	//TODO - Translation
+			'error' => 'Nur Feeds mit Fehlern zeigen',
 		),
 		),
 		'ssl_verify' => 'Überprüfe SSL Sicherheit',
 		'ssl_verify' => 'Überprüfe SSL Sicherheit',
 		'stats' => 'Statistiken',
 		'stats' => 'Statistiken',
@@ -72,17 +71,18 @@ return array(
 		'url' => 'Feed-URL',
 		'url' => 'Feed-URL',
 		'validator' => 'Überprüfen Sie die Gültigkeit des Feeds',
 		'validator' => 'Überprüfen Sie die Gültigkeit des Feeds',
 		'website' => 'Webseiten-URL',
 		'website' => 'Webseiten-URL',
+		'websub' => 'Sofortbenachrichtigung mit WebSub',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
 		'documentation' => 'Folge den <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">hier</a> beschriebenen Schritten um FreshRSS zu Deiner Firefox RSS-Reader Liste hinzuzufügen.',
 		'documentation' => 'Folge den <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">hier</a> beschriebenen Schritten um FreshRSS zu Deiner Firefox RSS-Reader Liste hinzuzufügen.',
-		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	//TODO - Translation
+		'obsolete_63' => 'Seit Version 63 hat Firefox die Möglichkeit entfernt, Dienste hinzuzufügen, die keine eigenständigen Anwendungen sind.',
 		'title' => 'Firefox RSS-Reader',
 		'title' => 'Firefox RSS-Reader',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => 'Exportieren',
 		'export' => 'Exportieren',
+		'export_labelled' => 'Artikel mit Labeln exportieren',
 		'export_opml' => 'Liste der Feeds exportieren (OPML)',
 		'export_opml' => 'Liste der Feeds exportieren (OPML)',
 		'export_starred' => 'Ihre Favoriten exportieren',
 		'export_starred' => 'Ihre Favoriten exportieren',
-		'export_labelled' => 'Export your labelled articles',	//TODO
 		'feed_list' => 'Liste von %s Artikeln',
 		'feed_list' => 'Liste von %s Artikeln',
 		'file_to_import' => 'Zu importierende Datei<br />(OPML, JSON oder ZIP)',
 		'file_to_import' => 'Zu importierende Datei<br />(OPML, JSON oder ZIP)',
 		'file_to_import_no_zip' => 'Zu importierende Datei<br />(OPML oder JSON)',
 		'file_to_import_no_zip' => 'Zu importierende Datei<br />(OPML oder JSON)',
@@ -97,8 +97,8 @@ return array(
 		'subscription_tools' => 'Abonnement-Tools',
 		'subscription_tools' => 'Abonnement-Tools',
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'Abonnementverwaltung',
 		'feed_management' => 'Verwaltung der RSS-Feeds',
 		'feed_management' => 'Verwaltung der RSS-Feeds',
 		'subscription_tools' => 'Abonnement-Tools',
 		'subscription_tools' => 'Abonnement-Tools',
+		'_' => 'Abonnementverwaltung',
 	),
 	),
 );
 );

+ 21 - 21
app/i18n/de/user.php

@@ -3,35 +3,35 @@
 return array(
 return array(
 	'email' => array(
 	'email' => array(
 		'feedback' => array(
 		'feedback' => array(
-			'invalid' => 'The email address is invalid.', //TODO - Translation
-			'required' => 'The email address is required.', //TODO - Translation
+			'invalid' => 'E-Mail-Adresse ungültig',
+			'required' => 'E-Mail ist ein Pflichtfeld',
 		),
 		),
 		'validation' => array(
 		'validation' => array(
-			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.', //TODO - Translation
-			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.', //TODO - Translation
+			'change_email' => 'Sie können Ihre E-Mail Adresse auf Ihrem <a href="%s">Profil</a> ändern.',
+			'email_sent_to' => 'Wir haben Ihnen eine E-Mail an <strong>%s</strong> gesendet. Bitte folgen Sie den Anweisungen um Ihre E-Mail Adresse zu verifizieren.',
 			'feedback' => array(
 			'feedback' => array(
-				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.', //TODO - Translation
-				'email_sent' => 'An email has been sent to your address.', //TODO - Translation
-				'error' => 'The email address failed to be validated.', //TODO - Translation
-				'ok' => 'The email address has been validated.', //TODO - Translation
-				'unneccessary' => 'The email address was already validated.', //TODO - Translation
-				'wrong_token' => 'The email address failed to be validated due to a wrong token.', //TODO - Translation
+				'email_failed' => 'Wir konnten Ihnen aufgrund einer Fehlkonfiguration des Servers keine E-Mail schicken.',
+				'email_sent' => 'Wir haben Ihnen eine E-Mail geschickt.',
+				'error' => 'Die E-Mail Adresse konnte nicht veifiziert werden.',
+				'ok' => 'Die E-Mail Adresse wurde verifiziert',
+				'unneccessary' => 'Die E-Mail Adresse wurde bereits verifiziert.',
+				'wrong_token' => 'Die E-Mail Adresse konnte aufgrund eines ungültigen Sicherheitstokens nicht verifiziert werden.',
 			),
 			),
-			'need_to' => 'You need to validate your email address before being able to use %s.', //TODO - Translation
-			'resend_email' => 'Resend the email', //TODO - Translation
-			'title' => 'Email address validation', //TODO - Translation
-		),
-	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation
+			'need_to' => 'Sie müssen zuerst Ihre E-Mail Adresse verifizieren, bevor Sie %s nutzen können.',
+			'resend_email' => 'E-Mail erneut versenden',
+			'title' => 'E-Mail Adressvalidierung',
 		),
 		),
 	),
 	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
-			'title' => 'You need to validate your account', //TODO - Translation
-			'welcome' => 'Welcome %s,', //TODO - Translation
-			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:', //TODO - Translation
+			'body' => 'Sie haben Sich gerade bei %s registriert und müssen nun nur noch Ihre E-Mail Adresse verifizieren. Bitte klicken Sie hier:',
+			'title' => 'Sie müssen Ihr Konto verifizieren',
+			'welcome' => 'Willkommen, %s,',
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'Sie müssen die Nutzungsbedingungen akzeptieren um sich zu registrieren.',
 		),
 		),
 	),
 	),
 );
 );

+ 16 - 10
app/i18n/en/admin.php

@@ -83,9 +83,9 @@ return array(
 			'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'PHP installation',
 			'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.',
 			'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.',
 			'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.',
 			'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.',
+			'_' => 'PHP installation',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'There are one or more missing tables in the database.',
 			'nok' => 'There are one or more missing tables in the database.',
@@ -116,8 +116,8 @@ return array(
 		'name' => 'Name',
 		'name' => 'Name',
 		'no_configure_view' => 'This extension cannot be configured.',
 		'no_configure_view' => 'This extension cannot be configured.',
 		'system' => array(
 		'system' => array(
-			'_' => 'System extensions',
 			'no_rights' => 'System extension (you have no rights on it)',
 			'no_rights' => 'System extension (you have no rights on it)',
+			'_' => 'System extensions',
 		),
 		),
 		'title' => 'Extensions',
 		'title' => 'Extensions',
 		'update' => 'Update available',
 		'update' => 'Update available',
@@ -125,7 +125,6 @@ return array(
 		'version' => 'Version',
 		'version' => 'Version',
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Statistics',
 		'all_feeds' => 'All feeds',
 		'all_feeds' => 'All feeds',
 		'category' => 'Category',
 		'category' => 'Category',
 		'entry_count' => 'Entry count',
 		'entry_count' => 'Entry count',
@@ -155,37 +154,44 @@ return array(
 		'status_unread' => 'Unread',
 		'status_unread' => 'Unread',
 		'title' => 'Statistics',
 		'title' => 'Statistics',
 		'top_feed' => 'Top ten feeds',
 		'top_feed' => 'Top ten feeds',
+		'_' => 'Statistics',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'System configuration',
 		'auto-update-url' => 'Auto-update server URL',
 		'auto-update-url' => 'Auto-update server URL',
-		'force_email_validation' => 'Force email addresses validation',
-		'instance-name' => 'Instance name',
-		'max-categories' => 'Categories per user limit',
-		'max-feeds' => 'Feeds per user limit',
 		'cookie-duration' => array(
 		'cookie-duration' => array(
 			'help' => 'in seconds',
 			'help' => 'in seconds',
 			'number' => 'Duration to keep logged in',
 			'number' => 'Duration to keep logged in',
 		),
 		),
+		'force_email_validation' => 'Force email addresses validation',
+		'instance-name' => 'Instance name',
+		'max-categories' => 'Categories per user limit',
+		'max-feeds' => 'Feeds per user limit',
 		'registration' => array(
 		'registration' => array(
 			'help' => '0 means that there is no account limit',
 			'help' => '0 means that there is no account limit',
 			'number' => 'Max number of accounts',
 			'number' => 'Max number of accounts',
 		),
 		),
+		'_' => 'System configuration',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'Update system',
 		'apply' => 'Apply',
 		'apply' => 'Apply',
 		'check' => 'Check for new updates',
 		'check' => 'Check for new updates',
 		'current_version' => 'Your current version of FreshRSS is %s.',
 		'current_version' => 'Your current version of FreshRSS is %s.',
 		'last' => 'Last verification: %s',
 		'last' => 'Last verification: %s',
 		'none' => 'No update to apply',
 		'none' => 'No update to apply',
 		'title' => 'Update system',
 		'title' => 'Update system',
+		'_' => 'Update system',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',
+		'article_count' => 'Articles',
+		'back_to_manage' => '← Return to user list',
 		'create' => 'Create new user',
 		'create' => 'Create new user',
+		'database_size' => 'Database size',
 		'delete_users' => 'Delete user',
 		'delete_users' => 'Delete user',
+		'email' => 'Email address',
+		'feed_count' => 'Feeds',
 		'language' => 'Language',
 		'language' => 'Language',
+		'list' => 'User list',
 		'number' => 'There is %d account created',
 		'number' => 'There is %d account created',
 		'numbers' => 'There are %d accounts created',
 		'numbers' => 'There are %d accounts created',
 		'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
 		'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
@@ -193,8 +199,8 @@ return array(
 		'selected' => 'Selected user',
 		'selected' => 'Selected user',
 		'title' => 'Manage users',
 		'title' => 'Manage users',
 		'update_users' => 'Update user',
 		'update_users' => 'Update user',
-		'user_list' => 'List of users',
 		'username' => 'Username',
 		'username' => 'Username',
 		'users' => 'Users',
 		'users' => 'Users',
+		'user_list' => 'List of users',
 	),
 	),
 );
 );

+ 16 - 15
app/i18n/en/conf.php

@@ -2,13 +2,14 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Archiving',
 		'delete_after' => 'Remove articles after',
 		'delete_after' => 'Remove articles after',
 		'exception' => 'Purge exception',
 		'exception' => 'Purge exception',
 		'help' => 'More options are available in the individual feed settings',
 		'help' => 'More options are available in the individual feed settings',
 		'keep_favourites' => 'Never delete favourites',
 		'keep_favourites' => 'Never delete favourites',
-		'keep_min_by_feed' => 'Minimum number of articles to keep by feed',
 		'keep_labels' => 'Never delete labels',
 		'keep_labels' => 'Never delete labels',
+		'keep_max' => 'Maximum number of articles to keep',
+		'keep_min_by_feed' => 'Minimum number of articles to keep by feed',
+		'keep_period' => 'Maximum age of articles to keep',
 		'keep_unreads' => 'Never delete unreads',
 		'keep_unreads' => 'Never delete unreads',
 		'maintenance' => 'Maintenance',
 		'maintenance' => 'Maintenance',
 		'optimize' => 'Optimise database',
 		'optimize' => 'Optimise database',
@@ -16,20 +17,18 @@ return array(
 		'policy' => 'Purge policy',
 		'policy' => 'Purge policy',
 		'policy_warning' => 'If no purge policy is selected, every article will be kept.',
 		'policy_warning' => 'If no purge policy is selected, every article will be kept.',
 		'purge_now' => 'Purge now',
 		'purge_now' => 'Purge now',
-		'keep_max' => 'Maximum number of articles to keep',
-		'keep_period' => 'Maximum age of articles to keep',
 		'title' => 'Archiving',
 		'title' => 'Archiving',
 		'ttl' => 'Do not automatically refresh more often than',
 		'ttl' => 'Do not automatically refresh more often than',
+		'_' => 'Archiving',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Display',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Bottom line',
 			'bottom_line' => 'Bottom line',
+			'display_authors' => 'Authors',
 			'entry' => 'Article icons',
 			'entry' => 'Article icons',
 			'publication_date' => 'Date of publication',
 			'publication_date' => 'Date of publication',
 			'related_tags' => 'Article tags',
 			'related_tags' => 'Article tags',
 			'sharing' => 'Sharing',
 			'sharing' => 'Sharing',
-			'display_authors' => 'Authors',
 			'top_line' => 'Top line',
 			'top_line' => 'Top line',
 		),
 		),
 		'language' => 'Language',
 		'language' => 'Language',
@@ -47,21 +46,22 @@ return array(
 			'no_limit' => 'No limit',
 			'no_limit' => 'No limit',
 			'thin' => 'Thin',
 			'thin' => 'Thin',
 		),
 		),
+		'_' => 'Display',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Profile management',
+		'api' => 'API management',
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Account deletion',
 			'warn' => 'Your account and all related data will be deleted.',
 			'warn' => 'Your account and all related data will be deleted.',
+			'_' => 'Account deletion',
 		),
 		),
 		'email' => 'Email address',
 		'email' => 'Email address',
 		'password_api' => 'API password<br /><small>(e.g., for mobile apps)</small>',
 		'password_api' => 'API password<br /><small>(e.g., for mobile apps)</small>',
 		'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
 		'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
 		'password_format' => 'At least 7 characters',
 		'password_format' => 'At least 7 characters',
 		'title' => 'Profile',
 		'title' => 'Profile',
+		'_' => 'Profile management',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'User queries',
 		'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.',
 		'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.',
 		'display' => 'Display user query results',
 		'display' => 'Display user query results',
 		'filter' => 'Filter applied:',
 		'filter' => 'Filter applied:',
@@ -69,8 +69,8 @@ return array(
 		'get_category' => 'Display "%s" category',
 		'get_category' => 'Display "%s" category',
 		'get_favorite' => 'Display favourite articles',
 		'get_favorite' => 'Display favourite articles',
 		'get_feed' => 'Display "%s" feed',
 		'get_feed' => 'Display "%s" feed',
-		'no_filter' => 'No filter',
 		'none' => 'You haven’t created any user queries yet.',
 		'none' => 'You haven’t created any user queries yet.',
+		'no_filter' => 'No filter',
 		'number' => 'Query n°%d',
 		'number' => 'Query n°%d',
 		'order_asc' => 'Display oldest articles first',
 		'order_asc' => 'Display oldest articles first',
 		'order_desc' => 'Display newest articles first',
 		'order_desc' => 'Display newest articles first',
@@ -93,9 +93,9 @@ return array(
 		'state_14' => 'Display unread articles',
 		'state_14' => 'Display unread articles',
 		'state_15' => 'Display all articles',
 		'state_15' => 'Display all articles',
 		'title' => 'User queries',
 		'title' => 'User queries',
+		'_' => 'User queries',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Reading',
 		'after_onread' => 'After “mark all as read”,',
 		'after_onread' => 'After “mark all as read”,',
 		'articles_per_page' => 'Number of articles per page',
 		'articles_per_page' => 'Number of articles per page',
 		'auto_load_more' => 'Load more articles at the page bottom',
 		'auto_load_more' => 'Load more articles at the page bottom',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'Mark article as read…',
 			'when' => 'Mark article as read…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Articles to display',
 			'adaptive' => 'Adjust showing',
 			'adaptive' => 'Adjust showing',
 			'all_articles' => 'Show all articles',
 			'all_articles' => 'Show all articles',
 			'unread' => 'Show only unread',
 			'unread' => 'Show only unread',
+			'_' => 'Articles to display',
 		),
 		),
 		'sides_close_article' => 'Clicking outside of article text area closes the article',
 		'sides_close_article' => 'Clicking outside of article text area closes the article',
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Sort order',
 			'newer_first' => 'Newest first',
 			'newer_first' => 'Newest first',
 			'older_first' => 'Oldest first',
 			'older_first' => 'Oldest first',
+			'_' => 'Sort order',
 		),
 		),
 		'sticky_post' => 'Stick the article to the top when opened',
 		'sticky_post' => 'Stick the article to the top when opened',
 		'title' => 'Reading',
 		'title' => 'Reading',
@@ -135,9 +135,9 @@ return array(
 			'normal' => 'Normal view',
 			'normal' => 'Normal view',
 			'reader' => 'Reading view',
 			'reader' => 'Reading view',
 		),
 		),
+		'_' => 'Reading',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Sharing',
 		'add' => 'Add a sharing method',
 		'add' => 'Add a sharing method',
 		'blogotext' => 'Blogotext',
 		'blogotext' => 'Blogotext',
 		'diaspora' => 'Diaspora*',
 		'diaspora' => 'Diaspora*',
@@ -152,9 +152,9 @@ return array(
 		'title' => 'Sharing',
 		'title' => 'Sharing',
 		'twitter' => 'Twitter',
 		'twitter' => 'Twitter',
 		'wallabag' => 'wallabag',
 		'wallabag' => 'wallabag',
+		'_' => 'Sharing',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Shortcuts',
 		'article_action' => 'Article actions',
 		'article_action' => 'Article actions',
 		'auto_share' => 'Share',
 		'auto_share' => 'Share',
 		'auto_share_help' => 'If there is only one sharing mode, it is used. Otherwise, modes are accessible by their number.',
 		'auto_share_help' => 'If there is only one sharing mode, it is used. Otherwise, modes are accessible by their number.',
@@ -186,6 +186,7 @@ return array(
 		'user_filter' => 'Access user queries',
 		'user_filter' => 'Access user queries',
 		'user_filter_help' => 'If there is only one user query, it is used. Otherwise, queries are accessible by their number.',
 		'user_filter_help' => 'If there is only one user query, it is used. Otherwise, queries are accessible by their number.',
 		'views' => 'Views',
 		'views' => 'Views',
+		'_' => 'Shortcuts',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',

+ 17 - 11
app/i18n/en/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Optimization complete',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'You don’t have permission to access this page',
 		'denied' => 'You don’t have permission to access this page',
 		'not_found' => 'You are looking for a page which doesn’t exist',
 		'not_found' => 'You are looking for a page which doesn’t exist',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'Optimization complete',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',
+			'updated' => 'Your password has been modified',
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'A problem occured during authentication system configuration. Please retry later.',
 			'not_set' => 'A problem occured during authentication system configuration. Please retry later.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s cannot be enabled. <a href="%s">Check FreshRSS logs</a> for details.',
 			'ko' => '%s cannot be enabled. <a href="%s">Check FreshRSS logs</a> for details.',
 			'ok' => '%s is now enabled',
 			'ok' => '%s is now enabled',
 		),
 		),
-		'no_access' => 'You have no access on %s',
 		'not_enabled' => '%s is not enabled',
 		'not_enabled' => '%s is not enabled',
 		'not_found' => '%s does not exist',
 		'not_found' => '%s does not exist',
+		'no_access' => 'You have no access on %s',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'ZIP extension is not present on your server. Please try to export files one by one.',
 		'export_no_zip_extension' => 'ZIP extension is not present on your server. Please try to export files one by one.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'Category has been emptied',
 			'emptied' => 'Category has been emptied',
 			'error' => 'Category cannot be updated',
 			'error' => 'Category cannot be updated',
 			'name_exists' => 'Category name already exists.',
 			'name_exists' => 'Category name already exists.',
-			'no_id' => 'You must specify the id of the category.',
-			'no_name' => 'Category name cannot be empty.',
 			'not_delete_default' => 'You cannot delete the default category!',
 			'not_delete_default' => 'You cannot delete the default category!',
 			'not_exist' => 'The category does not exist!',
 			'not_exist' => 'The category does not exist!',
+			'no_id' => 'You must specify the id of the category.',
+			'no_name' => 'Category name cannot be empty.',
 			'over_max' => 'You have reached your limit of categories (%d)',
 			'over_max' => 'You have reached your limit of categories (%d)',
 			'updated' => 'Category has been updated.',
 			'updated' => 'Category has been updated.',
 		),
 		),
@@ -82,10 +88,10 @@ return array(
 			'error' => 'Feed cannot be updated',
 			'error' => 'Feed cannot be updated',
 			'internal_problem' => 'The newsfeed could not be added. <a href="%s">Check FreshRSS logs</a> for details. You can try force adding by appending <code>#force_feed</code> to the URL.',
 			'internal_problem' => 'The newsfeed could not be added. <a href="%s">Check FreshRSS logs</a> for details. You can try force adding by appending <code>#force_feed</code> to the URL.',
 			'invalid_url' => 'URL <em>%s</em> is invalid',
 			'invalid_url' => 'URL <em>%s</em> is invalid',
+			'not_added' => '<em>%s</em> could not be added',
+			'no_refresh' => 'There is no feed to refresh…',
 			'n_actualized' => '%d feeds have been updated',
 			'n_actualized' => '%d feeds have been updated',
 			'n_entries_deleted' => '%d articles have been deleted',
 			'n_entries_deleted' => '%d articles have been deleted',
-			'no_refresh' => 'There is no feed to refresh…',
-			'not_added' => '<em>%s</em> could not be added',
 			'over_max' => 'You have reached your limit of feeds (%d)',
 			'over_max' => 'You have reached your limit of feeds (%d)',
 			'updated' => 'Feed has been updated',
 			'updated' => 'Feed has been updated',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'User %s has been created',
 			'error' => 'User %s cannot be created',
 			'error' => 'User %s cannot be created',
+			'_' => 'User %s has been created',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'User %s has been deleted',
 			'error' => 'User %s cannot be deleted',
 			'error' => 'User %s cannot be deleted',
+			'_' => 'User %s has been deleted',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'User %s has been updated',
 			'error' => 'User %s has not been updated',
 			'error' => 'User %s has not been updated',
+			'_' => 'User %s has been updated',
 		),
 		),
 	),
 	),
 );
 );

+ 8 - 7
app/i18n/en/gen.php

@@ -16,6 +16,7 @@ return array(
 		'manage' => 'Manage',
 		'manage' => 'Manage',
 		'mark_favorite' => 'Mark as favourite',
 		'mark_favorite' => 'Mark as favourite',
 		'mark_read' => 'Mark as read',
 		'mark_read' => 'Mark as read',
+		'purge' => 'Purge',
 		'remove' => 'Remove',
 		'remove' => 'Remove',
 		'see_website' => 'See website',
 		'see_website' => 'See website',
 		'submit' => 'Submit',
 		'submit' => 'Submit',
@@ -29,19 +30,19 @@ return array(
 		'login' => 'Login',
 		'login' => 'Login',
 		'logout' => 'Logout',
 		'logout' => 'Logout',
 		'password' => array(
 		'password' => array(
-			'_' => 'Password',
 			'format' => '<small>At least 7 characters</small>',
 			'format' => '<small>At least 7 characters</small>',
+			'_' => 'Password',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'New account',
 			'ask' => 'Create an account?',
 			'ask' => 'Create an account?',
 			'title' => 'Account creation',
 			'title' => 'Account creation',
+			'_' => 'New account',
 		),
 		),
 		'reset' => 'Authentication reset',
 		'reset' => 'Authentication reset',
 		'username' => array(
 		'username' => array(
-			'_' => 'Username',
 			'admin' => 'Administrator username',
 			'admin' => 'Administrator username',
 			'format' => '<small>maximum 16 alphanumeric characters</small>',
 			'format' => '<small>maximum 16 alphanumeric characters</small>',
+			'_' => 'Username',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -64,8 +65,8 @@ return array(
 		'Jan' => '\\J\\a\\n\\u\\a\\r\\y',
 		'Jan' => '\\J\\a\\n\\u\\a\\r\\y',
 		'jan' => 'Jan.',
 		'jan' => 'Jan.',
 		'january' => 'January',
 		'january' => 'January',
-		'Jul' => '\\J\\u\\l\\y',
 		'jul' => 'July',
 		'jul' => 'July',
+		'Jul' => '\\J\\u\\l\\y',
 		'july' => 'July',
 		'july' => 'July',
 		'Jun' => '\\J\\u\\n\\e',
 		'Jun' => '\\J\\u\\n\\e',
 		'jun' => 'June',
 		'jun' => 'June',
@@ -75,8 +76,8 @@ return array(
 		'last_month' => 'Last month',
 		'last_month' => 'Last month',
 		'last_week' => 'Last week',
 		'last_week' => 'Last week',
 		'last_year' => 'Last year',
 		'last_year' => 'Last year',
-		'Mar' => '\\M\\a\\r\\c\\h',
 		'mar' => 'Mar.',
 		'mar' => 'Mar.',
+		'Mar' => '\\M\\a\\r\\c\\h',
 		'march' => 'March',
 		'march' => 'March',
 		'May' => '\\M\\a\\y',
 		'May' => '\\M\\a\\y',
 		'may' => 'May',
 		'may' => 'May',
@@ -89,8 +90,8 @@ return array(
 		'Oct' => '\\O\\c\\t\\o\\b\\e\\r',
 		'Oct' => '\\O\\c\\t\\o\\b\\e\\r',
 		'oct' => 'Oct.',
 		'oct' => 'Oct.',
 		'october' => 'October',
 		'october' => 'October',
-		'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r',
 		'sat' => 'Sat',
 		'sat' => 'Sat',
+		'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r',
 		'sep' => 'Sept.',
 		'sep' => 'Sept.',
 		'september' => 'September',
 		'september' => 'September',
 		'sun' => 'Sun',
 		'sun' => 'Sun',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => 'Yesterday',
 		'yesterday' => 'Yesterday',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'About FreshRSS',
 		'about' => 'About FreshRSS',
+		'_' => 'FreshRSS',
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Empty category',
 		'category_empty' => 'Empty category',

+ 6 - 6
app/i18n/en/index.php

@@ -2,7 +2,6 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'About',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'bugs_reports' => 'Bugs reports',
 		'bugs_reports' => 'Bugs reports',
 		'credits' => 'Credits',
 		'credits' => 'Credits',
@@ -14,23 +13,21 @@ return array(
 		'title' => 'About',
 		'title' => 'About',
 		'version' => 'Version',
 		'version' => 'Version',
 		'website' => 'Website',
 		'website' => 'Website',
-	),
-	'tos' => array(
-		'title' => 'Terms of Service',
+		'_' => 'About',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'You may add some feeds.',
 		'add' => 'You may add some feeds.',
 		'empty' => 'There is no article to show.',
 		'empty' => 'There is no article to show.',
 		'rss_of' => 'RSS feed of %s',
 		'rss_of' => 'RSS feed of %s',
 		'title' => 'Your RSS feeds',
 		'title' => 'Your RSS feeds',
-		'title_global' => 'Global view',
 		'title_fav' => 'Your favourites',
 		'title_fav' => 'Your favourites',
+		'title_global' => 'Global view',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Logs',
 		'clear' => 'Clear the logs',
 		'clear' => 'Clear the logs',
 		'empty' => 'Log file is empty',
 		'empty' => 'Log file is empty',
 		'title' => 'Logs',
 		'title' => 'Logs',
+		'_' => 'Logs',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'About FreshRSS',
 		'about' => 'About FreshRSS',
@@ -63,4 +60,7 @@ return array(
 	'tag' => array(
 	'tag' => array(
 		'related' => 'Article tags',
 		'related' => 'Article tags',
 	),
 	),
+	'tos' => array(
+		'title' => 'Terms of Service',
+	),
 );
 );

+ 6 - 6
app/i18n/en/install.php

@@ -17,20 +17,19 @@ return array(
 		'type' => 'Authentication method',
 		'type' => 'Authentication method',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'Database',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'Database configuration',
 			'ko' => 'Verify your database information.',
 			'ko' => 'Verify your database information.',
 			'ok' => 'Database configuration has been saved.',
 			'ok' => 'Database configuration has been saved.',
+			'_' => 'Database configuration',
 		),
 		),
 		'host' => 'Host',
 		'host' => 'Host',
 		'password' => 'Database password',
 		'password' => 'Database password',
 		'prefix' => 'Table prefix',
 		'prefix' => 'Table prefix',
 		'type' => 'Type of database',
 		'type' => 'Type of database',
 		'username' => 'Database username',
 		'username' => 'Database username',
+		'_' => 'Database',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'Checks',
 		'already_installed' => 'We have detected that FreshRSS is already installed!',
 		'already_installed' => 'We have detected that FreshRSS is already installed!',
 		'cache' => array(
 		'cache' => array(
 			'nok' => 'Check permissions on <em>./data/cache</em> directory. HTTP server must have rights to write into',
 			'nok' => 'Check permissions on <em>./data/cache</em> directory. HTTP server must have rights to write into',
@@ -96,10 +95,11 @@ return array(
 			'nok' => 'Cannot find the required library to parse XML.',
 			'nok' => 'Cannot find the required library to parse XML.',
 			'ok' => 'You have the required library to parse XML.',
 			'ok' => 'You have the required library to parse XML.',
 		),
 		),
+		'_' => 'Checks',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'General configuration',
 		'ok' => 'General configuration has been saved.',
 		'ok' => 'General configuration has been saved.',
+		'_' => 'General configuration',
 	),
 	),
 	'congratulations' => 'Congratulations!',
 	'congratulations' => 'Congratulations!',
 	'default_user' => 'Username of the default user <small>(maximum 16 alphanumeric characters)</small>',
 	'default_user' => 'Username of the default user <small>(maximum 16 alphanumeric characters)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?',
 		'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'Language',
 		'choose' => 'Choose a language for FreshRSS',
 		'choose' => 'Choose a language for FreshRSS',
 		'defined' => 'Language has been defined.',
 		'defined' => 'Language has been defined.',
+		'_' => 'Language',
 	),
 	),
 	'not_deleted' => 'Something went wrong; you must delete the file <em>%s</em> manually.',
 	'not_deleted' => 'Something went wrong; you must delete the file <em>%s</em> manually.',
 	'ok' => 'The installation process was successful.',
 	'ok' => 'The installation process was successful.',
 	'step' => 'step %d',
 	'step' => 'step %d',
 	'steps' => 'Steps',
 	'steps' => 'Steps',
-	'title' => 'Installation · FreshRSS',
 	'this_is_the_end' => 'This is the end',
 	'this_is_the_end' => 'This is the end',
+	'title' => 'Installation · FreshRSS',
 );
 );

+ 6 - 6
app/i18n/en/sub.php

@@ -11,7 +11,6 @@ return array(
 		'title' => 'Bookmarklet',
 		'title' => 'Bookmarklet',
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'Category',
 		'add' => 'Add a category',
 		'add' => 'Add a category',
 		'archiving' => 'Archiving',
 		'archiving' => 'Archiving',
 		'empty' => 'Empty category',
 		'empty' => 'Empty category',
@@ -20,6 +19,7 @@ return array(
 		'position' => 'Display position',
 		'position' => 'Display position',
 		'position_help' => 'To control category sort order',
 		'position_help' => 'To control category sort order',
 		'title' => 'Title',
 		'title' => 'Title',
+		'_' => 'Category',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Add a RSS feed',
 		'add' => 'Add a RSS feed',
@@ -39,8 +39,8 @@ return array(
 		'empty' => 'This feed is empty. Please verify that it is still maintained.',
 		'empty' => 'This feed is empty. Please verify that it is still maintained.',
 		'error' => 'This feed has encountered a problem. Please verify that it is always reachable then update it.',
 		'error' => 'This feed has encountered a problem. Please verify that it is always reachable then update it.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filter actions',
 			'help' => 'Write one search filter per line.',
 			'help' => 'Write one search filter per line.',
+			'_' => 'Filter actions',
 		),
 		),
 		'information' => 'Information',
 		'information' => 'Information',
 		'keep_min' => 'Minimum number of articles to keep',
 		'keep_min' => 'Minimum number of articles to keep',
@@ -49,12 +49,11 @@ return array(
 		'no_selected' => 'No feed selected.',
 		'no_selected' => 'No feed selected.',
 		'number_entries' => '%d articles',
 		'number_entries' => '%d articles',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Visibility',
 			'archived' => 'Do not show (archived)',
 			'archived' => 'Do not show (archived)',
 			'main_stream' => 'Show in main stream',
 			'main_stream' => 'Show in main stream',
 			'normal' => 'Show in its category',
 			'normal' => 'Show in its category',
+			'_' => 'Visibility',
 		),
 		),
-		'websub' => 'Instant notification with WebSub',
 		'show' => array(
 		'show' => array(
 			'all' => 'Show all feeds',
 			'all' => 'Show all feeds',
 			'error' => 'Show only feeds with error',
 			'error' => 'Show only feeds with error',
@@ -72,6 +71,7 @@ return array(
 		'url' => 'Feed URL',
 		'url' => 'Feed URL',
 		'validator' => 'Check the validity of the feed',
 		'validator' => 'Check the validity of the feed',
 		'website' => 'Website URL',
 		'website' => 'Website URL',
+		'websub' => 'Instant notification with WebSub',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
 		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',
 		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',
@@ -80,9 +80,9 @@ return array(
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => 'Export',
 		'export' => 'Export',
+		'export_labelled' => 'Export your labelled articles',
 		'export_opml' => 'Export list of feeds (OPML)',
 		'export_opml' => 'Export list of feeds (OPML)',
 		'export_starred' => 'Export your favourites',
 		'export_starred' => 'Export your favourites',
-		'export_labelled' => 'Export your labelled articles',
 		'feed_list' => 'List of %s articles',
 		'feed_list' => 'List of %s articles',
 		'file_to_import' => 'File to import<br />(OPML, JSON or ZIP)',
 		'file_to_import' => 'File to import<br />(OPML, JSON or ZIP)',
 		'file_to_import_no_zip' => 'File to import<br />(OPML or JSON)',
 		'file_to_import_no_zip' => 'File to import<br />(OPML or JSON)',
@@ -97,8 +97,8 @@ return array(
 		'subscription_tools' => 'Subscription tools',
 		'subscription_tools' => 'Subscription tools',
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'Subscriptions management',
 		'feed_management' => 'RSS feeds management',
 		'feed_management' => 'RSS feeds management',
 		'subscription_tools' => 'Subscription tools',
 		'subscription_tools' => 'Subscription tools',
+		'_' => 'Subscriptions management',
 	),
 	),
 );
 );

+ 6 - 6
app/i18n/en/user.php

@@ -22,16 +22,16 @@ return array(
 			'title' => 'Email address validation',
 			'title' => 'Email address validation',
 		),
 		),
 	),
 	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.',
-		),
-	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
+			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:',
 			'title' => 'You need to validate your account',
 			'title' => 'You need to validate your account',
 			'welcome' => 'Welcome %s,',
 			'welcome' => 'Welcome %s,',
-			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:',
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'You must accept the Terms of Service to be able to register.',
 		),
 		),
 	),
 	),
 );
 );

+ 31 - 25
app/i18n/es/admin.php

@@ -67,8 +67,8 @@ return array(
 			'ok' => 'Dispones de la extensión JSON.',
 			'ok' => 'Dispones de la extensión JSON.',
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
 			'nok' => 'No se ha podido localizar el entorno Minz.',
 			'nok' => 'No se ha podido localizar el entorno Minz.',
@@ -83,9 +83,9 @@ return array(
 			'ok' => 'Dispones de PDO y, al menos, de uno de los controladores compatibles (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => 'Dispones de PDO y, al menos, de uno de los controladores compatibles (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'Instalación PHP',
 			'nok' => 'Dispones de la versión PHP %s pero FreshRSS requiere de, al menos, la versión %s.',
 			'nok' => 'Dispones de la versión PHP %s pero FreshRSS requiere de, al menos, la versión %s.',
 			'ok' => 'Dispones de la versión PHP %s, que es compatible con FreshRSS.',
 			'ok' => 'Dispones de la versión PHP %s, que es compatible con FreshRSS.',
+			'_' => 'Instalación PHP',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'Falta al menos una tabla en la base de datos.',
 			'nok' => 'Falta al menos una tabla en la base de datos.',
@@ -106,26 +106,25 @@ return array(
 		),
 		),
 	),
 	),
 	'extensions' => array(
 	'extensions' => array(
-		'author' => 'Author',	//TODO - Translation
-		'community' => 'Available community extensions',	//TODO - Translation
-		'description' => 'Description',	//TODO - Translation
+		'author' => 'Author',	// TODO - Translation
+		'community' => 'Available community extensions',	// TODO - Translation
+		'description' => 'Description',	// TODO - Translation
 		'disabled' => 'Desactivado',
 		'disabled' => 'Desactivado',
 		'empty_list' => 'No hay extensiones instaladas',
 		'empty_list' => 'No hay extensiones instaladas',
 		'enabled' => 'Activado',
 		'enabled' => 'Activado',
-		'latest' => 'Installed',	//TODO - Translation
-		'name' => 'Name',	//TODO - Translation
+		'latest' => 'Installed',	// TODO - Translation
+		'name' => 'Name',	// TODO - Translation
 		'no_configure_view' => 'Esta extensión no puede ser configurada.',
 		'no_configure_view' => 'Esta extensión no puede ser configurada.',
 		'system' => array(
 		'system' => array(
-			'_' => 'Sistema de extensiones',
 			'no_rights' => 'Sistema de extensiones (careces de los permisos necesarios)',
 			'no_rights' => 'Sistema de extensiones (careces de los permisos necesarios)',
+			'_' => 'Sistema de extensiones',
 		),
 		),
 		'title' => 'Extensiones',
 		'title' => 'Extensiones',
-		'update' => 'Update available',	//TODO - Translation
+		'update' => 'Update available',	// TODO - Translation
 		'user' => 'Extensiones de usuario',
 		'user' => 'Extensiones de usuario',
-		'version' => 'Version',	//TODO - Translation
+		'version' => 'Version',	// TODO - Translation
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Estadísticas',
 		'all_feeds' => 'Todas las fuentes',
 		'all_feeds' => 'Todas las fuentes',
 		'category' => 'Categoría',
 		'category' => 'Categoría',
 		'entry_count' => 'Cómputo total',
 		'entry_count' => 'Cómputo total',
@@ -151,50 +150,57 @@ return array(
 		'repartition' => 'Reprto de artículos',
 		'repartition' => 'Reprto de artículos',
 		'status_favorites' => 'Favoritos',
 		'status_favorites' => 'Favoritos',
 		'status_read' => 'Leídos',
 		'status_read' => 'Leídos',
-		'status_total' => 'Total',
+		'status_total' => 'Total',	// TODO - Translation
 		'status_unread' => 'Pendientes',
 		'status_unread' => 'Pendientes',
 		'title' => 'Estadísticas',
 		'title' => 'Estadísticas',
 		'top_feed' => 'Las 10 fuentes más activas',
 		'top_feed' => 'Las 10 fuentes más activas',
+		'_' => 'Estadísticas',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'Configuración del sistema',
 		'auto-update-url' => 'URL de auto-actualización',
 		'auto-update-url' => 'URL de auto-actualización',
-		'force_email_validation' => 'Force email addresses validation', //TODO - Translation
+		'cookie-duration' => array(
+			'help' => 'in seconds',	// TODO - Translation
+			'number' => 'Duration to keep logged in',	// TODO - Translation
+		),
+		'force_email_validation' => 'Force email addresses validation',	// TODO - Translation
 		'instance-name' => 'Nombre de la fuente',
 		'instance-name' => 'Nombre de la fuente',
 		'max-categories' => 'Límite de categorías por usuario',
 		'max-categories' => 'Límite de categorías por usuario',
 		'max-feeds' => 'Límite de fuentes por usuario',
 		'max-feeds' => 'Límite de fuentes por usuario',
-		'cookie-duration' => array(
-			'help' => 'in seconds', // @todo translate
-			'number' => 'Duration to keep logged in', // @todo translate
-		),
 		'registration' => array(
 		'registration' => array(
 			'help' => '0 significa que no hay límite en la cuenta',
 			'help' => '0 significa que no hay límite en la cuenta',
 			'number' => 'Número máximo de cuentas',
 			'number' => 'Número máximo de cuentas',
 		),
 		),
+		'_' => 'Configuración del sistema',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'Actualizar sistema',
 		'apply' => 'Aplicar',
 		'apply' => 'Aplicar',
 		'check' => 'Buscar actualizaciones',
 		'check' => 'Buscar actualizaciones',
 		'current_version' => 'Dispones de la versión %s de FreshRSS.',
 		'current_version' => 'Dispones de la versión %s de FreshRSS.',
 		'last' => 'Última comprobación: %s',
 		'last' => 'Última comprobación: %s',
 		'none' => 'No hay actualizaciones disponibles',
 		'none' => 'No hay actualizaciones disponibles',
 		'title' => 'Actualizar sistema',
 		'title' => 'Actualizar sistema',
+		'_' => 'Actualizar sistema',
 	),
 	),
 	'user' => array(
 	'user' => array(
-		'articles_and_size' => '%s articles (%s)',
+		'articles_and_size' => '%s articles (%s)',	// TODO - Translation
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => 'Crear nuevo usuario',
 		'create' => 'Crear nuevo usuario',
-		'delete_users' => 'Delete user',	//TODO - Translation
+		'database_size' => 'Database size',	// TODO - Translation
+		'delete_users' => 'Delete user',	// TODO - Translation
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => 'Idioma',
 		'language' => 'Idioma',
+		'list' => 'User list',	// TODO - Translation
 		'number' => 'Hay %d cuenta creada',
 		'number' => 'Hay %d cuenta creada',
 		'numbers' => 'Hay %d cuentas creadas',
 		'numbers' => 'Hay %d cuentas creadas',
 		'password_form' => 'Contraseña<br /><small>(para el método de identificación por formulario web)</small>',
 		'password_form' => 'Contraseña<br /><small>(para el método de identificación por formulario web)</small>',
 		'password_format' => 'Mínimo de 7 caracteres',
 		'password_format' => 'Mínimo de 7 caracteres',
-		'selected' => 'Selected user',	//TODO - Translation
+		'selected' => 'Selected user',	// TODO - Translation
 		'title' => 'Administrar usuarios',
 		'title' => 'Administrar usuarios',
-		'update_users' => 'Update user',	//TODO - Translation
-		'user_list' => 'Lista de usuarios',
+		'update_users' => 'Update user',	// TODO - Translation
 		'username' => 'Nombre de usuario',
 		'username' => 'Nombre de usuario',
 		'users' => 'Usuarios',
 		'users' => 'Usuarios',
+		'user_list' => 'Lista de usuarios',
 	),
 	),
 );
 );

+ 43 - 42
app/i18n/es/conf.php

@@ -2,34 +2,33 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Archivo',
 		'delete_after' => 'Eliminar artículos tras',
 		'delete_after' => 'Eliminar artículos tras',
-		'exception' => 'Purge exception',	//TODO - Translation
+		'exception' => 'Purge exception',	// TODO - Translation
 		'help' => 'Hay más opciones disponibles en los ajustes de la fuente',
 		'help' => 'Hay más opciones disponibles en los ajustes de la fuente',
-		'keep_favourites' => 'Never delete favourites',	//TODO - Translation
+		'keep_favourites' => 'Never delete favourites',	// TODO - Translation
+		'keep_labels' => 'Never delete labels',	// TODO - Translation
+		'keep_max' => 'Maximum number of articles to keep',	// TODO - Translation
 		'keep_min_by_feed' => 'Número mínimo de artículos a conservar por fuente',
 		'keep_min_by_feed' => 'Número mínimo de artículos a conservar por fuente',
-		'keep_labels' => 'Never delete labels',	//TODO - Translation
-		'keep_unreads' => 'Never delete unreads',	//TODO - Translation
-		'maintenance' => 'Maintenance',	//TODO - Translation
+		'keep_period' => 'Maximum age of articles to keep',	// TODO - Translation
+		'keep_unreads' => 'Never delete unreads',	// TODO - Translation
+		'maintenance' => 'Maintenance',	// TODO - Translation
 		'optimize' => 'Optimizar la base de datos',
 		'optimize' => 'Optimizar la base de datos',
 		'optimize_help' => 'Ejecuta la optimización de vez en cuando para reducir el tamaño de la base de datos',
 		'optimize_help' => 'Ejecuta la optimización de vez en cuando para reducir el tamaño de la base de datos',
-		'policy' => 'Purge policy',	//TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	//TODO - Translation
+		'policy' => 'Purge policy',	// TODO - Translation
+		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	// TODO - Translation
 		'purge_now' => 'Limpiar ahora',
 		'purge_now' => 'Limpiar ahora',
-		'keep_max' => 'Maximum number of articles to keep',	//TODO - Translation
-		'keep_period' => 'Maximum age of articles to keep',	//TODO - Translation
 		'title' => 'Archivo',
 		'title' => 'Archivo',
 		'ttl' => 'No actualizar automáticamente más de',
 		'ttl' => 'No actualizar automáticamente más de',
+		'_' => 'Archivo',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Visualización',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Línea inferior',
 			'bottom_line' => 'Línea inferior',
+			'display_authors' => 'Authors',	// TODO - Translation
 			'entry' => 'Iconos de artículos',
 			'entry' => 'Iconos de artículos',
 			'publication_date' => 'Fecha de publicación',
 			'publication_date' => 'Fecha de publicación',
 			'related_tags' => 'Etiquetas relacionadas',
 			'related_tags' => 'Etiquetas relacionadas',
 			'sharing' => 'Compartir',
 			'sharing' => 'Compartir',
-			'display_authors' => 'Authors',  //TODO - Translation
 			'top_line' => 'Línea superior',
 			'top_line' => 'Línea superior',
 		),
 		),
 		'language' => 'Idioma',
 		'language' => 'Idioma',
@@ -37,7 +36,7 @@ return array(
 			'seconds' => 'segundos (0 significa sin límite de espera)',
 			'seconds' => 'segundos (0 significa sin límite de espera)',
 			'timeout' => 'Notificación de fin de espera HTML5',
 			'timeout' => 'Notificación de fin de espera HTML5',
 		),
 		),
-		'show_nav_buttons' => 'Show the navigation buttons',	//TODO - Translation
+		'show_nav_buttons' => 'Show the navigation buttons',	// TODO - Translation
 		'theme' => 'Tema',
 		'theme' => 'Tema',
 		'title' => 'Visualización',
 		'title' => 'Visualización',
 		'width' => array(
 		'width' => array(
@@ -47,34 +46,35 @@ return array(
 			'no_limit' => 'Sin límite',
 			'no_limit' => 'Sin límite',
 			'thin' => 'Estrecho',
 			'thin' => 'Estrecho',
 		),
 		),
+		'_' => 'Visualización',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Administración de perfiles',
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Borrar cuenta',
 			'warn' => 'Tu cuenta y todos los datos asociados serán eliminados.',
 			'warn' => 'Tu cuenta y todos los datos asociados serán eliminados.',
+			'_' => 'Borrar cuenta',
 		),
 		),
 		'email' => 'Correo electrónico',
 		'email' => 'Correo electrónico',
 		'password_api' => 'Contraseña API <br /><small>(para apps móviles, por ej.)</small>',
 		'password_api' => 'Contraseña API <br /><small>(para apps móviles, por ej.)</small>',
 		'password_form' => 'Contraseña<br /><small>(para el método de identificación por formulario web)</small>',
 		'password_form' => 'Contraseña<br /><small>(para el método de identificación por formulario web)</small>',
 		'password_format' => 'Mínimo de 7 caracteres',
 		'password_format' => 'Mínimo de 7 caracteres',
 		'title' => 'Perfil',
 		'title' => 'Perfil',
+		'_' => 'Administración de perfiles',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'Consultas de usuario',
 		'deprecated' => 'Esta consulta ya no es válida. La categoría referenciada o fuente ha sido eliminada.',
 		'deprecated' => 'Esta consulta ya no es válida. La categoría referenciada o fuente ha sido eliminada.',
-		'display' => 'Display user query results',	//TODO - Translation
+		'display' => 'Display user query results',	// TODO - Translation
 		'filter' => 'Filtro aplicado:',
 		'filter' => 'Filtro aplicado:',
 		'get_all' => 'Mostrar todos los artículos',
 		'get_all' => 'Mostrar todos los artículos',
 		'get_category' => 'Mostrar la categoría "%s"',
 		'get_category' => 'Mostrar la categoría "%s"',
 		'get_favorite' => 'Mostrar artículos favoritos',
 		'get_favorite' => 'Mostrar artículos favoritos',
 		'get_feed' => 'Mostrar fuente "%s"',
 		'get_feed' => 'Mostrar fuente "%s"',
-		'no_filter' => 'Sin filtro',
 		'none' => 'Todavía no has creado ninguna consulta de usuario.',
 		'none' => 'Todavía no has creado ninguna consulta de usuario.',
+		'no_filter' => 'Sin filtro',
 		'number' => 'Consulta n° %d',
 		'number' => 'Consulta n° %d',
 		'order_asc' => 'Mostrar primero los artículos más antiguos',
 		'order_asc' => 'Mostrar primero los artículos más antiguos',
 		'order_desc' => 'Mostrar primero los artículos más recientes',
 		'order_desc' => 'Mostrar primero los artículos más recientes',
-		'remove' => 'Remove user query',	//TODO - Translation
+		'remove' => 'Remove user query',	// TODO - Translation
 		'search' => 'Buscar "%s"',
 		'search' => 'Buscar "%s"',
 		'state_0' => 'Mostrar todos los artículos',
 		'state_0' => 'Mostrar todos los artículos',
 		'state_1' => 'Mostrar artículos leídos',
 		'state_1' => 'Mostrar artículos leídos',
@@ -93,9 +93,9 @@ return array(
 		'state_14' => 'Mostrar artículos sin leer',
 		'state_14' => 'Mostrar artículos sin leer',
 		'state_15' => 'Mostrar todos los artículos',
 		'state_15' => 'Mostrar todos los artículos',
 		'title' => 'Consultas de usuario',
 		'title' => 'Consultas de usuario',
+		'_' => 'Consultas de usuario',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Lectura',
 		'after_onread' => 'Tras “marcar todo como leído”,',
 		'after_onread' => 'Tras “marcar todo como leído”,',
 		'articles_per_page' => 'Número de artículos por página',
 		'articles_per_page' => 'Número de artículos por página',
 		'auto_load_more' => 'Cargar más artículos al final de la página',
 		'auto_load_more' => 'Cargar más artículos al final de la página',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'Marcar el artículo como leído…',
 			'when' => 'Marcar el artículo como leído…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Artículos a mostrar',
 			'adaptive' => 'Ajustar la visualización',
 			'adaptive' => 'Ajustar la visualización',
 			'all_articles' => 'Mostrar todos los artículos',
 			'all_articles' => 'Mostrar todos los artículos',
 			'unread' => 'Mostrar solo pendientes',
 			'unread' => 'Mostrar solo pendientes',
+			'_' => 'Artículos a mostrar',
 		),
 		),
 		'sides_close_article' => 'Pinchar fuera del área de texto del artículo lo cerrará',
 		'sides_close_article' => 'Pinchar fuera del área de texto del artículo lo cerrará',
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Orden',
 			'newer_first' => 'Nuevos primero',
 			'newer_first' => 'Nuevos primero',
 			'older_first' => 'Antiguos primero',
 			'older_first' => 'Antiguos primero',
+			'_' => 'Orden',
 		),
 		),
 		'sticky_post' => 'Pegar el artículo a la parte superior al abrirlo',
 		'sticky_post' => 'Pegar el artículo a la parte superior al abrirlo',
 		'title' => 'Lectura',
 		'title' => 'Lectura',
@@ -135,26 +135,26 @@ return array(
 			'normal' => 'Vista Normal',
 			'normal' => 'Vista Normal',
 			'reader' => 'Vista de Lectura',
 			'reader' => 'Vista de Lectura',
 		),
 		),
+		'_' => 'Lectura',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Compartir',
-		'add' => 'Add a sharing method',	//TODO - Translation
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
-		'email' => 'Email',
-		'facebook' => 'Facebook',
+		'add' => 'Add a sharing method',	// TODO - Translation
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
+		'email' => 'Email',	// TODO - Translation
+		'facebook' => 'Facebook',	// TODO - Translation
 		'more_information' => 'Más información',
 		'more_information' => 'Más información',
-		'print' => 'Print',
-		'remove' => 'Remove sharing method',	//TODO - Translation
-		'shaarli' => 'Shaarli',
+		'print' => 'Print',	// TODO - Translation
+		'remove' => 'Remove sharing method',	// TODO - Translation
+		'shaarli' => 'Shaarli',	// TODO - Translation
 		'share_name' => 'Compartir nombre a mostrar',
 		'share_name' => 'Compartir nombre a mostrar',
 		'share_url' => 'Compatir URL a usar',
 		'share_url' => 'Compatir URL a usar',
 		'title' => 'Compartir',
 		'title' => 'Compartir',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag',
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag',	// TODO - Translation
+		'_' => 'Compartir',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Atajos de teclado',
 		'article_action' => 'Acciones de artículo',
 		'article_action' => 'Acciones de artículo',
 		'auto_share' => 'Compartir',
 		'auto_share' => 'Compartir',
 		'auto_share_help' => 'Si solo hay un modo para compartir, ese será el que se use. En caso contrario los modos quedarán accesibles por su numeración.',
 		'auto_share_help' => 'Si solo hay un modo para compartir, ese será el que se use. En caso contrario los modos quedarán accesibles por su numeración.',
@@ -162,7 +162,7 @@ return array(
 		'collapse_article' => 'Contraer',
 		'collapse_article' => 'Contraer',
 		'first_article' => 'Saltar al primer artículo',
 		'first_article' => 'Saltar al primer artículo',
 		'focus_search' => 'Acceso a la casilla de búsqueda',
 		'focus_search' => 'Acceso a la casilla de búsqueda',
-		'global_view' => 'Switch to global view',	//TODO - Translation
+		'global_view' => 'Switch to global view',	// TODO - Translation
 		'help' => 'Mostrar documentación',
 		'help' => 'Mostrar documentación',
 		'javascript' => 'JavaScript debe estar activado para poder usar atajos de teclado',
 		'javascript' => 'JavaScript debe estar activado para poder usar atajos de teclado',
 		'last_article' => 'Saltar al último artículo',
 		'last_article' => 'Saltar al último artículo',
@@ -171,21 +171,22 @@ return array(
 		'mark_read' => 'Marcar como leído',
 		'mark_read' => 'Marcar como leído',
 		'navigation' => 'Navegación',
 		'navigation' => 'Navegación',
 		'navigation_help' => 'Con el modificador "Mayúsculas" es posible usar los atajos de teclado en las fuentes.<br/>Con el modificador "Alt" es posible aplicar los atajos de teclado en las categorías.',
 		'navigation_help' => 'Con el modificador "Mayúsculas" es posible usar los atajos de teclado en las fuentes.<br/>Con el modificador "Alt" es posible aplicar los atajos de teclado en las categorías.',
-		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	//TODO - Translation
+		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Saltar al siguiente artículo',
 		'next_article' => 'Saltar al siguiente artículo',
-		'normal_view' => 'Switch to normal view',	//TODO - Translation
+		'normal_view' => 'Switch to normal view',	// TODO - Translation
 		'other_action' => 'Otras acciones',
 		'other_action' => 'Otras acciones',
 		'previous_article' => 'Saltar al artículo anterior',
 		'previous_article' => 'Saltar al artículo anterior',
-		'reading_view' => 'Switch to reading view',	//TODO - Translation
-		'rss_view' => 'Open RSS view in a new tab',	//TODO - Translation
+		'reading_view' => 'Switch to reading view',	// TODO - Translation
+		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'Ver en la web original',
 		'see_on_website' => 'Ver en la web original',
 		'shift_for_all_read' => '+ <code>mayúsculas</code> para marcar todos los artículos como leídos',
 		'shift_for_all_read' => '+ <code>mayúsculas</code> para marcar todos los artículos como leídos',
-		'skip_next_article' => 'Focus next without opening',	//TODO - Translation
-		'skip_previous_article' => 'Focus previous without opening',	//TODO - Translation
+		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
+		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Atajos de teclado',
 		'title' => 'Atajos de teclado',
 		'user_filter' => 'Acceso a filtros de usuario',
 		'user_filter' => 'Acceso a filtros de usuario',
 		'user_filter_help' => 'Si solo hay un filtro de usuario, ese será el que se use. En caso contrario, los filtros están accesibles por su númeración.',
 		'user_filter_help' => 'Si solo hay un filtro de usuario, ese será el que se use. En caso contrario, los filtros están accesibles por su númeración.',
-		'views' => 'Views',	//TODO - Translation
+		'views' => 'Views',	// TODO - Translation
+		'_' => 'Atajos de teclado',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s artículos (%s)',
 		'articles_and_size' => '%s artículos (%s)',

+ 21 - 15
app/i18n/es/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Optimimización completada',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'No dispones de permiso para acceder a esta página',
 		'denied' => 'No dispones de permiso para acceder a esta página',
 		'not_found' => 'La página que buscas no existe',
 		'not_found' => 'La página que buscas no existe',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'Optimimización completada',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'Hubo un problema durante la configuración del sistema de idenfificación. Por favor, inténtalo más tarde.',
 			'not_set' => 'Hubo un problema durante la configuración del sistema de idenfificación. Por favor, inténtalo más tarde.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s no se puede activar. <a href="%s">Revisa el registro de FreshRSS</a> para más información.',
 			'ko' => '%s no se puede activar. <a href="%s">Revisa el registro de FreshRSS</a> para más información.',
 			'ok' => '%s ha quedado activado',
 			'ok' => '%s ha quedado activado',
 		),
 		),
-		'no_access' => 'No tienes acceso a %s',
 		'not_enabled' => '%s no está activado',
 		'not_enabled' => '%s no está activado',
 		'not_found' => '%s no existe',
 		'not_found' => '%s no existe',
+		'no_access' => 'No tienes acceso a %s',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'La extensión ZIP no está disponible en tu servidor. Por favor, exporta estos archivos uno a uno.',
 		'export_no_zip_extension' => 'La extensión ZIP no está disponible en tu servidor. Por favor, exporta estos archivos uno a uno.',
@@ -57,8 +63,8 @@ return array(
 	'sub' => array(
 	'sub' => array(
 		'actualize' => 'Actualización',
 		'actualize' => 'Actualización',
 		'articles' => array(
 		'articles' => array(
-			'marked_read' => 'The selected articles have been marked as read.',	//TODO - Translation
-			'marked_unread' => 'The articles have been marked as unread.',	//TODO - Translation
+			'marked_read' => 'The selected articles have been marked as read.',	// TODO - Translation
+			'marked_unread' => 'The articles have been marked as unread.',	// TODO - Translation
 		),
 		),
 		'category' => array(
 		'category' => array(
 			'created' => 'Se ha creado la categoría %s.',
 			'created' => 'Se ha creado la categoría %s.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'Se ha vaciado la categoría',
 			'emptied' => 'Se ha vaciado la categoría',
 			'error' => 'No es posible actualizar la categoría',
 			'error' => 'No es posible actualizar la categoría',
 			'name_exists' => 'Ya existe una categoría con ese nombre.',
 			'name_exists' => 'Ya existe una categoría con ese nombre.',
-			'no_id' => 'Debes especificar la id de la categoría.',
-			'no_name' => '¡El nombre de la categoría no puede dejarse en blanco!.',
 			'not_delete_default' => '¡No puedes borrar la categoría por defecto!',
 			'not_delete_default' => '¡No puedes borrar la categoría por defecto!',
 			'not_exist' => 'La categoría no existe',
 			'not_exist' => 'La categoría no existe',
+			'no_id' => 'Debes especificar la id de la categoría.',
+			'no_name' => '¡El nombre de la categoría no puede dejarse en blanco!.',
 			'over_max' => 'Has alcanzado el límite de categorías (%d)',
 			'over_max' => 'Has alcanzado el límite de categorías (%d)',
 			'updated' => 'La categoría se ha actualizado.',
 			'updated' => 'La categoría se ha actualizado.',
 		),
 		),
@@ -80,12 +86,12 @@ return array(
 			'already_subscribed' => 'Ya estás suscrito a <em>%s</em>',
 			'already_subscribed' => 'Ya estás suscrito a <em>%s</em>',
 			'deleted' => 'Fuente eliminada',
 			'deleted' => 'Fuente eliminada',
 			'error' => 'No es posible actualizar la fuente',
 			'error' => 'No es posible actualizar la fuente',
-			'internal_problem' => 'No ha sido posible agregar la fuente RSS. <a href="%s">Revisa el registro de FreshRSS </a> para más información.',	//TODO - Translation
+			'internal_problem' => 'No ha sido posible agregar la fuente RSS. <a href="%s">Revisa el registro de FreshRSS </a> para más información.',
 			'invalid_url' => 'La URL <em>%s</em> es inválida',
 			'invalid_url' => 'La URL <em>%s</em> es inválida',
+			'not_added' => '<em>%s</em> no ha podido se añadida',
+			'no_refresh' => 'No hay fuente a actualizar…',
 			'n_actualized' => 'Se han actualiado %d fuentes',
 			'n_actualized' => 'Se han actualiado %d fuentes',
 			'n_entries_deleted' => 'Se han eliminado %d artículos',
 			'n_entries_deleted' => 'Se han eliminado %d artículos',
-			'no_refresh' => 'No hay fuente a actualizar…',
-			'not_added' => '<em>%s</em> no ha podido se añadida',
 			'over_max' => 'Has alcanzado tu límite de fuentes (%d)',
 			'over_max' => 'Has alcanzado tu límite de fuentes (%d)',
 			'updated' => 'Fuente actualizada',
 			'updated' => 'Fuente actualizada',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'Se ha creado el usuario %s',
 			'error' => 'No se ha podido crear al usuario %s',
 			'error' => 'No se ha podido crear al usuario %s',
+			'_' => 'Se ha creado el usuario %s',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'El usuario %s ha sido eliminado',
 			'error' => 'El usuario %s no ha podido ser eliminado',
 			'error' => 'El usuario %s no ha podido ser eliminado',
+			'_' => 'El usuario %s ha sido eliminado',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'User %s has been updated',	//TODO - Translation
-			'error' => 'User %s has not been updated',	//TODO - Translation
+			'error' => 'User %s has not been updated',	// TODO - Translation
+			'_' => 'User %s has been updated',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 51 - 49
app/i18n/es/gen.php

@@ -3,7 +3,7 @@
 return array(
 return array(
 	'action' => array(
 	'action' => array(
 		'actualize' => 'Actualizar',
 		'actualize' => 'Actualizar',
-		'back' => '← Go back', //TODO - Translation
+		'back' => '← Go back',	// TODO - Translation
 		'back_to_rss_feeds' => '← regresar a tus fuentes RSS',
 		'back_to_rss_feeds' => '← regresar a tus fuentes RSS',
 		'cancel' => 'Cancelar',
 		'cancel' => 'Cancelar',
 		'create' => 'Crear',
 		'create' => 'Crear',
@@ -16,32 +16,33 @@ return array(
 		'manage' => 'Administrar',
 		'manage' => 'Administrar',
 		'mark_favorite' => 'Marcar como favorita',
 		'mark_favorite' => 'Marcar como favorita',
 		'mark_read' => 'Marcar como leído',
 		'mark_read' => 'Marcar como leído',
+		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Borrar',
 		'remove' => 'Borrar',
 		'see_website' => 'Ver web',
 		'see_website' => 'Ver web',
 		'submit' => 'Enviar',
 		'submit' => 'Enviar',
 		'truncate' => 'Borrar todos los artículos',
 		'truncate' => 'Borrar todos los artículos',
-		'update' => 'Update',	//TODO - Translation
+		'update' => 'Update',	// TODO - Translation
 	),
 	),
 	'auth' => array(
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.', // TODO - Translation
+		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.',	// TODO - Translation
 		'email' => 'Correo electrónico',
 		'email' => 'Correo electrónico',
 		'keep_logged_in' => 'Mantenerme identificado <small>(%s días)</small>',
 		'keep_logged_in' => 'Mantenerme identificado <small>(%s días)</small>',
 		'login' => 'Conectar',
 		'login' => 'Conectar',
 		'logout' => 'Desconectar',
 		'logout' => 'Desconectar',
 		'password' => array(
 		'password' => array(
-			'_' => 'Contraseña',
 			'format' => '<small>Mínimo de 7 caracteres</small>',
 			'format' => '<small>Mínimo de 7 caracteres</small>',
+			'_' => 'Contraseña',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'Nueva cuenta',
 			'ask' => '¿Crear una cuenta?',
 			'ask' => '¿Crear una cuenta?',
 			'title' => 'Creación de cuenta',
 			'title' => 'Creación de cuenta',
+			'_' => 'Nueva cuenta',
 		),
 		),
 		'reset' => 'Reinicar identificación',
 		'reset' => 'Reinicar identificación',
 		'username' => array(
 		'username' => array(
-			'_' => 'Nombre de usuario',
 			'admin' => 'Nombre de usuario del Administrador',
 			'admin' => 'Nombre de usuario del Administrador',
 			'format' => '<small>máximo 16 caracteres alfanuméricos</small>',
 			'format' => '<small>máximo 16 caracteres alfanuméricos</small>',
+			'_' => 'Nombre de usuario',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -58,14 +59,14 @@ return array(
 		'Feb' => '\\F\\e\\b\\r\\e\\r\\o',
 		'Feb' => '\\F\\e\\b\\r\\e\\r\\o',
 		'feb' => 'feb',
 		'feb' => 'feb',
 		'february' => 'febrero',
 		'february' => 'febrero',
-		'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 H\\:i',
+		'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y',	// TODO - Translation
+		'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i',	// TODO - Translation
 		'fri' => 'Vie',
 		'fri' => 'Vie',
 		'Jan' => '\\E\\n\\e\\r\\o',
 		'Jan' => '\\E\\n\\e\\r\\o',
 		'jan' => 'ene',
 		'jan' => 'ene',
 		'january' => 'ene',
 		'january' => 'ene',
-		'Jul' => '\\J\\u\\l\\i\\o',
 		'jul' => 'jul',
 		'jul' => 'jul',
+		'Jul' => '\\J\\u\\l\\i\\o',
 		'july' => 'julio',
 		'july' => 'julio',
 		'Jun' => '\\J\\u\\n\\i\\o',
 		'Jun' => '\\J\\u\\n\\i\\o',
 		'jun' => 'jun',
 		'jun' => 'jun',
@@ -75,8 +76,8 @@ return array(
 		'last_month' => 'Mes pasado',
 		'last_month' => 'Mes pasado',
 		'last_week' => 'Semana pasada',
 		'last_week' => 'Semana pasada',
 		'last_year' => 'Año pasado',
 		'last_year' => 'Año pasado',
-		'Mar' => '\\M\\a\\r\\z\\o',
 		'mar' => 'mar',
 		'mar' => 'mar',
+		'Mar' => '\\M\\a\\r\\z\\o',
 		'march' => 'marzo',
 		'march' => 'marzo',
 		'May' => '\\M\\a\\y\\o',
 		'May' => '\\M\\a\\y\\o',
 		'may' => 'mayo',
 		'may' => 'mayo',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => 'Ayer',
 		'yesterday' => 'Ayer',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'Acerca de FreshRSS',
 		'about' => 'Acerca de FreshRSS',
+		'_' => 'FreshRSS',	// TODO - Translation
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Vaciar categoría',
 		'category_empty' => 'Vaciar categoría',
@@ -117,20 +118,21 @@ return array(
 		'should_be_activated' => 'JavaScript debe estar activado',
 		'should_be_activated' => 'JavaScript debe estar activado',
 	),
 	),
 	'lang' => array(
 	'lang' => array(
-		'cz' => 'Čeština',
-		'de' => 'Deutsch',
-		'en' => 'English',
-		'es' => 'Español',
-		'fr' => 'Français',
-		'he' => 'עברית',
-		'it' => 'Italiano',
-		'kr' => '한국어',
-		'nl' => 'Nederlands',
-		'oc' => 'Occitan',
-		'pt-br' => 'Português (Brasil)',
-		'ru' => 'Русский',
-		'tr' => 'Türkçe',
-		'zh-cn' => '简体中文',
+		'cz' => 'Čeština',	// TODO - Translation
+		'de' => 'Deutsch',	// TODO - Translation
+		'en' => 'English',	// TODO - Translation
+		'es' => 'Español',	// TODO - Translation
+		'fr' => 'Français',	// TODO - Translation
+		'he' => 'עברית',	// TODO - Translation
+		'it' => 'Italiano',	// TODO - Translation
+		'kr' => '한국어',	// TODO - Translation
+		'nl' => 'Nederlands',	// TODO - Translation
+		'oc' => 'Occitan',	// TODO - Translation
+		'pt-br' => 'Português (Brasil)',	// TODO - Translation
+		'ru' => 'Русский',	// TODO - Translation
+		'sk' => 'Slovenčina',	// TODO - Translation
+		'tr' => 'Türkçe',	// TODO - Translation
+		'zh-cn' => '简体中文',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Acerca de',
 		'about' => 'Acerca de',
@@ -163,31 +165,31 @@ return array(
 		'previous' => 'Anterior',
 		'previous' => 'Anterior',
 	),
 	),
 	'period' => array(
 	'period' => array(
-		'days' => 'days',	//TODO - Translation
-		'hours' => 'hours',	//TODO - Translation
-		'months' => 'months',	//TODO - Translation
-		'weeks' => 'weeks',	//TODO - Translation
-		'years' => 'years',	//TODO - Translation
+		'days' => 'days',	// TODO - Translation
+		'hours' => 'hours',	// TODO - Translation
+		'months' => 'months',	// TODO - Translation
+		'weeks' => 'weeks',	// TODO - Translation
+		'years' => 'years',	// TODO - Translation
 	),
 	),
 	'share' => array(
 	'share' => array(
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
-		'email' => 'Email',
-		'facebook' => 'Facebook',
-		'gnusocial' => 'GNU social',
-		'jdh' => 'Journal du hacker',
-		'Known' => 'Known based sites',
-		'lemmy' => 'Lemmy',
-		'linkedin' => 'LinkedIn',
-		'mastodon' => 'Mastodon',
-		'movim' => 'Movim',
-		'pinboard' => 'Pinboard',
-		'pocket' => 'Pocket',
-		'print' => 'Print',
-		'shaarli' => 'Shaarli',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag v1',
-		'wallabagv2' => 'wallabag v2',
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
+		'email' => 'Email',	// TODO - Translation
+		'facebook' => 'Facebook',	// TODO - Translation
+		'gnusocial' => 'GNU social',	// TODO - Translation
+		'jdh' => 'Journal du hacker',	// TODO - Translation
+		'Known' => 'Known based sites',	// TODO - Translation
+		'lemmy' => 'Lemmy',	// TODO - Translation
+		'linkedin' => 'LinkedIn',	// TODO - Translation
+		'mastodon' => 'Mastodon',	// TODO - Translation
+		'movim' => 'Movim',	// TODO - Translation
+		'pinboard' => 'Pinboard',	// TODO - Translation
+		'pocket' => 'Pocket',	// TODO - Translation
+		'print' => 'Print',	// TODO - Translation
+		'shaarli' => 'Shaarli',	// TODO - Translation
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag v1',	// TODO - Translation
+		'wallabagv2' => 'wallabag v2',	// TODO - Translation
 	),
 	),
 	'short' => array(
 	'short' => array(
 		'attention' => '¡Aviso!',
 		'attention' => '¡Aviso!',
@@ -196,7 +198,7 @@ return array(
 		'by_default' => 'Por defecto',
 		'by_default' => 'Por defecto',
 		'damn' => '¡Córcholis!',
 		'damn' => '¡Córcholis!',
 		'default_category' => 'Sin categorizar',
 		'default_category' => 'Sin categorizar',
-		'no' => 'No',
+		'no' => 'No',	// TODO - Translation
 		'not_applicable' => 'No disponible',
 		'not_applicable' => 'No disponible',
 		'ok' => '¡Vale!',
 		'ok' => '¡Vale!',
 		'or' => 'o',
 		'or' => 'o',

+ 10 - 10
app/i18n/es/index.php

@@ -2,8 +2,7 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'Acerca de',
-		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// TODO - Translation
 		'bugs_reports' => 'Informe de fallos',
 		'bugs_reports' => 'Informe de fallos',
 		'credits' => 'Créditos',
 		'credits' => 'Créditos',
 		'credits_content' => 'Aunque FreshRSS no usa ese entorno, algunos elementos del diseño están obtenidos de <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>. Los <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Iconos</a> han sido obtenidos del <a href="https://www.gnome.org/">proyecto GNOME</a>. La fuente <em>Open Sans</em> es una creación de <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS usa el entorno PHP <a href="https://github.com/marienfressinaud/MINZ">Minz</a>.',
 		'credits_content' => 'Aunque FreshRSS no usa ese entorno, algunos elementos del diseño están obtenidos de <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>. Los <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Iconos</a> han sido obtenidos del <a href="https://www.gnome.org/">proyecto GNOME</a>. La fuente <em>Open Sans</em> es una creación de <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS usa el entorno PHP <a href="https://github.com/marienfressinaud/MINZ">Minz</a>.',
@@ -14,23 +13,21 @@ return array(
 		'title' => 'Acerca de',
 		'title' => 'Acerca de',
 		'version' => 'Versión',
 		'version' => 'Versión',
 		'website' => 'Web',
 		'website' => 'Web',
-	),
-	'tos' => array(
-		'title' => 'Terms of Service', // TODO - Translation
+		'_' => 'Acerca de',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Puedes añadir fuentes.',
 		'add' => 'Puedes añadir fuentes.',
 		'empty' => 'No hay artículos a mostrar.',
 		'empty' => 'No hay artículos a mostrar.',
 		'rss_of' => 'Fuente RSS de %s',
 		'rss_of' => 'Fuente RSS de %s',
 		'title' => 'Tus fuentes RSS',
 		'title' => 'Tus fuentes RSS',
-		'title_global' => 'Vista global',
 		'title_fav' => 'Tus favoritos',
 		'title_fav' => 'Tus favoritos',
+		'title_global' => 'Vista global',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Registros',
 		'clear' => 'Limpiar registros',
 		'clear' => 'Limpiar registros',
 		'empty' => 'El archivo de registro está vacío',
 		'empty' => 'El archivo de registro está vacío',
 		'title' => 'Registros',
 		'title' => 'Registros',
+		'_' => 'Registros',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Acerca de FreshRSS',
 		'about' => 'Acerca de FreshRSS',
@@ -43,7 +40,7 @@ return array(
 		'mark_all_read' => 'Marcar todo como leído',
 		'mark_all_read' => 'Marcar todo como leído',
 		'mark_cat_read' => 'Marcar categoría como leída',
 		'mark_cat_read' => 'Marcar categoría como leída',
 		'mark_feed_read' => 'Marcar fuente como leída',
 		'mark_feed_read' => 'Marcar fuente como leída',
-		'mark_selection_unread' => 'Mark selection as unread',	//TODO - Translation
+		'mark_selection_unread' => 'Mark selection as unread',	// TODO - Translation
 		'newer_first' => 'Nuevos primero',
 		'newer_first' => 'Nuevos primero',
 		'non-starred' => 'Mostrar todos menos los favoritos',
 		'non-starred' => 'Mostrar todos menos los favoritos',
 		'normal_view' => 'Vista normal',
 		'normal_view' => 'Vista normal',
@@ -56,11 +53,14 @@ return array(
 		'starred' => 'Mostrar solo los favoritos',
 		'starred' => 'Mostrar solo los favoritos',
 		'stats' => 'Estadísticas',
 		'stats' => 'Estadísticas',
 		'subscription' => 'Administración de suscripciones',
 		'subscription' => 'Administración de suscripciones',
-		'tags' => 'My labels',	//TODO - Translation
+		'tags' => 'My labels',	// TODO - Translation
 		'unread' => 'Mostar solo no leídos',
 		'unread' => 'Mostar solo no leídos',
 	),
 	),
 	'share' => 'Compartir',
 	'share' => 'Compartir',
 	'tag' => array(
 	'tag' => array(
-		'related' => 'Etiquetas relacionadas',	//TODO - Translation
+		'related' => 'Etiquetas relacionadas',
+	),
+	'tos' => array(
+		'title' => 'Terms of Service',	// TODO - Translation
 	),
 	),
 );
 );

+ 8 - 8
app/i18n/es/install.php

@@ -17,20 +17,19 @@ return array(
 		'type' => 'Método de identificación',
 		'type' => 'Método de identificación',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'Base de datos',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'Configuración de la base de datos',
 			'ko' => 'Verificar la información de tu base de datos.',
 			'ko' => 'Verificar la información de tu base de datos.',
 			'ok' => 'La configuración de la base de datos ha sido guardada.',
 			'ok' => 'La configuración de la base de datos ha sido guardada.',
+			'_' => 'Configuración de la base de datos',
 		),
 		),
 		'host' => 'Servidor',
 		'host' => 'Servidor',
 		'password' => 'Contraseña de la base de datos',
 		'password' => 'Contraseña de la base de datos',
 		'prefix' => 'Prefijo de la tabla',
 		'prefix' => 'Prefijo de la tabla',
 		'type' => 'Tipo de base de datos',
 		'type' => 'Tipo de base de datos',
 		'username' => 'Nombre de usuario de la base de datos',
 		'username' => 'Nombre de usuario de la base de datos',
+		'_' => 'Base de datos',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'Verificaciones',
 		'already_installed' => '¡FreshRSS ya está instalado!',
 		'already_installed' => '¡FreshRSS ya está instalado!',
 		'cache' => array(
 		'cache' => array(
 			'nok' => 'Comprueba los permisos en el directorio <em>./data/cache</em>. El servidor HTTP debe contar con permisos de escritura.',
 			'nok' => 'Comprueba los permisos en el directorio <em>./data/cache</em>. El servidor HTTP debe contar con permisos de escritura.',
@@ -69,8 +68,8 @@ return array(
 			'ok' => 'Dispones de la librería recomendada para procesar JSON.',
 			'ok' => 'Dispones de la librería recomendada para procesar JSON.',
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
 			'nok' => 'No se ha podido localizar el entorno Minz.',
 			'nok' => 'No se ha podido localizar el entorno Minz.',
@@ -96,10 +95,11 @@ return array(
 			'nok' => 'No se ha podido localizar la librería necesaria para procesar XML.',
 			'nok' => 'No se ha podido localizar la librería necesaria para procesar XML.',
 			'ok' => 'Dispones de la librería necesaria para procesar XML.',
 			'ok' => 'Dispones de la librería necesaria para procesar XML.',
 		),
 		),
+		'_' => 'Verificaciones',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'Configuración general',
 		'ok' => 'La configuración general se ha guardado.',
 		'ok' => 'La configuración general se ha guardado.',
+		'_' => 'Configuración general',
 	),
 	),
 	'congratulations' => '¡Enhorabuena!',
 	'congratulations' => '¡Enhorabuena!',
 	'default_user' => 'Nombre de usuario para el usuario por defecto <small>(máximo de 16 caracteres alfanuméricos)</small>',
 	'default_user' => 'Nombre de usuario para el usuario por defecto <small>(máximo de 16 caracteres alfanuméricos)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'Al reinstalar FreshRSS perderás cualquier configuración anterior. ¿Seguro que quieres continuar?',
 		'confirm_reinstall' => 'Al reinstalar FreshRSS perderás cualquier configuración anterior. ¿Seguro que quieres continuar?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'Idioma',
 		'choose' => 'Selecciona el idioma para FreshRSS',
 		'choose' => 'Selecciona el idioma para FreshRSS',
 		'defined' => 'Idioma seleccionado.',
 		'defined' => 'Idioma seleccionado.',
+		'_' => 'Idioma',
 	),
 	),
 	'not_deleted' => 'Parece que ha habido un error. Debes eliminar el archivo <em>%s</em> de forma manual.',
 	'not_deleted' => 'Parece que ha habido un error. Debes eliminar el archivo <em>%s</em> de forma manual.',
 	'ok' => 'La instalación se ha completado correctamente.',
 	'ok' => 'La instalación se ha completado correctamente.',
 	'step' => 'paso %d',
 	'step' => 'paso %d',
 	'steps' => 'Pasos',
 	'steps' => 'Pasos',
-	'title' => 'Instalación · FreshRSS',
 	'this_is_the_end' => '¡Terminamos!',
 	'this_is_the_end' => '¡Terminamos!',
+	'title' => 'Instalación · FreshRSS',
 );
 );

+ 28 - 28
app/i18n/es/sub.php

@@ -2,24 +2,24 @@
 
 
 return array(
 return array(
 	'api' => array(
 	'api' => array(
-		'documentation' => 'Copy the following URL to use it within an external tool.',	//TODO - Translation
-		'title' => 'API',	//TODO - Translation
+		'documentation' => 'Copy the following URL to use it within an external tool.',	// TODO - Translation
+		'title' => 'API',	// TODO - Translation
 	),
 	),
 	'bookmarklet' => array(
 	'bookmarklet' => array(
-		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',	//TODO - Translation
-		'label' => 'Subscribe',	//TODO - Translation
-		'title' => 'Bookmarklet',	//TODO - Translation
+		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',	// TODO - Translation
+		'label' => 'Subscribe',	// TODO - Translation
+		'title' => 'Bookmarklet',	// TODO - Translation
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'Categoría',
 		'add' => 'Añadir a la categoría',
 		'add' => 'Añadir a la categoría',
 		'archiving' => 'Archivo',
 		'archiving' => 'Archivo',
 		'empty' => 'Vaciar categoría',
 		'empty' => 'Vaciar categoría',
 		'information' => 'Información',
 		'information' => 'Información',
 		'new' => 'Nueva categoría',
 		'new' => 'Nueva categoría',
-		'position' => 'Display position',	//TODO - Translation
-		'position_help' => 'To control category sort order',	//TODO - Translation
+		'position' => 'Display position',	// TODO - Translation
+		'position_help' => 'To control category sort order',	// TODO - Translation
 		'title' => 'Título',
 		'title' => 'Título',
+		'_' => 'Categoría',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Añadir fuente RSS',
 		'add' => 'Añadir fuente RSS',
@@ -32,57 +32,57 @@ return array(
 			'password' => 'Contraseña HTTP',
 			'password' => 'Contraseña HTTP',
 			'username' => 'Nombre de usuario HTTP',
 			'username' => 'Nombre de usuario HTTP',
 		),
 		),
-		'clear_cache' => 'Always clear cache',	//TODO - Translation
+		'clear_cache' => 'Always clear cache',	// TODO - Translation
 		'css_help' => 'Recibir fuentes RSS truncadas (aviso, ¡necesita más tiempo!)',
 		'css_help' => 'Recibir fuentes RSS truncadas (aviso, ¡necesita más tiempo!)',
 		'css_path' => 'Ruta a la CSS de los artículos en la web original',
 		'css_path' => 'Ruta a la CSS de los artículos en la web original',
 		'description' => 'Descripción',
 		'description' => 'Descripción',
 		'empty' => 'La fuente está vacía. Por favor, verifica que siga activa.',
 		'empty' => 'La fuente está vacía. Por favor, verifica que siga activa.',
 		'error' => 'Hay un problema con esta fuente. Por favor, veritica que esté disponible y prueba de nuevo.',
 		'error' => 'Hay un problema con esta fuente. Por favor, veritica que esté disponible y prueba de nuevo.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filter actions',	//TODO - Translation
-			'help' => 'Write one search filter per line.',	//TODO - Translation
+			'help' => 'Write one search filter per line.',	// TODO - Translation
+			'_' => 'Filter actions',	// TODO - Translation
 		),
 		),
 		'information' => 'Información',
 		'information' => 'Información',
 		'keep_min' => 'Número mínimo de artículos a conservar',
 		'keep_min' => 'Número mínimo de artículos a conservar',
 		'moved_category_deleted' => 'Al borrar una categoría todas sus fuentes pasan automáticamente a la categoría <em>%s</em>.',
 		'moved_category_deleted' => 'Al borrar una categoría todas sus fuentes pasan automáticamente a la categoría <em>%s</em>.',
-		'mute' => 'mute',	//TODO - Translation
+		'mute' => 'mute',	// TODO - Translation
 		'no_selected' => 'No hay funentes seleccionadas.',
 		'no_selected' => 'No hay funentes seleccionadas.',
 		'number_entries' => '%d artículos',
 		'number_entries' => '%d artículos',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Visibility',	//TODO - Translation
-			'archived' => 'Do not show (archived)',	//TODO - Translation
+			'archived' => 'Do not show (archived)',	// TODO - Translation
 			'main_stream' => 'Mostrar en salida principal',
 			'main_stream' => 'Mostrar en salida principal',
-			'normal' => 'Show in its category',	//TODO - Translation
+			'normal' => 'Show in its category',	// TODO - Translation
+			'_' => 'Visibility',	// TODO - Translation
 		),
 		),
-		'websub' => 'Notificación inmedaiata con WebSub',
 		'show' => array(
 		'show' => array(
-			'all' => 'Show all feeds',	//TODO - Translation
-			'error' => 'Show only feeds with error',	//TODO - Translation
+			'all' => 'Show all feeds',	// TODO - Translation
+			'error' => 'Show only feeds with error',	// TODO - Translation
 		),
 		),
 		'showing' => array(
 		'showing' => array(
-			'error' => 'Showing only feeds with error',	//TODO - Translation
+			'error' => 'Showing only feeds with error',	// TODO - Translation
 		),
 		),
-		'ssl_verify' => 'Verify SSL security',	//TODO - Translation
+		'ssl_verify' => 'Verify SSL security',	// TODO - Translation
 		'stats' => 'Estadísticas',
 		'stats' => 'Estadísticas',
 		'think_to_add' => 'Puedes añadir fuentes.',
 		'think_to_add' => 'Puedes añadir fuentes.',
-		'timeout' => 'Timeout in seconds',	//TODO - Translation
+		'timeout' => 'Timeout in seconds',	// TODO - Translation
 		'title' => 'Título',
 		'title' => 'Título',
 		'title_add' => 'Añadir fuente RSS',
 		'title_add' => 'Añadir fuente RSS',
 		'ttl' => 'No actualizar de forma automática con una frecuencia mayor a',
 		'ttl' => 'No actualizar de forma automática con una frecuencia mayor a',
 		'url' => 'URL de la fuente',
 		'url' => 'URL de la fuente',
 		'validator' => 'Verifica la validez de la fuente',
 		'validator' => 'Verifica la validez de la fuente',
 		'website' => 'Web de la URL',
 		'website' => 'Web de la URL',
+		'websub' => 'Notificación inmedaiata con WebSub',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
-		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	//TODO - Translation
-		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	//TODO - Translation
-		'title' => 'Firefox feed reader',	//TODO - Translation
+		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	// TODO - Translation
+		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	// TODO - Translation
+		'title' => 'Firefox feed reader',	// TODO - Translation
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => 'Exportar',
 		'export' => 'Exportar',
+		'export_labelled' => 'Export your labelled articles',	// TODO - Translation
 		'export_opml' => 'Exportar la lista de fuentes (OPML)',
 		'export_opml' => 'Exportar la lista de fuentes (OPML)',
 		'export_starred' => 'Exportar tus favoritos',
 		'export_starred' => 'Exportar tus favoritos',
-		'export_labelled' => 'Export your labelled articles',	//TODO
 		'feed_list' => 'Lista de %s artículos',
 		'feed_list' => 'Lista de %s artículos',
 		'file_to_import' => 'Archivo a importar<br />(OPML, JSON o ZIP)',
 		'file_to_import' => 'Archivo a importar<br />(OPML, JSON o ZIP)',
 		'file_to_import_no_zip' => 'Archivo a importar<br />(OPML o JSON)',
 		'file_to_import_no_zip' => 'Archivo a importar<br />(OPML o JSON)',
@@ -94,11 +94,11 @@ return array(
 		'bookmark' => 'Suscribirse (favorito FreshRSS)',
 		'bookmark' => 'Suscribirse (favorito FreshRSS)',
 		'import_export' => 'Importar / exportar',
 		'import_export' => 'Importar / exportar',
 		'subscription_management' => 'Administración de suscripciones',
 		'subscription_management' => 'Administración de suscripciones',
-		'subscription_tools' => 'Subscription tools',	//TODO - Translation
+		'subscription_tools' => 'Subscription tools',	// TODO - Translation
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'Administración de suscripciones',
 		'feed_management' => 'Administración de fuentes RSS',
 		'feed_management' => 'Administración de fuentes RSS',
-		'subscription_tools' => 'Subscription tools',	//TODO - Translation
+		'subscription_tools' => 'Subscription tools',	// TODO - Translation
+		'_' => 'Administración de suscripciones',
 	),
 	),
 );
 );

+ 21 - 21
app/i18n/es/user.php

@@ -3,35 +3,35 @@
 return array(
 return array(
 	'email' => array(
 	'email' => array(
 		'feedback' => array(
 		'feedback' => array(
-			'invalid' => 'The email address is invalid.', //TODO - Translation
-			'required' => 'The email address is required.', //TODO - Translation
+			'invalid' => 'The email address is invalid.',	// TODO - Translation
+			'required' => 'The email address is required.',	// TODO - Translation
 		),
 		),
 		'validation' => array(
 		'validation' => array(
-			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.', //TODO - Translation
-			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.', //TODO - Translation
+			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.',	// TODO - Translation
+			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.',	// TODO - Translation
 			'feedback' => array(
 			'feedback' => array(
-				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.', //TODO - Translation
-				'email_sent' => 'An email has been sent to your address.', //TODO - Translation
-				'error' => 'The email address failed to be validated.', //TODO - Translation
-				'ok' => 'The email address has been validated.', //TODO - Translation
-				'unneccessary' => 'The email address was already validated.', //TODO - Translation
-				'wrong_token' => 'The email address failed to be validated due to a wrong token.', //TODO - Translation
+				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.',	// TODO - Translation
+				'email_sent' => 'An email has been sent to your address.',	// TODO - Translation
+				'error' => 'The email address failed to be validated.',	// TODO - Translation
+				'ok' => 'The email address has been validated.',	// TODO - Translation
+				'unneccessary' => 'The email address was already validated.',	// TODO - Translation
+				'wrong_token' => 'The email address failed to be validated due to a wrong token.',	// TODO - Translation
 			),
 			),
-			'need_to' => 'You need to validate your email address before being able to use %s.', //TODO - Translation
-			'resend_email' => 'Resend the email', //TODO - Translation
-			'title' => 'Email address validation', //TODO - Translation
-		),
-	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation
+			'need_to' => 'You need to validate your email address before being able to use %s.',	// TODO - Translation
+			'resend_email' => 'Resend the email',	// TODO - Translation
+			'title' => 'Email address validation',	// TODO - Translation
 		),
 		),
 	),
 	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
-			'title' => 'You need to validate your account', //TODO - Translation
-			'welcome' => 'Welcome %s,', //TODO - Translation
-			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:', //TODO - Translation
+			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:',	// TODO - Translation
+			'title' => 'You need to validate your account',	// TODO - Translation
+			'welcome' => 'Welcome %s,',	// TODO - Translation
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'You must accept the Terms of Service to be able to register.',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 18 - 12
app/i18n/fr/admin.php

@@ -83,9 +83,9 @@ return array(
 			'ok' => 'Vous disposez de PDO et d’au moins un des drivers supportés (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => 'Vous disposez de PDO et d’au moins un des drivers supportés (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'Installation de PHP',
 			'nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s.',
 			'nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s.',
 			'ok' => 'Votre version de PHP est la %s, qui est compatible avec FreshRSS.',
 			'ok' => 'Votre version de PHP est la %s, qui est compatible avec FreshRSS.',
+			'_' => 'Installation de PHP',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'Impossible de trouver une ou plusieurs tables en base de données.',
 			'nok' => 'Impossible de trouver une ou plusieurs tables en base de données.',
@@ -108,7 +108,7 @@ return array(
 	'extensions' => array(
 	'extensions' => array(
 		'author' => 'Auteur',
 		'author' => 'Auteur',
 		'community' => 'Extensions utilisateur disponibles',
 		'community' => 'Extensions utilisateur disponibles',
-		'description' => 'Description',
+		'description' => 'Description',	// TODO - Translation
 		'disabled' => 'Désactivée',
 		'disabled' => 'Désactivée',
 		'empty_list' => 'Aucune extension installée',
 		'empty_list' => 'Aucune extension installée',
 		'enabled' => 'Activée',
 		'enabled' => 'Activée',
@@ -116,16 +116,15 @@ return array(
 		'name' => 'Nom',
 		'name' => 'Nom',
 		'no_configure_view' => 'Cette extension n’a pas à être configurée',
 		'no_configure_view' => 'Cette extension n’a pas à être configurée',
 		'system' => array(
 		'system' => array(
-			'_' => 'Extensions système',
 			'no_rights' => 'Extensions système (contrôlées par l’administrateur)',
 			'no_rights' => 'Extensions système (contrôlées par l’administrateur)',
+			'_' => 'Extensions système',
 		),
 		),
 		'title' => 'Extensions',
 		'title' => 'Extensions',
 		'update' => 'Mise à jour disponible',
 		'update' => 'Mise à jour disponible',
 		'user' => 'Extensions utilisateur',
 		'user' => 'Extensions utilisateur',
-		'version' => 'Version',
+		'version' => 'Version',	// TODO - Translation
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Statistiques',
 		'all_feeds' => 'Tous les flux',
 		'all_feeds' => 'Tous les flux',
 		'category' => 'Catégorie',
 		'category' => 'Catégorie',
 		'entry_count' => 'Nombre d’articles',
 		'entry_count' => 'Nombre d’articles',
@@ -155,37 +154,44 @@ return array(
 		'status_unread' => 'non lus',
 		'status_unread' => 'non lus',
 		'title' => 'Statistiques',
 		'title' => 'Statistiques',
 		'top_feed' => 'Les dix plus gros flux',
 		'top_feed' => 'Les dix plus gros flux',
+		'_' => 'Statistiques',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'Configuration du système',
 		'auto-update-url' => 'URL du service de mise à jour',
 		'auto-update-url' => 'URL du service de mise à jour',
-		'force_email_validation' => 'Forcer la validation des adresses email',
-		'instance-name' => 'Nom de l’instance',
-		'max-categories' => 'Limite de catégories par utilisateur',
-		'max-feeds' => 'Limite de flux par utilisateur',
 		'cookie-duration' => array(
 		'cookie-duration' => array(
 			'help' => 'en secondes',
 			'help' => 'en secondes',
 			'number' => 'Durée avant expiration de la session',
 			'number' => 'Durée avant expiration de la session',
 		),
 		),
+		'force_email_validation' => 'Forcer la validation des adresses email',
+		'instance-name' => 'Nom de l’instance',
+		'max-categories' => 'Limite de catégories par utilisateur',
+		'max-feeds' => 'Limite de flux par utilisateur',
 		'registration' => array(
 		'registration' => array(
 			'help' => 'Un chiffre de 0 signifie que l’on peut créer un nombre infini de comptes',
 			'help' => 'Un chiffre de 0 signifie que l’on peut créer un nombre infini de comptes',
 			'number' => 'Nombre max de comptes',
 			'number' => 'Nombre max de comptes',
 		),
 		),
+		'_' => 'Configuration du système',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'Système de mise à jour',
 		'apply' => 'Appliquer la mise à jour',
 		'apply' => 'Appliquer la mise à jour',
 		'check' => 'Vérifier les mises à jour',
 		'check' => 'Vérifier les mises à jour',
 		'current_version' => 'Votre version actuelle de FreshRSS est la %s.',
 		'current_version' => 'Votre version actuelle de FreshRSS est la %s.',
 		'last' => 'Dernière vérification : %s',
 		'last' => 'Dernière vérification : %s',
 		'none' => 'Aucune mise à jour à appliquer',
 		'none' => 'Aucune mise à jour à appliquer',
 		'title' => 'Système de mise à jour',
 		'title' => 'Système de mise à jour',
+		'_' => 'Système de mise à jour',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',
+		'article_count' => 'Articles',
+		'back_to_manage' => '← Revenir à la liste des utilisateurs',
 		'create' => 'Créer un nouvel utilisateur',
 		'create' => 'Créer un nouvel utilisateur',
+		'database_size' => 'Volumétrie',
 		'delete_users' => 'Supprimer un utilisateur',
 		'delete_users' => 'Supprimer un utilisateur',
+		'email' => 'Adresse email',
+		'feed_count' => 'Flux',
 		'language' => 'Langue',
 		'language' => 'Langue',
+		'list' => 'Liste des utilisateurs',
 		'number' => '%d compte a déjà été créé',
 		'number' => '%d compte a déjà été créé',
 		'numbers' => '%d comptes ont déjà été créés',
 		'numbers' => '%d comptes ont déjà été créés',
 		'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
 		'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
@@ -193,8 +199,8 @@ return array(
 		'selected' => 'Utilisateur sélectionné',
 		'selected' => 'Utilisateur sélectionné',
 		'title' => 'Gestion des utilisateurs',
 		'title' => 'Gestion des utilisateurs',
 		'update_users' => 'Mettre à jour un utilisateur',
 		'update_users' => 'Mettre à jour un utilisateur',
-		'user_list' => 'Liste des utilisateurs',
 		'username' => 'Nom d’utilisateur',
 		'username' => 'Nom d’utilisateur',
 		'users' => 'Utilisateurs',
 		'users' => 'Utilisateurs',
+		'user_list' => 'Liste des utilisateurs',
 	),
 	),
 );
 );

+ 17 - 16
app/i18n/fr/conf.php

@@ -2,34 +2,33 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Archivage',
 		'delete_after' => 'Supprimer les articles après',
 		'delete_after' => 'Supprimer les articles après',
 		'exception' => 'Exception de nettoyage',
 		'exception' => 'Exception de nettoyage',
 		'help' => 'D’autres options sont disponibles dans la configuration individuelle des flux.',
 		'help' => 'D’autres options sont disponibles dans la configuration individuelle des flux.',
 		'keep_favourites' => 'Ne jamais supprimer les articles favoris',
 		'keep_favourites' => 'Ne jamais supprimer les articles favoris',
-		'keep_min_by_feed' => 'Nombre minimum d’articles à conserver par flux',
 		'keep_labels' => 'Ne jamais supprimer les articles étiquetés',
 		'keep_labels' => 'Ne jamais supprimer les articles étiquetés',
+		'keep_max' => 'Nombre maximum d’articles à conserver',
+		'keep_min_by_feed' => 'Nombre minimum d’articles à conserver par flux',
+		'keep_period' => 'Âge maximum des articles à conserver',
 		'keep_unreads' => 'Ne jamais supprimer les articles non lus',
 		'keep_unreads' => 'Ne jamais supprimer les articles non lus',
-		'maintenance' => 'Maintenance',
+		'maintenance' => 'Maintenance',	// TODO - Translation
 		'optimize' => 'Optimiser la base de données',
 		'optimize' => 'Optimiser la base de données',
 		'optimize_help' => 'À faire de temps en temps pour réduire la taille de la BDD',
 		'optimize_help' => 'À faire de temps en temps pour réduire la taille de la BDD',
 		'policy' => 'Politique de nettoyage',
 		'policy' => 'Politique de nettoyage',
 		'policy_warning' => 'Si aucune politique de nettoyage n’est sélectionnée, tous les articles seront conservés.',
 		'policy_warning' => 'Si aucune politique de nettoyage n’est sélectionnée, tous les articles seront conservés.',
 		'purge_now' => 'Purger maintenant',
 		'purge_now' => 'Purger maintenant',
-		'keep_max' => 'Nombre maximum d’articles à conserver',
-		'keep_period' => 'Âge maximum des articles à conserver',
 		'title' => 'Archivage',
 		'title' => 'Archivage',
 		'ttl' => 'Ne pas automatiquement rafraîchir plus souvent que',
 		'ttl' => 'Ne pas automatiquement rafraîchir plus souvent que',
+		'_' => 'Archivage',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Affichage',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Ligne du bas',
 			'bottom_line' => 'Ligne du bas',
+			'display_authors' => 'Authors',	// TODO - Translation
 			'entry' => 'Icônes d’article',
 			'entry' => 'Icônes d’article',
 			'publication_date' => 'Date de publication',
 			'publication_date' => 'Date de publication',
 			'related_tags' => 'Tags de l’article',
 			'related_tags' => 'Tags de l’article',
 			'sharing' => 'Partage',
 			'sharing' => 'Partage',
-			'display_authors' => 'Authors',  //TODO - Translation
 			'top_line' => 'Ligne du haut',
 			'top_line' => 'Ligne du haut',
 		),
 		),
 		'language' => 'Langue',
 		'language' => 'Langue',
@@ -47,21 +46,22 @@ return array(
 			'no_limit' => 'Pas de limite',
 			'no_limit' => 'Pas de limite',
 			'thin' => 'Fine',
 			'thin' => 'Fine',
 		),
 		),
+		'_' => 'Affichage',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Gestion du profil',
+		'api' => 'Gestion de l’API',
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Suppression du compte',
 			'warn' => 'Le compte et toutes les données associées vont être supprimées.',
 			'warn' => 'Le compte et toutes les données associées vont être supprimées.',
+			'_' => 'Suppression du compte',
 		),
 		),
 		'email' => 'Adresse email',
 		'email' => 'Adresse email',
 		'password_api' => 'Mot de passe API<br /><small>(ex. : pour applis mobiles)</small>',
 		'password_api' => 'Mot de passe API<br /><small>(ex. : pour applis mobiles)</small>',
 		'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
 		'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
 		'password_format' => '7 caractères minimum',
 		'password_format' => '7 caractères minimum',
 		'title' => 'Profil',
 		'title' => 'Profil',
+		'_' => 'Gestion du profil',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'Filtres utilisateurs',
 		'deprecated' => 'Ce filtre n’est plus valide. La catégorie ou le flux concerné a été supprimé.',
 		'deprecated' => 'Ce filtre n’est plus valide. La catégorie ou le flux concerné a été supprimé.',
 		'display' => 'Afficher les résultats du filtre',
 		'display' => 'Afficher les résultats du filtre',
 		'filter' => 'Filtres appliqués :',
 		'filter' => 'Filtres appliqués :',
@@ -69,8 +69,8 @@ return array(
 		'get_category' => 'Afficher la catégorie "%s"',
 		'get_category' => 'Afficher la catégorie "%s"',
 		'get_favorite' => 'Afficher les articles favoris',
 		'get_favorite' => 'Afficher les articles favoris',
 		'get_feed' => 'Afficher le flux "%s"',
 		'get_feed' => 'Afficher le flux "%s"',
-		'no_filter' => 'Aucun filtre appliqué',
 		'none' => 'Vous n’avez pas encore créé de filtre.',
 		'none' => 'Vous n’avez pas encore créé de filtre.',
+		'no_filter' => 'Aucun filtre appliqué',
 		'number' => 'Filtre n°%d',
 		'number' => 'Filtre n°%d',
 		'order_asc' => 'Afficher les articles les plus anciens en premier',
 		'order_asc' => 'Afficher les articles les plus anciens en premier',
 		'order_desc' => 'Afficher les articles les plus récents en premier',
 		'order_desc' => 'Afficher les articles les plus récents en premier',
@@ -93,9 +93,9 @@ return array(
 		'state_14' => 'Afficher les articles non lus',
 		'state_14' => 'Afficher les articles non lus',
 		'state_15' => 'Afficher tous les articles',
 		'state_15' => 'Afficher tous les articles',
 		'title' => 'Filtres utilisateurs',
 		'title' => 'Filtres utilisateurs',
+		'_' => 'Filtres utilisateurs',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Lecture',
 		'after_onread' => 'Après “marquer tout comme lu”,',
 		'after_onread' => 'Après “marquer tout comme lu”,',
 		'articles_per_page' => 'Nombre d’articles par page',
 		'articles_per_page' => 'Nombre d’articles par page',
 		'auto_load_more' => 'Charger les articles suivants en bas de page',
 		'auto_load_more' => 'Charger les articles suivants en bas de page',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'Marquer un article comme lu…',
 			'when' => 'Marquer un article comme lu…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Articles à afficher',
 			'adaptive' => 'Adapter l’affichage',
 			'adaptive' => 'Adapter l’affichage',
 			'all_articles' => 'Afficher tous les articles',
 			'all_articles' => 'Afficher tous les articles',
 			'unread' => 'Afficher les non lus',
 			'unread' => 'Afficher les non lus',
+			'_' => 'Articles à afficher',
 		),
 		),
 		'sides_close_article' => 'Cliquer hors de la zone de texte ferme l’article',
 		'sides_close_article' => 'Cliquer hors de la zone de texte ferme l’article',
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Ordre de tri',
 			'newer_first' => 'Plus récents en premier',
 			'newer_first' => 'Plus récents en premier',
 			'older_first' => 'Plus anciens en premier',
 			'older_first' => 'Plus anciens en premier',
+			'_' => 'Ordre de tri',
 		),
 		),
 		'sticky_post' => 'Aligner l’article en haut quand il est ouvert',
 		'sticky_post' => 'Aligner l’article en haut quand il est ouvert',
 		'title' => 'Lecture',
 		'title' => 'Lecture',
@@ -135,9 +135,9 @@ return array(
 			'normal' => 'Vue normale',
 			'normal' => 'Vue normale',
 			'reader' => 'Vue lecture',
 			'reader' => 'Vue lecture',
 		),
 		),
+		'_' => 'Lecture',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Partage',
 		'add' => 'Ajouter une méthode de partage',
 		'add' => 'Ajouter une méthode de partage',
 		'blogotext' => 'Blogotext',
 		'blogotext' => 'Blogotext',
 		'diaspora' => 'Diaspora*',
 		'diaspora' => 'Diaspora*',
@@ -152,9 +152,9 @@ return array(
 		'title' => 'Partage',
 		'title' => 'Partage',
 		'twitter' => 'Twitter',
 		'twitter' => 'Twitter',
 		'wallabag' => 'wallabag',
 		'wallabag' => 'wallabag',
+		'_' => 'Partage',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Raccourcis',
 		'article_action' => 'Actions associées à l’article courant',
 		'article_action' => 'Actions associées à l’article courant',
 		'auto_share' => 'Partager',
 		'auto_share' => 'Partager',
 		'auto_share_help' => 'S’il n’y a qu’un mode de partage, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.',
 		'auto_share_help' => 'S’il n’y a qu’un mode de partage, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.',
@@ -186,6 +186,7 @@ return array(
 		'user_filter' => 'Accéder aux filtres utilisateur',
 		'user_filter' => 'Accéder aux filtres utilisateur',
 		'user_filter_help' => 'S’il n’y a qu’un filtre utilisateur, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.',
 		'user_filter_help' => 'S’il n’y a qu’un filtre utilisateur, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.',
 		'views' => 'Vues',
 		'views' => 'Vues',
+		'_' => 'Raccourcis',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',

+ 17 - 11
app/i18n/fr/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Optimisation terminée.',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'Vous n’avez pas le droit d’accéder à cette page !',
 		'denied' => 'Vous n’avez pas le droit d’accéder à cette page !',
 		'not_found' => 'La page que vous cherchez n’existe pas !',
 		'not_found' => 'La page que vous cherchez n’existe pas !',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'Optimisation terminée.',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Votre mot de passe n’a pas pu être mis à jour',
+			'updated' => 'Votre mot de passe a été mis à jour',
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'Un problème est survenu lors de la configuration de votre système d’authentification. Veuillez réessayer plus tard.',
 			'not_set' => 'Un problème est survenu lors de la configuration de votre système d’authentification. Veuillez réessayer plus tard.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s ne peut pas être activée. <a href="%s">Consulter les logs de FreshRSS</a> pour plus de détails.',
 			'ko' => '%s ne peut pas être activée. <a href="%s">Consulter les logs de FreshRSS</a> pour plus de détails.',
 			'ok' => '%s est désormais activée',
 			'ok' => '%s est désormais activée',
 		),
 		),
-		'no_access' => 'Vous n’avez aucun accès sur %s',
 		'not_enabled' => '%s n’est pas encore activée',
 		'not_enabled' => '%s n’est pas encore activée',
 		'not_found' => '%s n’existe pas',
 		'not_found' => '%s n’existe pas',
+		'no_access' => 'Vous n’avez aucun accès sur %s',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'L’extension ZIP n’est pas présente sur votre serveur. Veuillez essayer d’exporter les fichiers un par un.',
 		'export_no_zip_extension' => 'L’extension ZIP n’est pas présente sur votre serveur. Veuillez essayer d’exporter les fichiers un par un.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'La catégorie a été vidée.',
 			'emptied' => 'La catégorie a été vidée.',
 			'error' => 'La catégorie n’a pas pu être modifiée',
 			'error' => 'La catégorie n’a pas pu être modifiée',
 			'name_exists' => 'Une catégorie possède déjà ce nom.',
 			'name_exists' => 'Une catégorie possède déjà ce nom.',
-			'no_id' => 'Vous devez préciser l’id de la catégorie.',
-			'no_name' => 'Vous devez préciser un nom pour la catégorie.',
 			'not_delete_default' => 'Vous ne pouvez pas supprimer la catégorie par défaut !',
 			'not_delete_default' => 'Vous ne pouvez pas supprimer la catégorie par défaut !',
 			'not_exist' => 'Cette catégorie n’existe pas !',
 			'not_exist' => 'Cette catégorie n’existe pas !',
+			'no_id' => 'Vous devez préciser l’id de la catégorie.',
+			'no_name' => 'Vous devez préciser un nom pour la catégorie.',
 			'over_max' => 'Vous avez atteint votre limite de catégories (%d)',
 			'over_max' => 'Vous avez atteint votre limite de catégories (%d)',
 			'updated' => 'La catégorie a été mise à jour.',
 			'updated' => 'La catégorie a été mise à jour.',
 		),
 		),
@@ -82,10 +88,10 @@ return array(
 			'error' => 'Une erreur est survenue',
 			'error' => 'Une erreur est survenue',
 			'internal_problem' => 'Le flux ne peut pas être ajouté. <a href="%s">Consulter les logs de FreshRSS</a> pour plus de détails. Vous pouvez essayer de forcer l’ajout par addition de <code>#force_feed</code> à l’URL.',
 			'internal_problem' => 'Le flux ne peut pas être ajouté. <a href="%s">Consulter les logs de FreshRSS</a> pour plus de détails. Vous pouvez essayer de forcer l’ajout par addition de <code>#force_feed</code> à l’URL.',
 			'invalid_url' => 'L’url <em>%s</em> est invalide.',
 			'invalid_url' => 'L’url <em>%s</em> est invalide.',
+			'not_added' => '<em>%s</em> n’a pas pu être ajouté.',
+			'no_refresh' => 'Il n’y a aucun flux à actualiser…',
 			'n_actualized' => '%d flux ont été mis à jour.',
 			'n_actualized' => '%d flux ont été mis à jour.',
 			'n_entries_deleted' => '%d articles ont été supprimés.',
 			'n_entries_deleted' => '%d articles ont été supprimés.',
-			'no_refresh' => 'Il n’y a aucun flux à actualiser…',
-			'not_added' => '<em>%s</em> n’a pas pu être ajouté.',
 			'over_max' => 'Vous avez atteint votre limite de flux (%d)',
 			'over_max' => 'Vous avez atteint votre limite de flux (%d)',
 			'updated' => 'Le flux a été mis à jour',
 			'updated' => 'Le flux a été mis à jour',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'L’utilisateur %s a été créé.',
 			'error' => 'L’utilisateur %s ne peut pas être créé.',
 			'error' => 'L’utilisateur %s ne peut pas être créé.',
+			'_' => 'L’utilisateur %s a été créé.',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'L’utilisateur %s a été supprimé.',
 			'error' => 'L’utilisateur %s ne peut pas être supprimé.',
 			'error' => 'L’utilisateur %s ne peut pas être supprimé.',
+			'_' => 'L’utilisateur %s a été supprimé.',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'L’utilisateur %s a été mis à jour',
 			'error' => 'L’utilisateur %s n’a pas été mis à jour',
 			'error' => 'L’utilisateur %s n’a pas été mis à jour',
+			'_' => 'L’utilisateur %s a été mis à jour',
 		),
 		),
 	),
 	),
 );
 );

+ 14 - 12
app/i18n/fr/gen.php

@@ -16,6 +16,7 @@ return array(
 		'manage' => 'Gérer',
 		'manage' => 'Gérer',
 		'mark_favorite' => 'Mettre en favori',
 		'mark_favorite' => 'Mettre en favori',
 		'mark_read' => 'Marquer comme lu',
 		'mark_read' => 'Marquer comme lu',
+		'purge' => 'Purger',
 		'remove' => 'Supprimer',
 		'remove' => 'Supprimer',
 		'see_website' => 'Voir le site',
 		'see_website' => 'Voir le site',
 		'submit' => 'Valider',
 		'submit' => 'Valider',
@@ -29,19 +30,19 @@ return array(
 		'login' => 'Connexion',
 		'login' => 'Connexion',
 		'logout' => 'Déconnexion',
 		'logout' => 'Déconnexion',
 		'password' => array(
 		'password' => array(
-			'_' => 'Mot de passe',
 			'format' => '<small>7 caractères minimum</small>',
 			'format' => '<small>7 caractères minimum</small>',
+			'_' => 'Mot de passe',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'Nouveau compte',
 			'ask' => 'Créer un compte ?',
 			'ask' => 'Créer un compte ?',
 			'title' => 'Création de compte',
 			'title' => 'Création de compte',
+			'_' => 'Nouveau compte',
 		),
 		),
 		'reset' => 'Réinitialisation de l’authentification',
 		'reset' => 'Réinitialisation de l’authentification',
 		'username' => array(
 		'username' => array(
-			'_' => 'Nom d’utilisateur',
 			'admin' => 'Nom d’utilisateur administrateur',
 			'admin' => 'Nom d’utilisateur administrateur',
 			'format' => '<small>16 caractères alphanumériques maximum</small>',
 			'format' => '<small>16 caractères alphanumériques maximum</small>',
+			'_' => 'Nom d’utilisateur',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -64,8 +65,8 @@ return array(
 		'Jan' => '\\j\\a\\n\\v\\i\\e\\r',
 		'Jan' => '\\j\\a\\n\\v\\i\\e\\r',
 		'jan' => 'jan.',
 		'jan' => 'jan.',
 		'january' => 'janvier',
 		'january' => 'janvier',
-		'Jul' => '\\j\\u\\i\\l\\l\\e\\t',
 		'jul' => 'jui.',
 		'jul' => 'jui.',
+		'Jul' => '\\j\\u\\i\\l\\l\\e\\t',
 		'july' => 'juillet',
 		'july' => 'juillet',
 		'Jun' => '\\j\\u\\i\\n',
 		'Jun' => '\\j\\u\\i\\n',
 		'jun' => 'juin',
 		'jun' => 'juin',
@@ -75,8 +76,8 @@ return array(
 		'last_month' => 'Depuis le mois dernier',
 		'last_month' => 'Depuis le mois dernier',
 		'last_week' => 'Depuis la semaine dernière',
 		'last_week' => 'Depuis la semaine dernière',
 		'last_year' => 'Depuis l’année dernière',
 		'last_year' => 'Depuis l’année dernière',
-		'Mar' => '\\m\\a\\r\\s',
 		'mar' => 'mars',
 		'mar' => 'mars',
+		'Mar' => '\\m\\a\\r\\s',
 		'march' => 'mars',
 		'march' => 'mars',
 		'May' => '\\m\\a\\i',
 		'May' => '\\m\\a\\i',
 		'may' => 'mai',
 		'may' => 'mai',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => 'Hier',
 		'yesterday' => 'Hier',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'À propos de FreshRSS',
 		'about' => 'À propos de FreshRSS',
+		'_' => 'FreshRSS',
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Catégorie vide',
 		'category_empty' => 'Catégorie vide',
@@ -122,13 +123,14 @@ return array(
 		'en' => 'English',
 		'en' => 'English',
 		'es' => 'Español',
 		'es' => 'Español',
 		'fr' => 'Français',
 		'fr' => 'Français',
-		'he' => 'עברית',
+		'he' => 'עברית',	// TODO - Translation
 		'it' => 'Italiano',
 		'it' => 'Italiano',
 		'kr' => '한국어',
 		'kr' => '한국어',
 		'nl' => 'Nederlands',
 		'nl' => 'Nederlands',
-		'oc' => 'Occitan',
+		'oc' => 'Occitan',	// TODO - Translation
 		'pt-br' => 'Português (Brasil)',
 		'pt-br' => 'Português (Brasil)',
 		'ru' => 'Русский',
 		'ru' => 'Русский',
+		'sk' => 'Slovenčina',	// TODO - Translation
 		'tr' => 'Türkçe',
 		'tr' => 'Türkçe',
 		'zh-cn' => '简体中文',
 		'zh-cn' => '简体中文',
 	),
 	),
@@ -178,11 +180,11 @@ return array(
 		'jdh' => 'Journal du hacker',
 		'jdh' => 'Journal du hacker',
 		'Known' => 'Sites basés sur Known',
 		'Known' => 'Sites basés sur Known',
 		'lemmy' => 'Lemmy',
 		'lemmy' => 'Lemmy',
-		'linkedin' => 'LinkedIn',
-		'mastodon' => 'Mastodon',
+		'linkedin' => 'LinkedIn',	// TODO - Translation
+		'mastodon' => 'Mastodon',	// TODO - Translation
 		'movim' => 'Movim',
 		'movim' => 'Movim',
-		'pinboard' => 'Pinboard',
-		'pocket' => 'Pocket',
+		'pinboard' => 'Pinboard',	// TODO - Translation
+		'pocket' => 'Pocket',	// TODO - Translation
 		'print' => 'Imprimer',
 		'print' => 'Imprimer',
 		'shaarli' => 'Shaarli',
 		'shaarli' => 'Shaarli',
 		'twitter' => 'Twitter',
 		'twitter' => 'Twitter',

+ 6 - 6
app/i18n/fr/index.php

@@ -2,7 +2,6 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'À propos',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'bugs_reports' => 'Rapports de bugs',
 		'bugs_reports' => 'Rapports de bugs',
 		'credits' => 'Crédits',
 		'credits' => 'Crédits',
@@ -14,23 +13,21 @@ return array(
 		'title' => 'À propos',
 		'title' => 'À propos',
 		'version' => 'Version',
 		'version' => 'Version',
 		'website' => 'Site Internet',
 		'website' => 'Site Internet',
-	),
-	'tos' => array(
-		'title' => 'Conditions Générales d’Utilisation',
+		'_' => 'À propos',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Vous pouvez ajouter des flux.',
 		'add' => 'Vous pouvez ajouter des flux.',
 		'empty' => 'Il n’y a aucun article à afficher.',
 		'empty' => 'Il n’y a aucun article à afficher.',
 		'rss_of' => 'Flux RSS de %s',
 		'rss_of' => 'Flux RSS de %s',
 		'title' => 'Vos flux RSS',
 		'title' => 'Vos flux RSS',
-		'title_global' => 'Vue globale',
 		'title_fav' => 'Vos favoris',
 		'title_fav' => 'Vos favoris',
+		'title_global' => 'Vue globale',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Logs',
 		'clear' => 'Effacer les logs',
 		'clear' => 'Effacer les logs',
 		'empty' => 'Les logs sont vides.',
 		'empty' => 'Les logs sont vides.',
 		'title' => 'Logs',
 		'title' => 'Logs',
+		'_' => 'Logs',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'À propos de FreshRSS',
 		'about' => 'À propos de FreshRSS',
@@ -63,4 +60,7 @@ return array(
 	'tag' => array(
 	'tag' => array(
 		'related' => 'Tags de l’article',
 		'related' => 'Tags de l’article',
 	),
 	),
+	'tos' => array(
+		'title' => 'Conditions Générales d’Utilisation',
+	),
 );
 );

+ 6 - 6
app/i18n/fr/install.php

@@ -17,20 +17,19 @@ return array(
 		'type' => 'Méthode d’authentification',
 		'type' => 'Méthode d’authentification',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'Base de données',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'Configuration de la base de données',
 			'ko' => 'Vérifiez les informations d’accès à la base de données.',
 			'ko' => 'Vérifiez les informations d’accès à la base de données.',
 			'ok' => 'La configuration de la base de données a été enregistrée.',
 			'ok' => 'La configuration de la base de données a été enregistrée.',
+			'_' => 'Configuration de la base de données',
 		),
 		),
 		'host' => 'Hôte',
 		'host' => 'Hôte',
 		'password' => 'Mot de passe pour base de données',
 		'password' => 'Mot de passe pour base de données',
 		'prefix' => 'Préfixe des tables',
 		'prefix' => 'Préfixe des tables',
 		'type' => 'Type de base de données',
 		'type' => 'Type de base de données',
 		'username' => 'Nom d’utilisateur pour base de données',
 		'username' => 'Nom d’utilisateur pour base de données',
+		'_' => 'Base de données',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'Vérifications',
 		'already_installed' => 'FreshRSS semble avoir déjà été installé !',
 		'already_installed' => 'FreshRSS semble avoir déjà été installé !',
 		'cache' => array(
 		'cache' => array(
 			'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/cache</em>. Le serveur HTTP doit être capable d’écrire dedans',
 			'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/cache</em>. Le serveur HTTP doit être capable d’écrire dedans',
@@ -96,10 +95,11 @@ return array(
 			'nok' => 'Impossible de trouver une librairie requise pour XML.',
 			'nok' => 'Impossible de trouver une librairie requise pour XML.',
 			'ok' => 'Vouz disposez de la librairie requise pour XML.',
 			'ok' => 'Vouz disposez de la librairie requise pour XML.',
 		),
 		),
+		'_' => 'Vérifications',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'Configuration générale',
 		'ok' => 'La configuration générale a été enregistrée.',
 		'ok' => 'La configuration générale a été enregistrée.',
+		'_' => 'Configuration générale',
 	),
 	),
 	'congratulations' => 'Félicitations !',
 	'congratulations' => 'Félicitations !',
 	'default_user' => 'Nom de l’utilisateur par défaut <small>(16 caractères alphanumériques maximum)</small>',
 	'default_user' => 'Nom de l’utilisateur par défaut <small>(16 caractères alphanumériques maximum)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'Réinstaller FreshRSS vous fera perdre la configuration précédente. Êtes-vous sûr de vouloir continuer ?',
 		'confirm_reinstall' => 'Réinstaller FreshRSS vous fera perdre la configuration précédente. Êtes-vous sûr de vouloir continuer ?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'Langue',
 		'choose' => 'Choisissez la langue pour FreshRSS',
 		'choose' => 'Choisissez la langue pour FreshRSS',
 		'defined' => 'La langue a bien été définie.',
 		'defined' => 'La langue a bien été définie.',
+		'_' => 'Langue',
 	),
 	),
 	'not_deleted' => 'Quelque chose s’est mal passé, vous devez supprimer le fichier <em>%s</em> à la main.',
 	'not_deleted' => 'Quelque chose s’est mal passé, vous devez supprimer le fichier <em>%s</em> à la main.',
 	'ok' => 'L’installation s’est bien passée.',
 	'ok' => 'L’installation s’est bien passée.',
 	'step' => 'étape %d',
 	'step' => 'étape %d',
 	'steps' => 'Étapes',
 	'steps' => 'Étapes',
-	'title' => 'Installation · FreshRSS',
 	'this_is_the_end' => 'This is the end',
 	'this_is_the_end' => 'This is the end',
+	'title' => 'Installation · FreshRSS',
 );
 );

+ 7 - 7
app/i18n/fr/sub.php

@@ -3,7 +3,7 @@
 return array(
 return array(
 	'api' => array(
 	'api' => array(
 		'documentation' => 'Copier l’URL suivante dans l’outil qui utilisera l’API.',
 		'documentation' => 'Copier l’URL suivante dans l’outil qui utilisera l’API.',
-		'title' => 'API',
+		'title' => 'API',	// TODO - Translation
 	),
 	),
 	'bookmarklet' => array(
 	'bookmarklet' => array(
 		'documentation' => 'Glisser ce bouton dans la barre des favoris ou cliquer droit dessus et choisir "Enregistrer ce lien". Ensuite, cliquer sur le bouton "S’abonner" sur les pages auxquelles vous voulez vous abonner.',
 		'documentation' => 'Glisser ce bouton dans la barre des favoris ou cliquer droit dessus et choisir "Enregistrer ce lien". Ensuite, cliquer sur le bouton "S’abonner" sur les pages auxquelles vous voulez vous abonner.',
@@ -11,7 +11,6 @@ return array(
 		'title' => 'Bookmarklet',
 		'title' => 'Bookmarklet',
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'Catégorie',
 		'add' => 'Ajouter une catégorie',
 		'add' => 'Ajouter une catégorie',
 		'archiving' => 'Archivage',
 		'archiving' => 'Archivage',
 		'empty' => 'Catégorie vide',
 		'empty' => 'Catégorie vide',
@@ -20,6 +19,7 @@ return array(
 		'position' => 'Position d’affichage',
 		'position' => 'Position d’affichage',
 		'position_help' => 'Pour contrôler l’ordre de tri des catégories',
 		'position_help' => 'Pour contrôler l’ordre de tri des catégories',
 		'title' => 'Titre',
 		'title' => 'Titre',
+		'_' => 'Catégorie',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Ajouter un flux RSS',
 		'add' => 'Ajouter un flux RSS',
@@ -39,8 +39,8 @@ return array(
 		'empty' => 'Ce flux est vide. Veuillez vérifier qu’il est toujours maintenu.',
 		'empty' => 'Ce flux est vide. Veuillez vérifier qu’il est toujours maintenu.',
 		'error' => 'Ce flux a rencontré un problème. Veuillez vérifier qu’il est toujours accessible puis actualisez-le.',
 		'error' => 'Ce flux a rencontré un problème. Veuillez vérifier qu’il est toujours accessible puis actualisez-le.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filtres d’action',
 			'help' => 'Écrivez une recherche par ligne.',
 			'help' => 'Écrivez une recherche par ligne.',
+			'_' => 'Filtres d’action',
 		),
 		),
 		'information' => 'Informations',
 		'information' => 'Informations',
 		'keep_min' => 'Nombre minimum d’articles à conserver',
 		'keep_min' => 'Nombre minimum d’articles à conserver',
@@ -49,12 +49,11 @@ return array(
 		'no_selected' => 'Aucun flux sélectionné.',
 		'no_selected' => 'Aucun flux sélectionné.',
 		'number_entries' => '%d articles',
 		'number_entries' => '%d articles',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Visibilité',
 			'archived' => 'Ne pas afficher (archivé)',
 			'archived' => 'Ne pas afficher (archivé)',
 			'main_stream' => 'Afficher dans le flux principal',
 			'main_stream' => 'Afficher dans le flux principal',
 			'normal' => 'Afficher dans sa catégorie',
 			'normal' => 'Afficher dans sa catégorie',
+			'_' => 'Visibilité',
 		),
 		),
-		'websub' => 'Notification instantanée par WebSub',
 		'show' => array(
 		'show' => array(
 			'all' => 'Montrer tous les flux',
 			'all' => 'Montrer tous les flux',
 			'error' => 'Montrer seulement les flux en erreur',
 			'error' => 'Montrer seulement les flux en erreur',
@@ -72,6 +71,7 @@ return array(
 		'url' => 'URL du flux',
 		'url' => 'URL du flux',
 		'validator' => 'Vérifier la validité du flux',
 		'validator' => 'Vérifier la validité du flux',
 		'website' => 'URL du site',
 		'website' => 'URL du site',
+		'websub' => 'Notification instantanée par WebSub',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
 		'documentation' => 'Suivre les étapes décrites <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">ici</a> pour ajouter FreshRSS à la liste des lecteurs de flux dans Firefox.',
 		'documentation' => 'Suivre les étapes décrites <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">ici</a> pour ajouter FreshRSS à la liste des lecteurs de flux dans Firefox.',
@@ -80,9 +80,9 @@ return array(
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => 'Exporter',
 		'export' => 'Exporter',
+		'export_labelled' => 'Exporter les articles étiquetés',
 		'export_opml' => 'Exporter la liste des flux (OPML)',
 		'export_opml' => 'Exporter la liste des flux (OPML)',
 		'export_starred' => 'Exporter les favoris',
 		'export_starred' => 'Exporter les favoris',
-		'export_labelled' => 'Exporter les articles étiquetés',
 		'feed_list' => 'Liste des articles de %s',
 		'feed_list' => 'Liste des articles de %s',
 		'file_to_import' => 'Fichier à importer<br />(OPML, JSON ou ZIP)',
 		'file_to_import' => 'Fichier à importer<br />(OPML, JSON ou ZIP)',
 		'file_to_import_no_zip' => 'Fichier à importer<br />(OPML ou JSON)',
 		'file_to_import_no_zip' => 'Fichier à importer<br />(OPML ou JSON)',
@@ -97,8 +97,8 @@ return array(
 		'subscription_tools' => 'Outils d’abonnement',
 		'subscription_tools' => 'Outils d’abonnement',
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'Gestion des abonnements',
 		'feed_management' => 'Gestion des flux RSS',
 		'feed_management' => 'Gestion des flux RSS',
 		'subscription_tools' => 'Outils d’abonnement',
 		'subscription_tools' => 'Outils d’abonnement',
+		'_' => 'Gestion des abonnements',
 	),
 	),
 );
 );

+ 7 - 7
app/i18n/fr/user.php

@@ -14,7 +14,7 @@ return array(
 				'email_sent' => 'Un email a été envoyé à votre adresse.',
 				'email_sent' => 'Un email a été envoyé à votre adresse.',
 				'error' => 'L’adresse email n’a pas pu être validée.',
 				'error' => 'L’adresse email n’a pas pu être validée.',
 				'ok' => 'L’adresse email a été validée.',
 				'ok' => 'L’adresse email a été validée.',
-				'unnecessary' => 'L’adresse email a déjà été validée.',
+				'unneccessary' => 'The email address was already validated.',	// TODO - Translation
 				'wrong_token' => 'L’adresse email n’a pas pu être validée à cause d’un mauvais token.',
 				'wrong_token' => 'L’adresse email n’a pas pu être validée à cause d’un mauvais token.',
 			),
 			),
 			'need_to' => 'Vous devez valider votre adresse email avant de pouvoir utiliser %s.',
 			'need_to' => 'Vous devez valider votre adresse email avant de pouvoir utiliser %s.',
@@ -22,16 +22,16 @@ return array(
 			'title' => 'Validation de l’adresse email',
 			'title' => 'Validation de l’adresse email',
 		),
 		),
 	),
 	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'Vous devez accepter les conditions générales d’utilisation pour pouvoir vous inscrire.',
-		),
-	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
+			'body' => 'Vous venez de vous inscrire sur %s mais vous devez encore valider votre adresse email. Pour cela, veuillez cliquer sur ce lien :',
 			'title' => 'Vous devez valider votre compte',
 			'title' => 'Vous devez valider votre compte',
 			'welcome' => 'Bienvenue %s,',
 			'welcome' => 'Bienvenue %s,',
-			'body' => 'Vous venez de vous inscrire sur %s mais vous devez encore valider votre adresse email. Pour cela, veuillez cliquer sur ce lien :',
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'Vous devez accepter les conditions générales d’utilisation pour pouvoir vous inscrire.',
 		),
 		),
 	),
 	),
 );
 );

+ 78 - 72
app/i18n/he/admin.php

@@ -8,10 +8,10 @@ return array(
 		'form' => 'טופס אינטרנטי (מסורתי, דורש JavaScript)',
 		'form' => 'טופס אינטרנטי (מסורתי, דורש JavaScript)',
 		'http' => 'HTTP (למשתמשים מתקדמים עם HTTPS)',
 		'http' => 'HTTP (למשתמשים מתקדמים עם HTTPS)',
 		'none' => 'ללא (מסוכן)',
 		'none' => 'ללא (מסוכן)',
-		'title' => 'Authentication',	//TODO - Translation
+		'title' => 'Authentication',	// TODO - Translation
 		'title_reset' => 'איפוס אימות',
 		'title_reset' => 'איפוס אימות',
 		'token' => 'מחרוזת אימות',
 		'token' => 'מחרוזת אימות',
-		'token_help' => 'Allows to access RSS output of the default user without authentication:',	//TODO - Translation
+		'token_help' => 'Allows to access RSS output of the default user without authentication:',
 		'type' => 'שיטת אימות',
 		'type' => 'שיטת אימות',
 		'unsafe_autologin' => 'הרשאה להתחברות אוטומטית בפורמט: ',
 		'unsafe_autologin' => 'הרשאה להתחברות אוטומטית בפורמט: ',
 	),
 	),
@@ -21,12 +21,12 @@ return array(
 			'ok' => 'ההרשאות בתיקיית המטמון תקינות',
 			'ok' => 'ההרשאות בתיקיית המטמון תקינות',
 		),
 		),
 		'categories' => array(
 		'categories' => array(
-			'nok' => 'Category table is bad configured.',	//TODO - Translation
-			'ok' => 'Category table is ok.',	//TODO - Translation
+			'nok' => 'Category table is bad configured.',
+			'ok' => 'Category table is ok.',	// TODO - Translation
 		),
 		),
 		'connection' => array(
 		'connection' => array(
-			'nok' => 'Connection to the database cannot being established.',	//TODO - Translation
-			'ok' => 'Connection to the database is ok.',	//TODO - Translation
+			'nok' => 'Connection to the database cannot being established.',
+			'ok' => 'Connection to the database is ok.',	// TODO - Translation
 		),
 		),
 		'ctype' => array(
 		'ctype' => array(
 			'nok' => 'הספרייה הנדרשת ל character type checking (php-ctype) אינה מותקנת',
 			'nok' => 'הספרייה הנדרשת ל character type checking (php-ctype) אינה מותקנת',
@@ -34,44 +34,44 @@ return array(
 		),
 		),
 		'curl' => array(
 		'curl' => array(
 			'nok' => 'בURL לא מותקן (php-curl package)',
 			'nok' => 'בURL לא מותקן (php-curl package)',
-			'ok' => 'You have cURL extension.',	//TODO - Translation
+			'ok' => 'You have cURL extension.',
 		),
 		),
 		'data' => array(
 		'data' => array(
 			'nok' => 'יש לבדוק את ההרשאות בתיקייה <em>%s</em>. שרת הHTTP חייב להיות בעל הרשאות כתיבה.',
 			'nok' => 'יש לבדוק את ההרשאות בתיקייה <em>%s</em>. שרת הHTTP חייב להיות בעל הרשאות כתיבה.',
 			'ok' => 'ההרשאות בתיקיית הדאטא תקינות',
 			'ok' => 'ההרשאות בתיקיית הדאטא תקינות',
 		),
 		),
-		'database' => 'Database installation',	//TODO - Translation
+		'database' => 'Database installation',	// TODO - Translation
 		'dom' => array(
 		'dom' => array(
-			'nok' => 'הספרייה הנדרשת לסיור ב DOM אינה מותקנת  (php-xml package)',
+			'nok' => 'הספרייה הנדרשת לסיור ב DOM אינה מותקנת	(php-xml package)',
 			'ok' => 'הספרייה הנדרשת לסיור ב DOM מותקנת',
 			'ok' => 'הספרייה הנדרשת לסיור ב DOM מותקנת',
 		),
 		),
 		'entries' => array(
 		'entries' => array(
-			'nok' => 'Entry table is bad configured.',	//TODO - Translation
-			'ok' => 'Entry table is ok.',	//TODO - Translation
+			'nok' => 'Entry table is bad configured.',
+			'ok' => 'Entry table is ok.',	// TODO - Translation
 		),
 		),
 		'favicons' => array(
 		'favicons' => array(
-			'nok' => 'Check permissions on <em>./data/favicons</em> directory. HTTP server must have rights to write into',	//TODO - Translation
+			'nok' => 'Check permissions on <em>./data/favicons</em> directory. HTTP server must have rights to write into',	// TODO - Translation
 			'ok' => 'ההרשאות בתיקיית הfavicons תקינות',
 			'ok' => 'ההרשאות בתיקיית הfavicons תקינות',
 		),
 		),
 		'feeds' => array(
 		'feeds' => array(
-			'nok' => 'Feed table is bad configured.',	//TODO - Translation
-			'ok' => 'Feed table is ok.',	//TODO - Translation
+			'nok' => 'Feed table is bad configured.',
+			'ok' => 'Feed table is ok.',	// TODO - Translation
 		),
 		),
 		'fileinfo' => array(
 		'fileinfo' => array(
-			'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).',	//TODO - Translation
-			'ok' => 'You have the fileinfo library.',	//TODO - Translation
+			'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).',	// TODO - Translation
+			'ok' => 'You have the fileinfo library.',	// TODO - Translation
 		),
 		),
-		'files' => 'File installation',	//TODO - Translation
+		'files' => 'File installation',	// TODO - Translation
 		'json' => array(
 		'json' => array(
-			'nok' => 'You lack JSON (php-json package).',	//TODO - Translation
-			'ok' => 'You have JSON extension.',	//TODO - Translation
+			'nok' => 'You lack JSON (php-json package).',
+			'ok' => 'You have JSON extension.',	// TODO - Translation
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
-			'nok' => 'You lack the Minz framework.',	//TODO - Translation
+			'nok' => 'You lack the Minz framework.',
 			'ok' => 'יש לכם את תשתית Minz',
 			'ok' => 'יש לכם את תשתית Minz',
 		),
 		),
 		'pcre' => array(
 		'pcre' => array(
@@ -83,57 +83,56 @@ return array(
 			'ok' => 'PDO מותקן ולפחות אחד ממנהלי ההתקן הנתמכים מותקן (pdo_mysql, pdo_sqlite)',
 			'ok' => 'PDO מותקן ולפחות אחד ממנהלי ההתקן הנתמכים מותקן (pdo_mysql, pdo_sqlite)',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'PHP installation',	//TODO - Translation
 			'nok' => 'גירסת PHP שלכם היא %s אך FreshRSS דורש לפחות את גירסה %s',
 			'nok' => 'גירסת PHP שלכם היא %s אך FreshRSS דורש לפחות את גירסה %s',
 			'ok' => 'גירסת PHP שלכם היא %s, שתואמת ל FreshRSS',
 			'ok' => 'גירסת PHP שלכם היא %s, שתואמת ל FreshRSS',
+			'_' => 'PHP installation',	// TODO - Translation
 		),
 		),
 		'tables' => array(
 		'tables' => array(
-			'nok' => 'There is one or more lacking tables in the database.',	//TODO - Translation
-			'ok' => 'Tables are existing in the database.',	//TODO - Translation
+			'nok' => 'There is one or more lacking tables in the database.',
+			'ok' => 'Tables are existing in the database.',
 		),
 		),
-		'title' => 'Installation checking',	//TODO - Translation
+		'title' => 'Installation checking',	// TODO - Translation
 		'tokens' => array(
 		'tokens' => array(
-			'nok' => 'Check permissions on <em>./data/tokens</em> directory. HTTP server must have rights to write into',	//TODO - Translation
-			'ok' => 'Permissions on tokens directory are good.',	//TODO - Translation
+			'nok' => 'Check permissions on <em>./data/tokens</em> directory. HTTP server must have rights to write into',	// TODO - Translation
+			'ok' => 'Permissions on tokens directory are good.',	// TODO - Translation
 		),
 		),
 		'users' => array(
 		'users' => array(
-			'nok' => 'Check permissions on <em>./data/users</em> directory. HTTP server must have rights to write into',	//TODO - Translation
-			'ok' => 'Permissions on users directory are good.',	//TODO - Translation
+			'nok' => 'Check permissions on <em>./data/users</em> directory. HTTP server must have rights to write into',	// TODO - Translation
+			'ok' => 'Permissions on users directory are good.',	// TODO - Translation
 		),
 		),
 		'zip' => array(
 		'zip' => array(
-			'nok' => 'You lack ZIP extension (php-zip package).',	//TODO - Translation
-			'ok' => 'You have ZIP extension.',	//TODO - Translation
+			'nok' => 'You lack ZIP extension (php-zip package).',
+			'ok' => 'You have ZIP extension.',	// TODO - Translation
 		),
 		),
 	),
 	),
 	'extensions' => array(
 	'extensions' => array(
-		'author' => 'Author',	//TODO - Translation
-		'community' => 'Available community extensions',	//TODO - Translation
-		'description' => 'Description',	//TODO - Translation
-		'disabled' => 'Disabled',	//TODO - Translation
-		'empty_list' => 'There is no installed extension',	//TODO - Translation
-		'enabled' => 'Enabled',	//TODO - Translation
-		'latest' => 'Installed',	//TODO - Translation
-		'name' => 'Name',	//TODO - Translation
-		'no_configure_view' => 'This extension cannot be configured.',	//TODO - Translation
+		'author' => 'Author',	// TODO - Translation
+		'community' => 'Available community extensions',	// TODO - Translation
+		'description' => 'Description',	// TODO - Translation
+		'disabled' => 'Disabled',	// TODO - Translation
+		'empty_list' => 'There is no installed extension',
+		'enabled' => 'Enabled',	// TODO - Translation
+		'latest' => 'Installed',	// TODO - Translation
+		'name' => 'Name',	// TODO - Translation
+		'no_configure_view' => 'This extension cannot be configured.',	// TODO - Translation
 		'system' => array(
 		'system' => array(
-			'_' => 'System extensions',	//TODO - Translation
-			'no_rights' => 'System extension (you have no rights on it)',	//TODO - Translation
+			'no_rights' => 'System extension (you have no rights on it)',	// TODO - Translation
+			'_' => 'System extensions',	// TODO - Translation
 		),
 		),
-		'title' => 'Extensions',	//TODO - Translation
-		'update' => 'Update available',	//TODO - Translation
-		'user' => 'User extensions',	//TODO - Translation
-		'version' => 'Version',	//TODO - Translation
+		'title' => 'Extensions',	// TODO - Translation
+		'update' => 'Update available',	// TODO - Translation
+		'user' => 'User extensions',	// TODO - Translation
+		'version' => 'Version',	// TODO - Translation
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'סטטיסטיקות',
 		'all_feeds' => 'כל ההזנות',
 		'all_feeds' => 'כל ההזנות',
 		'category' => 'קטגוריה',
 		'category' => 'קטגוריה',
 		'entry_count' => 'סכום המאמרים',
 		'entry_count' => 'סכום המאמרים',
 		'entry_per_category' => 'מאמרים על פי קטגוריה',
 		'entry_per_category' => 'מאמרים על פי קטגוריה',
 		'entry_per_day' => 'מספר מאמרים ליום (30 ימים אחרונים)',
 		'entry_per_day' => 'מספר מאמרים ליום (30 ימים אחרונים)',
-		'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)',	//TODO - Translation
-		'entry_per_hour' => 'Per hour (average: %.2f messages)',	//TODO - Translation
-		'entry_per_month' => 'Per month (average: %.2f messages)',	//TODO - Translation
+		'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)',	// TODO - Translation
+		'entry_per_hour' => 'Per hour (average: %.2f messages)',	// TODO - Translation
+		'entry_per_month' => 'Per month (average: %.2f messages)',	// TODO - Translation
 		'entry_repartition' => 'חלוקת המאמרים',
 		'entry_repartition' => 'חלוקת המאמרים',
 		'feed' => 'הזנה',
 		'feed' => 'הזנה',
 		'feed_per_category' => 'הזנות על פי קטגוריה',
 		'feed_per_category' => 'הזנות על פי קטגוריה',
@@ -155,46 +154,53 @@ return array(
 		'status_unread' => 'לא נקרא',
 		'status_unread' => 'לא נקרא',
 		'title' => 'סטטיסטיקות',
 		'title' => 'סטטיסטיקות',
 		'top_feed' => 'עשרת ההזנות המובילות',
 		'top_feed' => 'עשרת ההזנות המובילות',
+		'_' => 'סטטיסטיקות',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'System configuration', //TODO - Translation
-		'auto-update-url' => 'Auto-update server URL', //TODO - Translation
+		'auto-update-url' => 'Auto-update server URL',	// TODO - Translation
 		'cookie-duration' => array(
 		'cookie-duration' => array(
-			'help' => 'in seconds', //TODO - Translation
-			'number' => 'Duration to keep logged in', //TODO - Translation
+			'help' => 'in seconds',	// TODO - Translation
+			'number' => 'Duration to keep logged in',	// TODO - Translation
 		),
 		),
-		'force_email_validation' => 'Force email addresses validation', //TODO - Translation
-		'instance-name' => 'Instance name', //TODO - Translation
-		'max-categories' => 'Categories per user limit', //TODO - Translation
-		'max-feeds' => 'Feeds per user limit', //TODO - Translation
+		'force_email_validation' => 'Force email addresses validation',	// TODO - Translation
+		'instance-name' => 'Instance name',	// TODO - Translation
+		'max-categories' => 'Categories per user limit',	// TODO - Translation
+		'max-feeds' => 'Feeds per user limit',	// TODO - Translation
 		'registration' => array(
 		'registration' => array(
-			'help' => '0 means that there is no account limit',	//TODO - Translation
-			'number' => 'Max number of accounts',	//TODO - Translation
+			'help' => '0 means that there is no account limit',	// TODO - Translation
+			'number' => 'Max number of accounts',	// TODO - Translation
 		),
 		),
+		'_' => 'System configuration',	// TODO - Translation
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'מערכת העדכון',
 		'apply' => 'החלת העדכון',
 		'apply' => 'החלת העדכון',
 		'check' => 'בדיקת עדכונים חדשים',
 		'check' => 'בדיקת עדכונים חדשים',
-		'current_version' => 'Your current version of FreshRSS is the %s.',	//TODO - Translation
+		'current_version' => 'Your current version of FreshRSS is the %s.',
 		'last' => 'תאריך בדיקה אחרון: %s',
 		'last' => 'תאריך בדיקה אחרון: %s',
 		'none' => 'אין עדכון להחלה',
 		'none' => 'אין עדכון להחלה',
 		'title' => 'מערכת העדכון',
 		'title' => 'מערכת העדכון',
+		'_' => 'מערכת העדכון',
 	),
 	),
 	'user' => array(
 	'user' => array(
-		'articles_and_size' => '%s articles (%s)',	//TODO - Translation
+		'articles_and_size' => '%s articles (%s)',	// TODO - Translation
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => 'יצירת משתמש חדש',
 		'create' => 'יצירת משתמש חדש',
-		'delete_users' => 'Delete user',	//TODO - Translation
+		'database_size' => 'Database size',	// TODO - Translation
+		'delete_users' => 'Delete user',	// TODO - Translation
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => 'שפה',
 		'language' => 'שפה',
-		'number' => 'There is %d account created',	//TODO - Translation
-		'numbers' => 'There are %d accounts created',	//TODO - Translation
+		'list' => 'User list',	// TODO - Translation
+		'number' => 'There is %d account created',	// TODO - Translation
+		'numbers' => 'There are %d accounts created',	// TODO - Translation
 		'password_form' => 'סיסמה<br /><small>(לשימוש בטפוס ההרשמה)</small>',
 		'password_form' => 'סיסמה<br /><small>(לשימוש בטפוס ההרשמה)</small>',
-		'password_format' => 'At least 7 characters',	//TODO - Translation
-		'selected' => 'Selected user',	//TODO - Translation
-		'title' => 'Manage users',	//TODO - Translation
-		'update_users' => 'Update user',	//TODO - Translation
-		'user_list' => 'רשימת משתמשים',
+		'password_format' => 'At least 7 characters',	// TODO - Translation
+		'selected' => 'Selected user',	// TODO - Translation
+		'title' => 'Manage users',	// TODO - Translation
+		'update_users' => 'Update user',	// TODO - Translation
 		'username' => 'שם משתמש',
 		'username' => 'שם משתמש',
 		'users' => 'משתמשים',
 		'users' => 'משתמשים',
+		'user_list' => 'רשימת משתמשים',
 	),
 	),
 );
 );

+ 53 - 52
app/i18n/he/conf.php

@@ -2,34 +2,33 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'ארכוב',
 		'delete_after' => 'מחיקת מאמרים לאחר',
 		'delete_after' => 'מחיקת מאמרים לאחר',
-		'exception' => 'Purge exception',	//TODO - Translation
+		'exception' => 'Purge exception',	// TODO - Translation
 		'help' => 'אפשרויות נוספות זמינות בזרמים ספציפיים',
 		'help' => 'אפשרויות נוספות זמינות בזרמים ספציפיים',
-		'keep_favourites' => 'Never delete favourites',	//TODO - Translation
-		'keep_min_by_feed' => 'Minimum number of articles to keep by feed',
-		'keep_labels' => 'Never delete labels',	//TODO - Translation
-		'keep_unreads' => 'Never delete unreads',	//TODO - Translation
-		'maintenance' => 'Maintenance',	//TODO - Translation
+		'keep_favourites' => 'Never delete favourites',	// TODO - Translation
+		'keep_labels' => 'Never delete labels',	// TODO - Translation
+		'keep_max' => 'Maximum number of articles to keep',	// TODO - Translation
+		'keep_min_by_feed' => 'Minimum number of articles to keep by feed',	// TODO - Translation
+		'keep_period' => 'Maximum age of articles to keep',	// TODO - Translation
+		'keep_unreads' => 'Never delete unreads',	// TODO - Translation
+		'maintenance' => 'Maintenance',	// TODO - Translation
 		'optimize' => 'מיטוב בסיס הנתונים',
 		'optimize' => 'מיטוב בסיס הנתונים',
 		'optimize_help' => 'ביצוע לעיתים קרובות על מנת למטב את בסיס הנתונים',
 		'optimize_help' => 'ביצוע לעיתים קרובות על מנת למטב את בסיס הנתונים',
-		'policy' => 'Purge policy',	//TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	//TODO - Translation
+		'policy' => 'Purge policy',	// TODO - Translation
+		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	// TODO - Translation
 		'purge_now' => 'ניקוי עכשיו',
 		'purge_now' => 'ניקוי עכשיו',
-		'keep_max' => 'Maximum number of articles to keep',	//TODO - Translation
-		'keep_period' => 'Maximum age of articles to keep',	//TODO - Translation
 		'title' => 'ארכוב',
 		'title' => 'ארכוב',
 		'ttl' => 'אין לרענן אוטומטית יותר מ',
 		'ttl' => 'אין לרענן אוטומטית יותר מ',
+		'_' => 'ארכוב',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'תצוגה',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'שורה תחתונה',
 			'bottom_line' => 'שורה תחתונה',
+			'display_authors' => 'Authors',	// TODO - Translation
 			'entry' => 'סמלילי מאמרים',
 			'entry' => 'סמלילי מאמרים',
 			'publication_date' => 'תאריך הפרסום',
 			'publication_date' => 'תאריך הפרסום',
-			'related_tags' => 'תגיות קשורות',	//TODO - Translation
+			'related_tags' => 'תגיות קשורות',
 			'sharing' => 'שיתוף',
 			'sharing' => 'שיתוף',
-			'display_authors' => 'Authors',  //TODO - Translation
 			'top_line' => 'שורה עליונה',
 			'top_line' => 'שורה עליונה',
 		),
 		),
 		'language' => 'שפה',
 		'language' => 'שפה',
@@ -37,7 +36,7 @@ return array(
 			'seconds' => 'שניות (0 משמעותה ללא פג תוקף)',
 			'seconds' => 'שניות (0 משמעותה ללא פג תוקף)',
 			'timeout' => 'HTML5 התראה פג תוקף',
 			'timeout' => 'HTML5 התראה פג תוקף',
 		),
 		),
-		'show_nav_buttons' => 'Show the navigation buttons',	//TODO - Translation
+		'show_nav_buttons' => 'Show the navigation buttons',	// TODO - Translation
 		'theme' => 'ערכת נושא',
 		'theme' => 'ערכת נושא',
 		'title' => 'תצוגה',
 		'title' => 'תצוגה',
 		'width' => array(
 		'width' => array(
@@ -47,34 +46,35 @@ return array(
 			'no_limit' => 'ללא הגבלה',
 			'no_limit' => 'ללא הגבלה',
 			'thin' => 'צר',
 			'thin' => 'צר',
 		),
 		),
+		'_' => 'תצוגה',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Profile management',	//TODO - Translation
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Account deletion',	//TODO - Translation
-			'warn' => 'Your account and all related data will be deleted.',	//TODO - Translation
+			'warn' => 'Your account and all related data will be deleted.',	// TODO - Translation
+			'_' => 'Account deletion',	// TODO - Translation
 		),
 		),
-		'email' => 'Email address',	//TODO - Translation
+		'email' => 'Email address',	// TODO - Translation
 		'password_api' => 'סיסמת API<br /><small>(לדוגמה ליישומים סלולריים)</small>',
 		'password_api' => 'סיסמת API<br /><small>(לדוגמה ליישומים סלולריים)</small>',
 		'password_form' => 'סיסמה<br /><small>(לשימוש בטפוס ההרשמה)</small>',
 		'password_form' => 'סיסמה<br /><small>(לשימוש בטפוס ההרשמה)</small>',
-		'password_format' => 'At least 7 characters',	//TODO - Translation
-		'title' => 'Profile',	//TODO - Translation
+		'password_format' => 'At least 7 characters',	// TODO - Translation
+		'title' => 'Profile',	// TODO - Translation
+		'_' => 'Profile management',	// TODO - Translation
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'שאילתות',
 		'deprecated' => 'שאילתה זו אינה בתוקף יותר, הפיד או הקטגוריה לייחוס נמחקו.',
 		'deprecated' => 'שאילתה זו אינה בתוקף יותר, הפיד או הקטגוריה לייחוס נמחקו.',
-		'display' => 'Display user query results',	//TODO - Translation
+		'display' => 'Display user query results',	// TODO - Translation
 		'filter' => 'מסננים בשימוש:',
 		'filter' => 'מסננים בשימוש:',
 		'get_all' => 'הצגת כל המאמרים',
 		'get_all' => 'הצגת כל המאמרים',
 		'get_category' => 'הצגת קטגוריה "%s"',
 		'get_category' => 'הצגת קטגוריה "%s"',
 		'get_favorite' => 'הצגת מאמרים מועדפים',
 		'get_favorite' => 'הצגת מאמרים מועדפים',
 		'get_feed' => 'הצגת הזנה %s',
 		'get_feed' => 'הצגת הזנה %s',
-		'no_filter' => 'ללא סינון',
 		'none' => 'אף שאילתה לא נוצרה עדיין.',
 		'none' => 'אף שאילתה לא נוצרה עדיין.',
+		'no_filter' => 'ללא סינון',
 		'number' => 'שאילתה מספר °%d',
 		'number' => 'שאילתה מספר °%d',
 		'order_asc' => 'הצגת מאמרים ישנים בראש',
 		'order_asc' => 'הצגת מאמרים ישנים בראש',
 		'order_desc' => 'הצגת מאמרים חדשים בראש',
 		'order_desc' => 'הצגת מאמרים חדשים בראש',
-		'remove' => 'Remove user query',	//TODO - Translation
+		'remove' => 'Remove user query',	// TODO - Translation
 		'search' => 'חיפוש "%s"',
 		'search' => 'חיפוש "%s"',
 		'state_0' => 'הצגת כל המאמרים',
 		'state_0' => 'הצגת כל המאמרים',
 		'state_1' => 'הצגת מאמרים שנקראו',
 		'state_1' => 'הצגת מאמרים שנקראו',
@@ -91,22 +91,22 @@ return array(
 		'state_12' => 'הצגת כל המאמרים',
 		'state_12' => 'הצגת כל המאמרים',
 		'state_13' => 'הצגת מאמרים שנקראו',
 		'state_13' => 'הצגת מאמרים שנקראו',
 		'state_14' => 'הצגת מאמרים שלא נקראו',
 		'state_14' => 'הצגת מאמרים שלא נקראו',
-		'state_15' => 'הצגת  כל המאמרים',
+		'state_15' => 'הצגת	כל המאמרים',
 		'title' => 'שאילתות',
 		'title' => 'שאילתות',
+		'_' => 'שאילתות',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'קריאה',
 		'after_onread' => 'לאחר “סימון הכל כנקרא”,',
 		'after_onread' => 'לאחר “סימון הכל כנקרא”,',
 		'articles_per_page' => 'מספר המאמרים בעמוד',
 		'articles_per_page' => 'מספר המאמרים בעמוד',
 		'auto_load_more' => 'טעינת המאמר הבא סוף העמוד',
 		'auto_load_more' => 'טעינת המאמר הבא סוף העמוד',
-		'auto_remove_article' => 'Hide articles after reading',	//TODO - Translation
+		'auto_remove_article' => 'Hide articles after reading',	// TODO - Translation
 		'confirm_enabled' => 'הצגת דו-שיח לאישור “סימון הכל כנקרא” ',
 		'confirm_enabled' => 'הצגת דו-שיח לאישור “סימון הכל כנקרא” ',
 		'display_articles_unfolded' => 'הצגת מאמרים בשלמותם כברירת מחדל',
 		'display_articles_unfolded' => 'הצגת מאמרים בשלמותם כברירת מחדל',
 		'display_categories_unfolded' => 'הצגת קטגוריות בשלמותן כברירת מחדל',
 		'display_categories_unfolded' => 'הצגת קטגוריות בשלמותן כברירת מחדל',
 		'hide_read_feeds' => 'הסתרת קטגוריות &amp; הזנות ללא מאמרים שלא נקראו (לא עובד יחד עם “הצגת כל המאמרים”)',
 		'hide_read_feeds' => 'הסתרת קטגוריות &amp; הזנות ללא מאמרים שלא נקראו (לא עובד יחד עם “הצגת כל המאמרים”)',
 		'img_with_lazyload' => 'שימוש ב "טעינה עצלה" על מנת לטעון תמונות',
 		'img_with_lazyload' => 'שימוש ב "טעינה עצלה" על מנת לטעון תמונות',
 		'jump_next' => 'קפיצה לפריט הבא שלא נקרא (הזנה או קטגוריה)',
 		'jump_next' => 'קפיצה לפריט הבא שלא נקרא (הזנה או קטגוריה)',
-		'mark_updated_article_unread' => 'Mark updated articles as unread',	//TODO - Translation
+		'mark_updated_article_unread' => 'Mark updated articles as unread',	// TODO - Translation
 		'number_divided_when_reader' => 'חלוקה ב2 במצב קריאה.',
 		'number_divided_when_reader' => 'חלוקה ב2 במצב קריאה.',
 		'read' => array(
 		'read' => array(
 			'article_open_on_website' => 'כאשר מאמר נפתח באתר המקורי',
 			'article_open_on_website' => 'כאשר מאמר נפתח באתר המקורי',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'סימון מאמרים כנקראו…',
 			'when' => 'סימון מאמרים כנקראו…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'מאמרים להצגה',
 			'adaptive' => 'תצוגה מתעדכנת',
 			'adaptive' => 'תצוגה מתעדכנת',
 			'all_articles' => 'הצגת כל המאמרים',
 			'all_articles' => 'הצגת כל המאמרים',
 			'unread' => 'הצגת מאמרים שלא נקראו בלבד',
 			'unread' => 'הצגת מאמרים שלא נקראו בלבד',
+			'_' => 'מאמרים להצגה',
 		),
 		),
-		'sides_close_article' => 'Clicking outside of article text area closes the article',	//TODO - Translation
+		'sides_close_article' => 'Clicking outside of article text area closes the article',	// TODO - Translation
 		'sort' => array(
 		'sort' => array(
-			'_' => 'סדר המיון',
 			'newer_first' => 'חדשים בראש',
 			'newer_first' => 'חדשים בראש',
 			'older_first' => 'ישנים יותר בראש',
 			'older_first' => 'ישנים יותר בראש',
+			'_' => 'סדר המיון',
 		),
 		),
 		'sticky_post' => 'הצמדת המאמר לחלק העליון כאשר הוא פתוח',
 		'sticky_post' => 'הצמדת המאמר לחלק העליון כאשר הוא פתוח',
 		'title' => 'קריאה',
 		'title' => 'קריאה',
@@ -135,34 +135,34 @@ return array(
 			'normal' => 'תצוגה רגילה',
 			'normal' => 'תצוגה רגילה',
 			'reader' => 'תצוגת קריאה',
 			'reader' => 'תצוגת קריאה',
 		),
 		),
+		'_' => 'קריאה',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'שיתוף',
-		'add' => 'Add a sharing method',	//TODO - Translation
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
+		'add' => 'Add a sharing method',	// TODO - Translation
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
 		'email' => 'דואר אלקטרוני',
 		'email' => 'דואר אלקטרוני',
-		'facebook' => 'Facebook',
+		'facebook' => 'Facebook',	// TODO - Translation
 		'more_information' => 'מידע נוסף',
 		'more_information' => 'מידע נוסף',
 		'print' => 'הדפסה',
 		'print' => 'הדפסה',
-		'remove' => 'Remove sharing method',	//TODO - Translation
-		'shaarli' => 'Shaarli',
+		'remove' => 'Remove sharing method',	// TODO - Translation
+		'shaarli' => 'Shaarli',	// TODO - Translation
 		'share_name' => 'שיתוף שם לתצוגה',
 		'share_name' => 'שיתוף שם לתצוגה',
 		'share_url' => 'לשימוש שתפו URL',
 		'share_url' => 'לשימוש שתפו URL',
 		'title' => 'שיתוף',
 		'title' => 'שיתוף',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag',
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag',	// TODO - Translation
+		'_' => 'שיתוף',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'קיצורי דרך',
 		'article_action' => 'פעולות על מאמרים',
 		'article_action' => 'פעולות על מאמרים',
 		'auto_share' => 'שיתוף',
 		'auto_share' => 'שיתוף',
 		'auto_share_help' => 'אם יש רק מצב שיתוף אחד, הוא מופעל. אחרת המצבים נבחרים על בסיס המספר שלהם.',
 		'auto_share_help' => 'אם יש רק מצב שיתוף אחד, הוא מופעל. אחרת המצבים נבחרים על בסיס המספר שלהם.',
-		'close_dropdown' => 'Close menus',	//TODO - Translation
+		'close_dropdown' => 'Close menus',	// TODO - Translation
 		'collapse_article' => 'כיווץ',
 		'collapse_article' => 'כיווץ',
 		'first_article' => 'דילוג למאמר הראשון',
 		'first_article' => 'דילוג למאמר הראשון',
 		'focus_search' => 'גישה לתיבת החיפוש',
 		'focus_search' => 'גישה לתיבת החיפוש',
-		'global_view' => 'Switch to global view',	//TODO - Translation
+		'global_view' => 'Switch to global view',	// TODO - Translation
 		'help' => 'הצגת התיעוד',
 		'help' => 'הצגת התיעוד',
 		'javascript' => 'חובה להפעיל JavaScript על מנת לעשות שימוש בקיצורי דרך',
 		'javascript' => 'חובה להפעיל JavaScript על מנת לעשות שימוש בקיצורי דרך',
 		'last_article' => 'דילוג למאמר האחרון',
 		'last_article' => 'דילוג למאמר האחרון',
@@ -171,24 +171,25 @@ return array(
 		'mark_read' => 'סימון כנקרא',
 		'mark_read' => 'סימון כנקרא',
 		'navigation' => 'ניווט',
 		'navigation' => 'ניווט',
 		'navigation_help' => 'בעזרת מקש השיפט קיצורי דרך חלים על הזנות .<br/>עם מקש האלט הם חלים על קטגוריות.',
 		'navigation_help' => 'בעזרת מקש השיפט קיצורי דרך חלים על הזנות .<br/>עם מקש האלט הם חלים על קטגוריות.',
-		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	//TODO - Translation
+		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'דילוג למאמר הבא',
 		'next_article' => 'דילוג למאמר הבא',
-		'normal_view' => 'Switch to normal view',	//TODO - Translation
+		'normal_view' => 'Switch to normal view',	// TODO - Translation
 		'other_action' => 'פעולות אחרות',
 		'other_action' => 'פעולות אחרות',
 		'previous_article' => 'דילוג למאמר הקודם',
 		'previous_article' => 'דילוג למאמר הקודם',
-		'reading_view' => 'Switch to reading view',	//TODO - Translation
-		'rss_view' => 'Open RSS view in a new tab',	//TODO - Translation
+		'reading_view' => 'Switch to reading view',	// TODO - Translation
+		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'ראו את המקור באתר',
 		'see_on_website' => 'ראו את המקור באתר',
 		'shift_for_all_read' => '+ <code>shift</code> על מנת לסמן את כל המאמרים כנקראו',
 		'shift_for_all_read' => '+ <code>shift</code> על מנת לסמן את כל המאמרים כנקראו',
-		'skip_next_article' => 'Focus next without opening',	//TODO - Translation
-		'skip_previous_article' => 'Focus previous without opening',	//TODO - Translation
+		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
+		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'קיצורי דרך',
 		'title' => 'קיצורי דרך',
 		'user_filter' => 'גישה למססנים',
 		'user_filter' => 'גישה למססנים',
 		'user_filter_help' => 'אם יש רק מזנן אחד הוא יהיה בשימוש. אחרת המסננים ישמשו על בסיס המספר שלהם.',
 		'user_filter_help' => 'אם יש רק מזנן אחד הוא יהיה בשימוש. אחרת המסננים ישמשו על בסיס המספר שלהם.',
-		'views' => 'Views',	//TODO - Translation
+		'views' => 'Views',	// TODO - Translation
+		'_' => 'קיצורי דרך',
 	),
 	),
 	'user' => array(
 	'user' => array(
-		'articles_and_size' => '%s articles (%s)',	//TODO - Translation
+		'articles_and_size' => '%s articles (%s)',	// TODO - Translation
 		'current' => 'משתמש נוכחי',
 		'current' => 'משתמש נוכחי',
 		'is_admin' => 'מנהל',
 		'is_admin' => 'מנהל',
 		'users' => 'משתמשים',
 		'users' => 'משתמשים',

+ 44 - 38
app/i18n/he/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'המיטוב הושלם',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'אין לך הרשאות לצפות בדף זה',
 		'denied' => 'אין לך הרשאות לצפות בדף זה',
 		'not_found' => 'הדף הזה לא נמצא',
 		'not_found' => 'הדף הזה לא נמצא',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'המיטוב הושלם',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'אירעה שגיאה במהלך הגדרת מערכת האימיות. אנא נסו שוב מאוחר יותר.',
 			'not_set' => 'אירעה שגיאה במהלך הגדרת מערכת האימיות. אנא נסו שוב מאוחר יותר.',
@@ -15,32 +21,32 @@ return array(
 		),
 		),
 		'login' => array(
 		'login' => array(
 			'invalid' => 'הכניסה לחשבון שגויה',
 			'invalid' => 'הכניסה לחשבון שגויה',
-			'success' => 'You are connected', // @todo
+			'success' => 'You are connected',	// TODO - Translation
 		),
 		),
 		'logout' => array(
 		'logout' => array(
-			'success' => 'You are disconnected', // @todo
+			'success' => 'You are disconnected',	// TODO - Translation
 		),
 		),
 		'no_password_set' => 'לא הוגדרה סיסמת מנהל. תכונה זו אינה זמינה.',
 		'no_password_set' => 'לא הוגדרה סיסמת מנהל. תכונה זו אינה זמינה.',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'error' => 'An error occurred during configuration saving', // @todo
+		'error' => 'An error occurred during configuration saving',	// TODO - Translation
 		'query_created' => 'השאילתה "%s" נוצרה.',
 		'query_created' => 'השאילתה "%s" נוצרה.',
 		'shortcuts_updated' => 'קיצורי הדרך עודכנו',
 		'shortcuts_updated' => 'קיצורי הדרך עודכנו',
 		'updated' => 'ההגדרות עודכנו',
 		'updated' => 'ההגדרות עודכנו',
 	),
 	),
 	'extensions' => array(
 	'extensions' => array(
-		'already_enabled' => '%s is already enabled', // @todo
+		'already_enabled' => '%s is already enabled',	// TODO - Translation
 		'disable' => array(
 		'disable' => array(
-			'ko' => '%s cannot be disabled. <a href="%s">Check FreshRSS logs</a> for details.', // @todo
-			'ok' => '%s is now disabled', // @todo
+			'ko' => '%s cannot be disabled. <a href="%s">Check FreshRSS logs</a> for details.',	// TODO - Translation
+			'ok' => '%s is now disabled',	// TODO - Translation
 		),
 		),
 		'enable' => array(
 		'enable' => array(
-			'ko' => '%s cannot be enabled. <a href="%s">Check FreshRSS logs</a> for details.', // @todo
-			'ok' => '%s is now enabled', // @todo
+			'ko' => '%s cannot be enabled. <a href="%s">Check FreshRSS logs</a> for details.',	// TODO - Translation
+			'ok' => '%s is now enabled',	// TODO - Translation
 		),
 		),
-		'no_access' => 'You have no access on %s', // @todo
-		'not_enabled' => '%s is not enabled yet', // @todo
-		'not_found' => '%s does not exist', // @todo
+		'not_enabled' => '%s is not enabled yet',
+		'not_found' => '%s does not exist',	// TODO - Translation
+		'no_access' => 'You have no access on %s',	// TODO - Translation
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'הרחבת ZIP אינה מותקנת על השרת.',
 		'export_no_zip_extension' => 'הרחבת ZIP אינה מותקנת על השרת.',
@@ -51,27 +57,27 @@ return array(
 		'zip_error' => 'אירעה שגיאה במהלך ייבוא קובץ הZIP.',
 		'zip_error' => 'אירעה שגיאה במהלך ייבוא קובץ הZIP.',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'error' => 'Your profile cannot be modified', // @todo
-		'updated' => 'Your profile has been modified', // @todo
+		'error' => 'Your profile cannot be modified',	// TODO - Translation
+		'updated' => 'Your profile has been modified',	// TODO - Translation
 	),
 	),
 	'sub' => array(
 	'sub' => array(
 		'actualize' => 'מימוש',
 		'actualize' => 'מימוש',
 		'articles' => array(
 		'articles' => array(
-			'marked_read' => 'The selected articles have been marked as read.',	//TODO - Translation
-			'marked_unread' => 'The articles have been marked as unread.',	//TODO - Translation
+			'marked_read' => 'The selected articles have been marked as read.',	// TODO - Translation
+			'marked_unread' => 'The articles have been marked as unread.',	// TODO - Translation
 		),
 		),
 		'category' => array(
 		'category' => array(
-			'created' => 'Category %s has been created.',	//TODO - Translation
-			'deleted' => 'Category has been deleted.',	//TODO - Translation
+			'created' => 'Category %s has been created.',	// TODO - Translation
+			'deleted' => 'Category has been deleted.',	// TODO - Translation
 			'emptied' => 'הקטגוריה רוקנה',
 			'emptied' => 'הקטגוריה רוקנה',
-			'error' => 'Category cannot be updated',	//TODO - Translation
-			'name_exists' => 'Category name already exists.',	//TODO - Translation
-			'no_id' => 'You must precise the id of the category.',	//TODO - Translation
-			'no_name' => 'Category name cannot be empty.',	//TODO - Translation
-			'not_delete_default' => 'You cannot delete the default category!',	//TODO - Translation
-			'not_exist' => 'The category does not exist!',	//TODO - Translation
-			'over_max' => 'You have reached your limit of categories (%d)',	//TODO - Translation
-			'updated' => 'Category has been updated.',	//TODO - Translation
+			'error' => 'Category cannot be updated',	// TODO - Translation
+			'name_exists' => 'Category name already exists.',	// TODO - Translation
+			'not_delete_default' => 'You cannot delete the default category!',	// TODO - Translation
+			'not_exist' => 'The category does not exist!',	// TODO - Translation
+			'no_id' => 'You must precise the id of the category.',
+			'no_name' => 'Category name cannot be empty.',	// TODO - Translation
+			'over_max' => 'You have reached your limit of categories (%d)',	// TODO - Translation
+			'updated' => 'Category has been updated.',	// TODO - Translation
 		),
 		),
 		'feed' => array(
 		'feed' => array(
 			'actualized' => '<em>%s</em> עודכן',
 			'actualized' => '<em>%s</em> עודכן',
@@ -79,20 +85,20 @@ return array(
 			'added' => 'RSS הזנת <em>%s</em> נוספה',
 			'added' => 'RSS הזנת <em>%s</em> נוספה',
 			'already_subscribed' => 'אתה כבר רשום ל <em>%s</em>',
 			'already_subscribed' => 'אתה כבר רשום ל <em>%s</em>',
 			'deleted' => 'ההזנה נמחקה',
 			'deleted' => 'ההזנה נמחקה',
-			'error' => 'Feed cannot be updated',	//TODO - Translation
-			'internal_problem' => 'אין אפשרות להוסיף את ההזנה. <a href="%s">בדקו את הלוגים</a> לפרטים.',	//TODO - Translation
+			'error' => 'Feed cannot be updated',	// TODO - Translation
+			'internal_problem' => 'אין אפשרות להוסיף את ההזנה. <a href="%s">בדקו את הלוגים</a> לפרטים.',
 			'invalid_url' => 'URL <em>%s</em> אינו תקין',
 			'invalid_url' => 'URL <em>%s</em> אינו תקין',
+			'not_added' => '<em>%s</em> אין אפשרות להוסיף את',
+			'no_refresh' => 'אין הזנה שניתן לרענן…',
 			'n_actualized' => '%d הזנות עודכנו',
 			'n_actualized' => '%d הזנות עודכנו',
 			'n_entries_deleted' => '%d המאמרים נמחקו',
 			'n_entries_deleted' => '%d המאמרים נמחקו',
-			'no_refresh' => 'אין הזנה שניתן לרענן…',
-			'not_added' => '<em>%s</em> אין אפשרות להוסיף את',
-			'over_max' => 'You have reached your limit of feeds (%d)',	//TODO - Translation
+			'over_max' => 'You have reached your limit of feeds (%d)',	// TODO - Translation
 			'updated' => 'ההזנה התעדכנה',
 			'updated' => 'ההזנה התעדכנה',
 		),
 		),
 		'purge_completed' => 'הניקוי הושלם (%d מאמרים נמחקו)',
 		'purge_completed' => 'הניקוי הושלם (%d מאמרים נמחקו)',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'can_apply' => 'FreshRSS will be now updated to the <strong>version %s</strong>.',	//TODO - Translation
+		'can_apply' => 'FreshRSS will be now updated to the <strong>version %s</strong>.',
 		'error' => 'תהליך העדכון נתקל בשגיאה: %s',
 		'error' => 'תהליך העדכון נתקל בשגיאה: %s',
 		'file_is_nok' => 'יש לבדוק את ההרשאות בתיקייה <em>%s</em>. שרת הHTTP חייב להיות בעל הרשאות כתיבה.',
 		'file_is_nok' => 'יש לבדוק את ההרשאות בתיקייה <em>%s</em>. שרת הHTTP חייב להיות בעל הרשאות כתיבה.',
 		'finished' => 'העדכון הושלם!',
 		'finished' => 'העדכון הושלם!',
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
+			'error' => 'User %s cannot be created',	// TODO - Translation
 			'_' => 'המשתמש %s נוצר',
 			'_' => 'המשתמש %s נוצר',
-			'error' => 'User %s cannot be created',	//TODO - Translation
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
+			'error' => 'User %s cannot be deleted',	// TODO - Translation
 			'_' => 'המשתמש %s נמחק',
 			'_' => 'המשתמש %s נמחק',
-			'error' => 'User %s cannot be deleted',	//TODO - Translation
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'User %s has been updated',	//TODO - Translation
-			'error' => 'User %s has not been updated',	//TODO - Translation
+			'error' => 'User %s has not been updated',	// TODO - Translation
+			'_' => 'User %s has been updated',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 86 - 84
app/i18n/he/gen.php

@@ -3,71 +3,72 @@
 return array(
 return array(
 	'action' => array(
 	'action' => array(
 		'actualize' => 'מימוש',
 		'actualize' => 'מימוש',
-		'back' => '← Go back', //TODO - Translation
+		'back' => '← Go back',	// TODO - Translation
 		'back_to_rss_feeds' => '← חזרה להזנות הRSS שלך',
 		'back_to_rss_feeds' => '← חזרה להזנות הRSS שלך',
 		'cancel' => 'ביטול',
 		'cancel' => 'ביטול',
 		'create' => 'יצירה',
 		'create' => 'יצירה',
-		'disable' => 'Disable',	//TODO - Translation
-		'empty' => 'Empty',	//TODO - Translation
-		'enable' => 'Enable',	//TODO - Translation
+		'disable' => 'Disable',	// TODO - Translation
+		'empty' => 'Empty',	// TODO - Translation
+		'enable' => 'Enable',	// TODO - Translation
 		'export' => 'ייצוא',
 		'export' => 'ייצוא',
 		'filter' => 'מסנן',
 		'filter' => 'מסנן',
 		'import' => 'ייבוא',
 		'import' => 'ייבוא',
 		'manage' => 'ניהול',
 		'manage' => 'ניהול',
-		'mark_read' => 'סימון כנקרא',
 		'mark_favorite' => 'סימון כמועדף',
 		'mark_favorite' => 'סימון כמועדף',
-		'remove' => 'Remove',	//TODO - Translation
+		'mark_read' => 'סימון כנקרא',
+		'purge' => 'Purge',	// TODO - Translation
+		'remove' => 'Remove',	// TODO - Translation
 		'see_website' => 'ראו אתר',
 		'see_website' => 'ראו אתר',
 		'submit' => 'אישור',
 		'submit' => 'אישור',
 		'truncate' => 'מחיקת כל המאמרים',
 		'truncate' => 'מחיקת כל המאמרים',
-		'update' => 'Update',	//TODO - Translation
+		'update' => 'Update',	// TODO - Translation
 	),
 	),
 	'auth' => array(
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.', // TODO - Translation
-		'email' => 'Email address',	//TODO - Translation
+		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.',	// TODO - Translation
+		'email' => 'Email address',	// TODO - Translation
 		'keep_logged_in' => 'השאר מחובר <small>חודש</small>',
 		'keep_logged_in' => 'השאר מחובר <small>חודש</small>',
 		'login' => 'כניסה לחשבון',
 		'login' => 'כניסה לחשבון',
 		'logout' => 'יציאה מהחשבון',
 		'logout' => 'יציאה מהחשבון',
 		'password' => array(
 		'password' => array(
+			'format' => '<small>At least 7 characters</small>',	// TODO - Translation
 			'_' => 'סיסמה',
 			'_' => 'סיסמה',
-			'format' => '<small>At least 7 characters</small>',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'New account',	//TODO - Translation
-			'ask' => 'Create an account?',	//TODO - Translation
-			'title' => 'Account creation',	//TODO - Translation
+			'ask' => 'Create an account?',	// TODO - Translation
+			'title' => 'Account creation',	// TODO - Translation
+			'_' => 'New account',	// TODO - Translation
 		),
 		),
 		'reset' => 'איפוס אימות',
 		'reset' => 'איפוס אימות',
 		'username' => array(
 		'username' => array(
-			'_' => 'שם משתמש',
 			'admin' => 'שם משתמש של המנהל',
 			'admin' => 'שם משתמש של המנהל',
-			'format' => '<small>maximum 16 alphanumeric characters</small>',	//TODO - Translation
+			'format' => '<small>maximum 16 alphanumeric characters</small>',	// TODO - Translation
+			'_' => 'שם משתמש',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',
+		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
 		'apr' => 'apr',
 		'apr' => 'apr',
 		'april' => 'Apr',
 		'april' => 'Apr',
-		'Aug' => '\\A\\u\\g\\u\\s\\t',
+		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
 		'aug' => 'aug',
 		'aug' => 'aug',
 		'august' => 'Aug',
 		'august' => 'Aug',
 		'before_yesterday' => 'ישן יותר',
 		'before_yesterday' => 'ישן יותר',
-		'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r',
+		'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r',	// TODO - Translation
 		'dec' => 'dec',
 		'dec' => 'dec',
 		'december' => 'Dec',
 		'december' => 'Dec',
-		'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y',
+		'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y',	// TODO - Translation
 		'feb' => 'feb',
 		'feb' => 'feb',
 		'february' => 'Feb',
 		'february' => 'Feb',
-		'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 H\\:i',
-		'fri' => 'Fri',
-		'Jan' => '\\J\\a\\n\\u\\a\\r\\y',
+		'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y',	// TODO - Translation
+		'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i',	// TODO - Translation
+		'fri' => 'Fri',	// TODO - Translation
+		'Jan' => '\\J\\a\\n\\u\\a\\r\\y',	// TODO - Translation
 		'jan' => 'jan',
 		'jan' => 'jan',
 		'january' => 'Jan',
 		'january' => 'Jan',
-		'Jul' => '\\J\\u\\l\\y',
 		'jul' => 'jul',
 		'jul' => 'jul',
+		'Jul' => '\\J\\u\\l\\y',	// TODO - Translation
 		'july' => 'Jul',
 		'july' => 'Jul',
-		'Jun' => '\\J\\u\\n\\e',
+		'Jun' => '\\J\\u\\n\\e',	// TODO - Translation
 		'jun' => 'jun',
 		'jun' => 'jun',
 		'june' => 'Jun',
 		'june' => 'Jun',
 		'last_3_month' => 'בשלושת החודשים האחרונים',
 		'last_3_month' => 'בשלושת החודשים האחרונים',
@@ -75,72 +76,73 @@ return array(
 		'last_month' => 'בחודש שעבר',
 		'last_month' => 'בחודש שעבר',
 		'last_week' => 'בשבוע שעבר',
 		'last_week' => 'בשבוע שעבר',
 		'last_year' => 'בשנה האחרונה',
 		'last_year' => 'בשנה האחרונה',
-		'Mar' => '\\M\\a\\r\\c\\h',
 		'mar' => 'mar',
 		'mar' => 'mar',
+		'Mar' => '\\M\\a\\r\\c\\h',	// TODO - Translation
 		'march' => 'Mar',
 		'march' => 'Mar',
-		'May' => '\\M\\a\\y',
-		'may' => 'May',
-		'may_' => 'May',
-		'mon' => 'Mon',
+		'May' => '\\M\\a\\y',	// TODO - Translation
+		'may' => 'May',	// TODO - Translation
+		'may_' => 'May',	// TODO - Translation
+		'mon' => 'Mon',	// TODO - Translation
 		'month' => 'חודשים',
 		'month' => 'חודשים',
-		'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r',
+		'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r',	// TODO - Translation
 		'nov' => 'nov',
 		'nov' => 'nov',
 		'november' => 'Nov',
 		'november' => 'Nov',
-		'Oct' => '\\O\\c\\t\\o\\b\\e\\r',
+		'Oct' => '\\O\\c\\t\\o\\b\\e\\r',	// TODO - Translation
 		'oct' => 'oct',
 		'oct' => 'oct',
 		'october' => 'Oct',
 		'october' => 'Oct',
-		'sat' => 'Sat',
-		'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r',
+		'sat' => 'Sat',	// TODO - Translation
+		'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r',	// TODO - Translation
 		'sep' => 'sep',
 		'sep' => 'sep',
 		'september' => 'Sep',
 		'september' => 'Sep',
-		'sun' => 'Sun',
-		'thu' => 'Thu',
+		'sun' => 'Sun',	// TODO - Translation
+		'thu' => 'Thu',	// TODO - Translation
 		'today' => 'היום',
 		'today' => 'היום',
-		'tue' => 'Tue',
-		'wed' => 'Wed',
+		'tue' => 'Tue',	// TODO - Translation
+		'wed' => 'Wed',	// TODO - Translation
 		'yesterday' => 'אתמול',
 		'yesterday' => 'אתמול',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'אודות FreshRSS',
 		'about' => 'אודות FreshRSS',
+		'_' => 'FreshRSS',	// TODO - Translation
 	),
 	),
 	'js' => array(
 	'js' => array(
-		'category_empty' => 'Empty category',	//TODO - Translation
+		'category_empty' => 'Empty category',	// TODO - Translation
 		'confirm_action' => 'האם אתם בטוחים שברצונכם לבצע פעולה זו? אין אפשרות לבטל אותה!',
 		'confirm_action' => 'האם אתם בטוחים שברצונכם לבצע פעולה זו? אין אפשרות לבטל אותה!',
 		'confirm_action_feed_cat' => 'האם אתם בטוחים שברצוניכם לבצע פעולה זו? מועדפים ושאילתות עשויות לאבוד. אין אפשרות לבטל אותה!',
 		'confirm_action_feed_cat' => 'האם אתם בטוחים שברצוניכם לבצע פעולה זו? מועדפים ושאילתות עשויות לאבוד. אין אפשרות לבטל אותה!',
 		'feedback' => array(
 		'feedback' => array(
-			'body_new_articles' => 'ישנם  \d מאמרים חדשים לקרוא ב FreshRSS.',
-			'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.',	//TODO - Translation
+			'body_new_articles' => 'ישנם	\\d מאמרים חדשים לקרוא ב FreshRSS.',
+			'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.',	// TODO - Translation
 			'title_new_articles' => 'FreshRSS: מאמרים חדשים!',
 			'title_new_articles' => 'FreshRSS: מאמרים חדשים!',
 		),
 		),
 		'new_article' => 'מאמרים חדשים זמינים, לחצו לרענון העמוד.',
 		'new_article' => 'מאמרים חדשים זמינים, לחצו לרענון העמוד.',
 		'should_be_activated' => 'חובה להפעיל JavaScript',
 		'should_be_activated' => 'חובה להפעיל JavaScript',
 	),
 	),
 	'lang' => array(
 	'lang' => array(
-		'cz' => 'Čeština',
-		'de' => 'Deutsch',
-		'en' => 'English',
-		'es' => 'Español',
-		'fr' => 'Français',
-		'he' => 'עברית',
-		'it' => 'Italiano',
-		'kr' => '한국어',
-		'nl' => 'Nederlands',
-		'oc' => 'Occitan',
-		'pt-br' => 'Português (Brasil)',
-		'ru' => 'Русский',
-		'tr' => 'Türkçe',
-		'zh-cn' => '简体中文',
+		'cz' => 'Čeština',	// TODO - Translation
+		'de' => 'Deutsch',	// TODO - Translation
+		'en' => 'English',	// TODO - Translation
+		'es' => 'Español',	// TODO - Translation
+		'fr' => 'Français',	// TODO - Translation
+		'he' => 'עברית',	// TODO - Translation
+		'it' => 'Italiano',	// TODO - Translation
+		'kr' => '한국어',	// TODO - Translation
+		'nl' => 'Nederlands',	// TODO - Translation
+		'oc' => 'Occitan',	// TODO - Translation
+		'pt-br' => 'Português (Brasil)',	// TODO - Translation
+		'ru' => 'Русский',	// TODO - Translation
+		'sk' => 'Slovenčina',	// TODO - Translation
+		'tr' => 'Türkçe',	// TODO - Translation
+		'zh-cn' => '简体中文',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'אודות',
 		'about' => 'אודות',
 		'admin' => 'ניהול',
 		'admin' => 'ניהול',
 		'archiving' => 'ארכוב',
 		'archiving' => 'ארכוב',
-		'authentication' => 'Authentication',	//TODO - Translation
-		'check_install' => 'Installation checking',	//TODO - Translation
+		'authentication' => 'Authentication',	// TODO - Translation
+		'check_install' => 'Installation checking',	// TODO - Translation
 		'configuration' => 'הגדרות',
 		'configuration' => 'הגדרות',
 		'display' => 'תצוגה',
 		'display' => 'תצוגה',
-		'extensions' => 'Extensions',	//TODO - Translation
+		'extensions' => 'Extensions',	// TODO - Translation
 		'logs' => 'לוגים',
 		'logs' => 'לוגים',
 		'queries' => 'שאילתות',
 		'queries' => 'שאילתות',
 		'reading' => 'קריאה',
 		'reading' => 'קריאה',
@@ -148,10 +150,10 @@ return array(
 		'sharing' => 'שיתוף',
 		'sharing' => 'שיתוף',
 		'shortcuts' => 'קיצורי דרך',
 		'shortcuts' => 'קיצורי דרך',
 		'stats' => 'סטטיסטיקות',
 		'stats' => 'סטטיסטיקות',
-		'system' => 'System configuration',	//TODO - Translation
+		'system' => 'System configuration',	// TODO - Translation
 		'update' => 'עדכון',
 		'update' => 'עדכון',
-		'user_management' => 'Manage users',	//TODO - Translation
-		'user_profile' => 'Profile',	//TODO - Translation
+		'user_management' => 'Manage users',	// TODO - Translation
+		'user_profile' => 'Profile',	// TODO - Translation
 	),
 	),
 	'pagination' => array(
 	'pagination' => array(
 		'first' => 'הראשון',
 		'first' => 'הראשון',
@@ -163,31 +165,31 @@ return array(
 		'previous' => 'הקודם',
 		'previous' => 'הקודם',
 	),
 	),
 	'period' => array(
 	'period' => array(
-		'days' => 'days',	//TODO - Translation
-		'hours' => 'hours',	//TODO - Translation
-		'months' => 'months',	//TODO - Translation
-		'weeks' => 'weeks',	//TODO - Translation
-		'years' => 'years',	//TODO - Translation
+		'days' => 'days',	// TODO - Translation
+		'hours' => 'hours',	// TODO - Translation
+		'months' => 'months',	// TODO - Translation
+		'weeks' => 'weeks',	// TODO - Translation
+		'years' => 'years',	// TODO - Translation
 	),
 	),
 	'share' => array(
 	'share' => array(
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
 		'email' => 'דואר אלקטרוני',
 		'email' => 'דואר אלקטרוני',
-		'facebook' => 'Facebook',
-		'gnusocial' => 'GNU social',
-		'jdh' => 'Journal du hacker',
-		'Known' => 'Known based sites',
-		'lemmy' => 'Lemmy',
-		'linkedin' => 'LinkedIn',
-		'mastodon' => 'Mastodon',
-		'movim' => 'Movim',
-		'pinboard' => 'Pinboard',
-		'pocket' => 'Pocket',
+		'facebook' => 'Facebook',	// TODO - Translation
+		'gnusocial' => 'GNU social',	// TODO - Translation
+		'jdh' => 'Journal du hacker',	// TODO - Translation
+		'Known' => 'Known based sites',	// TODO - Translation
+		'lemmy' => 'Lemmy',	// TODO - Translation
+		'linkedin' => 'LinkedIn',	// TODO - Translation
+		'mastodon' => 'Mastodon',	// TODO - Translation
+		'movim' => 'Movim',	// TODO - Translation
+		'pinboard' => 'Pinboard',	// TODO - Translation
+		'pocket' => 'Pocket',	// TODO - Translation
 		'print' => 'הדפסה',
 		'print' => 'הדפסה',
-		'shaarli' => 'Shaarli',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag v1',
-		'wallabagv2' => 'wallabag v2',
+		'shaarli' => 'Shaarli',	// TODO - Translation
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag v1',	// TODO - Translation
+		'wallabagv2' => 'wallabag v2',	// TODO - Translation
 	),
 	),
 	'short' => array(
 	'short' => array(
 		'attention' => 'זהירות!',
 		'attention' => 'זהירות!',
@@ -197,7 +199,7 @@ return array(
 		'damn' => 'הו לא!',
 		'damn' => 'הו לא!',
 		'default_category' => 'ללא קטגוריה',
 		'default_category' => 'ללא קטגוריה',
 		'no' => 'לא',
 		'no' => 'לא',
-		'not_applicable' => 'Not available',	//TODO - Translation
+		'not_applicable' => 'Not available',	// TODO - Translation
 		'ok' => 'כן!',
 		'ok' => 'כן!',
 		'or' => 'או',
 		'or' => 'או',
 		'yes' => 'כן',
 		'yes' => 'כן',

+ 10 - 10
app/i18n/he/index.php

@@ -2,8 +2,7 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'אודות',
-		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// TODO - Translation
 		'bugs_reports' => 'דיווח באגים',
 		'bugs_reports' => 'דיווח באגים',
 		'credits' => 'קרדיטים',
 		'credits' => 'קרדיטים',
 		'credits_content' => 'מאפייני עיצוב מסויימים הגיעו מ <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> אף על פי ש FreshRSS אינו משתמש בתשתית הזו. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">סמלילים</a> הגיעו מ <a href="https://www.gnome.org/"> פרוייקט GNOME </a>. <em>Open Sans</em> הגופן police נוצר על ידי <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Favicons נאספים בעזרת <a href="https://getfavicon.appspot.com/">getFavicon API</a>. FreshRSS מבוסס על <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, תשתית PHP.',
 		'credits_content' => 'מאפייני עיצוב מסויימים הגיעו מ <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> אף על פי ש FreshRSS אינו משתמש בתשתית הזו. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">סמלילים</a> הגיעו מ <a href="https://www.gnome.org/"> פרוייקט GNOME </a>. <em>Open Sans</em> הגופן police נוצר על ידי <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Favicons נאספים בעזרת <a href="https://getfavicon.appspot.com/">getFavicon API</a>. FreshRSS מבוסס על <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, תשתית PHP.',
@@ -14,23 +13,21 @@ return array(
 		'title' => 'אודות',
 		'title' => 'אודות',
 		'version' => 'גרסה',
 		'version' => 'גרסה',
 		'website' => 'אתר',
 		'website' => 'אתר',
-	),
-	'tos' => array(
-		'title' => 'Terms of Service', // TODO - Translation
+		'_' => 'אודות',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'ניתן להוסיף הזנות חדשות.',
 		'add' => 'ניתן להוסיף הזנות חדשות.',
 		'empty' => 'אין מאמר להצגה.',
 		'empty' => 'אין מאמר להצגה.',
 		'rss_of' => 'הזנת RSS של %s',
 		'rss_of' => 'הזנת RSS של %s',
 		'title' => 'ההזנות שלך',
 		'title' => 'ההזנות שלך',
-		'title_global' => 'תצוגה גלובלית',
 		'title_fav' => 'המועדפים שלך',
 		'title_fav' => 'המועדפים שלך',
+		'title_global' => 'תצוגה גלובלית',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'לוגים',
 		'clear' => 'ניקוי הלוגים',
 		'clear' => 'ניקוי הלוגים',
 		'empty' => 'קובץ הלוג ריק',
 		'empty' => 'קובץ הלוג ריק',
 		'title' => 'לוגים',
 		'title' => 'לוגים',
+		'_' => 'לוגים',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'אודות FreshRSS',
 		'about' => 'אודות FreshRSS',
@@ -43,7 +40,7 @@ return array(
 		'mark_all_read' => 'סימון הכל כנקרא',
 		'mark_all_read' => 'סימון הכל כנקרא',
 		'mark_cat_read' => 'סימון קטגוריה כנקראה',
 		'mark_cat_read' => 'סימון קטגוריה כנקראה',
 		'mark_feed_read' => 'סימון הזנה כנקראה',
 		'mark_feed_read' => 'סימון הזנה כנקראה',
-		'mark_selection_unread' => 'Mark selection as unread',	//TODO - Translation
+		'mark_selection_unread' => 'Mark selection as unread',	// TODO - Translation
 		'newer_first' => 'חדשים בראש',
 		'newer_first' => 'חדשים בראש',
 		'non-starred' => 'הצגת הכל פרט למועדפים',
 		'non-starred' => 'הצגת הכל פרט למועדפים',
 		'normal_view' => 'תצוגה רגילה',
 		'normal_view' => 'תצוגה רגילה',
@@ -56,11 +53,14 @@ return array(
 		'starred' => 'הצגת מועדפים בלבד',
 		'starred' => 'הצגת מועדפים בלבד',
 		'stats' => 'סטטיסטיקות',
 		'stats' => 'סטטיסטיקות',
 		'subscription' => 'ניהול הרשמות',
 		'subscription' => 'ניהול הרשמות',
-		'tags' => 'My labels',	//TODO - Translation
+		'tags' => 'My labels',	// TODO - Translation
 		'unread' => 'הצגת מאמרים שלא נקראו בלבד',
 		'unread' => 'הצגת מאמרים שלא נקראו בלבד',
 	),
 	),
 	'share' => 'שיתוף',
 	'share' => 'שיתוף',
 	'tag' => array(
 	'tag' => array(
-		'related' => 'תגיות קשורות',	//TODO - Translation
+		'related' => 'תגיות קשורות',
+	),
+	'tos' => array(
+		'title' => 'Terms of Service',	// TODO - Translation
 	),
 	),
 );
 );

+ 28 - 28
app/i18n/he/install.php

@@ -4,36 +4,35 @@ return array(
 	'action' => array(
 	'action' => array(
 		'finish' => 'השלמת ההתקנה',
 		'finish' => 'השלמת ההתקנה',
 		'fix_errors_before' => 'יש לתקן את השגיאות לפני המעבר לשלב הבא.',
 		'fix_errors_before' => 'יש לתקן את השגיאות לפני המעבר לשלב הבא.',
-		'keep_install' => 'Keep previous configuration',	//TODO - Translation
+		'keep_install' => 'Keep previous configuration',	// TODO - Translation
 		'next_step' => 'לשלב הבא',
 		'next_step' => 'לשלב הבא',
-		'reinstall' => 'Reinstall FreshRSS',	//TODO - Translation
+		'reinstall' => 'Reinstall FreshRSS',	// TODO - Translation
 	),
 	),
 	'auth' => array(
 	'auth' => array(
 		'form' => 'טופס אינטרנטי (מסורתי, דורש JavaScript)',
 		'form' => 'טופס אינטרנטי (מסורתי, דורש JavaScript)',
 		'http' => 'HTTP (למשתמשים מתקדמים עם HTTPS)',
 		'http' => 'HTTP (למשתמשים מתקדמים עם HTTPS)',
 		'none' => 'ללא (מסוכן)',
 		'none' => 'ללא (מסוכן)',
 		'password_form' => 'סיסמה<br /><small>(לשימוש בטפוס ההרשמה)</small>',
 		'password_form' => 'סיסמה<br /><small>(לשימוש בטפוס ההרשמה)</small>',
-		'password_format' => 'At least 7 characters',	//TODO - Translation
+		'password_format' => 'At least 7 characters',	// TODO - Translation
 		'type' => 'שיטת אימות',
 		'type' => 'שיטת אימות',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'בסיס נתונים',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'הגדרות בסיס נתונים',
 			'ko' => 'נא לוודא את הגדרות בסיס הנתונים.',
 			'ko' => 'נא לוודא את הגדרות בסיס הנתונים.',
 			'ok' => 'הגדרות בסיס הנתונים נשמרו.',
 			'ok' => 'הגדרות בסיס הנתונים נשמרו.',
+			'_' => 'הגדרות בסיס נתונים',
 		),
 		),
 		'host' => 'מארח',
 		'host' => 'מארח',
 		'password' => 'HTTP סיסמה',
 		'password' => 'HTTP סיסמה',
 		'prefix' => 'קידומת הטבלה',
 		'prefix' => 'קידומת הטבלה',
 		'type' => 'סוג בסיס הנתונים',
 		'type' => 'סוג בסיס הנתונים',
 		'username' => 'HTTP שם משתמש',
 		'username' => 'HTTP שם משתמש',
+		'_' => 'בסיס נתונים',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'בדיקות',
-		'already_installed' => 'We have detected that FreshRSS is already installed!',	//TODO - Translation
+		'already_installed' => 'We have detected that FreshRSS is already installed!',	// TODO - Translation
 		'cache' => array(
 		'cache' => array(
-			'nok' => 'Check permissions on <em>./data/cache</em> directory. HTTP server must have rights to write into',	//TODO - Translation
+			'nok' => 'Check permissions on <em>./data/cache</em> directory. HTTP server must have rights to write into',	// TODO - Translation
 			'ok' => 'ההרשאות בתיקיית המטמון תקינות',
 			'ok' => 'ההרשאות בתיקיית המטמון תקינות',
 		),
 		),
 		'ctype' => array(
 		'ctype' => array(
@@ -45,35 +44,35 @@ return array(
 			'ok' => 'יש לכם את גירסת %s של cURL',
 			'ok' => 'יש לכם את גירסת %s של cURL',
 		),
 		),
 		'data' => array(
 		'data' => array(
-			'nok' => 'Check permissions on <em>./data</em> directory. HTTP server must have rights to write into',	//TODO - Translation
+			'nok' => 'Check permissions on <em>./data</em> directory. HTTP server must have rights to write into',	// TODO - Translation
 			'ok' => 'ההרשאות בתיקיית הדאטא תקינות',
 			'ok' => 'ההרשאות בתיקיית הדאטא תקינות',
 		),
 		),
 		'dom' => array(
 		'dom' => array(
-			'nok' => 'הספרייה הנדרשת לסיור ב DOM אינה מותקנת  (php-xml package)',
+			'nok' => 'הספרייה הנדרשת לסיור ב DOM אינה מותקנת	(php-xml package)',
 			'ok' => 'הספרייה הנדרשת לסיור ב DOM מותקנת',
 			'ok' => 'הספרייה הנדרשת לסיור ב DOM מותקנת',
 		),
 		),
 		'favicons' => array(
 		'favicons' => array(
-			'nok' => 'Check permissions on <em>./data/favicons</em> directory. HTTP server must have rights to write into',	//TODO - Translation
+			'nok' => 'Check permissions on <em>./data/favicons</em> directory. HTTP server must have rights to write into',	// TODO - Translation
 			'ok' => 'ההרשאות בתיקיית הfavicons תקינות',
 			'ok' => 'ההרשאות בתיקיית הfavicons תקינות',
 		),
 		),
 		'fileinfo' => array(
 		'fileinfo' => array(
-			'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).',	//TODO - Translation
-			'ok' => 'You have the fileinfo library.',	//TODO - Translation
+			'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).',	// TODO - Translation
+			'ok' => 'You have the fileinfo library.',	// TODO - Translation
 		),
 		),
 		'http_referer' => array(
 		'http_referer' => array(
 			'nok' => 'נא לדבוק שאינך פוגעת ב HTTP REFERER שלך.',
 			'nok' => 'נא לדבוק שאינך פוגעת ב HTTP REFERER שלך.',
 			'ok' => 'הHTTP REFERER ידוע ותאם לשרת שלך.',
 			'ok' => 'הHTTP REFERER ידוע ותאם לשרת שלך.',
 		),
 		),
 		'json' => array(
 		'json' => array(
-			'nok' => 'Cannot find a recommended library to parse JSON.',	//TODO - Translation
-			'ok' => 'You have a recommended library to parse JSON.',	//TODO - Translation
+			'nok' => 'Cannot find a recommended library to parse JSON.',	// TODO - Translation
+			'ok' => 'You have a recommended library to parse JSON.',	// TODO - Translation
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
-			'nok' => 'You lack the Minz framework.',	//TODO - Translation
+			'nok' => 'You lack the Minz framework.',
 			'ok' => 'יש לכם את תשתית Minz',
 			'ok' => 'יש לכם את תשתית Minz',
 		),
 		),
 		'pcre' => array(
 		'pcre' => array(
@@ -89,17 +88,18 @@ return array(
 			'ok' => 'גירסת PHP שלכם היא %s, שתואמת ל FreshRSS',
 			'ok' => 'גירסת PHP שלכם היא %s, שתואמת ל FreshRSS',
 		),
 		),
 		'users' => array(
 		'users' => array(
-			'nok' => 'Check permissions on <em>./data/users</em> directory. HTTP server must have rights to write into',	//TODO - Translation
-			'ok' => 'Permissions on users directory are good.',	//TODO - Translation
+			'nok' => 'Check permissions on <em>./data/users</em> directory. HTTP server must have rights to write into',	// TODO - Translation
+			'ok' => 'Permissions on users directory are good.',	// TODO - Translation
 		),
 		),
 		'xml' => array(
 		'xml' => array(
-			'nok' => 'Cannot find the required library to parse XML.',	//TODO - Translation
-			'ok' => 'You have the required library to parse XML.',	//TODO - Translation
+			'nok' => 'Cannot find the required library to parse XML.',	// TODO - Translation
+			'ok' => 'You have the required library to parse XML.',	// TODO - Translation
 		),
 		),
+		'_' => 'בדיקות',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'הגדרות כלליות',
 		'ok' => 'ההגדרות הכלליות נשמרו.',
 		'ok' => 'ההגדרות הכלליות נשמרו.',
+		'_' => 'הגדרות כלליות',
 	),
 	),
 	'congratulations' => 'מזל טוב!',
 	'congratulations' => 'מזל טוב!',
 	'default_user' => 'שם המשתמש של משתמש ברירת המחדל <small>(לכל היותר 16 תווים אלפאנומריים)</small>',
 	'default_user' => 'שם המשתמש של משתמש ברירת המחדל <small>(לכל היותר 16 תווים אלפאנומריים)</small>',
@@ -107,17 +107,17 @@ return array(
 	'fix_errors_before' => 'יש לתקן את השגיאות לפני המעבר לשלב הבא.',
 	'fix_errors_before' => 'יש לתקן את השגיאות לפני המעבר לשלב הבא.',
 	'javascript_is_better' => 'FreshRSS מעדיף שתאפשרו JavaScript',
 	'javascript_is_better' => 'FreshRSS מעדיף שתאפשרו JavaScript',
 	'js' => array(
 	'js' => array(
-		'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?',	//TODO - Translation
+		'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?',	// TODO - Translation
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'שפה',
 		'choose' => 'בחירת שפה ל FreshRSS',
 		'choose' => 'בחירת שפה ל FreshRSS',
 		'defined' => 'השפה הוגדרה.',
 		'defined' => 'השפה הוגדרה.',
+		'_' => 'שפה',
 	),
 	),
 	'not_deleted' => 'משהו נכשל; יש צורך למחוק את הקובץ <em>%s</em> ידנית.',
 	'not_deleted' => 'משהו נכשל; יש צורך למחוק את הקובץ <em>%s</em> ידנית.',
-	'ok' => 'The installation process was successful.',	//TODO - Translation
-	'step' => 'step %d',	//TODO - Translation
+	'ok' => 'The installation process was successful.',	// TODO - Translation
+	'step' => 'step %d',	// TODO - Translation
 	'steps' => 'שלבים',
 	'steps' => 'שלבים',
-	'title' => 'התקנה · FreshRSS',
 	'this_is_the_end' => 'סיום',
 	'this_is_the_end' => 'סיום',
+	'title' => 'התקנה · FreshRSS',
 );
 );

+ 31 - 31
app/i18n/he/sub.php

@@ -2,24 +2,24 @@
 
 
 return array(
 return array(
 	'api' => array(
 	'api' => array(
-		'documentation' => 'Copy the following URL to use it within an external tool.',	//TODO - Translation
-		'title' => 'API',	//TODO - Translation
+		'documentation' => 'Copy the following URL to use it within an external tool.',	// TODO - Translation
+		'title' => 'API',	// TODO - Translation
 	),
 	),
 	'bookmarklet' => array(
 	'bookmarklet' => array(
-		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',	//TODO - Translation
-		'label' => 'Subscribe',	//TODO - Translation
-		'title' => 'Bookmarklet',	//TODO - Translation
+		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',	// TODO - Translation
+		'label' => 'Subscribe',	// TODO - Translation
+		'title' => 'Bookmarklet',	// TODO - Translation
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'קטגוריה',
 		'add' => 'הוספת קטגוריה',
 		'add' => 'הוספת קטגוריה',
 		'archiving' => 'ארכוב',
 		'archiving' => 'ארכוב',
-		'empty' => 'Empty category',	//TODO - Translation
+		'empty' => 'Empty category',	// TODO - Translation
 		'information' => 'מידע',
 		'information' => 'מידע',
 		'new' => 'קטגוריה חדשה',
 		'new' => 'קטגוריה חדשה',
-		'position' => 'Display position',	//TODO - Translation
-		'position_help' => 'To control category sort order',	//TODO - Translation
+		'position' => 'Display position',	// TODO - Translation
+		'position_help' => 'To control category sort order',	// TODO - Translation
 		'title' => 'כותרת',
 		'title' => 'כותרת',
+		'_' => 'קטגוריה',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'הוספת הזנה',
 		'add' => 'הוספת הזנה',
@@ -32,57 +32,57 @@ return array(
 			'password' => 'HTTP סיסמה',
 			'password' => 'HTTP סיסמה',
 			'username' => 'HTTP שם משתמש',
 			'username' => 'HTTP שם משתמש',
 		),
 		),
-		'clear_cache' => 'Always clear cache',	//TODO - Translation
-		'css_help' => 'קבלת הזנות RSS קטומות  (זהירות, לוקח זמן רב יותר!)',
+		'clear_cache' => 'Always clear cache',	// TODO - Translation
+		'css_help' => 'קבלת הזנות RSS קטומות	(זהירות, לוקח זמן רב יותר!)',
 		'css_path' => 'נתיב הCSS של המאמר באתר המקורי',
 		'css_path' => 'נתיב הCSS של המאמר באתר המקורי',
 		'description' => 'תיאור',
 		'description' => 'תיאור',
 		'empty' => 'הזנה זו ריקה. אנא ודאו שהיא עדיין מתוחזקת.',
 		'empty' => 'הזנה זו ריקה. אנא ודאו שהיא עדיין מתוחזקת.',
 		'error' => 'הזנה זו נתקלה בשגיאה, אנא ודאו שהיא תקינה ואז נסו שנית.',
 		'error' => 'הזנה זו נתקלה בשגיאה, אנא ודאו שהיא תקינה ואז נסו שנית.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filter actions',	//TODO - Translation
-			'help' => 'Write one search filter per line.',	//TODO - Translation
+			'help' => 'Write one search filter per line.',	// TODO - Translation
+			'_' => 'Filter actions',	// TODO - Translation
 		),
 		),
 		'information' => 'מידע',
 		'information' => 'מידע',
 		'keep_min' => 'מסםר מינימלי של מאמרים לשמור',
 		'keep_min' => 'מסםר מינימלי של מאמרים לשמור',
-		'moved_category_deleted' => 'כאשר הקטגוריה נמחקת ההזנות שבתוכה אוטומטית מקוטלגות תחת  <em>%s</em>.',
-		'mute' => 'mute',	//TODO - Translation
+		'moved_category_deleted' => 'כאשר הקטגוריה נמחקת ההזנות שבתוכה אוטומטית מקוטלגות תחת	<em>%s</em>.',
+		'mute' => 'mute',	// TODO - Translation
 		'no_selected' => 'אף הזנה לא נבחרה.',
 		'no_selected' => 'אף הזנה לא נבחרה.',
 		'number_entries' => '%d מאמרים',
 		'number_entries' => '%d מאמרים',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Visibility',	//TODO - Translation
-			'archived' => 'Do not show (archived)',	//TODO - Translation
+			'archived' => 'Do not show (archived)',	// TODO - Translation
 			'main_stream' => 'הצגה בזרם המרכזי',
 			'main_stream' => 'הצגה בזרם המרכזי',
-			'normal' => 'Show in its category',	//TODO - Translation
+			'normal' => 'Show in its category',	// TODO - Translation
+			'_' => 'Visibility',	// TODO - Translation
 		),
 		),
-		'websub' => 'Instant notification with WebSub',	//TODO - Translation
 		'show' => array(
 		'show' => array(
-			'all' => 'Show all feeds',	//TODO - Translation
-			'error' => 'Show only feeds with error',	//TODO - Translation
+			'all' => 'Show all feeds',	// TODO - Translation
+			'error' => 'Show only feeds with error',	// TODO - Translation
 		),
 		),
 		'showing' => array(
 		'showing' => array(
-			'error' => 'Showing only feeds with error',	//TODO - Translation
+			'error' => 'Showing only feeds with error',	// TODO - Translation
 		),
 		),
-		'ssl_verify' => 'Verify SSL security',	//TODO - Translation
+		'ssl_verify' => 'Verify SSL security',	// TODO - Translation
 		'stats' => 'סטטיסטיקות',
 		'stats' => 'סטטיסטיקות',
 		'think_to_add' => 'ניתן להוסיף הזנות חדשות.',
 		'think_to_add' => 'ניתן להוסיף הזנות חדשות.',
-		'timeout' => 'Timeout in seconds',	//TODO - Translation
+		'timeout' => 'Timeout in seconds',	// TODO - Translation
 		'title' => 'כותרת',
 		'title' => 'כותרת',
 		'title_add' => 'הוספת הזנה',
 		'title_add' => 'הוספת הזנה',
 		'ttl' => 'אין לרענן אוטומטית יותר מ',
 		'ttl' => 'אין לרענן אוטומטית יותר מ',
 		'url' => 'הזנה URL',
 		'url' => 'הזנה URL',
 		'validator' => 'בדיקות תקינות ההזנה',
 		'validator' => 'בדיקות תקינות ההזנה',
 		'website' => 'אתר URL',
 		'website' => 'אתר URL',
+		'websub' => 'Instant notification with WebSub',	// TODO - Translation
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
-		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	//TODO - Translation
-		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	//TODO - Translation
-		'title' => 'Firefox feed reader',	//TODO - Translation
+		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	// TODO - Translation
+		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	// TODO - Translation
+		'title' => 'Firefox feed reader',	// TODO - Translation
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => 'ייצוא',
 		'export' => 'ייצוא',
+		'export_labelled' => 'Export your labelled articles',	// TODO - Translation
 		'export_opml' => 'ייצוא רשימת הזנות (OPML)',
 		'export_opml' => 'ייצוא רשימת הזנות (OPML)',
 		'export_starred' => 'ייצוא מועדפים',
 		'export_starred' => 'ייצוא מועדפים',
-		'export_labelled' => 'Export your labelled articles',	//TODO
 		'feed_list' => 'רשימה של %s מאמרים',
 		'feed_list' => 'רשימה של %s מאמרים',
 		'file_to_import' => 'קובץ לייבוא<br />(OPML, Json or Zip)',
 		'file_to_import' => 'קובץ לייבוא<br />(OPML, Json or Zip)',
 		'file_to_import_no_zip' => 'קובץ לייבוא<br />(OPML or Json)',
 		'file_to_import_no_zip' => 'קובץ לייבוא<br />(OPML or Json)',
@@ -94,11 +94,11 @@ return array(
 		'bookmark' => 'הרשמה (FreshRSS סימניית)',
 		'bookmark' => 'הרשמה (FreshRSS סימניית)',
 		'import_export' => 'יבוא / יצוא ',
 		'import_export' => 'יבוא / יצוא ',
 		'subscription_management' => 'ניהול הרשמות',
 		'subscription_management' => 'ניהול הרשמות',
-		'subscription_tools' => 'Subscription tools',	//TODO - Translation
+		'subscription_tools' => 'Subscription tools',	// TODO - Translation
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'ניהול הרשמות',
 		'feed_management' => 'ניהול הזנות RSS',
 		'feed_management' => 'ניהול הזנות RSS',
-		'subscription_tools' => 'Subscription tools',	//TODO - Translation
+		'subscription_tools' => 'Subscription tools',	// TODO - Translation
+		'_' => 'ניהול הרשמות',
 	),
 	),
 );
 );

+ 21 - 21
app/i18n/he/user.php

@@ -3,35 +3,35 @@
 return array(
 return array(
 	'email' => array(
 	'email' => array(
 		'feedback' => array(
 		'feedback' => array(
-			'invalid' => 'The email address is invalid.', //TODO - Translation
-			'required' => 'The email address is required.', //TODO - Translation
+			'invalid' => 'The email address is invalid.',	// TODO - Translation
+			'required' => 'The email address is required.',	// TODO - Translation
 		),
 		),
 		'validation' => array(
 		'validation' => array(
-			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.', //TODO - Translation
-			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.', //TODO - Translation
+			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.',	// TODO - Translation
+			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.',	// TODO - Translation
 			'feedback' => array(
 			'feedback' => array(
-				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.', //TODO - Translation
-				'email_sent' => 'An email has been sent to your address.', //TODO - Translation
-				'error' => 'The email address failed to be validated.', //TODO - Translation
-				'ok' => 'The email address has been validated.', //TODO - Translation
-				'unneccessary' => 'The email address was already validated.', //TODO - Translation
-				'wrong_token' => 'The email address failed to be validated due to a wrong token.', //TODO - Translation
+				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.',	// TODO - Translation
+				'email_sent' => 'An email has been sent to your address.',	// TODO - Translation
+				'error' => 'The email address failed to be validated.',	// TODO - Translation
+				'ok' => 'The email address has been validated.',	// TODO - Translation
+				'unneccessary' => 'The email address was already validated.',	// TODO - Translation
+				'wrong_token' => 'The email address failed to be validated due to a wrong token.',	// TODO - Translation
 			),
 			),
-			'need_to' => 'You need to validate your email address before being able to use %s.', //TODO - Translation
-			'resend_email' => 'Resend the email', //TODO - Translation
-			'title' => 'Email address validation', //TODO - Translation
-		),
-	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation
+			'need_to' => 'You need to validate your email address before being able to use %s.',	// TODO - Translation
+			'resend_email' => 'Resend the email',	// TODO - Translation
+			'title' => 'Email address validation',	// TODO - Translation
 		),
 		),
 	),
 	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
-			'title' => 'You need to validate your account', //TODO - Translation
-			'welcome' => 'Welcome %s,', //TODO - Translation
-			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:', //TODO - Translation
+			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:',	// TODO - Translation
+			'title' => 'You need to validate your account',	// TODO - Translation
+			'welcome' => 'Welcome %s,',	// TODO - Translation
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'You must accept the Terms of Service to be able to register.',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 31 - 25
app/i18n/it/admin.php

@@ -67,8 +67,8 @@ return array(
 			'ok' => 'Estensione JSON presente.',
 			'ok' => 'Estensione JSON presente.',
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
 			'nok' => 'Manca il framework Minz.',
 			'nok' => 'Manca il framework Minz.',
@@ -83,9 +83,9 @@ return array(
 			'ok' => 'PDO e altri driver supportati (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => 'PDO e altri driver supportati (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'Installazione PHP',
 			'nok' => 'Versione PHP %s FreshRSS richiede almeno la versione %s.',
 			'nok' => 'Versione PHP %s FreshRSS richiede almeno la versione %s.',
 			'ok' => 'Versione PHP %s, compatibile con FreshRSS.',
 			'ok' => 'Versione PHP %s, compatibile con FreshRSS.',
+			'_' => 'Installazione PHP',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'Rilevate tabelle mancanti nel database.',
 			'nok' => 'Rilevate tabelle mancanti nel database.',
@@ -106,26 +106,25 @@ return array(
 		),
 		),
 	),
 	),
 	'extensions' => array(
 	'extensions' => array(
-		'author' => 'Author',	//TODO - Translation
-		'community' => 'Available community extensions',	//TODO - Translation
-		'description' => 'Description',	//TODO - Translation
+		'author' => 'Author',	// TODO - Translation
+		'community' => 'Available community extensions',	// TODO - Translation
+		'description' => 'Description',	// TODO - Translation
 		'disabled' => 'Disabilitata',
 		'disabled' => 'Disabilitata',
 		'empty_list' => 'Non ci sono estensioni installate',
 		'empty_list' => 'Non ci sono estensioni installate',
 		'enabled' => 'Abilitata',
 		'enabled' => 'Abilitata',
-		'latest' => 'Installed',	//TODO - Translation
-		'name' => 'Name',	//TODO - Translation
+		'latest' => 'Installed',	// TODO - Translation
+		'name' => 'Name',	// TODO - Translation
 		'no_configure_view' => 'Questa estensioni non può essere configurata.',
 		'no_configure_view' => 'Questa estensioni non può essere configurata.',
 		'system' => array(
 		'system' => array(
-			'_' => 'Estensioni di sistema',
 			'no_rights' => 'Estensione di sistema (non hai i permessi su questo tipo)',
 			'no_rights' => 'Estensione di sistema (non hai i permessi su questo tipo)',
+			'_' => 'Estensioni di sistema',
 		),
 		),
 		'title' => 'Estensioni',
 		'title' => 'Estensioni',
-		'update' => 'Update available',	//TODO - Translation
+		'update' => 'Update available',	// TODO - Translation
 		'user' => 'Estensioni utente',
 		'user' => 'Estensioni utente',
-		'version' => 'Version',	//TODO - Translation
+		'version' => 'Version',	// TODO - Translation
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Statistiche',
 		'all_feeds' => 'Tutti i feeds',
 		'all_feeds' => 'Tutti i feeds',
 		'category' => 'Categoria',
 		'category' => 'Categoria',
 		'entry_count' => 'Articoli',
 		'entry_count' => 'Articoli',
@@ -135,7 +134,7 @@ return array(
 		'entry_per_hour' => 'Per ora (media: %.2f articoli)',
 		'entry_per_hour' => 'Per ora (media: %.2f articoli)',
 		'entry_per_month' => 'Per mese (media: %.2f articoli)',
 		'entry_per_month' => 'Per mese (media: %.2f articoli)',
 		'entry_repartition' => 'Ripartizione contenuti',
 		'entry_repartition' => 'Ripartizione contenuti',
-		'feed' => 'Feed',
+		'feed' => 'Feed',	// TODO - Translation
 		'feed_per_category' => 'Feeds per categoria',
 		'feed_per_category' => 'Feeds per categoria',
 		'idle' => 'Feeds non aggiornati',
 		'idle' => 'Feeds non aggiornati',
 		'main' => 'Statistiche principali',
 		'main' => 'Statistiche principali',
@@ -155,46 +154,53 @@ return array(
 		'status_unread' => 'Non letti',
 		'status_unread' => 'Non letti',
 		'title' => 'Statistiche',
 		'title' => 'Statistiche',
 		'top_feed' => 'I migliori 10 feeds',
 		'top_feed' => 'I migliori 10 feeds',
+		'_' => 'Statistiche',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'Configurazione di sistema',
-		'auto-update-url' => 'Auto-update server URL',	//TODO - Translation
-		'force_email_validation' => 'Force email addresses validation', //TODO - Translation
+		'auto-update-url' => 'Auto-update server URL',	// TODO - Translation
+		'cookie-duration' => array(
+			'help' => 'in seconds',	// TODO - Translation
+			'number' => 'Duration to keep logged in',	// TODO - Translation
+		),
+		'force_email_validation' => 'Force email addresses validation',	// TODO - Translation
 		'instance-name' => 'Nome istanza',
 		'instance-name' => 'Nome istanza',
 		'max-categories' => 'Limite categorie per utente',
 		'max-categories' => 'Limite categorie per utente',
 		'max-feeds' => 'Limite feeds per utente',
 		'max-feeds' => 'Limite feeds per utente',
-		'cookie-duration' => array(
-			'help' => 'in seconds', // @todo translate
-			'number' => 'Duration to keep logged in', // @todo translate
-		),
 		'registration' => array(
 		'registration' => array(
 			'help' => '0 significa che non esiste limite sui profili',
 			'help' => '0 significa che non esiste limite sui profili',
 			'number' => 'Numero massimo di profili',
 			'number' => 'Numero massimo di profili',
 		),
 		),
+		'_' => 'Configurazione di sistema',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'Aggiornamento sistema',
 		'apply' => 'Applica',
 		'apply' => 'Applica',
 		'check' => 'Controlla la presenza di nuovi aggiornamenti',
 		'check' => 'Controlla la presenza di nuovi aggiornamenti',
 		'current_version' => 'FreshRSS versione %s.',
 		'current_version' => 'FreshRSS versione %s.',
 		'last' => 'Ultima verifica: %s',
 		'last' => 'Ultima verifica: %s',
 		'none' => 'Nessun aggiornamento da applicare',
 		'none' => 'Nessun aggiornamento da applicare',
 		'title' => 'Aggiorna sistema',
 		'title' => 'Aggiorna sistema',
+		'_' => 'Aggiornamento sistema',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s articoli (%s)',
 		'articles_and_size' => '%s articoli (%s)',
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => 'Crea nuovo utente',
 		'create' => 'Crea nuovo utente',
-		'delete_users' => 'Delete user',	//TODO - Translation
+		'database_size' => 'Database size',	// TODO - Translation
+		'delete_users' => 'Delete user',	// TODO - Translation
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => 'Lingua',
 		'language' => 'Lingua',
+		'list' => 'User list',	// TODO - Translation
 		'number' => ' %d profilo utente creato',
 		'number' => ' %d profilo utente creato',
 		'numbers' => 'Sono presenti %d profili utente',
 		'numbers' => 'Sono presenti %d profili utente',
 		'password_form' => 'Password<br /><small>(per il login classico)</small>',
 		'password_form' => 'Password<br /><small>(per il login classico)</small>',
 		'password_format' => 'Almeno 7 caratteri',
 		'password_format' => 'Almeno 7 caratteri',
-		'selected' => 'Selected user',	//TODO - Translation
+		'selected' => 'Selected user',	// TODO - Translation
 		'title' => 'Gestione utenti',
 		'title' => 'Gestione utenti',
-		'update_users' => 'Update user',	//TODO - Translation
-		'user_list' => 'Lista utenti',
+		'update_users' => 'Update user',	// TODO - Translation
 		'username' => 'Nome utente',
 		'username' => 'Nome utente',
 		'users' => 'Utenti',
 		'users' => 'Utenti',
+		'user_list' => 'Lista utenti',
 	),
 	),
 );
 );

+ 44 - 43
app/i18n/it/conf.php

@@ -2,34 +2,33 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Archiviazione',
 		'delete_after' => 'Rimuovi articoli dopo',
 		'delete_after' => 'Rimuovi articoli dopo',
-		'exception' => 'Purge exception',	//TODO - Translation
+		'exception' => 'Purge exception',	// TODO - Translation
 		'help' => 'Altre opzioni sono disponibili nelle impostazioni dei singoli feed',
 		'help' => 'Altre opzioni sono disponibili nelle impostazioni dei singoli feed',
-		'keep_favourites' => 'Never delete favourites',	//TODO - Translation
+		'keep_favourites' => 'Never delete favourites',	// TODO - Translation
+		'keep_labels' => 'Never delete labels',	// TODO - Translation
+		'keep_max' => 'Maximum number of articles to keep',	// TODO - Translation
 		'keep_min_by_feed' => 'Numero minimo di articoli da mantenere per feed',
 		'keep_min_by_feed' => 'Numero minimo di articoli da mantenere per feed',
-		'keep_labels' => 'Never delete labels',	//TODO - Translation
-		'keep_unreads' => 'Never delete unreads',	//TODO - Translation
-		'maintenance' => 'Maintenance',	//TODO - Translation
+		'keep_period' => 'Maximum age of articles to keep',	// TODO - Translation
+		'keep_unreads' => 'Never delete unreads',	// TODO - Translation
+		'maintenance' => 'Maintenance',	// TODO - Translation
 		'optimize' => 'Ottimizza database',
 		'optimize' => 'Ottimizza database',
 		'optimize_help' => 'Da fare occasionalmente per ridurre le dimensioni del database',
 		'optimize_help' => 'Da fare occasionalmente per ridurre le dimensioni del database',
-		'policy' => 'Purge policy',	//TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	//TODO - Translation
+		'policy' => 'Purge policy',	// TODO - Translation
+		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	// TODO - Translation
 		'purge_now' => 'Cancella ora',
 		'purge_now' => 'Cancella ora',
-		'keep_max' => 'Maximum number of articles to keep',	//TODO - Translation
-		'keep_period' => 'Maximum age of articles to keep',	//TODO - Translation
 		'title' => 'Archiviazione',
 		'title' => 'Archiviazione',
 		'ttl' => 'Non effettuare aggiornamenti per più di',
 		'ttl' => 'Non effettuare aggiornamenti per più di',
+		'_' => 'Archiviazione',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Visualizzazione',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Barra in fondo',
 			'bottom_line' => 'Barra in fondo',
+			'display_authors' => 'Authors',	// TODO - Translation
 			'entry' => 'Icone degli articoli',
 			'entry' => 'Icone degli articoli',
 			'publication_date' => 'Data di pubblicazione',
 			'publication_date' => 'Data di pubblicazione',
-			'related_tags' => 'Tags correlati',	//TODO - Translation
+			'related_tags' => 'Tags correlati',
 			'sharing' => 'Condivisione',
 			'sharing' => 'Condivisione',
-			'display_authors' => 'Authors',  //TODO - Translation
 			'top_line' => 'Barra in alto',
 			'top_line' => 'Barra in alto',
 		),
 		),
 		'language' => 'Lingua',
 		'language' => 'Lingua',
@@ -37,7 +36,7 @@ return array(
 			'seconds' => 'secondi (0 significa nessun timeout)',
 			'seconds' => 'secondi (0 significa nessun timeout)',
 			'timeout' => 'Notifica timeout HTML5',
 			'timeout' => 'Notifica timeout HTML5',
 		),
 		),
-		'show_nav_buttons' => 'Show the navigation buttons',	//TODO - Translation
+		'show_nav_buttons' => 'Show the navigation buttons',	// TODO - Translation
 		'theme' => 'Tema',
 		'theme' => 'Tema',
 		'title' => 'Visualizzazione',
 		'title' => 'Visualizzazione',
 		'width' => array(
 		'width' => array(
@@ -47,34 +46,35 @@ return array(
 			'no_limit' => 'Nessun limite',
 			'no_limit' => 'Nessun limite',
 			'thin' => 'Stretto',
 			'thin' => 'Stretto',
 		),
 		),
+		'_' => 'Visualizzazione',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Gestione profili',
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Cancellazione account',
 			'warn' => 'Il tuo account e tutti i dati associati saranno cancellati.',
 			'warn' => 'Il tuo account e tutti i dati associati saranno cancellati.',
+			'_' => 'Cancellazione account',
 		),
 		),
 		'email' => 'Indirizzo email',
 		'email' => 'Indirizzo email',
 		'password_api' => 'Password API<br /><small>(e.g., per applicazioni mobili)</small>',
 		'password_api' => 'Password API<br /><small>(e.g., per applicazioni mobili)</small>',
 		'password_form' => 'Password<br /><small>(per il login classico)</small>',
 		'password_form' => 'Password<br /><small>(per il login classico)</small>',
 		'password_format' => 'Almeno 7 caratteri',
 		'password_format' => 'Almeno 7 caratteri',
 		'title' => 'Profilo',
 		'title' => 'Profilo',
+		'_' => 'Gestione profili',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'Ricerche personali',
 		'deprecated' => 'Questa query non è più valida. La categoria o il feed di riferimento non stati cancellati.',
 		'deprecated' => 'Questa query non è più valida. La categoria o il feed di riferimento non stati cancellati.',
-		'display' => 'Display user query results',	//TODO - Translation
+		'display' => 'Display user query results',	// TODO - Translation
 		'filter' => 'Filtro applicato:',
 		'filter' => 'Filtro applicato:',
 		'get_all' => 'Mostra tutti gli articoli',
 		'get_all' => 'Mostra tutti gli articoli',
 		'get_category' => 'Mostra la categoria "%s" ',
 		'get_category' => 'Mostra la categoria "%s" ',
 		'get_favorite' => 'Mostra articoli preferiti',
 		'get_favorite' => 'Mostra articoli preferiti',
 		'get_feed' => 'Mostra feed "%s" ',
 		'get_feed' => 'Mostra feed "%s" ',
-		'no_filter' => 'Nessun filtro',
 		'none' => 'Non hai creato nessuna ricerca personale.',
 		'none' => 'Non hai creato nessuna ricerca personale.',
+		'no_filter' => 'Nessun filtro',
 		'number' => 'Ricerca n°%d',
 		'number' => 'Ricerca n°%d',
 		'order_asc' => 'Mostra prima gli articoli più vecchi',
 		'order_asc' => 'Mostra prima gli articoli più vecchi',
 		'order_desc' => 'Mostra prima gli articoli più nuovi',
 		'order_desc' => 'Mostra prima gli articoli più nuovi',
-		'remove' => 'Remove user query',	//TODO - Translation
+		'remove' => 'Remove user query',	// TODO - Translation
 		'search' => 'Cerca per "%s"',
 		'search' => 'Cerca per "%s"',
 		'state_0' => 'Mostra tutti gli articoli',
 		'state_0' => 'Mostra tutti gli articoli',
 		'state_1' => 'Mostra gli articoli letti',
 		'state_1' => 'Mostra gli articoli letti',
@@ -93,9 +93,9 @@ return array(
 		'state_14' => 'Mostra gli articoli non letti',
 		'state_14' => 'Mostra gli articoli non letti',
 		'state_15' => 'Mostra tutti gli articoli',
 		'state_15' => 'Mostra tutti gli articoli',
 		'title' => 'Ricerche personali',
 		'title' => 'Ricerche personali',
+		'_' => 'Ricerche personali',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Lettura',
 		'after_onread' => 'Dopo “segna tutto come letto”,',
 		'after_onread' => 'Dopo “segna tutto come letto”,',
 		'articles_per_page' => 'Numero di articoli per pagina',
 		'articles_per_page' => 'Numero di articoli per pagina',
 		'auto_load_more' => 'Carica articoli successivi a fondo pagina',
 		'auto_load_more' => 'Carica articoli successivi a fondo pagina',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'Segna articoli come letti…',
 			'when' => 'Segna articoli come letti…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Articoli da visualizzare',
 			'adaptive' => 'Adatta visualizzazione',
 			'adaptive' => 'Adatta visualizzazione',
 			'all_articles' => 'Mostra tutti gli articoli',
 			'all_articles' => 'Mostra tutti gli articoli',
 			'unread' => 'Mostra solo non letti',
 			'unread' => 'Mostra solo non letti',
+			'_' => 'Articoli da visualizzare',
 		),
 		),
-		'sides_close_article' => 'Clicking outside of article text area closes the article',	//TODO - Translation
+		'sides_close_article' => 'Clicking outside of article text area closes the article',	// TODO - Translation
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Ordinamento',
 			'newer_first' => 'Prima i più recenti',
 			'newer_first' => 'Prima i più recenti',
 			'older_first' => 'Prima i più vecchi',
 			'older_first' => 'Prima i più vecchi',
+			'_' => 'Ordinamento',
 		),
 		),
 		'sticky_post' => 'Blocca il contenuto a inizio pagina quando aperto',
 		'sticky_post' => 'Blocca il contenuto a inizio pagina quando aperto',
 		'title' => 'Lettura',
 		'title' => 'Lettura',
@@ -135,26 +135,26 @@ return array(
 			'normal' => 'Vista elenco',
 			'normal' => 'Vista elenco',
 			'reader' => 'Modalità di lettura',
 			'reader' => 'Modalità di lettura',
 		),
 		),
+		'_' => 'Lettura',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Condivisione',
-		'add' => 'Add a sharing method',	//TODO - Translation
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
-		'email' => 'Email',
-		'facebook' => 'Facebook',
+		'add' => 'Add a sharing method',	// TODO - Translation
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
+		'email' => 'Email',	// TODO - Translation
+		'facebook' => 'Facebook',	// TODO - Translation
 		'more_information' => 'Ulteriori informazioni',
 		'more_information' => 'Ulteriori informazioni',
 		'print' => 'Stampa',
 		'print' => 'Stampa',
-		'remove' => 'Remove sharing method',	//TODO - Translation
-		'shaarli' => 'Shaarli',
+		'remove' => 'Remove sharing method',	// TODO - Translation
+		'shaarli' => 'Shaarli',	// TODO - Translation
 		'share_name' => 'Nome condivisione',
 		'share_name' => 'Nome condivisione',
 		'share_url' => 'URL condivisione',
 		'share_url' => 'URL condivisione',
 		'title' => 'Condividi',
 		'title' => 'Condividi',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag',
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag',	// TODO - Translation
+		'_' => 'Condivisione',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Comandi tastiera',
 		'article_action' => 'Azioni sugli articoli',
 		'article_action' => 'Azioni sugli articoli',
 		'auto_share' => 'Condividi',
 		'auto_share' => 'Condividi',
 		'auto_share_help' => 'Se è presente un solo servizio di condivisione verrà usato quello, altrimenti usare anche il numero associato.',
 		'auto_share_help' => 'Se è presente un solo servizio di condivisione verrà usato quello, altrimenti usare anche il numero associato.',
@@ -162,7 +162,7 @@ return array(
 		'collapse_article' => 'Collassa articoli',
 		'collapse_article' => 'Collassa articoli',
 		'first_article' => 'Salta al primo articolo',
 		'first_article' => 'Salta al primo articolo',
 		'focus_search' => 'Modulo di ricerca',
 		'focus_search' => 'Modulo di ricerca',
-		'global_view' => 'Switch to global view',	//TODO - Translation
+		'global_view' => 'Switch to global view',	// TODO - Translation
 		'help' => 'Mostra documentazione',
 		'help' => 'Mostra documentazione',
 		'javascript' => 'JavaScript deve essere abilitato per poter usare i comandi da tastiera',
 		'javascript' => 'JavaScript deve essere abilitato per poter usare i comandi da tastiera',
 		'last_article' => 'Salta all ultimo articolo',
 		'last_article' => 'Salta all ultimo articolo',
@@ -171,21 +171,22 @@ return array(
 		'mark_read' => 'Segna come letto',
 		'mark_read' => 'Segna come letto',
 		'navigation' => 'Navigazione',
 		'navigation' => 'Navigazione',
 		'navigation_help' => 'Con il tasto "Shift" i comandi di navigazione verranno applicati ai feeds.<br/>Con il tasto "Alt" i comandi di navigazione verranno applicati alle categorie.',
 		'navigation_help' => 'Con il tasto "Shift" i comandi di navigazione verranno applicati ai feeds.<br/>Con il tasto "Alt" i comandi di navigazione verranno applicati alle categorie.',
-		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	//TODO - Translation
+		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Salta al contenuto successivo',
 		'next_article' => 'Salta al contenuto successivo',
-		'normal_view' => 'Switch to normal view', // TODO
+		'normal_view' => 'Switch to normal view',	// TODO - Translation
 		'other_action' => 'Altre azioni',
 		'other_action' => 'Altre azioni',
 		'previous_article' => 'Salta al contenuto precedente',
 		'previous_article' => 'Salta al contenuto precedente',
-		'reading_view' => 'Switch to reading view',	//TODO - Translation
-		'rss_view' => 'Open RSS view in a new tab',	//TODO - Translation
+		'reading_view' => 'Switch to reading view',	// TODO - Translation
+		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'Vai al sito fonte',
 		'see_on_website' => 'Vai al sito fonte',
 		'shift_for_all_read' => '+ <code>shift</code> per segnare tutti gli articoli come letti',
 		'shift_for_all_read' => '+ <code>shift</code> per segnare tutti gli articoli come letti',
-		'skip_next_article' => 'Focus next without opening',	//TODO - Translation
-		'skip_previous_article' => 'Focus previous without opening',	//TODO - Translation
+		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
+		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Comandi da tastiera',
 		'title' => 'Comandi da tastiera',
 		'user_filter' => 'Accedi alle ricerche personali',
 		'user_filter' => 'Accedi alle ricerche personali',
 		'user_filter_help' => 'Se è presente una sola ricerca personale verrà usata quella, altrimenti usare anche il numero associato.',
 		'user_filter_help' => 'Se è presente una sola ricerca personale verrà usata quella, altrimenti usare anche il numero associato.',
-		'views' => 'Views',	//TODO - Translation
+		'views' => 'Views',	// TODO - Translation
+		'_' => 'Comandi tastiera',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s articoli (%s)',
 		'articles_and_size' => '%s articoli (%s)',

+ 21 - 15
app/i18n/it/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Ottimizzazione completata',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'Non hai i permessi per accedere a questa pagina',
 		'denied' => 'Non hai i permessi per accedere a questa pagina',
 		'not_found' => 'Pagina non disponibile',
 		'not_found' => 'Pagina non disponibile',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'Ottimizzazione completata',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'Si è verificato un problema alla configurazione del sistema di autenticazione. Per favore riprova più tardi.',
 			'not_set' => 'Si è verificato un problema alla configurazione del sistema di autenticazione. Per favore riprova più tardi.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s non può essere abilitata. <a href="%s">Verifica i logs</a> per dettagli.',
 			'ko' => '%s non può essere abilitata. <a href="%s">Verifica i logs</a> per dettagli.',
 			'ok' => '%s è ora abilitata',
 			'ok' => '%s è ora abilitata',
 		),
 		),
-		'no_access' => 'Accesso negato a %s',
 		'not_enabled' => '%s non abilitato',
 		'not_enabled' => '%s non abilitato',
 		'not_found' => '%s non disponibile',
 		'not_found' => '%s non disponibile',
+		'no_access' => 'Accesso negato a %s',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'Estensione ZIP non presente sul server. Per favore esporta i files singolarmente.',
 		'export_no_zip_extension' => 'Estensione ZIP non presente sul server. Per favore esporta i files singolarmente.',
@@ -57,8 +63,8 @@ return array(
 	'sub' => array(
 	'sub' => array(
 		'actualize' => 'Aggiorna',
 		'actualize' => 'Aggiorna',
 		'articles' => array(
 		'articles' => array(
-			'marked_read' => 'The selected articles have been marked as read.',	//TODO - Translation
-			'marked_unread' => 'The articles have been marked as unread.',	//TODO - Translation
+			'marked_read' => 'The selected articles have been marked as read.',	// TODO - Translation
+			'marked_unread' => 'The articles have been marked as unread.',	// TODO - Translation
 		),
 		),
 		'category' => array(
 		'category' => array(
 			'created' => 'Categoria %s creata.',
 			'created' => 'Categoria %s creata.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'Categoria svuotata',
 			'emptied' => 'Categoria svuotata',
 			'error' => 'Categoria non aggiornata',
 			'error' => 'Categoria non aggiornata',
 			'name_exists' => 'Categoria già esistente.',
 			'name_exists' => 'Categoria già esistente.',
-			'no_id' => 'Categoria senza ID.',
-			'no_name' => 'Il nome della categoria non può essere lasciato vuoto.',
 			'not_delete_default' => 'Non puoi cancellare la categoria predefinita!',
 			'not_delete_default' => 'Non puoi cancellare la categoria predefinita!',
 			'not_exist' => 'La categoria non esite!',
 			'not_exist' => 'La categoria non esite!',
+			'no_id' => 'Categoria senza ID.',
+			'no_name' => 'Il nome della categoria non può essere lasciato vuoto.',
 			'over_max' => 'Hai raggiunto il numero limite di categorie (%d)',
 			'over_max' => 'Hai raggiunto il numero limite di categorie (%d)',
 			'updated' => 'Categoria aggiornata.',
 			'updated' => 'Categoria aggiornata.',
 		),
 		),
@@ -80,12 +86,12 @@ return array(
 			'already_subscribed' => 'Hai già sottoscritto <em>%s</em>',
 			'already_subscribed' => 'Hai già sottoscritto <em>%s</em>',
 			'deleted' => 'Feed cancellato',
 			'deleted' => 'Feed cancellato',
 			'error' => 'Feed non aggiornato',
 			'error' => 'Feed non aggiornato',
-			'internal_problem' => 'RSS feed non aggiunto. <a href="%s">Verifica i logs</a> per dettagli.',	//TODO - Translation
+			'internal_problem' => 'RSS feed non aggiunto. <a href="%s">Verifica i logs</a> per dettagli.',
 			'invalid_url' => 'URL <em>%s</em> non valido',
 			'invalid_url' => 'URL <em>%s</em> non valido',
+			'not_added' => '<em>%s</em> non può essere aggiunto',
+			'no_refresh' => 'Nessun aggiornamento disponibile…',
 			'n_actualized' => '%d feeds aggiornati',
 			'n_actualized' => '%d feeds aggiornati',
 			'n_entries_deleted' => '%d articoli cancellati',
 			'n_entries_deleted' => '%d articoli cancellati',
-			'no_refresh' => 'Nessun aggiornamento disponibile…',
-			'not_added' => '<em>%s</em> non può essere aggiunto',
 			'over_max' => 'Hai raggiunto il numero limite di feed (%d)',
 			'over_max' => 'Hai raggiunto il numero limite di feed (%d)',
 			'updated' => 'Feed aggiornato',
 			'updated' => 'Feed aggiornato',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'Utente %s creato',
 			'error' => 'Errore nella creazione utente %s ',
 			'error' => 'Errore nella creazione utente %s ',
+			'_' => 'Utente %s creato',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'Utente %s cancellato',
 			'error' => 'Utente %s non cancellato',
 			'error' => 'Utente %s non cancellato',
+			'_' => 'Utente %s cancellato',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'User %s has been updated',	//TODO - Translation
-			'error' => 'User %s has not been updated',	//TODO - Translation
+			'error' => 'User %s has not been updated',	// TODO - Translation
+			'_' => 'User %s has been updated',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 56 - 54
app/i18n/it/gen.php

@@ -3,7 +3,7 @@
 return array(
 return array(
 	'action' => array(
 	'action' => array(
 		'actualize' => 'Aggiorna',
 		'actualize' => 'Aggiorna',
-		'back' => '← Go back', //TODO - Translation
+		'back' => '← Go back',	// TODO - Translation
 		'back_to_rss_feeds' => '← Indietro',
 		'back_to_rss_feeds' => '← Indietro',
 		'cancel' => 'Annulla',
 		'cancel' => 'Annulla',
 		'create' => 'Crea',
 		'create' => 'Crea',
@@ -16,32 +16,33 @@ return array(
 		'manage' => 'Gestisci',
 		'manage' => 'Gestisci',
 		'mark_favorite' => 'Segna come preferito',
 		'mark_favorite' => 'Segna come preferito',
 		'mark_read' => 'Segna come letto',
 		'mark_read' => 'Segna come letto',
+		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Rimuovi',
 		'remove' => 'Rimuovi',
 		'see_website' => 'Vai al sito',
 		'see_website' => 'Vai al sito',
 		'submit' => 'Conferma',
 		'submit' => 'Conferma',
 		'truncate' => 'Cancella tutti gli articoli',
 		'truncate' => 'Cancella tutti gli articoli',
-		'update' => 'Update', // TODO
+		'update' => 'Update',	// TODO - Translation
 	),
 	),
 	'auth' => array(
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.', // TODO - Translation
+		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.',	// TODO - Translation
 		'email' => 'Indirizzo email',
 		'email' => 'Indirizzo email',
 		'keep_logged_in' => 'Ricorda i dati <small>(%s giorni)</small>',
 		'keep_logged_in' => 'Ricorda i dati <small>(%s giorni)</small>',
 		'login' => 'Accedi',
 		'login' => 'Accedi',
 		'logout' => 'Esci',
 		'logout' => 'Esci',
 		'password' => array(
 		'password' => array(
-			'_' => 'Password',
 			'format' => '<small>almeno 7 caratteri</small>',
 			'format' => '<small>almeno 7 caratteri</small>',
+			'_' => 'Password',	// TODO - Translation
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'Nuovo profilo',
 			'ask' => 'Vuoi creare un nuovo profilo?',
 			'ask' => 'Vuoi creare un nuovo profilo?',
 			'title' => 'Creazione profilo',
 			'title' => 'Creazione profilo',
+			'_' => 'Nuovo profilo',
 		),
 		),
 		'reset' => 'Reset autenticazione',
 		'reset' => 'Reset autenticazione',
 		'username' => array(
 		'username' => array(
-			'_' => 'Username',
 			'admin' => 'Username amministratore',
 			'admin' => 'Username amministratore',
 			'format' => '<small>massimo 16 caratteri alfanumerici</small>',
 			'format' => '<small>massimo 16 caratteri alfanumerici</small>',
+			'_' => 'Username',	// TODO - Translation
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -60,12 +61,12 @@ return array(
 		'february' => 'febbraio',
 		'february' => 'febbraio',
 		'format_date' => 'j\\ %s Y',
 		'format_date' => 'j\\ %s Y',
 		'format_date_hour' => 'j\\ %s Y \\o\\r\\e H\\:i',
 		'format_date_hour' => 'j\\ %s Y \\o\\r\\e H\\:i',
-		'fri' => 'Fri',
+		'fri' => 'Fri',	// TODO - Translation
 		'Jan' => '\\G\\e\\n\\u\\a\\i\\o',
 		'Jan' => '\\G\\e\\n\\u\\a\\i\\o',
 		'jan' => 'genn.',
 		'jan' => 'genn.',
 		'january' => 'gennaio',
 		'january' => 'gennaio',
-		'Jul' => '\\L\\u\\g\\l\\i\\o',
 		'jul' => 'jul',
 		'jul' => 'jul',
+		'Jul' => '\\L\\u\\g\\l\\i\\o',
 		'july' => 'luglio',
 		'july' => 'luglio',
 		'Jun' => '\\G\\i\\u\\g\\n\\o',
 		'Jun' => '\\G\\i\\u\\g\\n\\o',
 		'jun' => 'jun',
 		'jun' => 'jun',
@@ -75,13 +76,13 @@ return array(
 		'last_month' => 'Ultimo mese',
 		'last_month' => 'Ultimo mese',
 		'last_week' => 'Ultima settimana',
 		'last_week' => 'Ultima settimana',
 		'last_year' => 'Ultimo anno',
 		'last_year' => 'Ultimo anno',
-		'Mar' => '\\M\\a\\r\\z\\o',
 		'mar' => 'mar.',
 		'mar' => 'mar.',
+		'Mar' => '\\M\\a\\r\\z\\o',
 		'march' => 'marzo',
 		'march' => 'marzo',
 		'May' => '\\M\\a\\g\\g\\i\\o',
 		'May' => '\\M\\a\\g\\g\\i\\o',
 		'may' => 'maggio',
 		'may' => 'maggio',
-		'may_' => 'May',
-		'mon' => 'Mon',
+		'may_' => 'May',	// TODO - Translation
+		'mon' => 'Mon',	// TODO - Translation
 		'month' => 'mesi',
 		'month' => 'mesi',
 		'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\e',
 		'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\e',
 		'nov' => 'nov.',
 		'nov' => 'nov.',
@@ -89,20 +90,20 @@ return array(
 		'Oct' => '\\O\\t\\t\\o\\b\\r\\e',
 		'Oct' => '\\O\\t\\t\\o\\b\\r\\e',
 		'oct' => 'ott.',
 		'oct' => 'ott.',
 		'october' => 'ottobre',
 		'october' => 'ottobre',
-		'sat' => 'Sat',
+		'sat' => 'Sat',	// TODO - Translation
 		'Sep' => '\\S\\e\\t\\t\\e\\m\\b\\r\\e',
 		'Sep' => '\\S\\e\\t\\t\\e\\m\\b\\r\\e',
 		'sep' => 'sett.',
 		'sep' => 'sett.',
 		'september' => 'settembre',
 		'september' => 'settembre',
-		'sun' => 'Sun',
-		'thu' => 'Thu',
+		'sun' => 'Sun',	// TODO - Translation
+		'thu' => 'Thu',	// TODO - Translation
 		'today' => 'Oggi',
 		'today' => 'Oggi',
-		'tue' => 'Tue',
-		'wed' => 'Wed',
+		'tue' => 'Tue',	// TODO - Translation
+		'wed' => 'Wed',	// TODO - Translation
 		'yesterday' => 'Ieri',
 		'yesterday' => 'Ieri',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'Feed RSS Reader',
 		'about' => 'Informazioni',
 		'about' => 'Informazioni',
+		'_' => 'Feed RSS Reader',
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Categoria vuota',
 		'category_empty' => 'Categoria vuota',
@@ -117,20 +118,21 @@ return array(
 		'should_be_activated' => 'JavaScript deve essere abilitato',
 		'should_be_activated' => 'JavaScript deve essere abilitato',
 	),
 	),
 	'lang' => array(
 	'lang' => array(
-		'cz' => 'Čeština',
-		'de' => 'Deutsch',
-		'en' => 'English',
-		'es' => 'Español',
-		'fr' => 'Français',
-		'he' => 'עברית',
-		'it' => 'Italiano',
-		'kr' => '한국어',
-		'nl' => 'Nederlands',
-		'oc' => 'Occitan',
-		'pt-br' => 'Português (Brasil)',
-		'ru' => 'Русский',
-		'tr' => 'Türkçe',
-		'zh-cn' => '简体中文',
+		'cz' => 'Čeština',	// TODO - Translation
+		'de' => 'Deutsch',	// TODO - Translation
+		'en' => 'English',	// TODO - Translation
+		'es' => 'Español',	// TODO - Translation
+		'fr' => 'Français',	// TODO - Translation
+		'he' => 'עברית',	// TODO - Translation
+		'it' => 'Italiano',	// TODO - Translation
+		'kr' => '한국어',	// TODO - Translation
+		'nl' => 'Nederlands',	// TODO - Translation
+		'oc' => 'Occitan',	// TODO - Translation
+		'pt-br' => 'Português (Brasil)',	// TODO - Translation
+		'ru' => 'Русский',	// TODO - Translation
+		'sk' => 'Slovenčina',	// TODO - Translation
+		'tr' => 'Türkçe',	// TODO - Translation
+		'zh-cn' => '简体中文',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Informazioni',
 		'about' => 'Informazioni',
@@ -141,7 +143,7 @@ return array(
 		'configuration' => 'Configurazione',
 		'configuration' => 'Configurazione',
 		'display' => 'Visualizzazione',
 		'display' => 'Visualizzazione',
 		'extensions' => 'Estensioni',
 		'extensions' => 'Estensioni',
-		'logs' => 'Logs',
+		'logs' => 'Logs',	// TODO - Translation
 		'queries' => 'Ricerche personali',
 		'queries' => 'Ricerche personali',
 		'reading' => 'Lettura',
 		'reading' => 'Lettura',
 		'search' => 'Ricerca parole o #tags',
 		'search' => 'Ricerca parole o #tags',
@@ -163,31 +165,31 @@ return array(
 		'previous' => 'Precedente',
 		'previous' => 'Precedente',
 	),
 	),
 	'period' => array(
 	'period' => array(
-		'days' => 'days',	//TODO - Translation
-		'hours' => 'hours',	//TODO - Translation
-		'months' => 'months',	//TODO - Translation
-		'weeks' => 'weeks',	//TODO - Translation
-		'years' => 'years',	//TODO - Translation
+		'days' => 'days',	// TODO - Translation
+		'hours' => 'hours',	// TODO - Translation
+		'months' => 'months',	// TODO - Translation
+		'weeks' => 'weeks',	// TODO - Translation
+		'years' => 'years',	// TODO - Translation
 	),
 	),
 	'share' => array(
 	'share' => array(
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
-		'email' => 'Email',
-		'facebook' => 'Facebook',
-		'gnusocial' => 'GNU social',
-		'jdh' => 'Journal du hacker',
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
+		'email' => 'Email',	// TODO - Translation
+		'facebook' => 'Facebook',	// TODO - Translation
+		'gnusocial' => 'GNU social',	// TODO - Translation
+		'jdh' => 'Journal du hacker',	// TODO - Translation
 		'Known' => 'Siti basati su Known',
 		'Known' => 'Siti basati su Known',
-		'lemmy' => 'Lemmy',
-		'linkedin' => 'LinkedIn',
-		'mastodon' => 'Mastodon',
-		'movim' => 'Movim',
-		'pinboard' => 'Pinboard',
-		'pocket' => 'Pocket',
+		'lemmy' => 'Lemmy',	// TODO - Translation
+		'linkedin' => 'LinkedIn',	// TODO - Translation
+		'mastodon' => 'Mastodon',	// TODO - Translation
+		'movim' => 'Movim',	// TODO - Translation
+		'pinboard' => 'Pinboard',	// TODO - Translation
+		'pocket' => 'Pocket',	// TODO - Translation
 		'print' => 'Stampa',
 		'print' => 'Stampa',
-		'shaarli' => 'Shaarli',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag v1',
-		'wallabagv2' => 'wallabag v2',
+		'shaarli' => 'Shaarli',	// TODO - Translation
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag v1',	// TODO - Translation
+		'wallabagv2' => 'wallabag v2',	// TODO - Translation
 	),
 	),
 	'short' => array(
 	'short' => array(
 		'attention' => 'Attenzione!',
 		'attention' => 'Attenzione!',
@@ -196,7 +198,7 @@ return array(
 		'by_default' => 'predefinito',
 		'by_default' => 'predefinito',
 		'damn' => 'Ops!',
 		'damn' => 'Ops!',
 		'default_category' => 'Senza categoria',
 		'default_category' => 'Senza categoria',
-		'no' => 'No',
+		'no' => 'No',	// TODO - Translation
 		'not_applicable' => 'Non disponibile',
 		'not_applicable' => 'Non disponibile',
 		'ok' => 'OK!',
 		'ok' => 'OK!',
 		'or' => 'o',
 		'or' => 'o',

+ 12 - 12
app/i18n/it/index.php

@@ -2,8 +2,7 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'Informazioni',
-		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// TODO - Translation
 		'bugs_reports' => 'Bugs',
 		'bugs_reports' => 'Bugs',
 		'credits' => 'Crediti',
 		'credits' => 'Crediti',
 		'credits_content' => 'Alcuni elementi di design provengono da <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> sebbene FreshRSS non usi questo framework. Le <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icone</a> provengono dal progetto <a href="https://www.gnome.org/">GNOME</a>. Il carattere <em>Open Sans</em> è stato creato da <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS è basato su <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
 		'credits_content' => 'Alcuni elementi di design provengono da <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> sebbene FreshRSS non usi questo framework. Le <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icone</a> provengono dal progetto <a href="https://www.gnome.org/">GNOME</a>. Il carattere <em>Open Sans</em> è stato creato da <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS è basato su <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
@@ -14,23 +13,21 @@ return array(
 		'title' => 'Informazioni',
 		'title' => 'Informazioni',
 		'version' => 'Versione',
 		'version' => 'Versione',
 		'website' => 'Sito',
 		'website' => 'Sito',
-	),
-	'tos' => array(
-		'title' => 'Terms of Service', // TODO - Translation
+		'_' => 'Informazioni',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Aggiungi un Feed RSS',
 		'add' => 'Aggiungi un Feed RSS',
 		'empty' => 'Non ci sono articoli da mostrare.',
 		'empty' => 'Non ci sono articoli da mostrare.',
 		'rss_of' => 'RSS feed di %s',
 		'rss_of' => 'RSS feed di %s',
 		'title' => 'RSS feeds',
 		'title' => 'RSS feeds',
-		'title_global' => 'Vista globale per categorie',
 		'title_fav' => 'Preferiti',
 		'title_fav' => 'Preferiti',
+		'title_global' => 'Vista globale per categorie',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Logs',
 		'clear' => 'Svuota logs',
 		'clear' => 'Svuota logs',
 		'empty' => 'File di log vuoto',
 		'empty' => 'File di log vuoto',
-		'title' => 'Logs',
+		'title' => 'Logs',	// TODO - Translation
+		'_' => 'Logs',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Informazioni',
 		'about' => 'Informazioni',
@@ -43,7 +40,7 @@ return array(
 		'mark_all_read' => 'Segna tutto come letto',
 		'mark_all_read' => 'Segna tutto come letto',
 		'mark_cat_read' => 'Segna la categoria come letta',
 		'mark_cat_read' => 'Segna la categoria come letta',
 		'mark_feed_read' => 'Segna il feed come letto',
 		'mark_feed_read' => 'Segna il feed come letto',
-		'mark_selection_unread' => 'Mark selection as unread',	//TODO - Translation
+		'mark_selection_unread' => 'Mark selection as unread',	// TODO - Translation
 		'newer_first' => 'Mostra prima i recenti',
 		'newer_first' => 'Mostra prima i recenti',
 		'non-starred' => 'Escludi preferiti',
 		'non-starred' => 'Escludi preferiti',
 		'normal_view' => 'Vista elenco',
 		'normal_view' => 'Vista elenco',
@@ -51,16 +48,19 @@ return array(
 		'queries' => 'Chiavi di ricerca',
 		'queries' => 'Chiavi di ricerca',
 		'read' => 'Mostra solo letti',
 		'read' => 'Mostra solo letti',
 		'reader_view' => 'Modalità di lettura',
 		'reader_view' => 'Modalità di lettura',
-		'rss_view' => 'RSS feed',
+		'rss_view' => 'RSS feed',	// TODO - Translation
 		'search_short' => 'Cerca',
 		'search_short' => 'Cerca',
 		'starred' => 'Mostra solo preferiti',
 		'starred' => 'Mostra solo preferiti',
 		'stats' => 'Statistiche',
 		'stats' => 'Statistiche',
 		'subscription' => 'Gestione sottoscrizioni',
 		'subscription' => 'Gestione sottoscrizioni',
-		'tags' => 'My labels',	//TODO - Translation
+		'tags' => 'My labels',	// TODO - Translation
 		'unread' => 'Mostra solo non letti',
 		'unread' => 'Mostra solo non letti',
 	),
 	),
 	'share' => 'Condividi',
 	'share' => 'Condividi',
 	'tag' => array(
 	'tag' => array(
-		'related' => 'Tags correlati',	//TODO - Translation
+		'related' => 'Tags correlati',
+	),
+	'tos' => array(
+		'title' => 'Terms of Service',	// TODO - Translation
 	),
 	),
 );
 );

+ 11 - 11
app/i18n/it/install.php

@@ -17,20 +17,19 @@ return array(
 		'type' => 'Metodo di autenticazione',
 		'type' => 'Metodo di autenticazione',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'Database',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'Configurazione database',
 			'ko' => 'Verifica le informazioni del database.',
 			'ko' => 'Verifica le informazioni del database.',
 			'ok' => 'Le configurazioni del database sono state salvate.',
 			'ok' => 'Le configurazioni del database sono state salvate.',
+			'_' => 'Configurazione database',
 		),
 		),
-		'host' => 'Host',
+		'host' => 'Host',	// TODO - Translation
 		'password' => 'Password del database',
 		'password' => 'Password del database',
 		'prefix' => 'Prefisso tabella',
 		'prefix' => 'Prefisso tabella',
 		'type' => 'Tipo di database',
 		'type' => 'Tipo di database',
 		'username' => 'Nome utente del database',
 		'username' => 'Nome utente del database',
+		'_' => 'Database',	// TODO - Translation
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'Controlli',
 		'already_installed' => 'FreshRSS risulta già installato!',
 		'already_installed' => 'FreshRSS risulta già installato!',
 		'cache' => array(
 		'cache' => array(
 			'nok' => 'Verifica i permessi sulla cartella <em>./data/cache</em>. Il server HTTP deve avere i permessi per scriverci dentro',
 			'nok' => 'Verifica i permessi sulla cartella <em>./data/cache</em>. Il server HTTP deve avere i permessi per scriverci dentro',
@@ -66,11 +65,11 @@ return array(
 		),
 		),
 		'json' => array(
 		'json' => array(
 			'nok' => 'You lack a recommended library to parse JSON.',
 			'nok' => 'You lack a recommended library to parse JSON.',
-			'ok' => 'You have a recommended library to parse JSON.',
+			'ok' => 'You have a recommended library to parse JSON.',	// TODO - Translation
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
 			'nok' => 'Manca il framework Minz.',
 			'nok' => 'Manca il framework Minz.',
@@ -94,12 +93,13 @@ return array(
 		),
 		),
 		'xml' => array(
 		'xml' => array(
 			'nok' => 'You lack the required library to parse XML.',
 			'nok' => 'You lack the required library to parse XML.',
-			'ok' => 'You have the required library to parse XML.',
+			'ok' => 'You have the required library to parse XML.',	// TODO - Translation
 		),
 		),
+		'_' => 'Controlli',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'Configurazioni generali',
 		'ok' => 'Configurazioni generali salvate.',
 		'ok' => 'Configurazioni generali salvate.',
+		'_' => 'Configurazioni generali',
 	),
 	),
 	'congratulations' => 'Congratulazione!',
 	'congratulations' => 'Congratulazione!',
 	'default_user' => 'Username utente predefinito <small>(massimo 16 caratteri alfanumerici)</small>',
 	'default_user' => 'Username utente predefinito <small>(massimo 16 caratteri alfanumerici)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'Reinstallando FreshRSS perderai la configurazione precedente. Sei sicuro di voler procedere?',
 		'confirm_reinstall' => 'Reinstallando FreshRSS perderai la configurazione precedente. Sei sicuro di voler procedere?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'Lingua',
 		'choose' => 'Seleziona la lingua per FreshRSS',
 		'choose' => 'Seleziona la lingua per FreshRSS',
 		'defined' => 'Lingua impostata.',
 		'defined' => 'Lingua impostata.',
+		'_' => 'Lingua',
 	),
 	),
 	'not_deleted' => 'Qualcosa non ha funzionato; devi cancellare il file <em>%s</em> manualmente.',
 	'not_deleted' => 'Qualcosa non ha funzionato; devi cancellare il file <em>%s</em> manualmente.',
 	'ok' => 'Processo di installazione terminato con successo.',
 	'ok' => 'Processo di installazione terminato con successo.',
 	'step' => 'Passaggio %d',
 	'step' => 'Passaggio %d',
 	'steps' => 'Passaggi',
 	'steps' => 'Passaggi',
-	'title' => 'Installazione · FreshRSS',
 	'this_is_the_end' => 'Fine',
 	'this_is_the_end' => 'Fine',
+	'title' => 'Installazione · FreshRSS',
 );
 );

+ 32 - 32
app/i18n/it/sub.php

@@ -2,24 +2,24 @@
 
 
 return array(
 return array(
 	'api' => array(
 	'api' => array(
-		'documentation' => 'Copy the following URL to use it within an external tool.',	//TODO - Translation
-		'title' => 'API',	//TODO - Translation
+		'documentation' => 'Copy the following URL to use it within an external tool.',	// TODO - Translation
+		'title' => 'API',	// TODO - Translation
 	),
 	),
 	'bookmarklet' => array(
 	'bookmarklet' => array(
-		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',// TODO
-		'label' => 'Subscribe',	//TODO - Translation
-		'title' => 'Bookmarklet',	//TODO - Translation
+		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',	// TODO - Translation
+		'label' => 'Subscribe',	// TODO - Translation
+		'title' => 'Bookmarklet',	// TODO - Translation
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'Categoria',
 		'add' => 'Aggiungi una categoria',
 		'add' => 'Aggiungi una categoria',
 		'archiving' => 'Archiviazione',
 		'archiving' => 'Archiviazione',
 		'empty' => 'Categoria vuota',
 		'empty' => 'Categoria vuota',
 		'information' => 'Informazioni',
 		'information' => 'Informazioni',
 		'new' => 'Nuova categoria',
 		'new' => 'Nuova categoria',
-		'position' => 'Display position',	//TODO - Translation
-		'position_help' => 'To control category sort order',	//TODO - Translation
+		'position' => 'Display position',	// TODO - Translation
+		'position_help' => 'To control category sort order',	// TODO - Translation
 		'title' => 'Titolo',
 		'title' => 'Titolo',
+		'_' => 'Categoria',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Aggiungi un Feed RSS',
 		'add' => 'Aggiungi un Feed RSS',
@@ -29,60 +29,60 @@ return array(
 			'configuration' => 'Autenticazione',
 			'configuration' => 'Autenticazione',
 			'help' => 'Accesso per feeds protetti',
 			'help' => 'Accesso per feeds protetti',
 			'http' => 'Autenticazione HTTP',
 			'http' => 'Autenticazione HTTP',
-			'password' => 'HTTP password',
-			'username' => 'HTTP username',
+			'password' => 'HTTP password',	// TODO - Translation
+			'username' => 'HTTP username',	// TODO - Translation
 		),
 		),
-		'clear_cache' => 'Always clear cache',	//TODO - Translation
+		'clear_cache' => 'Always clear cache',	// TODO - Translation
 		'css_help' => 'In caso di RSS feeds troncati (attenzione, richiede molto tempo!)',
 		'css_help' => 'In caso di RSS feeds troncati (attenzione, richiede molto tempo!)',
 		'css_path' => 'Percorso del foglio di stile CSS del sito di origine',
 		'css_path' => 'Percorso del foglio di stile CSS del sito di origine',
 		'description' => 'Descrizione',
 		'description' => 'Descrizione',
 		'empty' => 'Questo feed non contiene articoli. Per favore verifica il sito direttamente.',
 		'empty' => 'Questo feed non contiene articoli. Per favore verifica il sito direttamente.',
 		'error' => 'Questo feed ha generato un errore. Per favore verifica se ancora disponibile.',
 		'error' => 'Questo feed ha generato un errore. Per favore verifica se ancora disponibile.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filter actions',	//TODO - Translation
-			'help' => 'Write one search filter per line.',	//TODO - Translation
+			'help' => 'Write one search filter per line.',	// TODO - Translation
+			'_' => 'Filter actions',	// TODO - Translation
 		),
 		),
 		'information' => 'Informazioni',
 		'information' => 'Informazioni',
 		'keep_min' => 'Numero minimo di articoli da mantenere',
 		'keep_min' => 'Numero minimo di articoli da mantenere',
 		'moved_category_deleted' => 'Cancellando una categoria i feed al suo interno verranno classificati automaticamente come <em>%s</em>.',
 		'moved_category_deleted' => 'Cancellando una categoria i feed al suo interno verranno classificati automaticamente come <em>%s</em>.',
-		'mute' => 'mute',	//TODO - Translation
+		'mute' => 'mute',	// TODO - Translation
 		'no_selected' => 'Nessun feed selezionato.',
 		'no_selected' => 'Nessun feed selezionato.',
 		'number_entries' => '%d articoli',
 		'number_entries' => '%d articoli',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Visibility',	//TODO - Translation
-			'archived' => 'Do not show (archived)',	//TODO - Translation
-			'main_stream' => 'Mostra in homepage',	//TODO - Translation
-			'normal' => 'Show in its category',	//TODO - Translation
+			'archived' => 'Do not show (archived)',	// TODO - Translation
+			'main_stream' => 'Mostra in homepage',
+			'normal' => 'Show in its category',	// TODO - Translation
+			'_' => 'Visibility',	// TODO - Translation
 		),
 		),
-		'websub' => 'Notifica istantanea con WebSub',
 		'show' => array(
 		'show' => array(
-			'all' => 'Show all feeds',	//TODO - Translation
-			'error' => 'Show only feeds with error',	//TODO - Translation
+			'all' => 'Show all feeds',	// TODO - Translation
+			'error' => 'Show only feeds with error',	// TODO - Translation
 		),
 		),
 		'showing' => array(
 		'showing' => array(
-			'error' => 'Showing only feeds with error',	//TODO - Translation
+			'error' => 'Showing only feeds with error',	// TODO - Translation
 		),
 		),
-		'ssl_verify' => 'Verify SSL security',	//TODO - Translation
+		'ssl_verify' => 'Verify SSL security',	// TODO - Translation
 		'stats' => 'Statistiche',
 		'stats' => 'Statistiche',
 		'think_to_add' => 'Aggiungi feed.',
 		'think_to_add' => 'Aggiungi feed.',
-		'timeout' => 'Timeout in seconds',	//TODO - Translation
+		'timeout' => 'Timeout in seconds',	// TODO - Translation
 		'title' => 'Titolo',
 		'title' => 'Titolo',
 		'title_add' => 'Aggiungi RSS feed',
 		'title_add' => 'Aggiungi RSS feed',
 		'ttl' => 'Non aggiornare automaticamente piu di',
 		'ttl' => 'Non aggiornare automaticamente piu di',
-		'url' => 'Feed URL',
+		'url' => 'Feed URL',	// TODO - Translation
 		'validator' => 'Controlla la validita del feed ',
 		'validator' => 'Controlla la validita del feed ',
 		'website' => 'URL del sito',
 		'website' => 'URL del sito',
+		'websub' => 'Notifica istantanea con WebSub',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
-		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	//TODO - Translation
-		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	//TODO - Translation
-		'title' => 'Firefox feed reader',	//TODO - Translation
+		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	// TODO - Translation
+		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	// TODO - Translation
+		'title' => 'Firefox feed reader',	// TODO - Translation
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => 'Esporta',
 		'export' => 'Esporta',
+		'export_labelled' => 'Export your labelled articles',	// TODO - Translation
 		'export_opml' => 'Esporta tutta la lista dei feed (OPML)',
 		'export_opml' => 'Esporta tutta la lista dei feed (OPML)',
 		'export_starred' => 'Esporta i tuoi preferiti',
 		'export_starred' => 'Esporta i tuoi preferiti',
-		'export_labelled' => 'Export your labelled articles',	//TODO
 		'feed_list' => 'Elenco di %s articoli',
 		'feed_list' => 'Elenco di %s articoli',
 		'file_to_import' => 'File da importare<br />(OPML, JSON o ZIP)',
 		'file_to_import' => 'File da importare<br />(OPML, JSON o ZIP)',
 		'file_to_import_no_zip' => 'File da importare<br />(OPML o JSON)',
 		'file_to_import_no_zip' => 'File da importare<br />(OPML o JSON)',
@@ -94,11 +94,11 @@ return array(
 		'bookmark' => 'Bookmark (trascina nei preferiti)',
 		'bookmark' => 'Bookmark (trascina nei preferiti)',
 		'import_export' => 'Importa / esporta',
 		'import_export' => 'Importa / esporta',
 		'subscription_management' => 'Gestione sottoscrizioni',
 		'subscription_management' => 'Gestione sottoscrizioni',
-		'subscription_tools' => 'Subscription tools',	//TODO - Translation
+		'subscription_tools' => 'Subscription tools',	// TODO - Translation
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'Gestione sottoscrizioni',
 		'feed_management' => 'Gestione RSS feeds',
 		'feed_management' => 'Gestione RSS feeds',
-		'subscription_tools' => 'Subscription tools',	//TODO - Translation
+		'subscription_tools' => 'Subscription tools',	// TODO - Translation
+		'_' => 'Gestione sottoscrizioni',
 	),
 	),
 );
 );

+ 21 - 21
app/i18n/it/user.php

@@ -3,35 +3,35 @@
 return array(
 return array(
 	'email' => array(
 	'email' => array(
 		'feedback' => array(
 		'feedback' => array(
-			'invalid' => 'The email address is invalid.', //TODO - Translation
-			'required' => 'The email address is required.', //TODO - Translation
+			'invalid' => 'The email address is invalid.',	// TODO - Translation
+			'required' => 'The email address is required.',	// TODO - Translation
 		),
 		),
 		'validation' => array(
 		'validation' => array(
-			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.', //TODO - Translation
-			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.', //TODO - Translation
+			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.',	// TODO - Translation
+			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.',	// TODO - Translation
 			'feedback' => array(
 			'feedback' => array(
-				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.', //TODO - Translation
-				'email_sent' => 'An email has been sent to your address.', //TODO - Translation
-				'error' => 'The email address failed to be validated.', //TODO - Translation
-				'ok' => 'The email address has been validated.', //TODO - Translation
-				'unneccessary' => 'The email address was already validated.', //TODO - Translation
-				'wrong_token' => 'The email address failed to be validated due to a wrong token.', //TODO - Translation
+				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.',	// TODO - Translation
+				'email_sent' => 'An email has been sent to your address.',	// TODO - Translation
+				'error' => 'The email address failed to be validated.',	// TODO - Translation
+				'ok' => 'The email address has been validated.',	// TODO - Translation
+				'unneccessary' => 'The email address was already validated.',	// TODO - Translation
+				'wrong_token' => 'The email address failed to be validated due to a wrong token.',	// TODO - Translation
 			),
 			),
-			'need_to' => 'You need to validate your email address before being able to use %s.', //TODO - Translation
-			'resend_email' => 'Resend the email', //TODO - Translation
-			'title' => 'Email address validation', //TODO - Translation
-		),
-	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation
+			'need_to' => 'You need to validate your email address before being able to use %s.',	// TODO - Translation
+			'resend_email' => 'Resend the email',	// TODO - Translation
+			'title' => 'Email address validation',	// TODO - Translation
 		),
 		),
 	),
 	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
-			'title' => 'You need to validate your account', //TODO - Translation
-			'welcome' => 'Welcome %s,', //TODO - Translation
-			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:', //TODO - Translation
+			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:',	// TODO - Translation
+			'title' => 'You need to validate your account',	// TODO - Translation
+			'welcome' => 'Welcome %s,',	// TODO - Translation
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'You must accept the Terms of Service to be able to register.',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 17 - 11
app/i18n/kr/admin.php

@@ -64,7 +64,7 @@ return array(
 		'files' => '파일 시스템 설치 요구사항',
 		'files' => '파일 시스템 설치 요구사항',
 		'json' => array(
 		'json' => array(
 			'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php-json 패키지).',
 			'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php-json 패키지).',
-			'ok' => 'JSON  확장 기능이 설치되어 있습니다.',
+			'ok' => 'JSON 확장 기능이 설치되어 있습니다.',
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
 			'nok' => '유니코드 지원을 위한 mbstring 라이브러리를 찾을 수 없습니다.',
 			'nok' => '유니코드 지원을 위한 mbstring 라이브러리를 찾을 수 없습니다.',
@@ -83,9 +83,9 @@ return array(
 			'ok' => '최소 하나의 지원가능한 드라이버와 PDO가 설치되어 있습니다 (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => '최소 하나의 지원가능한 드라이버와 PDO가 설치되어 있습니다 (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'PHP 설치 요구사항',
 			'nok' => 'PHP 버전은 %s 이지만, FreshRSS에는 최소 %s의 버전이 필요합니다.',
 			'nok' => 'PHP 버전은 %s 이지만, FreshRSS에는 최소 %s의 버전이 필요합니다.',
 			'ok' => 'PHP 버전은 %s 이고, FreshRSS와 호환가능 합니다.',
 			'ok' => 'PHP 버전은 %s 이고, FreshRSS와 호환가능 합니다.',
+			'_' => 'PHP 설치 요구사항',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => '하나 이상의 테이블을 데이터베이스에서 찾을 수 없습니다.',
 			'nok' => '하나 이상의 테이블을 데이터베이스에서 찾을 수 없습니다.',
@@ -116,8 +116,8 @@ return array(
 		'name' => '이름',
 		'name' => '이름',
 		'no_configure_view' => '이 확장 기능은 설정이 없습니다.',
 		'no_configure_view' => '이 확장 기능은 설정이 없습니다.',
 		'system' => array(
 		'system' => array(
-			'_' => '시스템 확장 기능',
 			'no_rights' => '시스템 확장 기능 (이 확장 기능에 대한 권한이 없습니다)',
 			'no_rights' => '시스템 확장 기능 (이 확장 기능에 대한 권한이 없습니다)',
+			'_' => '시스템 확장 기능',
 		),
 		),
 		'title' => '확장 기능',
 		'title' => '확장 기능',
 		'update' => '업데이트 있음',
 		'update' => '업데이트 있음',
@@ -125,7 +125,6 @@ return array(
 		'version' => '버전',
 		'version' => '버전',
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => '통계',
 		'all_feeds' => '모든 피드',
 		'all_feeds' => '모든 피드',
 		'category' => '카테고리',
 		'category' => '카테고리',
 		'entry_count' => '글 개수',
 		'entry_count' => '글 개수',
@@ -155,37 +154,44 @@ return array(
 		'status_unread' => '읽지 않음',
 		'status_unread' => '읽지 않음',
 		'title' => '통계',
 		'title' => '통계',
 		'top_feed' => '상위 10 개 피드',
 		'top_feed' => '상위 10 개 피드',
+		'_' => '통계',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => '시스템 설정',
 		'auto-update-url' => '자동 업데이트 서버 URL',
 		'auto-update-url' => '자동 업데이트 서버 URL',
-		'force_email_validation' => 'Force email addresses validation', //TODO - Translation
-		'instance-name' => '인스턴스 이름',
-		'max-categories' => '사용자별 카테고리 개수 제한',
-		'max-feeds' => '사용자별 피드 개수 제한',
 		'cookie-duration' => array(
 		'cookie-duration' => array(
 			'help' => '초',
 			'help' => '초',
 			'number' => '로그인 유지 시간',
 			'number' => '로그인 유지 시간',
 		),
 		),
+		'force_email_validation' => 'Force email addresses validation',	// TODO - Translation
+		'instance-name' => '인스턴스 이름',
+		'max-categories' => '사용자별 카테고리 개수 제한',
+		'max-feeds' => '사용자별 피드 개수 제한',
 		'registration' => array(
 		'registration' => array(
 			'help' => '0: 제한 없음',
 			'help' => '0: 제한 없음',
 			'number' => '계정 최대 개수',
 			'number' => '계정 최대 개수',
 		),
 		),
+		'_' => '시스템 설정',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => '업데이트',
 		'apply' => '업데이트 적용하기',
 		'apply' => '업데이트 적용하기',
 		'check' => '새 업데이트 확인하기',
 		'check' => '새 업데이트 확인하기',
 		'current_version' => '현재 FreshRSS 버전은 %s 입니다.',
 		'current_version' => '현재 FreshRSS 버전은 %s 입니다.',
 		'last' => '마지막 확인: %s',
 		'last' => '마지막 확인: %s',
 		'none' => '적용 가능한 업데이트가 없습니다',
 		'none' => '적용 가능한 업데이트가 없습니다',
 		'title' => '업데이트',
 		'title' => '업데이트',
+		'_' => '업데이트',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s 개의 글 (%s)',
 		'articles_and_size' => '%s 개의 글 (%s)',
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => '새 사용자 생성',
 		'create' => '새 사용자 생성',
+		'database_size' => 'Database size',	// TODO - Translation
 		'delete_users' => '사용자 삭제',
 		'delete_users' => '사용자 삭제',
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => '언어',
 		'language' => '언어',
+		'list' => 'User list',	// TODO - Translation
 		'number' => '%d 개의 계정이 생성되었습니다',
 		'number' => '%d 개의 계정이 생성되었습니다',
 		'numbers' => '%d 개의 계정이 생성되었습니다',
 		'numbers' => '%d 개의 계정이 생성되었습니다',
 		'password_form' => '암호<br /><small>(웹폼 로그인 방식 사용시)</small>',
 		'password_form' => '암호<br /><small>(웹폼 로그인 방식 사용시)</small>',
@@ -193,8 +199,8 @@ return array(
 		'selected' => '선택된 사용자',
 		'selected' => '선택된 사용자',
 		'title' => '사용자 관리',
 		'title' => '사용자 관리',
 		'update_users' => '사용자 정보 변경',
 		'update_users' => '사용자 정보 변경',
-		'user_list' => '사용자 목록',
 		'username' => '사용자 이름',
 		'username' => '사용자 이름',
 		'users' => '전체 사용자',
 		'users' => '전체 사용자',
+		'user_list' => '사용자 목록',
 	),
 	),
 );
 );

+ 22 - 21
app/i18n/kr/conf.php

@@ -2,34 +2,33 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => '보관',
 		'delete_after' => '다음 기간보다 오래된 글 삭제',
 		'delete_after' => '다음 기간보다 오래된 글 삭제',
-		'exception' => 'Purge exception',	//TODO - Translation
+		'exception' => 'Purge exception',	// TODO - Translation
 		'help' => '더 자세한 옵션은 개별 피드 설정에 있습니다',
 		'help' => '더 자세한 옵션은 개별 피드 설정에 있습니다',
-		'keep_favourites' => 'Never delete favourites',	//TODO - Translation
+		'keep_favourites' => 'Never delete favourites',	// TODO - Translation
+		'keep_labels' => 'Never delete labels',	// TODO - Translation
+		'keep_max' => 'Maximum number of articles to keep',	// TODO - Translation
 		'keep_min_by_feed' => '피드별 최소 유지 글 개수',
 		'keep_min_by_feed' => '피드별 최소 유지 글 개수',
-		'keep_labels' => 'Never delete labels',	//TODO - Translation
-		'keep_unreads' => 'Never delete unreads',	//TODO - Translation
-		'maintenance' => 'Maintenance',	//TODO - Translation
+		'keep_period' => 'Maximum age of articles to keep',	// TODO - Translation
+		'keep_unreads' => 'Never delete unreads',	// TODO - Translation
+		'maintenance' => 'Maintenance',	// TODO - Translation
 		'optimize' => '데이터베이스 최적화',
 		'optimize' => '데이터베이스 최적화',
 		'optimize_help' => '데이터베이스 크기를 줄이기 위해 가끔씩 수행해주세요',
 		'optimize_help' => '데이터베이스 크기를 줄이기 위해 가끔씩 수행해주세요',
-		'policy' => 'Purge policy',	//TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	//TODO - Translation
+		'policy' => 'Purge policy',	// TODO - Translation
+		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	// TODO - Translation
 		'purge_now' => '지금 삭제',
 		'purge_now' => '지금 삭제',
-		'keep_max' => 'Maximum number of articles to keep',	//TODO - Translation
-		'keep_period' => 'Maximum age of articles to keep',	//TODO - Translation
 		'title' => '보관',
 		'title' => '보관',
 		'ttl' => '다음 시간이 지나기 전에 새로고침 금지',
 		'ttl' => '다음 시간이 지나기 전에 새로고침 금지',
+		'_' => '보관',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => '표시',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => '하단',
 			'bottom_line' => '하단',
+			'display_authors' => 'Authors',	// TODO - Translation
 			'entry' => '문서 아이콘',
 			'entry' => '문서 아이콘',
 			'publication_date' => '발행일',
 			'publication_date' => '발행일',
 			'related_tags' => '관련 태그',
 			'related_tags' => '관련 태그',
 			'sharing' => '공유',
 			'sharing' => '공유',
-			'display_authors' => 'Authors',  //TODO - Translation
 			'top_line' => '상단',
 			'top_line' => '상단',
 		),
 		),
 		'language' => '언어',
 		'language' => '언어',
@@ -47,21 +46,22 @@ return array(
 			'no_limit' => '제한 없음',
 			'no_limit' => '제한 없음',
 			'thin' => '얇음',
 			'thin' => '얇음',
 		),
 		),
+		'_' => '표시',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => '프로필 관리',
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => '계정 삭제',
 			'warn' => '당신의 계정과 관련된 모든 데이터가 삭제됩니다.',
 			'warn' => '당신의 계정과 관련된 모든 데이터가 삭제됩니다.',
+			'_' => '계정 삭제',
 		),
 		),
 		'email' => '메일 주소',
 		'email' => '메일 주소',
 		'password_api' => 'API 암호<br /><small>(예: 모바일 애플리케이션)</small>',
 		'password_api' => 'API 암호<br /><small>(예: 모바일 애플리케이션)</small>',
 		'password_form' => '암호<br /><small>(웹폼 로그인 방식 사용시)</small>',
 		'password_form' => '암호<br /><small>(웹폼 로그인 방식 사용시)</small>',
 		'password_format' => '7 글자 이상이어야 합니다',
 		'password_format' => '7 글자 이상이어야 합니다',
 		'title' => '프로필',
 		'title' => '프로필',
+		'_' => '프로필 관리',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => '사용자 쿼리',
 		'deprecated' => '이 쿼리는 더 이상 유효하지 않습니다. 해당하는 카테고리나 피드가 삭제되었습니다.',
 		'deprecated' => '이 쿼리는 더 이상 유효하지 않습니다. 해당하는 카테고리나 피드가 삭제되었습니다.',
 		'display' => '사용자 쿼리 결과 표시',
 		'display' => '사용자 쿼리 결과 표시',
 		'filter' => '적용된 필터:',
 		'filter' => '적용된 필터:',
@@ -69,8 +69,8 @@ return array(
 		'get_category' => '"%s" 카테고리 표시',
 		'get_category' => '"%s" 카테고리 표시',
 		'get_favorite' => '즐겨찾기에 등록된 글 표시',
 		'get_favorite' => '즐겨찾기에 등록된 글 표시',
 		'get_feed' => '"%s" 피드 표시',
 		'get_feed' => '"%s" 피드 표시',
-		'no_filter' => '필터가 없습니다',
 		'none' => '아직 사용자 쿼리를 만들지 않았습니다.',
 		'none' => '아직 사용자 쿼리를 만들지 않았습니다.',
+		'no_filter' => '필터가 없습니다',
 		'number' => '쿼리 #%d',
 		'number' => '쿼리 #%d',
 		'order_asc' => '오래된 글 먼저 표시',
 		'order_asc' => '오래된 글 먼저 표시',
 		'order_desc' => '최근 글 먼저 표시',
 		'order_desc' => '최근 글 먼저 표시',
@@ -93,9 +93,9 @@ return array(
 		'state_14' => '읽지 않은 글 표시',
 		'state_14' => '읽지 않은 글 표시',
 		'state_15' => '모든 글 표시',
 		'state_15' => '모든 글 표시',
 		'title' => '사용자 쿼리',
 		'title' => '사용자 쿼리',
+		'_' => '사용자 쿼리',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => '읽기',
 		'after_onread' => '“모두 읽음으로 표시” 후,',
 		'after_onread' => '“모두 읽음으로 표시” 후,',
 		'articles_per_page' => '페이지당 글 수',
 		'articles_per_page' => '페이지당 글 수',
 		'auto_load_more' => '페이지 하단에 다다르면 글 더 불러오기',
 		'auto_load_more' => '페이지 하단에 다다르면 글 더 불러오기',
@@ -116,16 +116,16 @@ return array(
 			'when' => '읽음으로 표시…',
 			'when' => '읽음으로 표시…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => '글 표시 방식',
 			'adaptive' => '읽지 않은 글이 없으면 모든 글 표시',
 			'adaptive' => '읽지 않은 글이 없으면 모든 글 표시',
 			'all_articles' => '모든 글 표시',
 			'all_articles' => '모든 글 표시',
 			'unread' => '읽지 않은 글만 표시',
 			'unread' => '읽지 않은 글만 표시',
+			'_' => '글 표시 방식',
 		),
 		),
 		'sides_close_article' => '글 영역 바깥을 클릭하면 글 접기',
 		'sides_close_article' => '글 영역 바깥을 클릭하면 글 접기',
 		'sort' => array(
 		'sort' => array(
-			'_' => '정렬 순서',
 			'newer_first' => '최근 글 먼저',
 			'newer_first' => '최근 글 먼저',
 			'older_first' => '오래된 글 먼저',
 			'older_first' => '오래된 글 먼저',
+			'_' => '정렬 순서',
 		),
 		),
 		'sticky_post' => '글이 펼쳐진 경우 최상단에 고정하기',
 		'sticky_post' => '글이 펼쳐진 경우 최상단에 고정하기',
 		'title' => '읽기',
 		'title' => '읽기',
@@ -135,9 +135,9 @@ return array(
 			'normal' => '일반 모드',
 			'normal' => '일반 모드',
 			'reader' => '읽기 모드',
 			'reader' => '읽기 모드',
 		),
 		),
+		'_' => '읽기',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => '공유',
 		'add' => '공유 방법 추가',
 		'add' => '공유 방법 추가',
 		'blogotext' => 'Blogotext',
 		'blogotext' => 'Blogotext',
 		'diaspora' => 'Diaspora*',
 		'diaspora' => 'Diaspora*',
@@ -152,9 +152,9 @@ return array(
 		'title' => '공유',
 		'title' => '공유',
 		'twitter' => 'Twitter',
 		'twitter' => 'Twitter',
 		'wallabag' => 'wallabag',
 		'wallabag' => 'wallabag',
+		'_' => '공유',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => '단축키',
 		'article_action' => '글 관련 동작',
 		'article_action' => '글 관련 동작',
 		'auto_share' => '공유',
 		'auto_share' => '공유',
 		'auto_share_help' => '공유 옵션이 하나만 설정되어 있다면 해당 공유 옵션을 사용하고, 그렇지 않다면 공유 옵션을 번호로 선택할 수 있습니다.',
 		'auto_share_help' => '공유 옵션이 하나만 설정되어 있다면 해당 공유 옵션을 사용하고, 그렇지 않다면 공유 옵션을 번호로 선택할 수 있습니다.',
@@ -186,6 +186,7 @@ return array(
 		'user_filter' => '사용자 필터 사용하기',
 		'user_filter' => '사용자 필터 사용하기',
 		'user_filter_help' => '사용자 필터가 하나만 설정되어 있다면 해당 필터를 사용하고, 그렇지 않다면 필터를 번호로 선택할 수 있습니다.',
 		'user_filter_help' => '사용자 필터가 하나만 설정되어 있다면 해당 필터를 사용하고, 그렇지 않다면 필터를 번호로 선택할 수 있습니다.',
 		'views' => '표시',
 		'views' => '표시',
+		'_' => '단축키',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s 개의 글 (%s)',
 		'articles_and_size' => '%s 개의 글 (%s)',

+ 17 - 11
app/i18n/kr/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => '최적화가 완료되었습니다',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => '이 페이지에 접근할 수 있는 권한이 없습니다',
 		'denied' => '이 페이지에 접근할 수 있는 권한이 없습니다',
 		'not_found' => '이 페이지는 존재하지 않습니다',
 		'not_found' => '이 페이지는 존재하지 않습니다',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => '최적화가 완료되었습니다',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => '인증 시스템을 설정하는 동안 문제가 발생했습니다. 잠시 후 다시 시도하세요.',
 			'not_set' => '인증 시스템을 설정하는 동안 문제가 발생했습니다. 잠시 후 다시 시도하세요.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s 확장 기능을 활성화 할 수 없습니다. 자세한 내용은 <a href="%s">FreshRSS 로그</a>를 참고하세요.',
 			'ko' => '%s 확장 기능을 활성화 할 수 없습니다. 자세한 내용은 <a href="%s">FreshRSS 로그</a>를 참고하세요.',
 			'ok' => '%s 확장 기능이 활성화되었습니다',
 			'ok' => '%s 확장 기능이 활성화되었습니다',
 		),
 		),
-		'no_access' => '%s 확장 기능에 접근 권한이 없습니다',
 		'not_enabled' => '%s 확장 기능이 활성화되지 않았습니다',
 		'not_enabled' => '%s 확장 기능이 활성화되지 않았습니다',
 		'not_found' => '%s 확장 기능이 존재하지 않습니다',
 		'not_found' => '%s 확장 기능이 존재하지 않습니다',
+		'no_access' => '%s 확장 기능에 접근 권한이 없습니다',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'ZIP 확장 기능을 서버에서 찾을 수 없습니다. 파일을 하나씩 내보내세요.',
 		'export_no_zip_extension' => 'ZIP 확장 기능을 서버에서 찾을 수 없습니다. 파일을 하나씩 내보내세요.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => '카테고리를 비웠습니다',
 			'emptied' => '카테고리를 비웠습니다',
 			'error' => '카테고리를 변경할 수 없습니다',
 			'error' => '카테고리를 변경할 수 없습니다',
 			'name_exists' => '같은 카테고리 이름이 이미 존재합니다.',
 			'name_exists' => '같은 카테고리 이름이 이미 존재합니다.',
-			'no_id' => '카테고리 id를 명시해야 합니다.',
-			'no_name' => '카테고리 이름을 명시해야 합니다.',
 			'not_delete_default' => '기본 카테고리는 삭제할 수 없습니다!',
 			'not_delete_default' => '기본 카테고리는 삭제할 수 없습니다!',
 			'not_exist' => '카테고리가 존재하지 않습니다!',
 			'not_exist' => '카테고리가 존재하지 않습니다!',
+			'no_id' => '카테고리 id를 명시해야 합니다.',
+			'no_name' => '카테고리 이름을 명시해야 합니다.',
 			'over_max' => '카테고리 개수 제한에 다다랐습니다 (%d)',
 			'over_max' => '카테고리 개수 제한에 다다랐습니다 (%d)',
 			'updated' => '카테고리가 변경되었습니다.',
 			'updated' => '카테고리가 변경되었습니다.',
 		),
 		),
@@ -82,10 +88,10 @@ return array(
 			'error' => '피드를 변경할 수 없습니다',
 			'error' => '피드를 변경할 수 없습니다',
 			'internal_problem' => 'RSS 피드를 추가할 수 없습니다. 자세한 내용은 <a href="%s">FreshRSS 로그</a>를 참고하세요.',
 			'internal_problem' => 'RSS 피드를 추가할 수 없습니다. 자세한 내용은 <a href="%s">FreshRSS 로그</a>를 참고하세요.',
 			'invalid_url' => 'URL (<em>%s</em>)이 유효하지 않습니다',
 			'invalid_url' => 'URL (<em>%s</em>)이 유효하지 않습니다',
+			'not_added' => '<em>%s</em> 피드를 추가할 수 없습니다',
+			'no_refresh' => '새 글을 가져올 피드가 없습니다…',
 			'n_actualized' => '%d 개의 피드에서 새 글을 가져왔습니다',
 			'n_actualized' => '%d 개의 피드에서 새 글을 가져왔습니다',
 			'n_entries_deleted' => '%d 개의 글을 삭제했습니다',
 			'n_entries_deleted' => '%d 개의 글을 삭제했습니다',
-			'no_refresh' => '새 글을 가져올 피드가 없습니다…',
-			'not_added' => '<em>%s</em> 피드를 추가할 수 없습니다',
 			'over_max' => '피드 개수 제한에 다다랐습니다 (%d)',
 			'over_max' => '피드 개수 제한에 다다랐습니다 (%d)',
 			'updated' => '피드가 변경되었습니다',
 			'updated' => '피드가 변경되었습니다',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => '%s 사용자가 생성되었습니다',
 			'error' => '%s 사용자를 생성할 수 없습니다',
 			'error' => '%s 사용자를 생성할 수 없습니다',
+			'_' => '%s 사용자가 생성되었습니다',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => '%s 사용자를 삭제했습니다',
 			'error' => '%s 사용자를 삭제할 수 없습니다',
 			'error' => '%s 사용자를 삭제할 수 없습니다',
+			'_' => '%s 사용자를 삭제했습니다',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => '사용자 %s의 정보가 변경되었습니다',
 			'error' => '사용자 %s의 정보가 변경되지 않았습니다',
 			'error' => '사용자 %s의 정보가 변경되지 않았습니다',
+			'_' => '사용자 %s의 정보가 변경되었습니다',
 		),
 		),
 	),
 	),
 );
 );

+ 16 - 14
app/i18n/kr/gen.php

@@ -3,7 +3,7 @@
 return array(
 return array(
 	'action' => array(
 	'action' => array(
 		'actualize' => '새 글 가져오기',
 		'actualize' => '새 글 가져오기',
-		'back' => '← Go back', //TODO - Translation
+		'back' => '← Go back',	// TODO - Translation
 		'back_to_rss_feeds' => '← RSS 피드로 돌아가기',
 		'back_to_rss_feeds' => '← RSS 피드로 돌아가기',
 		'cancel' => '취소',
 		'cancel' => '취소',
 		'create' => '생성',
 		'create' => '생성',
@@ -16,6 +16,7 @@ return array(
 		'manage' => '관리',
 		'manage' => '관리',
 		'mark_favorite' => '즐겨찾기에 등록',
 		'mark_favorite' => '즐겨찾기에 등록',
 		'mark_read' => '읽음으로 표시',
 		'mark_read' => '읽음으로 표시',
+		'purge' => 'Purge',	// TODO - Translation
 		'remove' => '삭제',
 		'remove' => '삭제',
 		'see_website' => '웹사이트 열기',
 		'see_website' => '웹사이트 열기',
 		'submit' => '설정 저장',
 		'submit' => '설정 저장',
@@ -23,25 +24,25 @@ return array(
 		'update' => '변경',
 		'update' => '변경',
 	),
 	),
 	'auth' => array(
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.', // TODO - Translation
+		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.',	// TODO - Translation
 		'email' => '메일 주소',
 		'email' => '메일 주소',
 		'keep_logged_in' => '로그인 유지 <small>(%s 일)</small>',
 		'keep_logged_in' => '로그인 유지 <small>(%s 일)</small>',
 		'login' => '로그인',
 		'login' => '로그인',
 		'logout' => '로그아웃',
 		'logout' => '로그아웃',
 		'password' => array(
 		'password' => array(
-			'_' => '암호',
 			'format' => '<small>7 글자 이상이어야 합니다</small>',
 			'format' => '<small>7 글자 이상이어야 합니다</small>',
+			'_' => '암호',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => '새 계정',
 			'ask' => '새 계정을 만들까요?',
 			'ask' => '새 계정을 만들까요?',
 			'title' => '계정 생성',
 			'title' => '계정 생성',
+			'_' => '새 계정',
 		),
 		),
 		'reset' => '인증 초기화',
 		'reset' => '인증 초기화',
 		'username' => array(
 		'username' => array(
-			'_' => '사용자 이름',
 			'admin' => '관리자 이름',
 			'admin' => '관리자 이름',
 			'format' => '<small>알파벳과 숫자를 포함할 수 있고 최대 16 글자</small>',
 			'format' => '<small>알파벳과 숫자를 포함할 수 있고 최대 16 글자</small>',
+			'_' => '사용자 이름',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -64,8 +65,8 @@ return array(
 		'Jan' => '\\J\\a\\n\\u\\a\\r\\y',
 		'Jan' => '\\J\\a\\n\\u\\a\\r\\y',
 		'jan' => '1월',
 		'jan' => '1월',
 		'january' => '1월',
 		'january' => '1월',
-		'Jul' => '\\J\\u\\l\\y',
 		'jul' => '7월',
 		'jul' => '7월',
+		'Jul' => '\\J\\u\\l\\y',
 		'july' => '7월',
 		'july' => '7월',
 		'Jun' => '\\J\\u\\n\\e',
 		'Jun' => '\\J\\u\\n\\e',
 		'jun' => '6월',
 		'jun' => '6월',
@@ -75,15 +76,15 @@ return array(
 		'last_month' => '최근 한 달',
 		'last_month' => '최근 한 달',
 		'last_week' => '최근 한 주',
 		'last_week' => '최근 한 주',
 		'last_year' => '최근 일 년',
 		'last_year' => '최근 일 년',
-		'Mar' => '\\M\\a\\r\\c\\h',
 		'mar' => '3월',
 		'mar' => '3월',
+		'Mar' => '\\M\\a\\r\\c\\h',
 		'march' => '3월',
 		'march' => '3월',
 		'May' => '\\M\\a\\y',
 		'May' => '\\M\\a\\y',
 		'may' => '5월',
 		'may' => '5월',
 		'may_' => '5월',
 		'may_' => '5월',
-		'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r',
 		'mon' => '월',
 		'mon' => '월',
 		'month' => '개월',
 		'month' => '개월',
+		'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r',
 		'nov' => '11월',
 		'nov' => '11월',
 		'november' => '11월',
 		'november' => '11월',
 		'Oct' => '\\O\\c\\t\\o\\b\\e\\r',
 		'Oct' => '\\O\\c\\t\\o\\b\\e\\r',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => '어제',
 		'yesterday' => '어제',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => '정보',
 		'about' => '정보',
+		'_' => 'FreshRSS',
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => '빈 카테고리',
 		'category_empty' => '빈 카테고리',
@@ -129,6 +130,7 @@ return array(
 		'oc' => 'Occitan',
 		'oc' => 'Occitan',
 		'pt-br' => 'Português (Brasil)',
 		'pt-br' => 'Português (Brasil)',
 		'ru' => 'Русский',
 		'ru' => 'Русский',
+		'sk' => 'Slovenčina',	// TODO - Translation
 		'tr' => 'Türkçe',
 		'tr' => 'Türkçe',
 		'zh-cn' => '简体中文',
 		'zh-cn' => '简体中文',
 	),
 	),
@@ -163,11 +165,11 @@ return array(
 		'previous' => '이전',
 		'previous' => '이전',
 	),
 	),
 	'period' => array(
 	'period' => array(
-		'days' => 'days',	//TODO - Translation
-		'hours' => 'hours',	//TODO - Translation
-		'months' => 'months',	//TODO - Translation
-		'weeks' => 'weeks',	//TODO - Translation
-		'years' => 'years',	//TODO - Translation
+		'days' => 'days',	// TODO - Translation
+		'hours' => 'hours',	// TODO - Translation
+		'months' => 'months',	// TODO - Translation
+		'weeks' => 'weeks',	// TODO - Translation
+		'years' => 'years',	// TODO - Translation
 	),
 	),
 	'share' => array(
 	'share' => array(
 		'blogotext' => 'Blogotext',
 		'blogotext' => 'Blogotext',

+ 6 - 6
app/i18n/kr/index.php

@@ -2,7 +2,6 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => '정보',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'bugs_reports' => '버그 제보하기',
 		'bugs_reports' => '버그 제보하기',
 		'credits' => '크레딧',
 		'credits' => '크레딧',
@@ -14,23 +13,21 @@ return array(
 		'title' => '정보',
 		'title' => '정보',
 		'version' => '버전',
 		'version' => '버전',
 		'website' => '웹사이트',
 		'website' => '웹사이트',
-	),
-	'tos' => array(
-		'title' => 'Terms of Service', // TODO - Translation
+		'_' => '정보',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => '피드를 추가하세요.',
 		'add' => '피드를 추가하세요.',
 		'empty' => '글이 없습니다.',
 		'empty' => '글이 없습니다.',
 		'rss_of' => '%s의 피드',
 		'rss_of' => '%s의 피드',
 		'title' => 'RSS 피드',
 		'title' => 'RSS 피드',
-		'title_global' => '전체 모드',
 		'title_fav' => '즐겨찾기',
 		'title_fav' => '즐겨찾기',
+		'title_global' => '전체 모드',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => '로그',
 		'clear' => '로그 모두 지우기',
 		'clear' => '로그 모두 지우기',
 		'empty' => '로그 파일이 비어있습니다',
 		'empty' => '로그 파일이 비어있습니다',
 		'title' => '로그',
 		'title' => '로그',
+		'_' => '로그',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'FreshRSS 정보',
 		'about' => 'FreshRSS 정보',
@@ -63,4 +60,7 @@ return array(
 	'tag' => array(
 	'tag' => array(
 		'related' => '관련 태그',
 		'related' => '관련 태그',
 	),
 	),
+	'tos' => array(
+		'title' => 'Terms of Service',	// TODO - Translation
+	),
 );
 );

+ 7 - 7
app/i18n/kr/install.php

@@ -17,20 +17,19 @@ return array(
 		'type' => '인증 방식',
 		'type' => '인증 방식',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => '데이터베이스',
 		'conf' => array(
 		'conf' => array(
-			'_' => '데이터베이스 설정',
 			'ko' => '데이터베이스 정보를 확인하세요.',
 			'ko' => '데이터베이스 정보를 확인하세요.',
 			'ok' => '데이터베이스 설정이 저장되었습니다.',
 			'ok' => '데이터베이스 설정이 저장되었습니다.',
+			'_' => '데이터베이스 설정',
 		),
 		),
 		'host' => '데이터베이스 서버',
 		'host' => '데이터베이스 서버',
 		'password' => '데이터베이스 암호',
 		'password' => '데이터베이스 암호',
 		'prefix' => '테이블 접두어',
 		'prefix' => '테이블 접두어',
 		'type' => '데이터베이스 종류',
 		'type' => '데이터베이스 종류',
 		'username' => '데이터베이스 사용자 이름',
 		'username' => '데이터베이스 사용자 이름',
+		'_' => '데이터베이스',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => '설치 요구사항 확인',
 		'already_installed' => 'FreshRSS가 이미 설치되어 있는 것을 감지했습니다!',
 		'already_installed' => 'FreshRSS가 이미 설치되어 있는 것을 감지했습니다!',
 		'cache' => array(
 		'cache' => array(
 			'nok' => '<em>./data/cache</em> 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다',
 			'nok' => '<em>./data/cache</em> 디렉토리의 권한을 확인하세요. HTTP 서버가 쓰기 권한을 가지고 있어야 합니다',
@@ -66,7 +65,7 @@ return array(
 		),
 		),
 		'json' => array(
 		'json' => array(
 			'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php-json 패키지).',
 			'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php-json 패키지).',
-			'ok' => 'JSON  확장 기능이 설치되어 있습니다.',
+			'ok' => 'JSON 확장 기능이 설치되어 있습니다.',
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
 			'nok' => '유니코드 지원을 위한 mbstring 라이브러리를 찾을 수 없습니다.',
 			'nok' => '유니코드 지원을 위한 mbstring 라이브러리를 찾을 수 없습니다.',
@@ -96,10 +95,11 @@ return array(
 			'nok' => 'XML 해석을 위한 라이브러리르 찾을 수 없습니다.',
 			'nok' => 'XML 해석을 위한 라이브러리르 찾을 수 없습니다.',
 			'ok' => 'XML 해석을 위한 라이브러리가 설치되어 있습니다.',
 			'ok' => 'XML 해석을 위한 라이브러리가 설치되어 있습니다.',
 		),
 		),
+		'_' => '설치 요구사항 확인',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => '일반 설정',
 		'ok' => '일반 설정이 저장되었습니다.',
 		'ok' => '일반 설정이 저장되었습니다.',
+		'_' => '일반 설정',
 	),
 	),
 	'congratulations' => '축하합니다!',
 	'congratulations' => '축하합니다!',
 	'default_user' => '기본 사용자 이름<small>(알파벳과 숫자를 포함할 수 있고 최대 16 글자)</small>',
 	'default_user' => '기본 사용자 이름<small>(알파벳과 숫자를 포함할 수 있고 최대 16 글자)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'FreshRSS을 다시 설치하면 이전 설정이 사라집니다. 계속하시겠습니까?',
 		'confirm_reinstall' => 'FreshRSS을 다시 설치하면 이전 설정이 사라집니다. 계속하시겠습니까?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => '언어',
 		'choose' => 'FreshRSS에서 사용할 언어를 고르세요',
 		'choose' => 'FreshRSS에서 사용할 언어를 고르세요',
 		'defined' => '언어가 설정되었습니다.',
 		'defined' => '언어가 설정되었습니다.',
+		'_' => '언어',
 	),
 	),
 	'not_deleted' => '무언가 잘못되었습니다; <em>%s</em> 파일을 직접 삭제해주세요.',
 	'not_deleted' => '무언가 잘못되었습니다; <em>%s</em> 파일을 직접 삭제해주세요.',
 	'ok' => '설치 과정이 성공적으로 끝났습니다.',
 	'ok' => '설치 과정이 성공적으로 끝났습니다.',
 	'step' => '단계 %d',
 	'step' => '단계 %d',
 	'steps' => '단계',
 	'steps' => '단계',
-	'title' => '설치 · FreshRSS',
 	'this_is_the_end' => '마침',
 	'this_is_the_end' => '마침',
+	'title' => '설치 · FreshRSS',
 );
 );

+ 10 - 10
app/i18n/kr/sub.php

@@ -11,15 +11,15 @@ return array(
 		'title' => '북마클릿',
 		'title' => '북마클릿',
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => '카테고리',
 		'add' => '카테고리 추가',
 		'add' => '카테고리 추가',
 		'archiving' => '보관',
 		'archiving' => '보관',
 		'empty' => '빈 카테고리',
 		'empty' => '빈 카테고리',
 		'information' => '정보',
 		'information' => '정보',
 		'new' => '새 카테고리',
 		'new' => '새 카테고리',
-		'position' => 'Display position',	//TODO - Translation
-		'position_help' => 'To control category sort order',	//TODO - Translation
+		'position' => 'Display position',	// TODO - Translation
+		'position_help' => 'To control category sort order',	// TODO - Translation
 		'title' => '제목',
 		'title' => '제목',
+		'_' => '카테고리',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'RSS 피드 추가',
 		'add' => 'RSS 피드 추가',
@@ -39,8 +39,8 @@ return array(
 		'empty' => '이 피드는 비어있습니다. 피드가 계속 운영되고 있는지 확인하세요.',
 		'empty' => '이 피드는 비어있습니다. 피드가 계속 운영되고 있는지 확인하세요.',
 		'error' => '이 피드에 문제가 발생했습니다. 이 피드에 접근 권한이 있는지 확인하세요.',
 		'error' => '이 피드에 문제가 발생했습니다. 이 피드에 접근 권한이 있는지 확인하세요.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filter actions',	//TODO - Translation
-			'help' => 'Write one search filter per line.',	//TODO - Translation
+			'help' => 'Write one search filter per line.',	// TODO - Translation
+			'_' => 'Filter actions',	// TODO - Translation
 		),
 		),
 		'information' => '정보',
 		'information' => '정보',
 		'keep_min' => '최소 유지 글 개수',
 		'keep_min' => '최소 유지 글 개수',
@@ -49,12 +49,11 @@ return array(
 		'no_selected' => '선택된 피드가 없습니다.',
 		'no_selected' => '선택된 피드가 없습니다.',
 		'number_entries' => '%d 개의 글',
 		'number_entries' => '%d 개의 글',
 		'priority' => array(
 		'priority' => array(
-			'_' => '표시',
 			'archived' => '표시하지 않음 (보관됨)',
 			'archived' => '표시하지 않음 (보관됨)',
 			'main_stream' => '메인 스트림에 표시하기',
 			'main_stream' => '메인 스트림에 표시하기',
 			'normal' => '피드가 속한 카테고리에만 표시하기',
 			'normal' => '피드가 속한 카테고리에만 표시하기',
+			'_' => '표시',
 		),
 		),
-		'websub' => 'WebSub을 사용한 즉시 알림',
 		'show' => array(
 		'show' => array(
 			'all' => '모든 피드 보기',
 			'all' => '모든 피드 보기',
 			'error' => '오류가 발생한 피드만 보기',
 			'error' => '오류가 발생한 피드만 보기',
@@ -72,17 +71,18 @@ return array(
 		'url' => '피드 URL',
 		'url' => '피드 URL',
 		'validator' => '피드 유효성 검사',
 		'validator' => '피드 유효성 검사',
 		'website' => '웹사이트 URL',
 		'website' => '웹사이트 URL',
+		'websub' => 'WebSub을 사용한 즉시 알림',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
 		'documentation' => 'FreshRSS를 Firefox 피드 리더에 추가하기 위해서는 <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">여기</a>의 설명을 따르세요.',
 		'documentation' => 'FreshRSS를 Firefox 피드 리더에 추가하기 위해서는 <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">여기</a>의 설명을 따르세요.',
-		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	//TODO - Translation
+		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	// TODO - Translation
 		'title' => 'Firefox 피드 리더',
 		'title' => 'Firefox 피드 리더',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => '내보내기',
 		'export' => '내보내기',
+		'export_labelled' => '라벨이 표시된 글들 내보내기',
 		'export_opml' => '피드 목록 내보내기 (OPML)',
 		'export_opml' => '피드 목록 내보내기 (OPML)',
 		'export_starred' => '즐겨찾기 내보내기',
 		'export_starred' => '즐겨찾기 내보내기',
-		'export_labelled' => '라벨이 표시된 글들 내보내기',
 		'feed_list' => '%s 개의 글 목록',
 		'feed_list' => '%s 개의 글 목록',
 		'file_to_import' => '불러올 파일<br />(OPML, JSON 또는 ZIP)',
 		'file_to_import' => '불러올 파일<br />(OPML, JSON 또는 ZIP)',
 		'file_to_import_no_zip' => '불러올 파일<br />(OPML 또는 JSON)',
 		'file_to_import_no_zip' => '불러올 파일<br />(OPML 또는 JSON)',
@@ -97,8 +97,8 @@ return array(
 		'subscription_tools' => '구독 도구',
 		'subscription_tools' => '구독 도구',
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => '구독 관리',
 		'feed_management' => 'RSS 피드 관리',
 		'feed_management' => 'RSS 피드 관리',
 		'subscription_tools' => '구독 도구',
 		'subscription_tools' => '구독 도구',
+		'_' => '구독 관리',
 	),
 	),
 );
 );

+ 21 - 21
app/i18n/kr/user.php

@@ -3,35 +3,35 @@
 return array(
 return array(
 	'email' => array(
 	'email' => array(
 		'feedback' => array(
 		'feedback' => array(
-			'invalid' => 'The email address is invalid.', //TODO - Translation
-			'required' => 'The email address is required.', //TODO - Translation
+			'invalid' => 'The email address is invalid.',	// TODO - Translation
+			'required' => 'The email address is required.',	// TODO - Translation
 		),
 		),
 		'validation' => array(
 		'validation' => array(
-			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.', //TODO - Translation
-			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.', //TODO - Translation
+			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.',	// TODO - Translation
+			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.',	// TODO - Translation
 			'feedback' => array(
 			'feedback' => array(
-				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.', //TODO - Translation
-				'email_sent' => 'An email has been sent to your address.', //TODO - Translation
-				'error' => 'The email address failed to be validated.', //TODO - Translation
-				'ok' => 'The email address has been validated.', //TODO - Translation
-				'unneccessary' => 'The email address was already validated.', //TODO - Translation
-				'wrong_token' => 'The email address failed to be validated due to a wrong token.', //TODO - Translation
+				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.',	// TODO - Translation
+				'email_sent' => 'An email has been sent to your address.',	// TODO - Translation
+				'error' => 'The email address failed to be validated.',	// TODO - Translation
+				'ok' => 'The email address has been validated.',	// TODO - Translation
+				'unneccessary' => 'The email address was already validated.',	// TODO - Translation
+				'wrong_token' => 'The email address failed to be validated due to a wrong token.',	// TODO - Translation
 			),
 			),
-			'need_to' => 'You need to validate your email address before being able to use %s.', //TODO - Translation
-			'resend_email' => 'Resend the email', //TODO - Translation
-			'title' => 'Email address validation', //TODO - Translation
-		),
-	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation
+			'need_to' => 'You need to validate your email address before being able to use %s.',	// TODO - Translation
+			'resend_email' => 'Resend the email',	// TODO - Translation
+			'title' => 'Email address validation',	// TODO - Translation
 		),
 		),
 	),
 	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
-			'title' => 'You need to validate your account', //TODO - Translation
-			'welcome' => 'Welcome %s,', //TODO - Translation
-			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:', //TODO - Translation
+			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:',	// TODO - Translation
+			'title' => 'You need to validate your account',	// TODO - Translation
+			'welcome' => 'Welcome %s,',	// TODO - Translation
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'You must accept the Terms of Service to be able to register.',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 17 - 11
app/i18n/nl/admin.php

@@ -1,5 +1,5 @@
 <?php
 <?php
-/* Dutch translation by Wanabo. http://www.nieuwskop.be */
+
 return array(
 return array(
 	'auth' => array(
 	'auth' => array(
 		'allow_anonymous' => 'Sta bezoekers toe om artikelen te lezen van de standaard gebruiker (%s)',
 		'allow_anonymous' => 'Sta bezoekers toe om artikelen te lezen van de standaard gebruiker (%s)',
@@ -83,9 +83,9 @@ return array(
 			'ok' => 'U hebt PDO en ten minste één van de ondersteunde drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => 'U hebt PDO en ten minste één van de ondersteunde drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'PHP installatie',
 			'nok' => 'Uw PHP versie is %s maar FreshRSS benodigd tenminste versie %s.',
 			'nok' => 'Uw PHP versie is %s maar FreshRSS benodigd tenminste versie %s.',
 			'ok' => 'Uw PHP versie is %s, welke compatibel is met FreshRSS.',
 			'ok' => 'Uw PHP versie is %s, welke compatibel is met FreshRSS.',
+			'_' => 'PHP installatie',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'Er zijn één of meer ontbrekende tabellen in de database.',
 			'nok' => 'Er zijn één of meer ontbrekende tabellen in de database.',
@@ -116,8 +116,8 @@ return array(
 		'name' => 'Naam',
 		'name' => 'Naam',
 		'no_configure_view' => 'Deze uitbreiding kan niet worden geconfigureerd.',
 		'no_configure_view' => 'Deze uitbreiding kan niet worden geconfigureerd.',
 		'system' => array(
 		'system' => array(
-			'_' => 'Systeemuitbreidingen',
 			'no_rights' => 'Systeemuitbreidingen (U hebt hier geen rechten op)',
 			'no_rights' => 'Systeemuitbreidingen (U hebt hier geen rechten op)',
+			'_' => 'Systeemuitbreidingen',
 		),
 		),
 		'title' => 'Uitbreidingen',
 		'title' => 'Uitbreidingen',
 		'update' => 'Update beschikbaar',
 		'update' => 'Update beschikbaar',
@@ -125,7 +125,6 @@ return array(
 		'version' => 'Versie',
 		'version' => 'Versie',
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Statistieken',
 		'all_feeds' => 'Alle feeds',
 		'all_feeds' => 'Alle feeds',
 		'category' => 'Categorie',
 		'category' => 'Categorie',
 		'entry_count' => 'Invoer aantallen',
 		'entry_count' => 'Invoer aantallen',
@@ -155,37 +154,44 @@ return array(
 		'status_unread' => 'Ongelezen',
 		'status_unread' => 'Ongelezen',
 		'title' => 'Statistieken',
 		'title' => 'Statistieken',
 		'top_feed' => 'Top tien feeds',
 		'top_feed' => 'Top tien feeds',
+		'_' => 'Statistieken',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'Systeem configuratie',
 		'auto-update-url' => 'Automatische update server URL',
 		'auto-update-url' => 'Automatische update server URL',
-		'force_email_validation' => 'Emailadresvalidatie forceren',
-		'instance-name' => 'Voorbeeld naam',
-		'max-categories' => 'Categorielimiet per gebruiker',
-		'max-feeds' => 'Feedlimiet per gebruiker',
 		'cookie-duration' => array(
 		'cookie-duration' => array(
 			'help' => 'in seconden',
 			'help' => 'in seconden',
 			'number' => 'Tijdsduur om ingelogd te blijven',
 			'number' => 'Tijdsduur om ingelogd te blijven',
 		),
 		),
+		'force_email_validation' => 'Emailadresvalidatie forceren',
+		'instance-name' => 'Voorbeeld naam',
+		'max-categories' => 'Categorielimiet per gebruiker',
+		'max-feeds' => 'Feedlimiet per gebruiker',
 		'registration' => array(
 		'registration' => array(
 			'help' => '0 betekent geen account limiet',
 			'help' => '0 betekent geen account limiet',
 			'number' => 'Maximum aantal accounts',
 			'number' => 'Maximum aantal accounts',
 		),
 		),
+		'_' => 'Systeem configuratie',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'Versie controle',
 		'apply' => 'Toepassen',
 		'apply' => 'Toepassen',
 		'check' => 'Controleer op nieuwe versies',
 		'check' => 'Controleer op nieuwe versies',
 		'current_version' => 'Uw huidige versie van FreshRSS is %s.',
 		'current_version' => 'Uw huidige versie van FreshRSS is %s.',
 		'last' => 'Laatste controle: %s',
 		'last' => 'Laatste controle: %s',
 		'none' => 'Geen nieuwe versie om toe te passen',
 		'none' => 'Geen nieuwe versie om toe te passen',
 		'title' => 'Vernieuw systeem',
 		'title' => 'Vernieuw systeem',
+		'_' => 'Versie controle',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s artikelen (%s)',
 		'articles_and_size' => '%s artikelen (%s)',
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => 'Creëer nieuwe gebruiker',
 		'create' => 'Creëer nieuwe gebruiker',
+		'database_size' => 'Database size',	// TODO - Translation
 		'delete_users' => 'Verwijder gebruiker',
 		'delete_users' => 'Verwijder gebruiker',
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => 'Taal',
 		'language' => 'Taal',
+		'list' => 'User list',	// TODO - Translation
 		'number' => 'Er is %d accounts gemaakt',
 		'number' => 'Er is %d accounts gemaakt',
 		'numbers' => 'Er zijn %d accounts gemaakt',
 		'numbers' => 'Er zijn %d accounts gemaakt',
 		'password_form' => 'Wachtwoord<br /><small>(voor de Web-formulier loginmethode)</small>',
 		'password_form' => 'Wachtwoord<br /><small>(voor de Web-formulier loginmethode)</small>',
@@ -193,8 +199,8 @@ return array(
 		'selected' => 'Geselecteerde gebruiker',
 		'selected' => 'Geselecteerde gebruiker',
 		'title' => 'Beheer gebruikers',
 		'title' => 'Beheer gebruikers',
 		'update_users' => 'Gebruiker bijwerken',
 		'update_users' => 'Gebruiker bijwerken',
-		'user_list' => 'Lijst van gebruikers ',
 		'username' => 'Gebruikersnaam',
 		'username' => 'Gebruikersnaam',
 		'users' => 'Gebruikers',
 		'users' => 'Gebruikers',
+		'user_list' => 'Lijst van gebruikers ',
 	),
 	),
 );
 );

+ 16 - 15
app/i18n/nl/conf.php

@@ -2,13 +2,14 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Archivering',
 		'delete_after' => 'Verwijder artikelen na',
 		'delete_after' => 'Verwijder artikelen na',
 		'exception' => 'Zuiveringsuitzondering',
 		'exception' => 'Zuiveringsuitzondering',
 		'help' => 'Meer opties zijn beschikbaar in de persoonlijke stroom instellingen',
 		'help' => 'Meer opties zijn beschikbaar in de persoonlijke stroom instellingen',
 		'keep_favourites' => 'Favorieten nooit verwijderen',
 		'keep_favourites' => 'Favorieten nooit verwijderen',
-		'keep_min_by_feed' => 'Minimum aantal te behouden artikelen in de feed',
 		'keep_labels' => 'Labels nooit verwijderen',
 		'keep_labels' => 'Labels nooit verwijderen',
+		'keep_max' => 'Maximaal aantal artikelen om te behouden',
+		'keep_min_by_feed' => 'Minimum aantal te behouden artikelen in de feed',
+		'keep_period' => 'Maximumleeftijd artikelen om te behouden',
 		'keep_unreads' => 'Ongelezen artikels nooit verwijderen',
 		'keep_unreads' => 'Ongelezen artikels nooit verwijderen',
 		'maintenance' => 'Onderhoud',
 		'maintenance' => 'Onderhoud',
 		'optimize' => 'Database optimaliseren',
 		'optimize' => 'Database optimaliseren',
@@ -16,20 +17,18 @@ return array(
 		'policy' => 'Zuiveringsbeleid',
 		'policy' => 'Zuiveringsbeleid',
 		'policy_warning' => 'Zonder zuiveringsbeleid wordt elk artikel bewaard.',
 		'policy_warning' => 'Zonder zuiveringsbeleid wordt elk artikel bewaard.',
 		'purge_now' => 'Schoon nu op',
 		'purge_now' => 'Schoon nu op',
-		'keep_max' => 'Maximaal aantal artikelen om te behouden',
-		'keep_period' => 'Maximumleeftijd artikelen om te behouden',
 		'title' => 'Archivering',
 		'title' => 'Archivering',
 		'ttl' => 'Vernieuw niet automatisch meer dan',
 		'ttl' => 'Vernieuw niet automatisch meer dan',
+		'_' => 'Archivering',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Opmaak',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Onderaan',
 			'bottom_line' => 'Onderaan',
+			'display_authors' => 'Auteurs',
 			'entry' => 'Artikel pictogrammen',
 			'entry' => 'Artikel pictogrammen',
 			'publication_date' => 'Publicatie datum',
 			'publication_date' => 'Publicatie datum',
 			'related_tags' => 'Gerelateerde labels',
 			'related_tags' => 'Gerelateerde labels',
 			'sharing' => 'Delen',
 			'sharing' => 'Delen',
-			'display_authors' => 'Auteurs',
 			'top_line' => 'Bovenaan',
 			'top_line' => 'Bovenaan',
 		),
 		),
 		'language' => 'Taal',
 		'language' => 'Taal',
@@ -47,21 +46,22 @@ return array(
 			'no_limit' => 'Geen limiet',
 			'no_limit' => 'Geen limiet',
 			'thin' => 'Smal',
 			'thin' => 'Smal',
 		),
 		),
+		'_' => 'Opmaak',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Profiel beheer',
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Account verwijderen',
 			'warn' => 'Uw account en alle gerelateerde gegvens worden verwijderd.',
 			'warn' => 'Uw account en alle gerelateerde gegvens worden verwijderd.',
+			'_' => 'Account verwijderen',
 		),
 		),
 		'email' => 'Email adres',
 		'email' => 'Email adres',
 		'password_api' => 'Wachtwoord API<br /><small>(e.g., voor mobiele apps)</small>',
 		'password_api' => 'Wachtwoord API<br /><small>(e.g., voor mobiele apps)</small>',
 		'password_form' => 'Wachtwoord<br /><small>(voor de Web-formulier log in methode)</small>',
 		'password_form' => 'Wachtwoord<br /><small>(voor de Web-formulier log in methode)</small>',
 		'password_format' => 'Ten minste 7 tekens',
 		'password_format' => 'Ten minste 7 tekens',
 		'title' => 'Profiel',
 		'title' => 'Profiel',
+		'_' => 'Profiel beheer',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'Gebruikersquery\'s (informatie aanvragen)',
 		'deprecated' => 'Deze query (informatie aanvraag) is niet langer geldig. De bedoelde categorie of feed is al verwijderd.',
 		'deprecated' => 'Deze query (informatie aanvraag) is niet langer geldig. De bedoelde categorie of feed is al verwijderd.',
 		'display' => 'Queryresultaten weergeven',
 		'display' => 'Queryresultaten weergeven',
 		'filter' => 'Filter toegepast:',
 		'filter' => 'Filter toegepast:',
@@ -69,8 +69,8 @@ return array(
 		'get_category' => 'Toon "%s" categorie',
 		'get_category' => 'Toon "%s" categorie',
 		'get_favorite' => 'Toon favoriete artikelen',
 		'get_favorite' => 'Toon favoriete artikelen',
 		'get_feed' => 'Toon "%s" feed',
 		'get_feed' => 'Toon "%s" feed',
-		'no_filter' => 'Geen filter',
 		'none' => 'U hebt nog geen gebruikers query aangemaakt..',
 		'none' => 'U hebt nog geen gebruikers query aangemaakt..',
+		'no_filter' => 'Geen filter',
 		'number' => 'Query n°%d',
 		'number' => 'Query n°%d',
 		'order_asc' => 'Toon oudste artikelen eerst',
 		'order_asc' => 'Toon oudste artikelen eerst',
 		'order_desc' => 'Toon nieuwste artikelen eerst',
 		'order_desc' => 'Toon nieuwste artikelen eerst',
@@ -93,9 +93,9 @@ return array(
 		'state_14' => 'Toon ongelezen artikelen',
 		'state_14' => 'Toon ongelezen artikelen',
 		'state_15' => 'Toon alle artikelen',
 		'state_15' => 'Toon alle artikelen',
 		'title' => 'Gebruikersquery\'s',
 		'title' => 'Gebruikersquery\'s',
+		'_' => 'Gebruikersquery\'s (informatie aanvragen)',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Lezen',
 		'after_onread' => 'Na “markeer alles als gelezen”,',
 		'after_onread' => 'Na “markeer alles als gelezen”,',
 		'articles_per_page' => 'Aantal artikelen per pagina',
 		'articles_per_page' => 'Aantal artikelen per pagina',
 		'auto_load_more' => 'Laad volgende artikel onderaan de pagina',
 		'auto_load_more' => 'Laad volgende artikel onderaan de pagina',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'Markeer artikel als gelezen…',
 			'when' => 'Markeer artikel als gelezen…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Artikelen om te tonen',
 			'adaptive' => 'Pas weergave aan',
 			'adaptive' => 'Pas weergave aan',
 			'all_articles' => 'Bekijk alle artikelen',
 			'all_articles' => 'Bekijk alle artikelen',
 			'unread' => 'Bekijk alleen ongelezen',
 			'unread' => 'Bekijk alleen ongelezen',
+			'_' => 'Artikelen om te tonen',
 		),
 		),
 		'sides_close_article' => 'Sluit het artikel door buiten de artikeltekst te klikken',
 		'sides_close_article' => 'Sluit het artikel door buiten de artikeltekst te klikken',
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Sorteer volgorde',
 			'newer_first' => 'Nieuwste eerst',
 			'newer_first' => 'Nieuwste eerst',
 			'older_first' => 'Oudste eerst',
 			'older_first' => 'Oudste eerst',
+			'_' => 'Sorteer volgorde',
 		),
 		),
 		'sticky_post' => 'Koppel artikel aan de bovenkant als het geopend wordt',
 		'sticky_post' => 'Koppel artikel aan de bovenkant als het geopend wordt',
 		'title' => 'Lees modus',
 		'title' => 'Lees modus',
@@ -135,9 +135,9 @@ return array(
 			'normal' => 'Normale weergave',
 			'normal' => 'Normale weergave',
 			'reader' => 'Lees weergave',
 			'reader' => 'Lees weergave',
 		),
 		),
+		'_' => 'Lezen',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Delen',
 		'add' => 'Deelmethode toevoegen',
 		'add' => 'Deelmethode toevoegen',
 		'blogotext' => 'Blogotext',
 		'blogotext' => 'Blogotext',
 		'diaspora' => 'Diaspora*',
 		'diaspora' => 'Diaspora*',
@@ -152,9 +152,9 @@ return array(
 		'title' => 'Delen',
 		'title' => 'Delen',
 		'twitter' => 'Twitter',
 		'twitter' => 'Twitter',
 		'wallabag' => 'wallabag',
 		'wallabag' => 'wallabag',
+		'_' => 'Delen',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Snelkoppelingen',
 		'article_action' => 'Artikelacties',
 		'article_action' => 'Artikelacties',
 		'auto_share' => 'Delen',
 		'auto_share' => 'Delen',
 		'auto_share_help' => 'Als er slechts één deelmethode is, dan wordt die gebruikt. Anders zijn ze toegankelijk met hun nummer.',
 		'auto_share_help' => 'Als er slechts één deelmethode is, dan wordt die gebruikt. Anders zijn ze toegankelijk met hun nummer.',
@@ -186,6 +186,7 @@ return array(
 		'user_filter' => 'Toegang gebruikers filters',
 		'user_filter' => 'Toegang gebruikers filters',
 		'user_filter_help' => 'Als er slechts één gebruikersfilter is, dan wordt die gebruikt. Anders zijn ze toegankelijk met hun nummer.',
 		'user_filter_help' => 'Als er slechts één gebruikersfilter is, dan wordt die gebruikt. Anders zijn ze toegankelijk met hun nummer.',
 		'views' => 'Aanzichten',
 		'views' => 'Aanzichten',
+		'_' => 'Snelkoppelingen',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s artikelen (%s)',
 		'articles_and_size' => '%s artikelen (%s)',

+ 18 - 12
app/i18n/nl/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
-/* Dutch translation by Wanabo. http://www.nieuwskop.be */
+
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Optimalisatie compleet',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'U hebt geen rechten om deze pagina te bekijken.',
 		'denied' => 'U hebt geen rechten om deze pagina te bekijken.',
 		'not_found' => 'Deze pagina bestaat niet',
 		'not_found' => 'Deze pagina bestaat niet',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'Optimalisatie compleet',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'Er is een probleem opgetreden tijdens de controle van de systeemconfiguratie. Probeer het later nog eens.',
 			'not_set' => 'Er is een probleem opgetreden tijdens de controle van de systeemconfiguratie. Probeer het later nog eens.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s kan niet worden ingeschakeld. <a href="%s">Controleer FreshRSS log bestanden</a> voor details.',
 			'ko' => '%s kan niet worden ingeschakeld. <a href="%s">Controleer FreshRSS log bestanden</a> voor details.',
 			'ok' => '%s is nn ingeschakeld',
 			'ok' => '%s is nn ingeschakeld',
 		),
 		),
-		'no_access' => 'U hebt geen toegang voor %s',
 		'not_enabled' => '%s is nog niet ingeschakeld',
 		'not_enabled' => '%s is nog niet ingeschakeld',
 		'not_found' => '%s bestaat niet',
 		'not_found' => '%s bestaat niet',
+		'no_access' => 'U hebt geen toegang voor %s',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'ZIP uitbreiding is niet aanwezig op uw server. Exporteer a.u.b. uw bestanden één voor één.',
 		'export_no_zip_extension' => 'ZIP uitbreiding is niet aanwezig op uw server. Exporteer a.u.b. uw bestanden één voor één.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'Categorie is leeg gemaakt',
 			'emptied' => 'Categorie is leeg gemaakt',
 			'error' => 'Categorie kan niet worden vernieuwd',
 			'error' => 'Categorie kan niet worden vernieuwd',
 			'name_exists' => 'Categorie naam bestaat al.',
 			'name_exists' => 'Categorie naam bestaat al.',
-			'no_id' => 'U moet de id specificeren of de categorie.',
-			'no_name' => 'Categorie naam mag niet leeg zijn.',
 			'not_delete_default' => 'U kunt de standaard categorie niet verwijderen!',
 			'not_delete_default' => 'U kunt de standaard categorie niet verwijderen!',
 			'not_exist' => 'De categorie bestaat niet!',
 			'not_exist' => 'De categorie bestaat niet!',
+			'no_id' => 'U moet de id specificeren of de categorie.',
+			'no_name' => 'Categorie naam mag niet leeg zijn.',
 			'over_max' => 'Maximum aantal categorieën bereikt (%d)',
 			'over_max' => 'Maximum aantal categorieën bereikt (%d)',
 			'updated' => 'Categorie vernieuwd.',
 			'updated' => 'Categorie vernieuwd.',
 		),
 		),
@@ -82,10 +88,10 @@ return array(
 			'error' => 'Feed kan niet worden vernieuwd',
 			'error' => 'Feed kan niet worden vernieuwd',
 			'internal_problem' => 'De feed kon niet worden toegevoegd. <a href="%s">Controleer de FreshRSS-logbestanden</a> voor details. Toevoegen forceren kan worden geprobeerd door <code>#force_feed</code> aan de URL toe te voegen.',
 			'internal_problem' => 'De feed kon niet worden toegevoegd. <a href="%s">Controleer de FreshRSS-logbestanden</a> voor details. Toevoegen forceren kan worden geprobeerd door <code>#force_feed</code> aan de URL toe te voegen.',
 			'invalid_url' => 'URL <em>%s</em> is ongeldig',
 			'invalid_url' => 'URL <em>%s</em> is ongeldig',
+			'not_added' => '<em>%s</em> kon niet worden toegevoegd',
+			'no_refresh' => 'Er is geen feed om te vernieuwen…',
 			'n_actualized' => '%d feeds zijn vernieuwd',
 			'n_actualized' => '%d feeds zijn vernieuwd',
 			'n_entries_deleted' => '%d artikelen zijn verwijderd',
 			'n_entries_deleted' => '%d artikelen zijn verwijderd',
-			'no_refresh' => 'Er is geen feed om te vernieuwen…',
-			'not_added' => '<em>%s</em> kon niet worden toegevoegd',
 			'over_max' => 'Maximum aantal feeds bereikt (%d)',
 			'over_max' => 'Maximum aantal feeds bereikt (%d)',
 			'updated' => 'Feed is vernieuwd',
 			'updated' => 'Feed is vernieuwd',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'Gebruiker %s is aangemaakt',
 			'error' => 'Gebruiker %s kan niet worden aangemaakt',
 			'error' => 'Gebruiker %s kan niet worden aangemaakt',
+			'_' => 'Gebruiker %s is aangemaakt',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'Gebruiker %s is verwijderd',
 			'error' => 'Gebruiker %s kan niet worden verwijderd',
 			'error' => 'Gebruiker %s kan niet worden verwijderd',
+			'_' => 'Gebruiker %s is verwijderd',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'Gebruiker %s is bijgewerkt',
 			'error' => 'Gebruiker %s kan niet worden bijgewerkt',
 			'error' => 'Gebruiker %s kan niet worden bijgewerkt',
+			'_' => 'Gebruiker %s is bijgewerkt',
 		),
 		),
 	),
 	),
 );
 );

+ 24 - 6
app/i18n/nl/gen.php

@@ -16,6 +16,7 @@ return array(
 		'manage' => 'Beheren',
 		'manage' => 'Beheren',
 		'mark_favorite' => 'Markeer als favoriet',
 		'mark_favorite' => 'Markeer als favoriet',
 		'mark_read' => 'Markeer als gelezen',
 		'mark_read' => 'Markeer als gelezen',
+		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Verwijder',
 		'remove' => 'Verwijder',
 		'see_website' => 'Bekijk website',
 		'see_website' => 'Bekijk website',
 		'submit' => 'Opslaan',
 		'submit' => 'Opslaan',
@@ -29,19 +30,19 @@ return array(
 		'login' => 'Log in',
 		'login' => 'Log in',
 		'logout' => 'Log uit',
 		'logout' => 'Log uit',
 		'password' => array(
 		'password' => array(
-			'_' => 'Wachtwoord',
 			'format' => '<small>Ten minste 7 tekens</small>',
 			'format' => '<small>Ten minste 7 tekens</small>',
+			'_' => 'Wachtwoord',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'Nieuw account',
 			'ask' => 'Maak een account?',
 			'ask' => 'Maak een account?',
 			'title' => 'Account maken',
 			'title' => 'Account maken',
+			'_' => 'Nieuw account',
 		),
 		),
 		'reset' => 'Authenticatie reset',
 		'reset' => 'Authenticatie reset',
 		'username' => array(
 		'username' => array(
-			'_' => 'Gebruikersnaam',
 			'admin' => 'Beheerdersgebruikersnaam',
 			'admin' => 'Beheerdersgebruikersnaam',
 			'format' => '<small>maximaal 16 alfanumerieke tekens</small>',
 			'format' => '<small>maximaal 16 alfanumerieke tekens</small>',
+			'_' => 'Gebruikersnaam',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -64,8 +65,8 @@ return array(
 		'Jan' => '\\J\\a\\n\\u\\a\\r\\i',
 		'Jan' => '\\J\\a\\n\\u\\a\\r\\i',
 		'jan' => 'jan',
 		'jan' => 'jan',
 		'january' => 'Jan',
 		'january' => 'Jan',
-		'Jul' => '\\J\\u\\l\\i',
 		'jul' => 'jul',
 		'jul' => 'jul',
+		'Jul' => '\\J\\u\\l\\i',
 		'july' => 'Jul',
 		'july' => 'Jul',
 		'Jun' => '\\J\\u\\n\\i',
 		'Jun' => '\\J\\u\\n\\i',
 		'jun' => 'jun',
 		'jun' => 'jun',
@@ -75,8 +76,8 @@ return array(
 		'last_month' => 'Vorige maand',
 		'last_month' => 'Vorige maand',
 		'last_week' => 'Vorige week',
 		'last_week' => 'Vorige week',
 		'last_year' => 'Vorig jaar',
 		'last_year' => 'Vorig jaar',
-		'Mar' => '\\M\\a\\a\\r\\t',
 		'mar' => 'mrt',
 		'mar' => 'mrt',
+		'Mar' => '\\M\\a\\a\\r\\t',
 		'march' => 'Mrt',
 		'march' => 'Mrt',
 		'May' => '\\M\\e\\i',
 		'May' => '\\M\\e\\i',
 		'may' => 'Mei',
 		'may' => 'Mei',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => 'Gisteren',
 		'yesterday' => 'Gisteren',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'Over FreshRSS',
 		'about' => 'Over FreshRSS',
+		'_' => 'FreshRSS',
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Lege categorie',
 		'category_empty' => 'Lege categorie',
@@ -129,6 +130,7 @@ return array(
 		'oc' => 'Occitan',
 		'oc' => 'Occitan',
 		'pt-br' => 'Português (Brasil)',
 		'pt-br' => 'Português (Brasil)',
 		'ru' => 'Русский',
 		'ru' => 'Русский',
+		'sk' => 'Slovenčina',
 		'tr' => 'Türkçe',
 		'tr' => 'Türkçe',
 		'zh-cn' => '简体中文',
 		'zh-cn' => '简体中文',
 	),
 	),
@@ -170,8 +172,24 @@ return array(
 		'years' => 'jaren',
 		'years' => 'jaren',
 	),
 	),
 	'share' => array(
 	'share' => array(
+		'blogotext' => 'Blogotext',
+		'diaspora' => 'Diaspora*',
 		'email' => 'Email',
 		'email' => 'Email',
+		'facebook' => 'Facebook',
+		'gnusocial' => 'GNU social',
+		'jdh' => 'Journal du hacker',
 		'Known' => 'Known-gebaseerde sites',
 		'Known' => 'Known-gebaseerde sites',
+		'lemmy' => 'Lemmy',
+		'linkedin' => 'LinkedIn',
+		'mastodon' => 'Mastodon',
+		'movim' => 'Movim',
+		'pinboard' => 'Pinboard',
+		'pocket' => 'Pocket',
+		'print' => 'Print',
+		'shaarli' => 'Shaarli',
+		'twitter' => 'Twitter',
+		'wallabag' => 'wallabag v1',
+		'wallabagv2' => 'wallabag v2',
 	),
 	),
 	'short' => array(
 	'short' => array(
 		'attention' => 'Attentie!',
 		'attention' => 'Attentie!',

+ 7 - 7
app/i18n/nl/index.php

@@ -1,8 +1,7 @@
 <?php
 <?php
-/* Dutch translation by Wanabo. http://www.nieuwskop.be */
+
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'Over',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'bugs_reports' => 'Rapporteer fouten',
 		'bugs_reports' => 'Rapporteer fouten',
 		'credits' => 'Waarderingen',
 		'credits' => 'Waarderingen',
@@ -14,23 +13,21 @@ return array(
 		'title' => 'Over',
 		'title' => 'Over',
 		'version' => 'Versie',
 		'version' => 'Versie',
 		'website' => 'Website',
 		'website' => 'Website',
-	),
-	'tos' => array(
-		'title' => 'Gebruiksvoorwaarden',
+		'_' => 'Over',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'U kunt wat feeds toevoegen.',
 		'add' => 'U kunt wat feeds toevoegen.',
 		'empty' => 'Er is geen artikel om te laten zien.',
 		'empty' => 'Er is geen artikel om te laten zien.',
 		'rss_of' => 'RSS-feed van %s',
 		'rss_of' => 'RSS-feed van %s',
 		'title' => 'Overzicht RSS-feeds',
 		'title' => 'Overzicht RSS-feeds',
-		'title_global' => 'Globale weergave',
 		'title_fav' => 'Uw favorieten',
 		'title_fav' => 'Uw favorieten',
+		'title_global' => 'Globale weergave',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Log bestanden',
 		'clear' => 'Leeg de log bestanden',
 		'clear' => 'Leeg de log bestanden',
 		'empty' => 'Log bestand is leeg',
 		'empty' => 'Log bestand is leeg',
 		'title' => 'Log bestanden',
 		'title' => 'Log bestanden',
+		'_' => 'Log bestanden',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Over FreshRSS',
 		'about' => 'Over FreshRSS',
@@ -63,4 +60,7 @@ return array(
 	'tag' => array(
 	'tag' => array(
 		'related' => 'Verwante labels',
 		'related' => 'Verwante labels',
 	),
 	),
+	'tos' => array(
+		'title' => 'Gebruiksvoorwaarden',
+	),
 );
 );

+ 7 - 7
app/i18n/nl/install.php

@@ -1,5 +1,5 @@
 <?php
 <?php
-/* Dutch translation by Wanabo. http://www.nieuwskop.be */
+
 return array(
 return array(
 	'action' => array(
 	'action' => array(
 		'finish' => 'Completeer installatie',
 		'finish' => 'Completeer installatie',
@@ -17,20 +17,19 @@ return array(
 		'type' => 'Authenticatiemethode',
 		'type' => 'Authenticatiemethode',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'Database',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'Database configuratie',
 			'ko' => 'Controleer uw database informatie.',
 			'ko' => 'Controleer uw database informatie.',
 			'ok' => 'Database configuratie is opgeslagen.',
 			'ok' => 'Database configuratie is opgeslagen.',
+			'_' => 'Database configuratie',
 		),
 		),
 		'host' => 'Host',
 		'host' => 'Host',
 		'password' => 'Database wachtwoord',
 		'password' => 'Database wachtwoord',
 		'prefix' => 'Tabel voorvoegsel',
 		'prefix' => 'Tabel voorvoegsel',
 		'type' => 'Type database',
 		'type' => 'Type database',
 		'username' => 'Database gebruikersnaam',
 		'username' => 'Database gebruikersnaam',
+		'_' => 'Database',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'Controles',
 		'already_installed' => 'We hebben geconstateerd dat FreshRSS al is geïnstallerd!',
 		'already_installed' => 'We hebben geconstateerd dat FreshRSS al is geïnstallerd!',
 		'cache' => array(
 		'cache' => array(
 			'nok' => 'Controleer permissies van de <em>./data/cache</em> map. HTTP server moet rechten hebben om er in te kunnen schrijven',
 			'nok' => 'Controleer permissies van de <em>./data/cache</em> map. HTTP server moet rechten hebben om er in te kunnen schrijven',
@@ -96,10 +95,11 @@ return array(
 			'nok' => 'U mist de benodigde bibliotheek om XML te gebruiken.',
 			'nok' => 'U mist de benodigde bibliotheek om XML te gebruiken.',
 			'ok' => 'U hebt de benodigde bibliotheek om XML te gebruiken.',
 			'ok' => 'U hebt de benodigde bibliotheek om XML te gebruiken.',
 		),
 		),
+		'_' => 'Controles',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'Algemene configuratie',
 		'ok' => 'Algemene configuratie is opgeslagen.',
 		'ok' => 'Algemene configuratie is opgeslagen.',
+		'_' => 'Algemene configuratie',
 	),
 	),
 	'congratulations' => 'Gefeliciteerd!',
 	'congratulations' => 'Gefeliciteerd!',
 	'default_user' => 'Gebruikersnaam van de standaardgebruiker <small>(maximaal 16 alfanumerieke tekens)</small>',
 	'default_user' => 'Gebruikersnaam van de standaardgebruiker <small>(maximaal 16 alfanumerieke tekens)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'U zal uw vorige configuratie kwijtraken door FreshRSS opnieuw te installeren. Weet u zeker dat u verder wilt gaan?',
 		'confirm_reinstall' => 'U zal uw vorige configuratie kwijtraken door FreshRSS opnieuw te installeren. Weet u zeker dat u verder wilt gaan?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'Taal',
 		'choose' => 'Kies een taal voor FreshRSS',
 		'choose' => 'Kies een taal voor FreshRSS',
 		'defined' => 'Taal is bepaald.',
 		'defined' => 'Taal is bepaald.',
+		'_' => 'Taal',
 	),
 	),
 	'not_deleted' => 'Er ging iets fout! U moet het bestand <em>%s</em> handmatig verwijderen.',
 	'not_deleted' => 'Er ging iets fout! U moet het bestand <em>%s</em> handmatig verwijderen.',
 	'ok' => 'De installatieprocedure is geslaagd.',
 	'ok' => 'De installatieprocedure is geslaagd.',
 	'step' => 'stap %d',
 	'step' => 'stap %d',
 	'steps' => 'Stappen',
 	'steps' => 'Stappen',
-	'title' => 'Installatie · FreshRSS',
 	'this_is_the_end' => 'Dit is het einde',
 	'this_is_the_end' => 'Dit is het einde',
+	'title' => 'Installatie · FreshRSS',
 );
 );

+ 7 - 7
app/i18n/nl/sub.php

@@ -1,5 +1,5 @@
 <?php
 <?php
-/* Dutch translation by Wanabo. http://www.nieuwskop.be */
+
 return array(
 return array(
 	'api' => array(
 	'api' => array(
 		'documentation' => 'Kopieer de volgende URL om deze in een externe toepassing te gebruiken.',
 		'documentation' => 'Kopieer de volgende URL om deze in een externe toepassing te gebruiken.',
@@ -11,7 +11,6 @@ return array(
 		'title' => 'Bookmarklet',
 		'title' => 'Bookmarklet',
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'Categorie',
 		'add' => 'Voeg categorie toe',
 		'add' => 'Voeg categorie toe',
 		'archiving' => 'Archiveren',
 		'archiving' => 'Archiveren',
 		'empty' => 'Lege categorie',
 		'empty' => 'Lege categorie',
@@ -20,6 +19,7 @@ return array(
 		'position' => 'Weergavepositie',
 		'position' => 'Weergavepositie',
 		'position_help' => 'Om de categorieweergave-sorteervolgorde te controleren',
 		'position_help' => 'Om de categorieweergave-sorteervolgorde te controleren',
 		'title' => 'Titel',
 		'title' => 'Titel',
+		'_' => 'Categorie',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Voeg een RSS-feed toe',
 		'add' => 'Voeg een RSS-feed toe',
@@ -39,8 +39,8 @@ return array(
 		'empty' => 'Deze feed is leeg. Controleer of deze nog actueel is.',
 		'empty' => 'Deze feed is leeg. Controleer of deze nog actueel is.',
 		'error' => 'Deze feed heeft problemen. Verifieer a.u.b het doeladres en actualiseer het.',
 		'error' => 'Deze feed heeft problemen. Verifieer a.u.b het doeladres en actualiseer het.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filteracties',
 			'help' => 'Voer één zoekfilter per lijn in.',
 			'help' => 'Voer één zoekfilter per lijn in.',
+			'_' => 'Filteracties',
 		),
 		),
 		'information' => 'Informatie',
 		'information' => 'Informatie',
 		'keep_min' => 'Minimum aantal artikelen om te houden',
 		'keep_min' => 'Minimum aantal artikelen om te houden',
@@ -49,12 +49,11 @@ return array(
 		'no_selected' => 'Geen feed geselecteerd.',
 		'no_selected' => 'Geen feed geselecteerd.',
 		'number_entries' => '%d artikelen',
 		'number_entries' => '%d artikelen',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Zichtbaarheid',
 			'archived' => 'Niet weergeven (gearchiveerd)',
 			'archived' => 'Niet weergeven (gearchiveerd)',
 			'main_stream' => 'Zichtbaar in het overzicht',
 			'main_stream' => 'Zichtbaar in het overzicht',
 			'normal' => 'Toon in categorie',
 			'normal' => 'Toon in categorie',
+			'_' => 'Zichtbaarheid',
 		),
 		),
-		'websub' => 'Directe notificaties met WebSub',
 		'show' => array(
 		'show' => array(
 			'all' => 'Alle feeds tonen',
 			'all' => 'Alle feeds tonen',
 			'error' => 'Alleen feeds met een foutmelding tonen',
 			'error' => 'Alleen feeds met een foutmelding tonen',
@@ -72,6 +71,7 @@ return array(
 		'url' => 'Feed-url',
 		'url' => 'Feed-url',
 		'validator' => 'Controleer de geldigheid van de feed',
 		'validator' => 'Controleer de geldigheid van de feed',
 		'website' => 'Website-url',
 		'website' => 'Website-url',
+		'websub' => 'Directe notificaties met WebSub',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
 		'documentation' => 'Volg de stappen die <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">hier</a> beschreven worden om FreshRSS aan de Firefox-nieuwslezerlijst toe te voegen.',
 		'documentation' => 'Volg de stappen die <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">hier</a> beschreven worden om FreshRSS aan de Firefox-nieuwslezerlijst toe te voegen.',
@@ -80,9 +80,9 @@ return array(
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => 'Exporteer',
 		'export' => 'Exporteer',
+		'export_labelled' => 'Exporteer gelabelde artikels',
 		'export_opml' => 'Exporteer lijst van feeds (OPML)',
 		'export_opml' => 'Exporteer lijst van feeds (OPML)',
 		'export_starred' => 'Exporteer je favorieten',
 		'export_starred' => 'Exporteer je favorieten',
-		'export_labelled' => 'Exporteer gelabelde artikels',
 		'feed_list' => 'Lijst van %s artikelen',
 		'feed_list' => 'Lijst van %s artikelen',
 		'file_to_import' => 'Bestand om te importeren<br />(OPML, JSON of ZIP)',
 		'file_to_import' => 'Bestand om te importeren<br />(OPML, JSON of ZIP)',
 		'file_to_import_no_zip' => 'Bestand om te importeren<br />(OPML of JSON)',
 		'file_to_import_no_zip' => 'Bestand om te importeren<br />(OPML of JSON)',
@@ -97,8 +97,8 @@ return array(
 		'subscription_tools' => 'Hulpmiddelen voor abonnementen',
 		'subscription_tools' => 'Hulpmiddelen voor abonnementen',
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'Abonnementenbeheer',
 		'feed_management' => 'RSS-feedbeheer',
 		'feed_management' => 'RSS-feedbeheer',
 		'subscription_tools' => 'Hulpmiddelen voor abonnementen',
 		'subscription_tools' => 'Hulpmiddelen voor abonnementen',
+		'_' => 'Abonnementenbeheer',
 	),
 	),
 );
 );

+ 6 - 6
app/i18n/nl/user.php

@@ -22,16 +22,16 @@ return array(
 			'title' => 'Emailadresvalidatie',
 			'title' => 'Emailadresvalidatie',
 		),
 		),
 	),
 	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'De gebruiksvoorwaarden moeten worden geaccepteerd om te kunnen registeren.',
-		),
-	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
+			'body' => 'Je hebt je net geregistreerd op %s, maar je moet je email nog valideren. Volg daarvoor de link:',
 			'title' => 'Je account moet worden gevalideerd',
 			'title' => 'Je account moet worden gevalideerd',
 			'welcome' => 'Welkom %s,',
 			'welcome' => 'Welkom %s,',
-			'body' => 'Je hebt je net geregistreerd op %s, maar je moet je email nog valideren. Volg daarvoor de link:',
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'De gebruiksvoorwaarden moeten worden geaccepteerd om te kunnen registeren.',
 		),
 		),
 	),
 	),
 );
 );

+ 15 - 9
app/i18n/oc/admin.php

@@ -83,9 +83,9 @@ return array(
 			'ok' => 'Avètz PDO e almens un des drivers compatibles (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 			'ok' => 'Avètz PDO e almens un des drivers compatibles (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		),
 		'php' => array(
 		'php' => array(
-			'_' => 'Installacion PHP',
 			'nok' => 'Vòstra version PHP es la %s más FreshRSS demanda almens la versión %s.',
 			'nok' => 'Vòstra version PHP es la %s más FreshRSS demanda almens la versión %s.',
 			'ok' => 'Vòstra version PHP es %s, qu’es compatibla amb FreshRSS.',
 			'ok' => 'Vòstra version PHP es %s, qu’es compatibla amb FreshRSS.',
+			'_' => 'Installacion PHP',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'Manca una o mai tabla dins la basa de donadas.',
 			'nok' => 'Manca una o mai tabla dins la basa de donadas.',
@@ -116,16 +116,15 @@ return array(
 		'name' => 'Nom',
 		'name' => 'Nom',
 		'no_configure_view' => 'Aquesta extension se pòt pas configurar.',
 		'no_configure_view' => 'Aquesta extension se pòt pas configurar.',
 		'system' => array(
 		'system' => array(
-			'_' => 'Extensions sistèma',
 			'no_rights' => 'Extensions sistèma (contrarotlat per l’administrator)',
 			'no_rights' => 'Extensions sistèma (contrarotlat per l’administrator)',
+			'_' => 'Extensions sistèma',
 		),
 		),
 		'title' => 'Extensions',
 		'title' => 'Extensions',
 		'update' => 'Mesa a jorn disponibla',
 		'update' => 'Mesa a jorn disponibla',
 		'user' => 'Extensions utilizaire',
 		'user' => 'Extensions utilizaire',
-		'version' => 'Version',
+		'version' => 'Version',	// TODO - Translation
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Estatisticas',
 		'all_feeds' => 'Totes los fluxes',
 		'all_feeds' => 'Totes los fluxes',
 		'category' => 'Categoria',
 		'category' => 'Categoria',
 		'entry_count' => 'Nombre d’articles',
 		'entry_count' => 'Nombre d’articles',
@@ -151,13 +150,13 @@ return array(
 		'repartition' => 'Reparticion dels articles',
 		'repartition' => 'Reparticion dels articles',
 		'status_favorites' => 'Favorits',
 		'status_favorites' => 'Favorits',
 		'status_read' => 'Legit',
 		'status_read' => 'Legit',
-		'status_total' => 'Total',
+		'status_total' => 'Total',	// TODO - Translation
 		'status_unread' => 'Pas legits',
 		'status_unread' => 'Pas legits',
 		'title' => 'Estatisticas',
 		'title' => 'Estatisticas',
 		'top_feed' => 'Los dètz fluxes mai gròsses',
 		'top_feed' => 'Los dètz fluxes mai gròsses',
+		'_' => 'Estatisticas',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'Configuracion sistèma',
 		'auto-update-url' => 'URL del servici de mesa a jorn',
 		'auto-update-url' => 'URL del servici de mesa a jorn',
 		'cookie-duration' => array(
 		'cookie-duration' => array(
 			'help' => 'en segondas',
 			'help' => 'en segondas',
@@ -168,24 +167,31 @@ return array(
 		'max-categories' => 'Limita de categoria per utilizaire',
 		'max-categories' => 'Limita de categoria per utilizaire',
 		'max-feeds' => 'Limita de fluxes per utilizaire',
 		'max-feeds' => 'Limita de fluxes per utilizaire',
 		'registration' => array(
 		'registration' => array(
-			'number' => 'Nombre max de comptes',
 			'help' => '0 vòl dire qu’i a pas cap de limita de compte',
 			'help' => '0 vòl dire qu’i a pas cap de limita de compte',
+			'number' => 'Nombre max de comptes',
 		),
 		),
+		'_' => 'Configuracion sistèma',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'Sistèma de mesa a jorn',
 		'apply' => 'Aplicar',
 		'apply' => 'Aplicar',
 		'check' => 'Verificar las mesas a jorn',
 		'check' => 'Verificar las mesas a jorn',
 		'current_version' => 'Vòstra version actuala de FreshRSS es %s.',
 		'current_version' => 'Vòstra version actuala de FreshRSS es %s.',
 		'last' => 'Darrièra verificacion : %s',
 		'last' => 'Darrièra verificacion : %s',
 		'none' => 'Cap d’actualizacion d’aplicar',
 		'none' => 'Cap d’actualizacion d’aplicar',
 		'title' => 'Sistèma de mesa a jorn',
 		'title' => 'Sistèma de mesa a jorn',
+		'_' => 'Sistèma de mesa a jorn',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => 'Crear un nòu utilizaire',
 		'create' => 'Crear un nòu utilizaire',
+		'database_size' => 'Database size',	// TODO - Translation
 		'delete_users' => 'Suprimir un utilizaire',
 		'delete_users' => 'Suprimir un utilizaire',
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => 'Lenga',
 		'language' => 'Lenga',
+		'list' => 'User list',	// TODO - Translation
 		'number' => '%d compte ja creat',
 		'number' => '%d compte ja creat',
 		'numbers' => '%d comptes ja creats',
 		'numbers' => '%d comptes ja creats',
 		'password_form' => 'Senhal <br /><small>(ex. : per la connexion via formulari)</small>',
 		'password_form' => 'Senhal <br /><small>(ex. : per la connexion via formulari)</small>',
@@ -193,8 +199,8 @@ return array(
 		'selected' => 'Utilizaire seleccionat',
 		'selected' => 'Utilizaire seleccionat',
 		'title' => 'Gestion dels utilizaires',
 		'title' => 'Gestion dels utilizaires',
 		'update_users' => 'Actualizar un utilizaire',
 		'update_users' => 'Actualizar un utilizaire',
-		'user_list' => 'Lista dels utilizaires',
 		'username' => 'Nom d’utilizaire',
 		'username' => 'Nom d’utilizaire',
 		'users' => 'Utilizaires',
 		'users' => 'Utilizaires',
+		'user_list' => 'Lista dels utilizaires',
 	),
 	),
 );
 );

+ 16 - 16
app/i18n/oc/conf.php

@@ -2,14 +2,14 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Archius',
-		'advanced' => 'Avançat',
 		'delete_after' => 'Levar los articles aprèp',
 		'delete_after' => 'Levar los articles aprèp',
 		'exception' => 'Excepcion de purga',
 		'exception' => 'Excepcion de purga',
 		'help' => 'Mai d’opcions son disponiblas dins la configuracion individuala dels fluxes',
 		'help' => 'Mai d’opcions son disponiblas dins la configuracion individuala dels fluxes',
 		'keep_favourites' => 'Jamai suprimir los favorits',
 		'keep_favourites' => 'Jamai suprimir los favorits',
-		'keep_min_by_feed' => 'Nombre minimum d’articles de servar per flux',
 		'keep_labels' => 'Jamai suprimir las etiquetas',
 		'keep_labels' => 'Jamai suprimir las etiquetas',
+		'keep_max' => 'Nombre maximum d’articles de gardar',
+		'keep_min_by_feed' => 'Nombre minimum d’articles de servar per flux',
+		'keep_period' => 'Atge maximum dels articles de gardar',
 		'keep_unreads' => 'Jamai suprimir los pas legits',
 		'keep_unreads' => 'Jamai suprimir los pas legits',
 		'maintenance' => 'Entreten',
 		'maintenance' => 'Entreten',
 		'optimize' => 'Optimizar la basa de donada',
 		'optimize' => 'Optimizar la basa de donada',
@@ -17,20 +17,18 @@ return array(
 		'policy' => 'Politica de purga',
 		'policy' => 'Politica de purga',
 		'policy_warning' => 'Se cap de politica de purga es pas seleccionada, totes los articles seràn gardats',
 		'policy_warning' => 'Se cap de politica de purga es pas seleccionada, totes los articles seràn gardats',
 		'purge_now' => 'Purgar ara',
 		'purge_now' => 'Purgar ara',
-		'keep_max' => 'Nombre maximum d’articles de gardar',
-		'keep_period' => 'Atge maximum dels articles de gardar',
 		'title' => 'Archius',
 		'title' => 'Archius',
 		'ttl' => 'Actualizar pas automaticament mai sovent que',
 		'ttl' => 'Actualizar pas automaticament mai sovent que',
+		'_' => 'Archius',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Afichatge',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Linha enbàs',
 			'bottom_line' => 'Linha enbàs',
+			'display_authors' => 'Autors',
 			'entry' => 'Icònas d’article',
 			'entry' => 'Icònas d’article',
 			'publication_date' => 'Data de publicacion',
 			'publication_date' => 'Data de publicacion',
 			'related_tags' => 'Etiquetas ligadas',
 			'related_tags' => 'Etiquetas ligadas',
 			'sharing' => 'Partatge',
 			'sharing' => 'Partatge',
-			'display_authors' => 'Autors',
 			'top_line' => 'Linha amont',
 			'top_line' => 'Linha amont',
 		),
 		),
 		'language' => 'Lenga',
 		'language' => 'Lenga',
@@ -48,21 +46,22 @@ return array(
 			'no_limit' => 'Cap de limit',
 			'no_limit' => 'Cap de limit',
 			'thin' => 'Fina',
 			'thin' => 'Fina',
 		),
 		),
+		'_' => 'Afichatge',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Gestion del perfil',
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Supression del compte',
 			'warn' => 'Lo compte e totas las donadas ligadas seràn suprimits.',
 			'warn' => 'Lo compte e totas las donadas ligadas seràn suprimits.',
+			'_' => 'Supression del compte',
 		),
 		),
 		'email' => 'Adreça de corrièl',
 		'email' => 'Adreça de corrièl',
 		'password_api' => 'Senhal API<br /><small>(ex. : per las aplicacions mobil)</small>',
 		'password_api' => 'Senhal API<br /><small>(ex. : per las aplicacions mobil)</small>',
 		'password_form' => 'Senhal API<br /><small>(ex. : per la connexion via formulari)</small>',
 		'password_form' => 'Senhal API<br /><small>(ex. : per la connexion via formulari)</small>',
 		'password_format' => 'Almens 7 caractèrs',
 		'password_format' => 'Almens 7 caractèrs',
 		'title' => 'Pefil',
 		'title' => 'Pefil',
+		'_' => 'Gestion del perfil',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'Filtres utilizaires',
 		'deprecated' => 'Aqueste filtre es pas valid. La categoria o lo flux concernit es estat suprimit.',
 		'deprecated' => 'Aqueste filtre es pas valid. La categoria o lo flux concernit es estat suprimit.',
 		'display' => 'Mostrar los resultats del filtre',
 		'display' => 'Mostrar los resultats del filtre',
 		'filter' => 'Filtres aplicats :',
 		'filter' => 'Filtres aplicats :',
@@ -70,8 +69,8 @@ return array(
 		'get_category' => 'Mostrar la categoria « %s »',
 		'get_category' => 'Mostrar la categoria « %s »',
 		'get_favorite' => 'Mostrar los articles favorits',
 		'get_favorite' => 'Mostrar los articles favorits',
 		'get_feed' => 'Mostrar lo flux « %s »',
 		'get_feed' => 'Mostrar lo flux « %s »',
-		'no_filter' => 'Cap de filtre aplicat',
 		'none' => 'Avètz pas encara creat cap de filtre.',
 		'none' => 'Avètz pas encara creat cap de filtre.',
+		'no_filter' => 'Cap de filtre aplicat',
 		'number' => 'Filtre n°%d',
 		'number' => 'Filtre n°%d',
 		'order_asc' => 'Mostrar los articles mai ancians en primièr',
 		'order_asc' => 'Mostrar los articles mai ancians en primièr',
 		'order_desc' => 'Mostrar los articles mai recents en primièr',
 		'order_desc' => 'Mostrar los articles mai recents en primièr',
@@ -94,9 +93,9 @@ return array(
 		'state_14' => 'Mostrar los articles pas legits',
 		'state_14' => 'Mostrar los articles pas legits',
 		'state_15' => 'Mostrar totes los articles',
 		'state_15' => 'Mostrar totes los articles',
 		'title' => 'Filtres utilizaire',
 		'title' => 'Filtres utilizaire',
+		'_' => 'Filtres utilizaires',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Lectura',
 		'after_onread' => 'Aprèp « marcar coma legit »,',
 		'after_onread' => 'Aprèp « marcar coma legit »,',
 		'articles_per_page' => 'Nombre d’articles per pagina',
 		'articles_per_page' => 'Nombre d’articles per pagina',
 		'auto_load_more' => 'Cargar los articles seguents enbàs de la pagina',
 		'auto_load_more' => 'Cargar los articles seguents enbàs de la pagina',
@@ -117,16 +116,16 @@ return array(
 			'when' => 'Marcar un article coma legit…',
 			'when' => 'Marcar un article coma legit…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Articles de mostrar',
 			'adaptive' => 'Adaptar l’afichatge',
 			'adaptive' => 'Adaptar l’afichatge',
 			'all_articles' => 'Mostrar totes los articles',
 			'all_articles' => 'Mostrar totes los articles',
 			'unread' => 'Mostrar pas que los pas legits',
 			'unread' => 'Mostrar pas que los pas legits',
+			'_' => 'Articles de mostrar',
 		),
 		),
 		'sides_close_article' => 'Clicar fòra de la zòna de tèxte tampa l’article',
 		'sides_close_article' => 'Clicar fòra de la zòna de tèxte tampa l’article',
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Òrdre de tria',
 			'newer_first' => 'Mai recents en primièr',
 			'newer_first' => 'Mai recents en primièr',
 			'older_first' => 'Mai ancians en primièr',
 			'older_first' => 'Mai ancians en primièr',
+			'_' => 'Òrdre de tria',
 		),
 		),
 		'sticky_post' => 'Gardar l’article amont quand es dobèrt',
 		'sticky_post' => 'Gardar l’article amont quand es dobèrt',
 		'title' => 'Lectura',
 		'title' => 'Lectura',
@@ -136,9 +135,9 @@ return array(
 			'normal' => 'Vista normala',
 			'normal' => 'Vista normala',
 			'reader' => 'Vista lectura',
 			'reader' => 'Vista lectura',
 		),
 		),
+		'_' => 'Lectura',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Partatge',
 		'add' => 'Ajustar un metòde de partatge',
 		'add' => 'Ajustar un metòde de partatge',
 		'blogotext' => 'Blogotext',
 		'blogotext' => 'Blogotext',
 		'diaspora' => 'Diaspora*',
 		'diaspora' => 'Diaspora*',
@@ -153,9 +152,9 @@ return array(
 		'title' => 'Partatge',
 		'title' => 'Partatge',
 		'twitter' => 'Twitter',
 		'twitter' => 'Twitter',
 		'wallabag' => 'wallabag',
 		'wallabag' => 'wallabag',
+		'_' => 'Partatge',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Acorchis',
 		'article_action' => 'Accions ligadas a l’article',
 		'article_action' => 'Accions ligadas a l’article',
 		'auto_share' => 'Partejar',
 		'auto_share' => 'Partejar',
 		'auto_share_help' => 'S’i a pas qu’un mòde de partatge, aquel serà utilizat. Autrament los mòdes son accessibles per lor numèro.',
 		'auto_share_help' => 'S’i a pas qu’un mòde de partatge, aquel serà utilizat. Autrament los mòdes son accessibles per lor numèro.',
@@ -187,6 +186,7 @@ return array(
 		'user_filter' => 'Accedir als filtres utilizaire',
 		'user_filter' => 'Accedir als filtres utilizaire',
 		'user_filter_help' => 'S’i a pas qu’un filtre utilizaire, aquel serà utilizat. Autrament los filtres son accessibles per lor numèro.',
 		'user_filter_help' => 'S’i a pas qu’un filtre utilizaire, aquel serà utilizat. Autrament los filtres son accessibles per lor numèro.',
 		'views' => 'Vistas',
 		'views' => 'Vistas',
+		'_' => 'Acorchis',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',

+ 18 - 12
app/i18n/oc/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Optimizacion acabada',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'Avètz pas l’autorizacion d’accedir a aquesta pagina',
 		'denied' => 'Avètz pas l’autorizacion d’accedir a aquesta pagina',
 		'not_found' => 'La pagina que cercatz existís pas',
 		'not_found' => 'La pagina que cercatz existís pas',
 	),
 	),
+	'admin' => array(
+		'optimization_complete' => 'Optimizacion acabada',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'Un problèma es aparegut pendent la configuracion del sistèma d’autentificacion. Tonatz ensajar ai tard.',
 			'not_set' => 'Un problèma es aparegut pendent la configuracion del sistèma d’autentificacion. Tonatz ensajar ai tard.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s pòt pas èsser activada. <a href="%s">Consultatz los jornals d’audit de FreshRSS logs</a> per mai de detalhs.',
 			'ko' => '%s pòt pas èsser activada. <a href="%s">Consultatz los jornals d’audit de FreshRSS logs</a> per mai de detalhs.',
 			'ok' => '%s es ara activada',
 			'ok' => '%s es ara activada',
 		),
 		),
-		'no_access' => 'Avètz pas accès sus %s',
 		'not_enabled' => '%s es pas encara activada',
 		'not_enabled' => '%s es pas encara activada',
 		'not_found' => '%s existís pas',
 		'not_found' => '%s existís pas',
+		'no_access' => 'Avètz pas accès sus %s',
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export_no_zip_extension' => 'L\'extension ZIP es pas presenta sul servidor. Volgatz ensajar d\'exportar los fichièrs un per un.',
 		'export_no_zip_extension' => 'L\'extension ZIP es pas presenta sul servidor. Volgatz ensajar d\'exportar los fichièrs un per un.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'La categoria es estada voidada',
 			'emptied' => 'La categoria es estada voidada',
 			'error' => 'Actualizacion de la categoria impossibla',
 			'error' => 'Actualizacion de la categoria impossibla',
 			'name_exists' => 'Una categoria se ditz ja atal.',
 			'name_exists' => 'Una categoria se ditz ja atal.',
-			'no_id' => 'Vos cal precisar l’id de la categoria.',
-			'no_name' => 'Vos cal donar un nom a la categoria.',
 			'not_delete_default' => 'Podètz pas suprimir la categoria per defaut !',
 			'not_delete_default' => 'Podètz pas suprimir la categoria per defaut !',
 			'not_exist' => 'Aquesta categoria existís pas !',
 			'not_exist' => 'Aquesta categoria existís pas !',
+			'no_id' => 'Vos cal precisar l’id de la categoria.',
+			'no_name' => 'Vos cal donar un nom a la categoria.',
 			'over_max' => 'Avètz atengut la limita de categoria (%d)',
 			'over_max' => 'Avètz atengut la limita de categoria (%d)',
 			'updated' => 'La categoria es estada actualizada.',
 			'updated' => 'La categoria es estada actualizada.',
 		),
 		),
@@ -80,12 +86,12 @@ return array(
 			'already_subscribed' => 'Seguissètz ja <em>%s</em>',
 			'already_subscribed' => 'Seguissètz ja <em>%s</em>',
 			'deleted' => 'Lo flux es suprimit',
 			'deleted' => 'Lo flux es suprimit',
 			'error' => 'Error en actualizar',
 			'error' => 'Error en actualizar',
-			'internal_problem' => 'Lo flux pòt pas èsser ajustat. <a href="%s">Consultatz los jornals d’audit de FreshRSS</a> per ne saber mai. Podètz forçar l’apondon  en ajustant <code>#force_feed</code> a l’URL.',
+			'internal_problem' => 'Lo flux pòt pas èsser ajustat. <a href="%s">Consultatz los jornals d’audit de FreshRSS</a> per ne saber mai. Podètz forçar l’apondon en ajustant <code>#force_feed</code> a l’URL.',
 			'invalid_url' => 'L\'URL <em>%s</em> es invalida',
 			'invalid_url' => 'L\'URL <em>%s</em> es invalida',
+			'not_added' => '<em>%s</em> a pas pogut èsser ajustat',
+			'no_refresh' => 'I a pas cap de flux d’actualizar…',
 			'n_actualized' => '%s fluxes son estats actualizats',
 			'n_actualized' => '%s fluxes son estats actualizats',
 			'n_entries_deleted' => '%d articles son estats suprimits',
 			'n_entries_deleted' => '%d articles son estats suprimits',
-			'no_refresh' => 'I a pas cap de flux d’actualizar…',
-			'not_added' => '<em>%s</em> a pas pogut èsser ajustat',
 			'over_max' => 'Avètz atengut vòstra limita de fluxes (%d)',
 			'over_max' => 'Avètz atengut vòstra limita de fluxes (%d)',
 			'updated' => 'Lo flux es actualizat',
 			'updated' => 'Lo flux es actualizat',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'L’utilizaire %s es estat creat',
 			'error' => 'L’utilizaire %s pòt pas èsser creat',
 			'error' => 'L’utilizaire %s pòt pas èsser creat',
+			'_' => 'L’utilizaire %s es estat creat',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'L’utilizaire %s es estat suprimit',
 			'error' => 'L’utilizaire %s pòt pas èsser suprimit',
 			'error' => 'L’utilizaire %s pòt pas èsser suprimit',
+			'_' => 'L’utilizaire %s es estat suprimit',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'L’utilizaire %s es estat actualizat',
 			'error' => 'L’utilizaire %s es pas estat actualizat',
 			'error' => 'L’utilizaire %s es pas estat actualizat',
+			'_' => 'L’utilizaire %s es estat actualizat',
 		),
 		),
 	),
 	),
 );
 );

+ 14 - 12
app/i18n/oc/gen.php

@@ -16,6 +16,7 @@ return array(
 		'manage' => 'Gerir',
 		'manage' => 'Gerir',
 		'mark_favorite' => 'Ajustar als favorits',
 		'mark_favorite' => 'Ajustar als favorits',
 		'mark_read' => 'Marcar coma legit',
 		'mark_read' => 'Marcar coma legit',
+		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Levar',
 		'remove' => 'Levar',
 		'see_website' => 'Veire lo site',
 		'see_website' => 'Veire lo site',
 		'submit' => 'Mandar',
 		'submit' => 'Mandar',
@@ -29,19 +30,19 @@ return array(
 		'login' => 'Connexion',
 		'login' => 'Connexion',
 		'logout' => 'Se desconnectar',
 		'logout' => 'Se desconnectar',
 		'password' => array(
 		'password' => array(
-			'_' => 'Senhal',
 			'format' => '<small>Almens 7 caractèrs</small>',
 			'format' => '<small>Almens 7 caractèrs</small>',
+			'_' => 'Senhal',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'Compte nòu',
 			'ask' => 'Crear un compte?',
 			'ask' => 'Crear un compte?',
 			'title' => 'Creacion de compte',
 			'title' => 'Creacion de compte',
+			'_' => 'Compte nòu',
 		),
 		),
 		'reset' => 'Reïnicializacion de l’autentificacion',
 		'reset' => 'Reïnicializacion de l’autentificacion',
 		'username' => array(
 		'username' => array(
-			'_' => 'Nom d’utilizaire',
 			'admin' => 'Nom d’utilizaire administrator',
 			'admin' => 'Nom d’utilizaire administrator',
 			'format' => '<small>16 caractèrs alfanumerics maximum)</small>',
 			'format' => '<small>16 caractèrs alfanumerics maximum)</small>',
+			'_' => 'Nom d’utilizaire',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -59,13 +60,13 @@ return array(
 		'feb' => 'feb.',
 		'feb' => 'feb.',
 		'february' => 'febrièr',
 		'february' => 'febrièr',
 		'format_date' => 'j \\d\\e %s \\d\\e Y',
 		'format_date' => 'j \\d\\e %s \\d\\e Y',
-		'format_date_hour' => 'j \\d\\e %s \\d\\e Y \\a H\:i',
+		'format_date_hour' => 'j \\d\\e %s \\d\\e Y \\a H\\:i',
 		'fri' => 'dv',
 		'fri' => 'dv',
 		'Jan' => '\\g\\e\\n\\i\\è\\r',
 		'Jan' => '\\g\\e\\n\\i\\è\\r',
 		'jan' => 'gen.',
 		'jan' => 'gen.',
 		'january' => 'genièr',
 		'january' => 'genièr',
-		'Jul' => '\\j\\u\\l\\h\\e\\t',
 		'jul' => 'julh',
 		'jul' => 'julh',
+		'Jul' => '\\j\\u\\l\\h\\e\\t',
 		'july' => 'julhet',
 		'july' => 'julhet',
 		'Jun' => '\\j\\u\\n\\h',
 		'Jun' => '\\j\\u\\n\\h',
 		'jun' => 'junh',
 		'jun' => 'junh',
@@ -75,8 +76,8 @@ return array(
 		'last_month' => 'Dempuèi lo mes passat',
 		'last_month' => 'Dempuèi lo mes passat',
 		'last_week' => 'Dempuèi la setmana passada',
 		'last_week' => 'Dempuèi la setmana passada',
 		'last_year' => 'Dempuèi l’annada passada',
 		'last_year' => 'Dempuèi l’annada passada',
-		'Mar' => '\\m\\a\\r\\ç',
 		'mar' => 'març',
 		'mar' => 'març',
+		'Mar' => '\\m\\a\\r\\ç',
 		'march' => 'març',
 		'march' => 'març',
 		'May' => '\\m\\a\\i',
 		'May' => '\\m\\a\\i',
 		'may' => 'mai',
 		'may' => 'mai',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => 'Ièr',
 		'yesterday' => 'Ièr',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'A prepaus de FreshRSS',
 		'about' => 'A prepaus de FreshRSS',
+		'_' => 'FreshRSS',
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Categoria voida',
 		'category_empty' => 'Categoria voida',
@@ -122,13 +123,14 @@ return array(
 		'en' => 'English',
 		'en' => 'English',
 		'es' => 'Español',
 		'es' => 'Español',
 		'fr' => 'Français',
 		'fr' => 'Français',
-		'he' => 'עברית',
+		'he' => 'עברית',	// TODO - Translation
 		'it' => 'Italiano',
 		'it' => 'Italiano',
 		'kr' => '한국어',
 		'kr' => '한국어',
 		'nl' => 'Nederlands',
 		'nl' => 'Nederlands',
 		'oc' => 'Occitan',
 		'oc' => 'Occitan',
 		'pt-br' => 'Português (Brasil)',
 		'pt-br' => 'Português (Brasil)',
 		'ru' => 'Русский',
 		'ru' => 'Русский',
+		'sk' => 'Slovenčina',	// TODO - Translation
 		'tr' => 'Türkçe',
 		'tr' => 'Türkçe',
 		'zh-cn' => '简体中文',
 		'zh-cn' => '简体中文',
 	),
 	),
@@ -178,11 +180,11 @@ return array(
 		'jdh' => 'Journal du hacker',
 		'jdh' => 'Journal du hacker',
 		'Known' => 'Sites basats sus Known',
 		'Known' => 'Sites basats sus Known',
 		'lemmy' => 'Lemmy',
 		'lemmy' => 'Lemmy',
-		'linkedin' => 'LinkedIn',
-		'mastodon' => 'Mastodon',
+		'linkedin' => 'LinkedIn',	// TODO - Translation
+		'mastodon' => 'Mastodon',	// TODO - Translation
 		'movim' => 'Movim',
 		'movim' => 'Movim',
-		'pinboard' => 'Pinboard',
-		'pocket' => 'Pocket',
+		'pinboard' => 'Pinboard',	// TODO - Translation
+		'pocket' => 'Pocket',	// TODO - Translation
 		'print' => 'Imprimir',
 		'print' => 'Imprimir',
 		'shaarli' => 'Shaarli',
 		'shaarli' => 'Shaarli',
 		'twitter' => 'Twitter',
 		'twitter' => 'Twitter',

+ 8 - 8
app/i18n/oc/index.php

@@ -2,35 +2,32 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'A prepaus',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'bugs_reports' => 'Senhalament de problèmas',
 		'bugs_reports' => 'Senhalament de problèmas',
 		'credits' => 'Crèdits',
 		'credits' => 'Crèdits',
 		'credits_content' => 'Unes elements de l’estil venon del <a href="http://twitter.github.io/bootstrap/">projècte Bootstrap</a> encara que FreshRSS utilize pas aqueste framework. Las <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icònas</a> venon del <a href="https://www.gnome.org/">projècte GNOME</a>. La polissa <em>Open Sans</em> utilizada foguèt creada per en <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS es basat sus <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
 		'credits_content' => 'Unes elements de l’estil venon del <a href="http://twitter.github.io/bootstrap/">projècte Bootstrap</a> encara que FreshRSS utilize pas aqueste framework. Las <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icònas</a> venon del <a href="https://www.gnome.org/">projècte GNOME</a>. La polissa <em>Open Sans</em> utilizada foguèt creada per en <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS es basat sus <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
 		'freshrss_description' => 'FreshRSS es un agregador de fluxes RSS per l’auto-albergar tal coma <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> o <a href="https://github.com/LeedRSS/Leed">Leed</a>. Sa tòca es d’èsser leugièr e de bon utilizar de prima abòrd mas tanben d’èsser potent e parametrable.',
 		'freshrss_description' => 'FreshRSS es un agregador de fluxes RSS per l’auto-albergar tal coma <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> o <a href="https://github.com/LeedRSS/Leed">Leed</a>. Sa tòca es d’èsser leugièr e de bon utilizar de prima abòrd mas tanben d’èsser potent e parametrable.',
-		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>',
+		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>',	// TODO - Translation
 		'license' => 'Licéncia',
 		'license' => 'Licéncia',
 		'project_website' => 'Site del projècte',
 		'project_website' => 'Site del projècte',
 		'title' => 'A prepaus',
 		'title' => 'A prepaus',
-		'website' => 'Site internet',
 		'version' => 'Version',
 		'version' => 'Version',
-	),
-	'tos' => array(
-		'title' => 'Condicions d’utilizacion',
+		'website' => 'Site internet',
+		'_' => 'A prepaus',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Podètz ajustar de fluxes.',
 		'add' => 'Podètz ajustar de fluxes.',
 		'empty' => 'I a pas cap de flux de mostrar.',
 		'empty' => 'I a pas cap de flux de mostrar.',
 		'rss_of' => 'Flux RSS de %s',
 		'rss_of' => 'Flux RSS de %s',
 		'title' => 'Vòstres fluxes RSS',
 		'title' => 'Vòstres fluxes RSS',
-		'title_global' => 'Vista generala',
 		'title_fav' => 'Vòstres favorits',
 		'title_fav' => 'Vòstres favorits',
+		'title_global' => 'Vista generala',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Jornals d’audit',
 		'clear' => 'Escafar los jornals',
 		'clear' => 'Escafar los jornals',
 		'empty' => 'Los jornals son voids',
 		'empty' => 'Los jornals son voids',
 		'title' => 'Jornals d’audit',
 		'title' => 'Jornals d’audit',
+		'_' => 'Jornals d’audit',
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'A prepaus de FreshRSS',
 		'about' => 'A prepaus de FreshRSS',
@@ -63,4 +60,7 @@ return array(
 	'tag' => array(
 	'tag' => array(
 		'related' => 'Etiquetas ligadas',
 		'related' => 'Etiquetas ligadas',
 	),
 	),
+	'tos' => array(
+		'title' => 'Condicions d’utilizacion',
+	),
 );
 );

+ 6 - 6
app/i18n/oc/install.php

@@ -17,20 +17,19 @@ return array(
 		'type' => 'Mòde d’autentification',
 		'type' => 'Mòde d’autentification',
 	),
 	),
 	'bdd' => array(
 	'bdd' => array(
-		'_' => 'Basa de donadas',
 		'conf' => array(
 		'conf' => array(
-			'_' => 'Configuracion de la basa de donadas',
 			'ko' => 'Verificatz las informacions de la basa de donadas.',
 			'ko' => 'Verificatz las informacions de la basa de donadas.',
 			'ok' => 'La configuracion de la basa de donadas es salvagarda.',
 			'ok' => 'La configuracion de la basa de donadas es salvagarda.',
+			'_' => 'Configuracion de la basa de donadas',
 		),
 		),
 		'host' => 'Òste',
 		'host' => 'Òste',
 		'password' => 'Senhal de la basa de donadas',
 		'password' => 'Senhal de la basa de donadas',
 		'prefix' => 'Prefixe de tabla',
 		'prefix' => 'Prefixe de tabla',
 		'type' => 'Tipe de basa de donadas',
 		'type' => 'Tipe de basa de donadas',
 		'username' => 'Nom d’utilizaire de la basa de donadas',
 		'username' => 'Nom d’utilizaire de la basa de donadas',
+		'_' => 'Basa de donadas',
 	),
 	),
 	'check' => array(
 	'check' => array(
-		'_' => 'Verificacions',
 		'already_installed' => 'Sembla que FreshRSS es ja installat !',
 		'already_installed' => 'Sembla que FreshRSS es ja installat !',
 		'cache' => array(
 		'cache' => array(
 			'nok' => 'Volgatz verificar los dreches sul repertòri <em>./data/cache</em>. Lo servidor HTTP deu poder escriure dedins',
 			'nok' => 'Volgatz verificar los dreches sul repertòri <em>./data/cache</em>. Lo servidor HTTP deu poder escriure dedins',
@@ -96,10 +95,11 @@ return array(
 			'nok' => 'Impossible de trobar una bibliotèca necessària per XML.',
 			'nok' => 'Impossible de trobar una bibliotèca necessària per XML.',
 			'ok' => 'Avètz la bibliotèca per percórrer los XML.',
 			'ok' => 'Avètz la bibliotèca per percórrer los XML.',
 		),
 		),
+		'_' => 'Verificacions',
 	),
 	),
 	'conf' => array(
 	'conf' => array(
-		'_' => 'Configuracion generala',
 		'ok' => 'La configuracion generala es enregistrada.',
 		'ok' => 'La configuracion generala es enregistrada.',
+		'_' => 'Configuracion generala',
 	),
 	),
 	'congratulations' => 'Òsca !',
 	'congratulations' => 'Òsca !',
 	'default_user' => 'Nom d’utilizaire per defaut <small>16 caractèrs alfanumerics maximum)</small>',
 	'default_user' => 'Nom d’utilizaire per defaut <small>16 caractèrs alfanumerics maximum)</small>',
@@ -110,14 +110,14 @@ return array(
 		'confirm_reinstall' => 'En reïnstallant FreshRSS perdretz la configuracion precedenta. Volètz vertadièrament contunhar ?',
 		'confirm_reinstall' => 'En reïnstallant FreshRSS perdretz la configuracion precedenta. Volètz vertadièrament contunhar ?',
 	),
 	),
 	'language' => array(
 	'language' => array(
-		'_' => 'Lenga',
 		'choose' => 'Causissètz la lenga per FreshRSS',
 		'choose' => 'Causissètz la lenga per FreshRSS',
 		'defined' => 'La lenga es corrèctament definida.',
 		'defined' => 'La lenga es corrèctament definida.',
+		'_' => 'Lenga',
 	),
 	),
 	'not_deleted' => 'Quicòm a trucat, sembla qu’avètz suprimit <em>%s</em> a la man.',
 	'not_deleted' => 'Quicòm a trucat, sembla qu’avètz suprimit <em>%s</em> a la man.',
 	'ok' => 'L’installacion s’es corrèctament passada.',
 	'ok' => 'L’installacion s’es corrèctament passada.',
 	'step' => 'etapa %d',
 	'step' => 'etapa %d',
 	'steps' => 'Etapas',
 	'steps' => 'Etapas',
-	'title' => 'Installacion · FreshRSS',
 	'this_is_the_end' => 'Es la fin',
 	'this_is_the_end' => 'Es la fin',
+	'title' => 'Installacion · FreshRSS',
 );
 );

+ 8 - 8
app/i18n/oc/sub.php

@@ -1,8 +1,9 @@
 <?php
 <?php
+
 return array(
 return array(
 	'api' => array(
 	'api' => array(
 		'documentation' => 'Copiatz l’URL seguenta per l’utilizaire dins d’una aisina extèrna.',
 		'documentation' => 'Copiatz l’URL seguenta per l’utilizaire dins d’una aisina extèrna.',
-		'title' => 'API',
+		'title' => 'API',	// TODO - Translation
 	),
 	),
 	'bookmarklet' => array(
 	'bookmarklet' => array(
 		'documentation' => 'Depausatz aqueste boton per la barra de marcapaginas o clicatz-lo a drecha e causissètz « Enregistrar aqueste ligam». Puèi clicatz «S’abonar» sus las paginas que volètz seguir.',
 		'documentation' => 'Depausatz aqueste boton per la barra de marcapaginas o clicatz-lo a drecha e causissètz « Enregistrar aqueste ligam». Puèi clicatz «S’abonar» sus las paginas que volètz seguir.',
@@ -10,7 +11,6 @@ return array(
 		'title' => 'Bookmarklet',
 		'title' => 'Bookmarklet',
 	),
 	),
 	'category' => array(
 	'category' => array(
-		'_' => 'Categoria',
 		'add' => 'Ajustar una categoria',
 		'add' => 'Ajustar una categoria',
 		'archiving' => 'Archivar',
 		'archiving' => 'Archivar',
 		'empty' => 'Categoria voida',
 		'empty' => 'Categoria voida',
@@ -19,6 +19,7 @@ return array(
 		'position' => 'Mostrar la posicion',
 		'position' => 'Mostrar la posicion',
 		'position_help' => 'Per contrarotlar l’òrdre de tria de la categoria',
 		'position_help' => 'Per contrarotlar l’òrdre de tria de la categoria',
 		'title' => 'Títol',
 		'title' => 'Títol',
+		'_' => 'Categoria',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Ajustar un flux RSS',
 		'add' => 'Ajustar un flux RSS',
@@ -38,8 +39,8 @@ return array(
 		'empty' => 'Aqueste flux es void. Assegurats-vos qu’es totjorn mantengut.',
 		'empty' => 'Aqueste flux es void. Assegurats-vos qu’es totjorn mantengut.',
 		'error' => 'Aqueste flux a rescontrat un problèma. Volgatz verificar que siá totjorn accessible puèi actualizatz-lo.',
 		'error' => 'Aqueste flux a rescontrat un problèma. Volgatz verificar que siá totjorn accessible puèi actualizatz-lo.',
 		'filteractions' => array(
 		'filteractions' => array(
-			'_' => 'Filtre d’accion',
 			'help' => 'Escrivètz una recèrca per linha.',
 			'help' => 'Escrivètz una recèrca per linha.',
+			'_' => 'Filtre d’accion',
 		),
 		),
 		'information' => 'Informacions',
 		'information' => 'Informacions',
 		'keep_min' => 'Nombre minimum d’articles de servar',
 		'keep_min' => 'Nombre minimum d’articles de servar',
@@ -48,12 +49,11 @@ return array(
 		'no_selected' => 'Cap de flux pas seleccionat.',
 		'no_selected' => 'Cap de flux pas seleccionat.',
 		'number_entries' => '%d articles',
 		'number_entries' => '%d articles',
 		'priority' => array(
 		'priority' => array(
-			'_' => 'Visibilitat',
 			'archived' => 'Mostrar pas (archivat)',
 			'archived' => 'Mostrar pas (archivat)',
 			'main_stream' => 'Mostar al flux màger',
 			'main_stream' => 'Mostar al flux màger',
 			'normal' => 'Mostar dins sa categoria',
 			'normal' => 'Mostar dins sa categoria',
+			'_' => 'Visibilitat',
 		),
 		),
-		'websub' => 'Notificaciones instantáneas amb WebSub',
 		'show' => array(
 		'show' => array(
 			'all' => 'Mostrar totes los fluxes',
 			'all' => 'Mostrar totes los fluxes',
 			'error' => 'Mostrar pas que los fluxes amb errors',
 			'error' => 'Mostrar pas que los fluxes amb errors',
@@ -71,6 +71,7 @@ return array(
 		'url' => 'Flux URL',
 		'url' => 'Flux URL',
 		'validator' => 'Verificar la validitat del flux',
 		'validator' => 'Verificar la validitat del flux',
 		'website' => 'URL del site',
 		'website' => 'URL del site',
+		'websub' => 'Notificaciones instantáneas amb WebSub',
 	),
 	),
 	'firefox' => array(
 	'firefox' => array(
 		'documentation' => 'Seguissètz las etapas descrichas <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">aquí</a> per ajustar FreshRSS a la lista dels lectors de flux de Firefox.',
 		'documentation' => 'Seguissètz las etapas descrichas <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">aquí</a> per ajustar FreshRSS a la lista dels lectors de flux de Firefox.',
@@ -79,16 +80,15 @@ return array(
 	),
 	),
 	'import_export' => array(
 	'import_export' => array(
 		'export' => 'Exportar',
 		'export' => 'Exportar',
+		'export_labelled' => 'Exportar los articles etiquetats',
 		'export_opml' => 'Exportar la lista de fluxes (OPML)',
 		'export_opml' => 'Exportar la lista de fluxes (OPML)',
 		'export_starred' => 'Exportar los favorits',
 		'export_starred' => 'Exportar los favorits',
-		'export_labelled' => 'Exportar los articles etiquetats',
 		'feed_list' => 'Lista dels %s articles',
 		'feed_list' => 'Lista dels %s articles',
 		'file_to_import' => 'Fichièr d’importar<br />(OPML, JSON o ZIP)',
 		'file_to_import' => 'Fichièr d’importar<br />(OPML, JSON o ZIP)',
 		'file_to_import_no_zip' => 'Fichièr d’importar<br />(OPML o JSON)',
 		'file_to_import_no_zip' => 'Fichièr d’importar<br />(OPML o JSON)',
 		'import' => 'Importar',
 		'import' => 'Importar',
 		'starred_list' => 'Lista dels articles favorits',
 		'starred_list' => 'Lista dels articles favorits',
 		'title' => 'Importar / Exportar',
 		'title' => 'Importar / Exportar',
-
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'bookmark' => 'Sabonar (marcapagina FreshRSS)',
 		'bookmark' => 'Sabonar (marcapagina FreshRSS)',
@@ -97,8 +97,8 @@ return array(
 		'subscription_tools' => 'Aisinas d’abonament',
 		'subscription_tools' => 'Aisinas d’abonament',
 	),
 	),
 	'title' => array(
 	'title' => array(
-		'_' => 'Gestion dels abonaments',
 		'feed_management' => 'Gestion dels fluxes RSS',
 		'feed_management' => 'Gestion dels fluxes RSS',
 		'subscription_tools' => 'Aisinas d’abonament',
 		'subscription_tools' => 'Aisinas d’abonament',
+		'_' => 'Gestion dels abonaments',
 	),
 	),
 );
 );

+ 6 - 6
app/i18n/oc/user.php

@@ -22,16 +22,16 @@ return array(
 			'title' => 'Validacion de l’adreça electronica',
 			'title' => 'Validacion de l’adreça electronica',
 		),
 		),
 	),
 	),
-	'tos' => array(
-		'feedback' => array(
-			'invalid' => 'Vos cal acceptar las condicions d’utilizacion per poder vos inscriure.',
-		),
-	),
 	'mailer' => array(
 	'mailer' => array(
 		'email_need_validation' => array(
 		'email_need_validation' => array(
+			'body' => 'Venètz de vos marcar sus %s mas vos cal encara validar l’adreça electronica. Per aquò far, seguissètz lo ligam :',
 			'title' => 'Vos cal validar vòstra adreça electronica',
 			'title' => 'Vos cal validar vòstra adreça electronica',
 			'welcome' => 'La benvenguda %s,',
 			'welcome' => 'La benvenguda %s,',
-			'body' => 'Venètz de vos marcar sus %s mas vos cal encara validar l’adreça electronica. Per aquò far, seguissètz lo ligam :',
+		),
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'Vos cal acceptar las condicions d’utilizacion per poder vos inscriure.',
 		),
 		),
 	),
 	),
 );
 );

+ 31 - 25
app/i18n/pt-br/admin.php

@@ -67,8 +67,8 @@ return array(
 			'ok' => 'Você tem a extensão JSON.',
 			'ok' => 'Você tem a extensão JSON.',
 		),
 		),
 		'mbstring' => array(
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	//TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	//TODO - Translation
+			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
+			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
 		),
 		),
 		'minz' => array(
 		'minz' => array(
 			'nok' => 'Não foi possível encontrar o framework Minz.',
 			'nok' => 'Não foi possível encontrar o framework Minz.',
@@ -83,9 +83,9 @@ return array(
 			'ok' => 'Você tem o PDO e ao menos 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(
 		'php' => array(
-			'_' => 'Instação do PHP',
 			'nok' => 'Sua versão do PHP é %s mas FreshRSS requer ao menos a versão %s.',
 			'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.',
 			'ok' => 'Sua versão do PHP é %s, que é compatível com o FreshRSS.',
+			'_' => 'Instação do PHP',
 		),
 		),
 		'tables' => array(
 		'tables' => array(
 			'nok' => 'Há uma ou mais tabelas inexistentes no banco de dados.',
 			'nok' => 'Há uma ou mais tabelas inexistentes no banco de dados.',
@@ -106,26 +106,25 @@ return array(
 		),
 		),
 	),
 	),
 	'extensions' => array(
 	'extensions' => array(
-		'author' => 'Author',	//TODO - Translation
-		'community' => 'Available community extensions',	//TODO - Translation
-		'description' => 'Description',	//TODO - Translation
+		'author' => 'Author',	// TODO - Translation
+		'community' => 'Available community extensions',	// TODO - Translation
+		'description' => 'Description',	// TODO - Translation
 		'disabled' => 'Desabilitado',
 		'disabled' => 'Desabilitado',
 		'empty_list' => 'Não há extensões instaladas',
 		'empty_list' => 'Não há extensões instaladas',
 		'enabled' => 'Habilitada',
 		'enabled' => 'Habilitada',
-		'latest' => 'Installed',	//TODO - Translation
-		'name' => 'Name',	//TODO - Translation
+		'latest' => 'Installed',	// TODO - Translation
+		'name' => 'Name',	// TODO - Translation
 		'no_configure_view' => 'Esta extensão não pode ser configurada.',
 		'no_configure_view' => 'Esta extensão não pode ser configurada.',
 		'system' => array(
 		'system' => array(
-			'_' => 'Extensões do sistema',
 			'no_rights' => 'Extensões do sistema (Você não tem direitos para isto)',
 			'no_rights' => 'Extensões do sistema (Você não tem direitos para isto)',
+			'_' => 'Extensões do sistema',
 		),
 		),
 		'title' => 'Extensões',
 		'title' => 'Extensões',
-		'update' => 'Update available',	//TODO - Translation
+		'update' => 'Update available',	// TODO - Translation
 		'user' => 'Extensões do usuário',
 		'user' => 'Extensões do usuário',
-		'version' => 'Version',	//TODO - Translation
+		'version' => 'Version',	// TODO - Translation
 	),
 	),
 	'stats' => array(
 	'stats' => array(
-		'_' => 'Estatísticas',
 		'all_feeds' => 'Todos os feeds',
 		'all_feeds' => 'Todos os feeds',
 		'category' => 'Categoria',
 		'category' => 'Categoria',
 		'entry_count' => 'Contagem de entrada',
 		'entry_count' => 'Contagem de entrada',
@@ -135,7 +134,7 @@ return array(
 		'entry_per_hour' => 'Por hora (média: %.2f mensagens)',
 		'entry_per_hour' => 'Por hora (média: %.2f mensagens)',
 		'entry_per_month' => 'Por mês(média: %.2f mensagens)',
 		'entry_per_month' => 'Por mês(média: %.2f mensagens)',
 		'entry_repartition' => 'Repartição de entradas',
 		'entry_repartition' => 'Repartição de entradas',
-		'feed' => 'Feed',
+		'feed' => 'Feed',	// TODO - Translation
 		'feed_per_category' => 'Feeds por categoria',
 		'feed_per_category' => 'Feeds por categoria',
 		'idle' => 'Feeds inativos',
 		'idle' => 'Feeds inativos',
 		'main' => 'Estatísticas principais',
 		'main' => 'Estatísticas principais',
@@ -151,50 +150,57 @@ return array(
 		'repartition' => 'Repartição de artigos',
 		'repartition' => 'Repartição de artigos',
 		'status_favorites' => 'Favoritos',
 		'status_favorites' => 'Favoritos',
 		'status_read' => 'Lido',
 		'status_read' => 'Lido',
-		'status_total' => 'Total',
+		'status_total' => 'Total',	// TODO - Translation
 		'status_unread' => 'Não lidos',
 		'status_unread' => 'Não lidos',
 		'title' => 'Estatísticas',
 		'title' => 'Estatísticas',
 		'top_feed' => 'Top10 feeds',
 		'top_feed' => 'Top10 feeds',
+		'_' => 'Estatísticas',
 	),
 	),
 	'system' => array(
 	'system' => array(
-		'_' => 'Configuração do sistema',
 		'auto-update-url' => 'URL do servidor para atualização automática',
 		'auto-update-url' => 'URL do servidor para atualização automática',
-		'force_email_validation' => 'Force email addresses validation', //TODO - Translation
+		'cookie-duration' => array(
+			'help' => 'in seconds',	// TODO - Translation
+			'number' => 'Duration to keep logged in',	// TODO - Translation
+		),
+		'force_email_validation' => 'Force email addresses validation',	// TODO - Translation
 		'instance-name' => 'Nome da instância',
 		'instance-name' => 'Nome da instância',
 		'max-categories' => 'Limite de categorias por usuário',
 		'max-categories' => 'Limite de categorias por usuário',
 		'max-feeds' => 'Limite de Feeds por usuário',
 		'max-feeds' => 'Limite de Feeds por usuário',
-		'cookie-duration' => array(
-			'help' => 'in seconds', // @todo translate
-			'number' => 'Duration to keep logged in', // @todo translate
-		),
 		'registration' => array(
 		'registration' => array(
 			'help' => '0 significa que não há limite para a conta',
 			'help' => '0 significa que não há limite para a conta',
 			'number' => 'Máximo número de contas',
 			'number' => 'Máximo número de contas',
 		),
 		),
+		'_' => 'Configuração do sistema',
 	),
 	),
 	'update' => array(
 	'update' => array(
-		'_' => 'Atualização do sistema',
 		'apply' => 'Aplicar',
 		'apply' => 'Aplicar',
 		'check' => 'Buscar por novas atualizações',
 		'check' => 'Buscar por novas atualizações',
 		'current_version' => 'Sua versão do FreshRSS é %s.',
 		'current_version' => 'Sua versão do FreshRSS é %s.',
 		'last' => 'Última verificação: %s',
 		'last' => 'Última verificação: %s',
 		'none' => 'Nenhuma atualização para se aplicar',
 		'none' => 'Nenhuma atualização para se aplicar',
 		'title' => 'Sistema de atualização',
 		'title' => 'Sistema de atualização',
+		'_' => 'Atualização do sistema',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s artigos (%s)',
 		'articles_and_size' => '%s artigos (%s)',
+		'article_count' => 'Articles',	// TODO - Translation
+		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'create' => 'Criar novo usuário',
 		'create' => 'Criar novo usuário',
-		'delete_users' => 'Delete user',	//TODO - Translation
+		'database_size' => 'Database size',	// TODO - Translation
+		'delete_users' => 'Delete user',	// TODO - Translation
+		'email' => 'Email address',	// TODO - Translation
+		'feed_count' => 'Feeds',	// TODO - Translation
 		'language' => 'Idioma',
 		'language' => 'Idioma',
+		'list' => 'User list',	// TODO - Translation
 		'number' => 'Há %d conta criada',
 		'number' => 'Há %d conta criada',
 		'numbers' => 'Há %d contas criadas',
 		'numbers' => 'Há %d contas criadas',
 		'password_form' => 'Senha<br /><small>(para o login pelo método do formulário)</small>',
 		'password_form' => 'Senha<br /><small>(para o login pelo método do formulário)</small>',
 		'password_format' => 'Ao menos 7 caracteres',
 		'password_format' => 'Ao menos 7 caracteres',
-		'selected' => 'Selected user',	//TODO - Translation
+		'selected' => 'Selected user',	// TODO - Translation
 		'title' => 'Gerenciar usuários',
 		'title' => 'Gerenciar usuários',
-		'update_users' => 'Update user',	//TODO - Translation
-		'user_list' => 'Lista de usuários',
+		'update_users' => 'Update user',	// TODO - Translation
 		'username' => 'Usuário',
 		'username' => 'Usuário',
 		'users' => 'Usuários',
 		'users' => 'Usuários',
+		'user_list' => 'Lista de usuários',
 	),
 	),
 );
 );

+ 44 - 43
app/i18n/pt-br/conf.php

@@ -2,34 +2,33 @@
 
 
 return array(
 return array(
 	'archiving' => array(
 	'archiving' => array(
-		'_' => 'Arquivar',
 		'delete_after' => 'Remover artigos depois',
 		'delete_after' => 'Remover artigos depois',
-		'exception' => 'Purge exception',	//TODO - Translation
+		'exception' => 'Purge exception',	// TODO - Translation
 		'help' => 'Mais opções estão disponíveis nas configurações individuais do feed',
 		'help' => 'Mais opções estão disponíveis nas configurações individuais do feed',
-		'keep_favourites' => 'Never delete favourites',	//TODO - Translation
+		'keep_favourites' => 'Never delete favourites',	// TODO - Translation
+		'keep_labels' => 'Never delete labels',	// TODO - Translation
+		'keep_max' => 'Maximum number of articles to keep',	// TODO - Translation
 		'keep_min_by_feed' => 'Número mínimo de artigos para deixar no feed',
 		'keep_min_by_feed' => 'Número mínimo de artigos para deixar no feed',
-		'keep_labels' => 'Never delete labels',	//TODO - Translation
-		'keep_unreads' => 'Never delete unreads',	//TODO - Translation
-		'maintenance' => 'Maintenance',	//TODO - Translation
+		'keep_period' => 'Maximum age of articles to keep',	// TODO - Translation
+		'keep_unreads' => 'Never delete unreads',	// TODO - Translation
+		'maintenance' => 'Maintenance',	// TODO - Translation
 		'optimize' => 'Otimizar banco de dados',
 		'optimize' => 'Otimizar banco de dados',
 		'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho do banco de dados',
 		'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho do banco de dados',
-		'policy' => 'Purge policy',	//TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	//TODO - Translation
+		'policy' => 'Purge policy',	// TODO - Translation
+		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	// TODO - Translation
 		'purge_now' => 'Purge agora',
 		'purge_now' => 'Purge agora',
-		'keep_max' => 'Maximum number of articles to keep',	//TODO - Translation
-		'keep_period' => 'Maximum age of articles to keep',	//TODO - Translation
 		'title' => 'Arquivar',
 		'title' => 'Arquivar',
 		'ttl' => 'Não atualize automaticamente mais frequente que',
 		'ttl' => 'Não atualize automaticamente mais frequente que',
+		'_' => 'Arquivar',
 	),
 	),
 	'display' => array(
 	'display' => array(
-		'_' => 'Exibição',
 		'icon' => array(
 		'icon' => array(
 			'bottom_line' => 'Linha inferior',
 			'bottom_line' => 'Linha inferior',
+			'display_authors' => 'Authors',	// TODO - Translation
 			'entry' => 'Ícones de artigos',
 			'entry' => 'Ícones de artigos',
 			'publication_date' => 'Data da publicação',
 			'publication_date' => 'Data da publicação',
-			'related_tags' => 'Tags relacionadas',	//TODO - Translation
+			'related_tags' => 'Tags relacionadas',
 			'sharing' => 'Compartilhar',
 			'sharing' => 'Compartilhar',
-			'display_authors' => 'Authors',  //TODO - Translation
 			'top_line' => 'Linha superior',
 			'top_line' => 'Linha superior',
 		),
 		),
 		'language' => 'Ídioma',
 		'language' => 'Ídioma',
@@ -37,7 +36,7 @@ return array(
 			'seconds' => 'segundos (0 significa sem timeout)',
 			'seconds' => 'segundos (0 significa sem timeout)',
 			'timeout' => 'Notificação em HTML5 de timeout',
 			'timeout' => 'Notificação em HTML5 de timeout',
 		),
 		),
-		'show_nav_buttons' => 'Show the navigation buttons',	//TODO - Translation
+		'show_nav_buttons' => 'Show the navigation buttons',	// TODO - Translation
 		'theme' => 'Tema',
 		'theme' => 'Tema',
 		'title' => 'Exibição',
 		'title' => 'Exibição',
 		'width' => array(
 		'width' => array(
@@ -47,34 +46,35 @@ return array(
 			'no_limit' => 'Sem lmite',
 			'no_limit' => 'Sem lmite',
 			'thin' => 'Fino',
 			'thin' => 'Fino',
 		),
 		),
+		'_' => 'Exibição',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'_' => 'Gerenciamento de perfil',
+		'api' => 'API management',	// TODO - Translation
 		'delete' => array(
 		'delete' => array(
-			'_' => 'Remover conta',
 			'warn' => 'Sua conta e todos os dados relacionados serão removidos.',
 			'warn' => 'Sua conta e todos os dados relacionados serão removidos.',
+			'_' => 'Remover conta',
 		),
 		),
 		'email' => 'Endereço de e-mail',
 		'email' => 'Endereço de e-mail',
 		'password_api' => 'Senha da API<br /><small>(p.s., para aplicativos móveis)</small>',
 		'password_api' => 'Senha da API<br /><small>(p.s., para aplicativos móveis)</small>',
 		'password_form' => 'Senha<br /><small>(para o método de formulário web)</small>',
 		'password_form' => 'Senha<br /><small>(para o método de formulário web)</small>',
 		'password_format' => 'Ao menos 7 caracteres',
 		'password_format' => 'Ao menos 7 caracteres',
 		'title' => 'Perfil',
 		'title' => 'Perfil',
+		'_' => 'Gerenciamento de perfil',
 	),
 	),
 	'query' => array(
 	'query' => array(
-		'_' => 'Queries do usuário',
 		'deprecated' => 'Esta não é mais válida. A categoria ou feed relacionado foi deletado.',
 		'deprecated' => 'Esta não é mais válida. A categoria ou feed relacionado foi deletado.',
-		'display' => 'Display user query results',	//TODO - Translation
+		'display' => 'Display user query results',	// TODO - Translation
 		'filter' => 'Filtro aplicado:',
 		'filter' => 'Filtro aplicado:',
 		'get_all' => 'Mostrar todos os artigos',
 		'get_all' => 'Mostrar todos os artigos',
 		'get_category' => 'Visualizar "%s" categoria',
 		'get_category' => 'Visualizar "%s" categoria',
 		'get_favorite' => 'Visualizar artigos favoritos',
 		'get_favorite' => 'Visualizar artigos favoritos',
 		'get_feed' => 'Visualizar "%s" feed',
 		'get_feed' => 'Visualizar "%s" feed',
-		'no_filter' => 'Sem filtro',
 		'none' => 'Você não criou nenhuma query de usuário ainda.',
 		'none' => 'Você não criou nenhuma query de usuário ainda.',
-		'number' => 'Query n°%d',
+		'no_filter' => 'Sem filtro',
+		'number' => 'Query n°%d',	// TODO - Translation
 		'order_asc' => 'Exibir artigos mais antigos primeiro',
 		'order_asc' => 'Exibir artigos mais antigos primeiro',
 		'order_desc' => 'Exibir artigos mais novos primeiro',
 		'order_desc' => 'Exibir artigos mais novos primeiro',
-		'remove' => 'Remove user query',	//TODO - Translation
+		'remove' => 'Remove user query',	// TODO - Translation
 		'search' => 'Busca por "%s"',
 		'search' => 'Busca por "%s"',
 		'state_0' => 'Exibir todos os artigos',
 		'state_0' => 'Exibir todos os artigos',
 		'state_1' => 'Exibir artigos lidos',
 		'state_1' => 'Exibir artigos lidos',
@@ -93,9 +93,9 @@ return array(
 		'state_14' => 'Exibir artigos não lidos',
 		'state_14' => 'Exibir artigos não lidos',
 		'state_15' => 'Exibir todos os artigos',
 		'state_15' => 'Exibir todos os artigos',
 		'title' => 'Queries de usuários',
 		'title' => 'Queries de usuários',
+		'_' => 'Queries do usuário',
 	),
 	),
 	'reading' => array(
 	'reading' => array(
-		'_' => 'Leitura',
 		'after_onread' => 'Depois de "marcar todos como lido",',
 		'after_onread' => 'Depois de "marcar todos como lido",',
 		'articles_per_page' => 'Número de artigos por página',
 		'articles_per_page' => 'Número de artigos por página',
 		'auto_load_more' => 'Carregar mais artigos no final da página',
 		'auto_load_more' => 'Carregar mais artigos no final da página',
@@ -116,16 +116,16 @@ return array(
 			'when' => 'Marcar artigo como lido…',
 			'when' => 'Marcar artigo como lido…',
 		),
 		),
 		'show' => array(
 		'show' => array(
-			'_' => 'Artigos para exibir',
 			'adaptive' => 'Ajustar visualização',
 			'adaptive' => 'Ajustar visualização',
 			'all_articles' => 'Exibir todos os artigos',
 			'all_articles' => 'Exibir todos os artigos',
 			'unread' => 'Exibir apenas não lido',
 			'unread' => 'Exibir apenas não lido',
+			'_' => 'Artigos para exibir',
 		),
 		),
 		'sides_close_article' => 'Clicando fora da área do texto do artigo fecha o mesmo',
 		'sides_close_article' => 'Clicando fora da área do texto do artigo fecha o mesmo',
 		'sort' => array(
 		'sort' => array(
-			'_' => 'Ordem de visualização',
 			'newer_first' => 'Novos primeiro',
 			'newer_first' => 'Novos primeiro',
 			'older_first' => 'Antigos primeiro',
 			'older_first' => 'Antigos primeiro',
+			'_' => 'Ordem de visualização',
 		),
 		),
 		'sticky_post' => 'Coloque o artigo no topo quando aberto',
 		'sticky_post' => 'Coloque o artigo no topo quando aberto',
 		'title' => 'Lendo',
 		'title' => 'Lendo',
@@ -135,26 +135,26 @@ return array(
 			'normal' => 'Visualização normal',
 			'normal' => 'Visualização normal',
 			'reader' => 'Visualização de leitura',
 			'reader' => 'Visualização de leitura',
 		),
 		),
+		'_' => 'Leitura',
 	),
 	),
 	'sharing' => array(
 	'sharing' => array(
-		'_' => 'Compartilhando',
-		'add' => 'Add a sharing method',	//TODO - Translation
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
-		'email' => 'Email',
-		'facebook' => 'Facebook',
+		'add' => 'Add a sharing method',	// TODO - Translation
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
+		'email' => 'Email',	// TODO - Translation
+		'facebook' => 'Facebook',	// TODO - Translation
 		'more_information' => 'Mais informação',
 		'more_information' => 'Mais informação',
 		'print' => 'Imprimir',
 		'print' => 'Imprimir',
-		'remove' => 'Remove sharing method',	//TODO - Translation
-		'shaarli' => 'Shaarli',
+		'remove' => 'Remove sharing method',	// TODO - Translation
+		'shaarli' => 'Shaarli',	// TODO - Translation
 		'share_name' => 'Nome de visualização para compartilhar',
 		'share_name' => 'Nome de visualização para compartilhar',
 		'share_url' => 'URL utilizada para compartilhar',
 		'share_url' => 'URL utilizada para compartilhar',
 		'title' => 'Compartilhando',
 		'title' => 'Compartilhando',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag',
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag',	// TODO - Translation
+		'_' => 'Compartilhando',
 	),
 	),
 	'shortcut' => array(
 	'shortcut' => array(
-		'_' => 'Atalhos',
 		'article_action' => 'Ações no artigo',
 		'article_action' => 'Ações no artigo',
 		'auto_share' => 'Compartilhar',
 		'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.',
 		'auto_share_help' => 'Se há apenas um modo de compartilhamento, ele é usado. Caso contrário, serão acessíveis pelo seu número.',
@@ -162,7 +162,7 @@ return array(
 		'collapse_article' => 'Fechar',
 		'collapse_article' => 'Fechar',
 		'first_article' => 'Ir para o primeiro artigo',
 		'first_article' => 'Ir para o primeiro artigo',
 		'focus_search' => 'Acessar a caixa de busca',
 		'focus_search' => 'Acessar a caixa de busca',
-		'global_view' => 'Switch to global view',	//TODO - Translation
+		'global_view' => 'Switch to global view',	// TODO - Translation
 		'help' => 'Mostrar documentação',
 		'help' => 'Mostrar documentação',
 		'javascript' => 'JavaScript deve ser habilitado para utilizar atalhos',
 		'javascript' => 'JavaScript deve ser habilitado para utilizar atalhos',
 		'last_article' => 'Ir para o último artigo',
 		'last_article' => 'Ir para o último artigo',
@@ -171,21 +171,22 @@ return array(
 		'mark_read' => 'Marcar como lido',
 		'mark_read' => 'Marcar como lido',
 		'navigation' => 'Navegação',
 		'navigation' => 'Navegação',
 		'navigation_help' => 'Com o modificador "Shift", atalhos de navegação aplicam aos feeds.<br/>Com o "Alt" modificador, atalhos de navegação aplicam as categorias.',
 		'navigation_help' => 'Com o modificador "Shift", atalhos de navegação aplicam aos feeds.<br/>Com o "Alt" modificador, atalhos de navegação aplicam as categorias.',
-		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	//TODO - Translation
+		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Pule para o próximo artigo',
 		'next_article' => 'Pule para o próximo artigo',
-		'normal_view' => 'Switch to normal view',	//TODO - Translation
+		'normal_view' => 'Switch to normal view',	// TODO - Translation
 		'other_action' => 'Outras ações',
 		'other_action' => 'Outras ações',
 		'previous_article' => 'Pule para o artigo anterior',
 		'previous_article' => 'Pule para o artigo anterior',
-		'reading_view' => 'Switch to reading view',	//TODO - Translation
-		'rss_view' => 'Open RSS view in a new tab',	//TODO - Translation
+		'reading_view' => 'Switch to reading view',	// TODO - Translation
+		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'Visualize o site original',
 		'see_on_website' => 'Visualize o site original',
 		'shift_for_all_read' => '+ <code>shift</code> para marcar todos os artigos como lido',
 		'shift_for_all_read' => '+ <code>shift</code> para marcar todos os artigos como lido',
-		'skip_next_article' => 'Focus next without opening',	//TODO - Translation
-		'skip_previous_article' => 'Focus previous without opening',	//TODO - Translation
+		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
+		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Atalhos',
 		'title' => 'Atalhos',
 		'user_filter' => 'Acesse filtros de usuário',
 		'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.',
 		'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.',
-		'views' => 'Views',	//TODO - Translation
+		'views' => 'Views',	// TODO - Translation
+		'_' => 'Atalhos',
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'articles_and_size' => '%s artigos (%s)',
 		'articles_and_size' => '%s artigos (%s)',

+ 23 - 17
app/i18n/pt-br/feedback.php

@@ -1,13 +1,19 @@
 <?php
 <?php
 
 
 return array(
 return array(
-	'admin' => array(
-		'optimization_complete' => 'Otimização Completa',
-	),
 	'access' => array(
 	'access' => array(
 		'denied' => 'Você não tem permissão para acessar esta página',
 		'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',
 		'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' => 'Your password cannot be modified',	// TODO - Translation
+			'updated' => 'Your password has been modified',	// TODO - Translation
+		),
+	),
 	'auth' => array(
 	'auth' => array(
 		'form' => array(
 		'form' => array(
 			'not_set' => 'Um problema ocorreu durante o sistema de configuração para autenticação. Por favor tente mais tarde.',
 			'not_set' => 'Um problema ocorreu durante o sistema de configuração para autenticação. Por favor tente mais tarde.',
@@ -38,9 +44,9 @@ return array(
 			'ko' => '%s não pode ser habilitado. <a href="%s">verifique os logs do FreshRSS</a> para detalhes.',
 			'ko' => '%s não pode ser habilitado. <a href="%s">verifique os logs do FreshRSS</a> para detalhes.',
 			'ok' => '%s agora está habilitado',
 			'ok' => '%s agora está habilitado',
 		),
 		),
-		'no_access' => 'Você não tem acesso ao %s',
 		'not_enabled' => '%s não está habilitado',
 		'not_enabled' => '%s não está habilitado',
 		'not_found' => '%s não existe',
 		'not_found' => '%s não existe',
+		'no_access' => 'Você não tem acesso ao %s',
 	),
 	),
 	'import_export' => array(
 	'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.',
 		'export_no_zip_extension' => 'extensão ZIP não está presente em seu servidor. Por favor tente exportar os arquivos um por vez.',
@@ -51,14 +57,14 @@ return array(
 		'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.',
 		'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.',
 	),
 	),
 	'profile' => array(
 	'profile' => array(
-		'error' => 'Your profile cannot be modified',
-		'updated' => 'Your profile has been modified',
+		'error' => 'Your profile cannot be modified',	// TODO - Translation
+		'updated' => 'Your profile has been modified',	// TODO - Translation
 	),
 	),
 	'sub' => array(
 	'sub' => array(
 		'actualize' => 'Atualizando',
 		'actualize' => 'Atualizando',
 		'articles' => array(
 		'articles' => array(
-			'marked_read' => 'The selected articles have been marked as read.',	//TODO - Translation
-			'marked_unread' => 'The articles have been marked as unread.',	//TODO - Translation
+			'marked_read' => 'The selected articles have been marked as read.',	// TODO - Translation
+			'marked_unread' => 'The articles have been marked as unread.',	// TODO - Translation
 		),
 		),
 		'category' => array(
 		'category' => array(
 			'created' => 'Categoria %s foi criada.',
 			'created' => 'Categoria %s foi criada.',
@@ -66,10 +72,10 @@ return array(
 			'emptied' => 'Categoria foi esvaziada',
 			'emptied' => 'Categoria foi esvaziada',
 			'error' => 'Categoria não pode ser atualizada',
 			'error' => 'Categoria não pode ser atualizada',
 			'name_exists' => 'Este nome de categoria já existe.',
 			'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_delete_default' => 'Você não pode deletar uma categoria vazia!',
 			'not_exist' => 'A categoria não existe!',
 			'not_exist' => 'A categoria não existe!',
+			'no_id' => 'Você precisa especificar um id para a categoria.',
+			'no_name' => 'Nome da categoria não pode ser vazio.',
 			'over_max' => 'Você atingiu seu limite de categorias (%d)',
 			'over_max' => 'Você atingiu seu limite de categorias (%d)',
 			'updated' => 'Categoria foi atualizada.',
 			'updated' => 'Categoria foi atualizada.',
 		),
 		),
@@ -80,12 +86,12 @@ return array(
 			'already_subscribed' => 'Você já está inscrito no <em>%s</em>',
 			'already_subscribed' => 'Você já está inscrito no <em>%s</em>',
 			'deleted' => 'o Feed foi deletado',
 			'deleted' => 'o Feed foi deletado',
 			'error' => 'O feed não pode ser atualizado',
 			'error' => 'O feed não pode ser atualizado',
-			'internal_problem' => 'O RSS feed não pôde ser adicionado. <a href="%s">Verifique os FreshRSS logs</a> para detalhes.',	//TODO - Translation
+			'internal_problem' => 'O RSS feed não pôde ser adicionado. <a href="%s">Verifique os FreshRSS logs</a> para detalhes.',
 			'invalid_url' => 'URL <em>%s</em> é inválida',
 			'invalid_url' => 'URL <em>%s</em> é inválida',
+			'not_added' => '<em>%s</em> não pode ser atualizado',
+			'no_refresh' => 'Não há feed para atualizar…',
 			'n_actualized' => '%d feeds foram atualizados',
 			'n_actualized' => '%d feeds foram atualizados',
 			'n_entries_deleted' => '%d artigos foram deletados',
 			'n_entries_deleted' => '%d artigos foram deletados',
-			'no_refresh' => 'Não há feed para atualizar…',
-			'not_added' => '<em>%s</em> não pode ser atualizado',
 			'over_max' => 'Você atingiu seu limite de feeds (%d)',
 			'over_max' => 'Você atingiu seu limite de feeds (%d)',
 			'updated' => 'Feed foram atualizados',
 			'updated' => 'Feed foram atualizados',
 		),
 		),
@@ -101,16 +107,16 @@ return array(
 	),
 	),
 	'user' => array(
 	'user' => array(
 		'created' => array(
 		'created' => array(
-			'_' => 'Usuário %s foi criado',
 			'error' => 'Usuário %s não pode ser criado',
 			'error' => 'Usuário %s não pode ser criado',
+			'_' => 'Usuário %s foi criado',
 		),
 		),
 		'deleted' => array(
 		'deleted' => array(
-			'_' => 'Usuário %s foi deletado',
 			'error' => 'Usuário %s não pode ser deletado',
 			'error' => 'Usuário %s não pode ser deletado',
+			'_' => 'Usuário %s foi deletado',
 		),
 		),
 		'updated' => array(
 		'updated' => array(
-			'_' => 'User %s has been updated',	//TODO - Translation
-			'error' => 'User %s has not been updated',	//TODO - Translation
+			'error' => 'User %s has not been updated',	// TODO - Translation
+			'_' => 'User %s has been updated',	// TODO - Translation
 		),
 		),
 	),
 	),
 );
 );

+ 51 - 49
app/i18n/pt-br/gen.php

@@ -3,7 +3,7 @@
 return array(
 return array(
 	'action' => array(
 	'action' => array(
 		'actualize' => 'Atualizar',
 		'actualize' => 'Atualizar',
-		'back' => '← Go back', //TODO - Translation
+		'back' => '← Go back',	// TODO - Translation
 		'back_to_rss_feeds' => '← Volte para o seu feeds RSS',
 		'back_to_rss_feeds' => '← Volte para o seu feeds RSS',
 		'cancel' => 'Cancelar',
 		'cancel' => 'Cancelar',
 		'create' => 'Criar',
 		'create' => 'Criar',
@@ -16,32 +16,33 @@ return array(
 		'manage' => 'Gerenciar',
 		'manage' => 'Gerenciar',
 		'mark_favorite' => 'Marcar como favorito',
 		'mark_favorite' => 'Marcar como favorito',
 		'mark_read' => 'Marcar como lido',
 		'mark_read' => 'Marcar como lido',
+		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Remover',
 		'remove' => 'Remover',
 		'see_website' => 'Ver o site',
 		'see_website' => 'Ver o site',
 		'submit' => 'Enviar',
 		'submit' => 'Enviar',
 		'truncate' => 'Deletar todos os artigos',
 		'truncate' => 'Deletar todos os artigos',
-		'update' => 'Update',	//TODO - Translation
+		'update' => 'Update',	// TODO - Translation
 	),
 	),
 	'auth' => array(
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.', // TODO - Translation
+		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.',	// TODO - Translation
 		'email' => 'Endereço de e-mail',
 		'email' => 'Endereço de e-mail',
 		'keep_logged_in' => 'Mantenha logado por <small>(%s days)</small>',
 		'keep_logged_in' => 'Mantenha logado por <small>(%s days)</small>',
-		'login' => 'Login',
-		'logout' => 'Logout',
+		'login' => 'Login',	// TODO - Translation
+		'logout' => 'Logout',	// TODO - Translation
 		'password' => array(
 		'password' => array(
-			'_' => 'Senha',
 			'format' => '<small>Ao menos 7 caracteres</small>',
 			'format' => '<small>Ao menos 7 caracteres</small>',
+			'_' => 'Senha',
 		),
 		),
 		'registration' => array(
 		'registration' => array(
-			'_' => 'Nova conta',
 			'ask' => 'Criar novoa conta?',
 			'ask' => 'Criar novoa conta?',
 			'title' => 'Criação de conta',
 			'title' => 'Criação de conta',
+			'_' => 'Nova conta',
 		),
 		),
 		'reset' => 'Reset autenticação',
 		'reset' => 'Reset autenticação',
 		'username' => array(
 		'username' => array(
-			'_' => 'Usuário',
 			'admin' => 'Usuário administrador',
 			'admin' => 'Usuário administrador',
 			'format' => '<small>máximo 16 caracteres alphanumericos</small>',
 			'format' => '<small>máximo 16 caracteres alphanumericos</small>',
+			'_' => 'Usuário',
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
@@ -64,8 +65,8 @@ return array(
 		'Jan' => '\\J\\a\\n\\e\\i\\r\\o',
 		'Jan' => '\\J\\a\\n\\e\\i\\r\\o',
 		'jan' => 'jan',
 		'jan' => 'jan',
 		'january' => 'Jan',
 		'january' => 'Jan',
-		'Jul' => '\\J\\u\\l\\h\\o',
 		'jul' => 'jul',
 		'jul' => 'jul',
+		'Jul' => '\\J\\u\\l\\h\\o',
 		'july' => 'Jul',
 		'july' => 'Jul',
 		'Jun' => '\\J\\u\\n\\h\\o',
 		'Jun' => '\\J\\u\\n\\h\\o',
 		'jun' => 'jun',
 		'jun' => 'jun',
@@ -75,8 +76,8 @@ return array(
 		'last_month' => 'Últimos mês',
 		'last_month' => 'Últimos mês',
 		'last_week' => 'Última semana',
 		'last_week' => 'Última semana',
 		'last_year' => 'Último ano',
 		'last_year' => 'Último ano',
-		'Mar' => '\\M\\a\\r\\ç\\o',
 		'mar' => 'mar',
 		'mar' => 'mar',
+		'Mar' => '\\M\\a\\r\\ç\\o',
 		'march' => 'Mar',
 		'march' => 'Mar',
 		'May' => '\\M\\a\\i\\o',
 		'May' => '\\M\\a\\i\\o',
 		'may' => 'Mai',
 		'may' => 'Mai',
@@ -101,8 +102,8 @@ return array(
 		'yesterday' => 'Ontem',
 		'yesterday' => 'Ontem',
 	),
 	),
 	'freshrss' => array(
 	'freshrss' => array(
-		'_' => 'FreshRSS',
 		'about' => 'Sobre FreshRSS',
 		'about' => 'Sobre FreshRSS',
+		'_' => 'FreshRSS',	// TODO - Translation
 	),
 	),
 	'js' => array(
 	'js' => array(
 		'category_empty' => 'Categoria vazia',
 		'category_empty' => 'Categoria vazia',
@@ -117,20 +118,21 @@ return array(
 		'should_be_activated' => 'JavaScript precisa estar ativo',
 		'should_be_activated' => 'JavaScript precisa estar ativo',
 	),
 	),
 	'lang' => array(
 	'lang' => array(
-		'cz' => 'Čeština',
-		'de' => 'Deutsch',
-		'en' => 'English',
-		'es' => 'Español',
-		'fr' => 'Français',
-		'he' => 'עברית',
-		'it' => 'Italiano',
-		'kr' => '한국어',
-		'nl' => 'Nederlands',
-		'oc' => 'Occitan',
-		'pt-br' => 'Português (Brasil)',
-		'ru' => 'Русский',
-		'tr' => 'Türkçe',
-		'zh-cn' => '简体中文',
+		'cz' => 'Čeština',	// TODO - Translation
+		'de' => 'Deutsch',	// TODO - Translation
+		'en' => 'English',	// TODO - Translation
+		'es' => 'Español',	// TODO - Translation
+		'fr' => 'Français',	// TODO - Translation
+		'he' => 'עברית',	// TODO - Translation
+		'it' => 'Italiano',	// TODO - Translation
+		'kr' => '한국어',	// TODO - Translation
+		'nl' => 'Nederlands',	// TODO - Translation
+		'oc' => 'Occitan',	// TODO - Translation
+		'pt-br' => 'Português (Brasil)',	// TODO - Translation
+		'ru' => 'Русский',	// TODO - Translation
+		'sk' => 'Slovenčina',	// TODO - Translation
+		'tr' => 'Türkçe',	// TODO - Translation
+		'zh-cn' => '简体中文',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Sobre',
 		'about' => 'Sobre',
@@ -141,7 +143,7 @@ return array(
 		'configuration' => 'Configuração',
 		'configuration' => 'Configuração',
 		'display' => 'Visualização',
 		'display' => 'Visualização',
 		'extensions' => 'Extensões',
 		'extensions' => 'Extensões',
-		'logs' => 'Logs',
+		'logs' => 'Logs',	// TODO - Translation
 		'queries' => 'Queries de usuário',
 		'queries' => 'Queries de usuário',
 		'reading' => 'Leitura',
 		'reading' => 'Leitura',
 		'search' => 'Procurar por palavras ou #tags',
 		'search' => 'Procurar por palavras ou #tags',
@@ -163,31 +165,31 @@ return array(
 		'previous' => 'Anterior',
 		'previous' => 'Anterior',
 	),
 	),
 	'period' => array(
 	'period' => array(
-		'days' => 'days',	//TODO - Translation
-		'hours' => 'hours',	//TODO - Translation
-		'months' => 'months',	//TODO - Translation
-		'weeks' => 'weeks',	//TODO - Translation
-		'years' => 'years',	//TODO - Translation
+		'days' => 'days',	// TODO - Translation
+		'hours' => 'hours',	// TODO - Translation
+		'months' => 'months',	// TODO - Translation
+		'weeks' => 'weeks',	// TODO - Translation
+		'years' => 'years',	// TODO - Translation
 	),
 	),
 	'share' => array(
 	'share' => array(
-		'blogotext' => 'Blogotext',
-		'diaspora' => 'Diaspora*',
-		'email' => 'Email',
-		'facebook' => 'Facebook',
-		'gnusocial' => 'GNU social',
-		'jdh' => 'Journal du hacker',
-		'Known' => 'Known based sites',
-		'lemmy' => 'Lemmy',
-		'linkedin' => 'LinkedIn',
-		'mastodon' => 'Mastodon',
-		'movim' => 'Movim',
-		'pinboard' => 'Pinboard',
-		'pocket' => 'Pocket',
+		'blogotext' => 'Blogotext',	// TODO - Translation
+		'diaspora' => 'Diaspora*',	// TODO - Translation
+		'email' => 'Email',	// TODO - Translation
+		'facebook' => 'Facebook',	// TODO - Translation
+		'gnusocial' => 'GNU social',	// TODO - Translation
+		'jdh' => 'Journal du hacker',	// TODO - Translation
+		'Known' => 'Known based sites',	// TODO - Translation
+		'lemmy' => 'Lemmy',	// TODO - Translation
+		'linkedin' => 'LinkedIn',	// TODO - Translation
+		'mastodon' => 'Mastodon',	// TODO - Translation
+		'movim' => 'Movim',	// TODO - Translation
+		'pinboard' => 'Pinboard',	// TODO - Translation
+		'pocket' => 'Pocket',	// TODO - Translation
 		'print' => 'Imprimir',
 		'print' => 'Imprimir',
-		'shaarli' => 'Shaarli',
-		'twitter' => 'Twitter',
-		'wallabag' => 'wallabag v1',
-		'wallabagv2' => 'wallabag v2',
+		'shaarli' => 'Shaarli',	// TODO - Translation
+		'twitter' => 'Twitter',	// TODO - Translation
+		'wallabag' => 'wallabag v1',	// TODO - Translation
+		'wallabagv2' => 'wallabag v2',	// TODO - Translation
 	),
 	),
 	'short' => array(
 	'short' => array(
 		'attention' => 'Atencão!',
 		'attention' => 'Atencão!',
@@ -198,7 +200,7 @@ return array(
 		'default_category' => 'Sem categoria',
 		'default_category' => 'Sem categoria',
 		'no' => 'Não',
 		'no' => 'Não',
 		'not_applicable' => 'Não disponível',
 		'not_applicable' => 'Não disponível',
-		'ok' => 'Ok!',
+		'ok' => 'Ok!',	// TODO - Translation
 		'or' => 'ou',
 		'or' => 'ou',
 		'yes' => 'Sim',
 		'yes' => 'Sim',
 	),
 	),

+ 12 - 12
app/i18n/pt-br/index.php

@@ -2,8 +2,7 @@
 
 
 return array(
 return array(
 	'about' => array(
 	'about' => array(
-		'_' => 'Sobre',
-		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// TODO - Translation
 		'bugs_reports' => 'Reportar Bugs',
 		'bugs_reports' => 'Reportar Bugs',
 		'credits' => 'Créditos',
 		'credits' => 'Créditos',
 		'credits_content' => 'Alguns elementos de design vieram do <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> Embora FreshRRS não utiliza este framework. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ícones</a> vieram do <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> font police foi criada por <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS é baseado no <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, um framework PHP.',
 		'credits_content' => 'Alguns elementos de design vieram do <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> Embora FreshRRS não utiliza este framework. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ícones</a> vieram do <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> font police foi criada por <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS é baseado no <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, um framework PHP.',
@@ -14,23 +13,21 @@ return array(
 		'title' => 'Sobre',
 		'title' => 'Sobre',
 		'version' => 'Versão',
 		'version' => 'Versão',
 		'website' => 'Site',
 		'website' => 'Site',
-	),
-	'tos' => array(
-		'title' => 'Terms of Service', // TODO - Translation
+		'_' => 'Sobre',
 	),
 	),
 	'feed' => array(
 	'feed' => array(
 		'add' => 'Você pode adicionar alguns feeds.',
 		'add' => 'Você pode adicionar alguns feeds.',
 		'empty' => 'Não há nenhum artigo para mostrar.',
 		'empty' => 'Não há nenhum artigo para mostrar.',
 		'rss_of' => 'RSS feed do %s',
 		'rss_of' => 'RSS feed do %s',
 		'title' => 'Seus RSS feeds',
 		'title' => 'Seus RSS feeds',
-		'title_global' => 'Visualização Global',
 		'title_fav' => 'Seus favoritos',
 		'title_fav' => 'Seus favoritos',
+		'title_global' => 'Visualização Global',
 	),
 	),
 	'log' => array(
 	'log' => array(
-		'_' => 'Logs',
 		'clear' => 'Limpar logs',
 		'clear' => 'Limpar logs',
 		'empty' => 'Arquivo de log está vazio',
 		'empty' => 'Arquivo de log está vazio',
-		'title' => 'Logs',
+		'title' => 'Logs',	// TODO - Translation
+		'_' => 'Logs',	// TODO - Translation
 	),
 	),
 	'menu' => array(
 	'menu' => array(
 		'about' => 'Sobre o FreshRSS',
 		'about' => 'Sobre o FreshRSS',
@@ -43,7 +40,7 @@ return array(
 		'mark_all_read' => 'Marcar todos como lidos',
 		'mark_all_read' => 'Marcar todos como lidos',
 		'mark_cat_read' => 'Marcar categoria como lida',
 		'mark_cat_read' => 'Marcar categoria como lida',
 		'mark_feed_read' => 'Marcar feed com lido',
 		'mark_feed_read' => 'Marcar feed com lido',
-		'mark_selection_unread' => 'Mark selection as unread',	//TODO - Translation
+		'mark_selection_unread' => 'Mark selection as unread',	// TODO - Translation
 		'newer_first' => 'Novos primeiro',
 		'newer_first' => 'Novos primeiro',
 		'non-starred' => 'Mostrar todos, exceto favoritos',
 		'non-starred' => 'Mostrar todos, exceto favoritos',
 		'normal_view' => 'visualização normal',
 		'normal_view' => 'visualização normal',
@@ -51,16 +48,19 @@ return array(
 		'queries' => 'Queries do usuário',
 		'queries' => 'Queries do usuário',
 		'read' => 'Mostrar apenas lidos',
 		'read' => 'Mostrar apenas lidos',
 		'reader_view' => 'Visualização de leitura',
 		'reader_view' => 'Visualização de leitura',
-		'rss_view' => 'RSS feed',
+		'rss_view' => 'RSS feed',	// TODO - Translation
 		'search_short' => 'Buscar',
 		'search_short' => 'Buscar',
 		'starred' => 'Mostrar apenas os favoritos',
 		'starred' => 'Mostrar apenas os favoritos',
 		'stats' => 'Estatísticas',
 		'stats' => 'Estatísticas',
 		'subscription' => 'Gerenciamento de inscrições',
 		'subscription' => 'Gerenciamento de inscrições',
-		'tags' => 'My labels',	//TODO - Translation
+		'tags' => 'My labels',	// TODO - Translation
 		'unread' => 'Mostrar apenas os não lidos',
 		'unread' => 'Mostrar apenas os não lidos',
 	),
 	),
 	'share' => 'Compartilhar',
 	'share' => 'Compartilhar',
 	'tag' => array(
 	'tag' => array(
-		'related' => 'Tags relacionadas',	//TODO - Translation
+		'related' => 'Tags relacionadas',
+	),
+	'tos' => array(
+		'title' => 'Terms of Service',	// TODO - Translation
 	),
 	),
 );
 );

Some files were not shown because too many files changed in this diff