ソースを参照

Simplify code.

dereuromark 8 年 前
コミット
636cda7de5
2 ファイル変更21 行追加49 行削除
  1. 20 17
      src/Utility/Language.php
  2. 1 32
      tests/TestCase/Utility/LanguageTest.php

+ 20 - 17
src/Utility/Language.php

@@ -8,6 +8,11 @@ namespace Tools\Utility;
 class Language {
 
 	/**
+	 * Parse languages from a browser language list.
+	 *
+	 * Options
+	 * - forceLowerCase: defaults to true
+	 *
 	 * @param string|null $languageList List of locales/language codes.
 	 * @param array|bool|null $options Flags to forceLowerCase or removeDuplicates locales/language codes
 	 *        deprecated: Set to true/false to toggle lowercase
@@ -17,7 +22,6 @@ class Language {
 	public static function parseLanguageList($languageList = null, $options = []) {
 		$defaultOptions = [
 			'forceLowerCase' => true,
-			'removeDuplicates' => false,
 		];
 		if (!is_array($options)) {
 			$options = ['forceLowerCase' => $options];
@@ -25,14 +29,16 @@ class Language {
 		$options += $defaultOptions;
 
 		if ($languageList === null) {
-			if (empty(env('HTTP_ACCEPT_LANGUAGE'))) {
+			if (!env('HTTP_ACCEPT_LANGUAGE')) {
 				return [];
 			}
 			$languageList = env('HTTP_ACCEPT_LANGUAGE');
 		}
+
 		$languages = [];
 		$languagesRanks = [];
 		$languageRanges = explode(',', trim($languageList));
+
 		foreach ($languageRanges as $languageRange) {
 			$pattern = '/(\*|[a-zA-Z0-9]{1,8}(?:-[a-zA-Z0-9]{1,8})*)(?:\s*;\s*q\s*=\s*(0(?:\.\d{0,3})|1(?:\.0{0,3})))?/';
 			if (preg_match($pattern, trim($languageRange), $match)) {
@@ -58,25 +64,22 @@ class Language {
 					}
 				}
 
-				if ($options['removeDuplicates']) {
-					if (array_key_exists($language, $languagesRanks) === false) {
-						$languages[$rank][] = $language;
-						$languagesRanks[$language] = $rank;
-					} elseif ($rank > $languagesRanks[$language]) {
-						foreach ($languages as $existRank => $existLangs) {
-							$key = array_search($existLangs, $languages);
-							if ($key !== false) {
-								unset($languages[$existRank][$key]);
-								if (empty($languages[$existRank])) {
-									unset($languages[$existRank]);
-								}
+
+				if (array_key_exists($language, $languagesRanks) === false) {
+					$languages[$rank][] = $language;
+					$languagesRanks[$language] = $rank;
+				} elseif ($rank > $languagesRanks[$language]) {
+					foreach ($languages as $existRank => $existLangs) {
+						$key = array_search($existLangs, $languages);
+						if ($key !== false) {
+							unset($languages[$existRank][$key]);
+							if (empty($languages[$existRank])) {
+								unset($languages[$existRank]);
 							}
 						}
-						$languages[$rank][] = $language;
-						$languagesRanks[$language] = $rank;
 					}
-				} else {
 					$languages[$rank][] = $language;
+					$languagesRanks[$language] = $rank;
 				}
 			}
 		}

+ 1 - 32
tests/TestCase/Utility/LanguageTest.php

@@ -79,41 +79,12 @@ class LanguageTest extends TestCase {
 	}
 
 	/**
-	 * LanguageTest::testParseLanguageListWithDupes()
-	 *
 	 * @return void
 	 */
 	public function testParseLanguageListWithDupes() {
 		$httpAcceptLanguages = 'en-US,en;q=0.1,de-AT;q=0.7,fr;q=0.5,de;q=0.3,DE-DE;q=0.3,en-US,en;q=0.8,de-AT;q=1.0,fr;q=0.5,de;q=0.3,de-DE;q=0.1,SE';
-		$res = Language::parseLanguageList($httpAcceptLanguages);
-		$expected = [
-			'1.0' => [
-				'de-at',
-				'se',
-			],
-			'0.8' => [
-				'en',
-			],
-			'0.7' => [
-				'de-at',
-			],
-			'0.5' => [
-				'fr',
-				'fr',
-			],
-			'0.3' => [
-				'de',
-				'de-de',
-				'de',
-			],
-			'0.1' => [
-				'en',
-				'de-de',
-			],
-		];
-		$this->assertSame($expected, $res);
 
-		$res = Language::parseLanguageList($httpAcceptLanguages, ['removeDuplicates' => true]);
+		$res = Language::parseLanguageList($httpAcceptLanguages);
 		$expected = [
 			'1.0' => [
 				'de-at',
@@ -140,8 +111,6 @@ class LanguageTest extends TestCase {
 	}
 
 	/**
-	 * LanguageTest::testFindMatches()
-	 *
 	 * @return void
 	 */
 	public function testFindMatches() {