어디에서 사용자의 쿠키를 기반으로 언어를 설정할 수 있습니까? 전체 응용 프로그램 (컨트롤러, 뷰 등)에서 작동하게 만들기yii2 글로벌 언어 값을 설정하십시오.
문서에서 나는 \Yii::$app->language = '';
을 찾았지만 올바른 논리로 언어를 변경할 수 있습니까?
저는 새로운 yii로 구성 요소 클래스 또는 무언가를 다시 선언해야한다고 생각합니다. 요청 클래스일까요?
어디에서 사용자의 쿠키를 기반으로 언어를 설정할 수 있습니까? 전체 응용 프로그램 (컨트롤러, 뷰 등)에서 작동하게 만들기yii2 글로벌 언어 값을 설정하십시오.
문서에서 나는 \Yii::$app->language = '';
을 찾았지만 올바른 논리로 언어를 변경할 수 있습니까?
저는 새로운 yii로 구성 요소 클래스 또는 무언가를 다시 선언해야한다고 생각합니다. 요청 클래스일까요?
당신은 모든 컨트롤러에 부모 컨트롤러 내부
\Yii::$app->language = '';
를 사용해야합니다. 그 후
use yii\web\Controller;
class MyController extends Controller
{
public function init()
{
parent::init();
#add your logic: read the cookie and then set the language
}
}
같은 것을 함께 구성 요소를 만드는 것보다 사용할 수없는 경우 부모 클래스는 구성 요소 폴더 안에, 그리고해야한다, 당신은 모든 컨트롤러의 새로 만든 MyController에를 대신 확장 있는지 확인해야 원래 것.
도움이되기를 바랍니다.
로마, 주요 구성 파일 또는 매개 변수를 사용하여 목표를 달성 할 수 있습니다. $sitelang = 'UK_ua';
과 같은 변수를 만든 다음 Yii::$app->params['sitelang']
구성 파일에서 기본 언어를 설정할 수 있습니다. 기본 응용 프로그램에서 기본 위치는 /config/web.php
이며, 고급 내용은 application-name/config/main.php
및 application-name/config/main-local.php
입니다.
$config = [
'id' => 'basic',
'language' => 'nl', // Set the language here
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
...
];
구성을 통해 모두 (허용 된 대답은 매우 좋은 일이지만, 단지 경우에 당신이 뭔가를 원한다 "더 많은 글로벌"부트 스트랩 기능을 사용할 수 있습니다, 또는 "beforeAction의"기능을 실행하는 데) :
부트 스트랩 :
$config = [
...
'bootstrap' => ['your\own\component'],
...
];
그런 다음 예를 들어 해당 구성 요소의 init()
α- 함수를 사용할 수 있습니다. "beforeaction의"
:
$config = [
'on beforeAction' => function($event) {
// set language
}
];
전체적으로 언어를 설정하는 코드 예제를 제공해주십시오. 모든 회원에게 도움이 될 것입니다. –
나는이 오래 알고 있지만 나는 대답을 검색하는 동안, 나는이 질문을 발견했다. 나는 또한 좋은 가이드, 아래 링크를 찾는다. 과 같이, 그것을 구성 요소를 생성하고 부트 스트랩을 할 수있는 방법
하나 :
이공통/구성 요소, 말,에 파일을 생성/LanguageSelector.php
<?php
namespace common\components;
use yii\base\BootstrapInterface;
class LanguageSelector implements \yii\base\BootstrapInterface
{
public $supportedLanguages = [];
public function bootstrap($app)
{
$preferredLanguage = $app->request->getPreferredLanguage($this->supportedLanguages);
$app->language = $preferredLanguage;
}
}
난 고급 앱 템플릿을 사용하여 필요에 따라 파일 위치와 네임 스페이스를 조정할 수 있습니다.
그런 다음, 설정 파일에, 당신은 당신이 디버그와 같은 다른 구성 요소를 추가, 또는 로그 구성 요소를 너무 좋아하는 것처럼,이 구성 요소를 추가 할 필요가 : 또한
'components' => [
'languageSelector' => [
'class' => 'common\components\LanguageSelector',
'supportedLanguages' => ['en-US', 'tr-TR'],
],
],
,이 구성 요소를 추가해야 설정 파일에 부트 스트랩 구성 요소 :
'bootstrap' => ['languageSelector', ...]
이 방법은 그러나 쿠키에 의존하지 않는, 그것은 클라이언트 브라우저의 언어에 의존한다. 또한 기본 설정 기반 언어 선택을 수행하는 방법에 대한 아래의 예제를 찾을 수 있습니다. 그러나 기본적으로해야 할 일은 languageSelector 구성 요소에서 쿠키의 값을 가져 와서 그에 따라 언어를 변경하는 것입니다. 사용자 브라우저에 쿠키가 없으면 브라우저 언어로 폴백 할 수 있습니다.
https://github.com/samdark/yii2-cookbook/blob/master/book/i18n-selecting-application-language.md
당신의 논리에 따라, 귀하의 질문에 많은 대답이 있습니다.
return [
...
'language' => 'it',
...
];
는 일반 HTTP 컨텐츠 협상을 구현하려면 http://www.yiiframework.com/doc-2.0/guide-tutorial-i18n.html#configuration
, 당신은 전용 구성 요소가 참조 : 정적 규칙이있는 경우
return [
...
'components' => [
...
'contentNegotiator' => [
'class' => 'yii\filters\ContentNegotiator',
'languages' => ['en', 'it'],
],
...
],
];
는 참조 http://www.yiiframework.com/doc-2.0/guide-structure-filters.html#content-negotiator
좀 더 복잡한 협상이 필요한 경우 부트 스트랩 구성 요소. 다음은 로그인 한 사용자의 사용자 기본 설정에서 언어를 가져 오거나 게스트를 위해 협상 한 경우의 예입니다. 데이터베이스에서 지원되는 언어를 가져 오는 것과 같이 복잡한 작업으로 응용 프로그램을 오버로드 할 수 있습니다.
/**
* Select a language from user preferences or content negotiation
*/
class LanguageSelector implements BootstrapInterface
{
public function bootstrap($app)
{
if (\Yii::$app->user->isGuest) {
$supportedLanguages = (new \yii\db\Query())
->select('iso639_1')
->from('language')
->orderBy(['priority' => SORT_ASC])
->column();
$app->language = $app->request->getPreferredLanguage($supportedLanguages);
} else {
$app->language = Language::findOne(\Yii::$app->user->identity->language_id)->iso639_1;
}
}
}
이 주제에 대한 여기에 좋은 읽기있다 : https://yii2-cookbook.readthedocs.io/i18n-selecting-application-language/
이동 응용 프로그램 구성 파일 프론트 엔드/주/config.php를 또는 백엔드/메인은/config.php를
$ 설정 = [ 'language'=> 'ru-RU']
YII2 기본 템플릿에서는 작동하지 않습니다. 사이트에서 볼 수있는 언어는 'en'입니다. –