Parcourir la source

Fix i18n loading and availableLanguages calls

- Change the way to init i18n
- Add a availableLanguages() method to Minz_Translate

See https://github.com/FreshRSS/FreshRSS/issues/730
Marien Fressinaud il y a 11 ans
Parent
commit
addcea9cd4

+ 14 - 4
app/FreshRSS.php

@@ -31,15 +31,25 @@ class FreshRSS extends Minz_FrontController {
 		// Load context and configuration.
 		FreshRSS_Context::init();
 
-		// Init i18n.
-		Minz_Session::_param('language', FreshRSS_Context::$user_conf->language);
-		Minz_Translate::init();
-
+		$this->initI18n();
 		$this->loadStylesAndScripts();
 		$this->loadNotifications();
 		$this->loadExtensions();
 	}
 
+	private function initI18n() {
+		$lang = Minz_Session::param('language');
+		if ($lang === false) {
+			Minz_Session::_param('language', FreshRSS_Context::$user_conf->language);
+			$lang = FreshRSS_Context::$user_conf->language;
+		}
+
+		Minz_Translate::init(array(
+			'en' => 'English',
+			'fr' => 'Français',
+		), $lang);
+	}
+
 	private function loadStylesAndScripts() {
 		$theme = FreshRSS_Themes::load(FreshRSS_Context::$user_conf->theme);
 		if ($theme) {

+ 1 - 1
app/views/configure/display.phtml

@@ -10,7 +10,7 @@
 			<label class="group-name" for="language"><?php echo _t('conf.display.language'); ?></label>
 			<div class="group-controls">
 				<select name="language" id="language">
-				<?php $languages = FreshRSS_Context::$user_conf->availableLanguages(); ?>
+				<?php $languages = Minz_Translate::availableLanguages(); ?>
 				<?php foreach ($languages as $short => $lib) { ?>
 				<option value="<?php echo $short; ?>"<?php echo FreshRSS_Context::$user_conf->language === $short ? ' selected="selected"' : ''; ?>><?php echo $lib; ?></option>
 				<?php } ?>

+ 1 - 1
app/views/user/manage.phtml

@@ -10,7 +10,7 @@
 			<label class="group-name" for="new_user_language"><?php echo _t('admin.user.language'); ?></label>
 			<div class="group-controls">
 				<select name="new_user_language" id="new_user_language">
-				<?php $languages = FreshRSS_Context::$user_conf->availableLanguages(); ?>
+				<?php $languages = Minz_Translate::availableLanguages(); ?>
 				<?php foreach ($languages as $short => $lib) { ?>
 				<option value="<?php echo $short; ?>"<?php echo FreshRSS_Context::$user_conf->language === $short ? ' selected="selected"' : ''; ?>><?php echo $lib; ?></option>
 				<?php } ?>

+ 1 - 1
lib/Minz/Session.php

@@ -55,7 +55,7 @@ class Minz_Session {
 
 		if (!$force) {
 			self::_param('language', $language);
-			Minz_Translate::reset();
+			Minz_Translate::reset($language);
 		}
 	}
 

+ 23 - 8
lib/Minz/Translate.php

@@ -9,6 +9,11 @@
  * It uses files in `./app/i18n/`
  */
 class Minz_Translate {
+	/**
+	 * $lang_list is the list of available languages.
+	 */
+	private static $lang_list = array();
+
 	/**
 	 * $lang_name is the name of the current language to use.
 	 */
@@ -25,20 +30,30 @@ class Minz_Translate {
 	private static $translates = array();
 
 	/**
-	 * Load $lang_name and $lang_path based on configuration and selected language.
+	 * Init the translation object.
+	 * @param $lang_list the list of available languages.
+	 * @param $lang_name the lang to show.
 	 */
-	public static function init() {
-		$conf = Minz_Configuration::get('system');
-		$l = $conf->language;
-		self::$lang_name = Minz_Session::param('language', $l);
+	public static function init($lang_list, $lang_name) {
+		self::$lang_list = $lang_list;
+		self::$lang_name = $lang_name;
 		self::$lang_path = APP_PATH . '/i18n/' . self::$lang_name . '/';
 	}
 
 	/**
-	 * Alias for init().
+	 * Reset the translation object with a new language.
+	 * @param $lang_name the new language to use
+	 */
+	public static function reset($lang_name) {
+		self::init(self::$lang_list, $lang_name);
+	}
+
+	/**
+	 * Return the list of available languages.
+	 * @return an array.
 	 */
-	public static function reset() {
-		self::init();
+	public static function availableLanguages() {
+		return self::$lang_list;
 	}
 
 	/**