Add menu for users to switch their language
[gitphp.git] / include / Resource.class.php
blob:a/include/Resource.class.php -> blob:b/include/Resource.class.php
--- a/include/Resource.class.php
+++ b/include/Resource.class.php
@@ -141,12 +141,58 @@
 			while (($file = readdir($dh)) !== false) {
 				$fullPath = GITPHP_LOCALEDIR . '/' . $file;
 				if ((strpos($file, '.') !== 0) && is_dir($fullPath) && is_file($fullPath . '/gitphp.mo')) {
+					if ($file == 'zz_Debug') {
+						$conf = GitPHP_Config::GetInstance();
+						if ($conf) {
+							if (!$conf->GetValue('debug', false)) {
+								continue;
+							}
+						}
+					}
 					$locales[$file] = GitPHP_Resource::LocaleToName($file);
 				}
 			}
 		}
 		
 		return $locales;
+	}
+
+	/**
+	 * FindPreferredLocale
+	 *
+	 * Given a list of preferred locales, try to find a matching supported locale
+	 *
+	 * @access public
+	 * @static
+	 * @param array locales array of locale preferences
+	 * @return string matching locale if found
+	 */
+	public static function FindPreferredLocale($locales)
+	{
+		if (count($locales) < 1) {
+			return '';
+		}
+
+		$supportedLocales = GitPHP_Resource::SupportedLocales();
+
+		for ($i = 0; $i < count($locales); ++$i) {
+			$locale = str_replace('-', '_', $locales[$i]);
+			$loclen = strlen($locale);
+
+			foreach ($supportedLocales as $l => $lang) {
+				/* 
+				 * using strncasecmp with length of the preferred
+				 * locale means we can match both full
+				 * language + country preference specifications
+				 * (en_US) as well as just language specifications
+				 * (en)
+				 */
+				if (strncasecmp($locale, $l, $loclen) === 0) {
+					return $l;
+				}
+			}
+		}
+		return '';
 	}
 
 	/**

comments