2016-06-18 3 views
4

프론트 엔드에 Laravel을 사용하는 사이트에 다중 언어를 추가하기 시작했습니다.Laravel - 다중 언어에 대한 기본/폴백 문자열 지정

그러나 현재 리소스가 부족하기 때문에 제가 번역 한대로 문자열을 번역하고 있습니다. 전체 사이트가 번역되기까지는 다소 시간이 걸립니다.

유일한 어려움은 텍스트가 번역되지 않으면 표시되는 것이 키라는 것입니다. 그런 것에 대한 기본/폴백 문자열을 지정하고 싶습니다.

{{ trans('site.'.$name) }} 

내가 거기에 $ 이름과 LANG 내가 프론트 엔드에 site.Business로 끝날 파일 site.php 비즈니스 ''에 대한 어떤 번역 '으로'비즈니스 '를 전달하는 경우. 이것은 모든 것을 엉망으로 만든다. 최악의 경우 site.Business이 없으면 Laravel은 Business을 출력해야합니다.

더 나은 옵션은 기본/대체 문자열에 대한 옵션을 제공해야합니다.

이것이 가능합니까?

메모에는 일반적인 단어에 대한 무료 번역이 있습니까? 이렇게하면 모든 것을 직접 번역해야하는 시간을 절약 할 수 있습니다.

감사합니다.

답변

2

대체 언어는 사용해야 할 언어입니다. 참조 docs

또한 주어진 언어 라인을 포함하지 않는 활성 언어를 때 사용됩니다 "대체 언어"를 구성 할 수 있습니다. 기본 언어와 마찬가지로, 대체 언어도 app/config/app.php 구성 파일에 구성되어

'fallback_locale' => 'en',

그것은 확실히 당신에게 단순히 쓰는 것만큼이나 많은 시간 인라인 대체 쓰기를 취할 것 번역 키로 작성한 병렬 변환 파일의 폴백. 대체 방법을 생각하는 것보다는 그것을하는 데 소비되는 시간은 결국 무시할 수있을 것입니다.

인라인 대체를 원할 경우 다른 작업을 수행하는 새로운 도우미 메서드를 만들어야합니다. 그래서 가정에서 양조 한 멋진 음식을 준비하십시오.

모든보기에서 사용할 수있는 새 기능을 만들어 보겠습니다. 나는 Joseph Sibler에 의해 기술 된 방법을 사용할 것이다. 이라는 파일을 app 안에 만듭니다. 그런 다음 files 배열 아래 autoload 개체의 composer.json"app/helpers.php"이라는 문자열을 추가하십시오. 무슨 뜻인지 모르겠다. 그의 대답을보십시오. 추가 한 후 composer dump-autoload을 실행하십시오.

trans_fb() 메서드를 추가하여 trans() 메서드의 모든 매개 변수를 사용하지만 폴백도 함께 사용하도록합시다. 첫 번째 두 개의 인수 (키와 대체)가 필요하도록이 메서드를 정의합니다.

번역 키를 찾을 수 없으면 (예 : auth.failed을 키로 사용하여 resources/lang/en/auth.php을 검색 함) 대신 fallback을 사용하고 원래 방법에 대해 다른 선택적 인수를 전달합니다.

<?php 

if (! function_exists('trans_fb')) { 
    /** 
    * Translate the given message with a fallback string if none exists. 
    * 
    * @param string $id 
    * @param string $fallback 
    * @param array $parameters 
    * @param string $domain 
    * @param string $locale 
    * @return \Symfony\Component\Translation\TranslatorInterface|string 
    */ 
    function trans_fb($id, $fallback, $parameters = [], $domain = 'messages', $locale = null) 
    { 
     return ($id === ($translation = trans($id, $parameters, $domain, $locale))) ? $fallback : $translation; 
    } 
} 

당신은 다음과 같이 템플릿이를 사용할 수 있습니다

{{ trans_fb("i.love.laravel", "I love Laravel!") }}

+0

내가 대체 언어에 대해 이미 준비를했다하지만 내 상황에서 가능한 보이지 않았다. 제안 된 대체 도우미 기능을 사용하여 시험해 보겠습니다. 감사. –

+0

만약 이것이 가능하지 않다면 이것은 당신이 필요로하는 모든 것이어야합니다 :) 행운을 빈다. – Jonathan

+1

굉장합니다. 도우미 기능을 사용하여 마술을합니다. 감사. –