yii\web\Request::getPreferredLanguage PHP 메소드

getPreferredLanguage() 공개 메소드

The language resolution is based on the user preferred languages and the languages supported by the application. The method will try to find the best match.
public getPreferredLanguage ( array $languages = [] ) : string
$languages array a list of the languages supported by the application. If this is empty, the current application language will be returned without further processing.
리턴 string the language that the application should use.
    public function getPreferredLanguage(array $languages = [])
    {
        if (empty($languages)) {
            return Yii::$app->language;
        }
        foreach ($this->getAcceptableLanguages() as $acceptableLanguage) {
            $acceptableLanguage = str_replace('_', '-', strtolower($acceptableLanguage));
            foreach ($languages as $language) {
                $normalizedLanguage = str_replace('_', '-', strtolower($language));
                if ($normalizedLanguage === $acceptableLanguage || strpos($acceptableLanguage, $normalizedLanguage . '-') === 0 || strpos($normalizedLanguage, $acceptableLanguage . '-') === 0) {
                    // en-us==en
                    return $language;
                }
            }
        }
        return reset($languages);
    }

Usage Example

예제 #1
0
파일: RequestTest.php 프로젝트: howq/yii2
 public function testPrefferedLanguage()
 {
     $this->mockApplication(['language' => 'en']);
     $request = new Request();
     $request->acceptableLanguages = [];
     $this->assertEquals('en', $request->getPreferredLanguage());
     $request = new Request();
     $request->acceptableLanguages = ['de'];
     $this->assertEquals('en', $request->getPreferredLanguage());
     $request = new Request();
     $request->acceptableLanguages = ['en-us', 'de', 'ru-RU'];
     $this->assertEquals('en', $request->getPreferredLanguage(['en']));
     $request = new Request();
     $request->acceptableLanguages = ['en-us', 'de', 'ru-RU'];
     $this->assertEquals('de', $request->getPreferredLanguage(['ru', 'de']));
     $this->assertEquals('de-DE', $request->getPreferredLanguage(['ru', 'de-DE']));
     $request = new Request();
     $request->acceptableLanguages = ['en-us', 'de', 'ru-RU'];
     $this->assertEquals('de', $request->getPreferredLanguage(['de', 'ru']));
     $request = new Request();
     $request->acceptableLanguages = ['en-us', 'de', 'ru-RU'];
     $this->assertEquals('ru-ru', $request->getPreferredLanguage(['ru-ru']));
     $request = new Request();
     $request->acceptableLanguages = ['en-us', 'de'];
     $this->assertEquals('ru-ru', $request->getPreferredLanguage(['ru-ru', 'pl']));
     $this->assertEquals('ru-RU', $request->getPreferredLanguage(['ru-RU', 'pl']));
     $request = new Request();
     $request->acceptableLanguages = ['en-us', 'de'];
     $this->assertEquals('pl', $request->getPreferredLanguage(['pl', 'ru-ru']));
 }