2014-06-20 2 views
0

외부 모듈이 기본 모듈에서 내 $translateProvider.translation을 변경하려고합니다. 내 애플 리케이션을위한 "tranlation 플러그인"으로 이것을 참조하십시오.Angular translate 기존 번역 확장

번역을 변경하는 것 같아서 $translate 서비스가 불가능합니다.

mymodule.service('MyService', function ($translateProvider) { 
    var lib = function() { 
    //EDITED FOR BREVITY 
     this._registerTranslations = function (ctrl) { 
      if (!ctrl.i18n) return; 
      for (var name in ctrl.i18n) { 
      ///////////////////////////// 
      // THIS IS THE PLACE, OBVIOUSLY PROVIDER IS NOT AVAILABLE!!!! 
       $translateProvider.translations(name, ctrl.i18n[name]); 
      ////////////////////////////// 
      } 
     }; 
    //EDITED FOR BREVITY 
    }; 
    return new lib(); 
}); 

누구나 밝은 아이디어가 있습니까? AngularJS와 워드 프로세서 (https://docs.angularjs.org/guide/providers)에서

답변

1

질문에 대답하기 위해 : 비동기 로딩을 사용하지 않고 $translate 서비스로 런타임 중에 기존 번역을 확장 할 수있는 방법이 없습니다. 그런 식으로 번역을 추가하는 것은 이미 거기에 있다는 것을 의미하기 때문에 어쨌든 그렇게하고 싶은지 궁금합니다. (그렇지 않으면 분명히 비동기 로딩을 사용합니다).

+0

안녕하세요, @Pascal, 실제로 사용자가 자신의 컨트롤을 만들고 i18n을 지정할 수있는 UI 디자이너가 있습니다. 이 컨트롤은 데이터베이스에 직렬화됩니다. 나는 앱이 초기화 된 후에 컨트롤을 잡아서'.config()'에 접근 할 수 없다. 이게 정말 틀린거야? '$ translate.translations = translations;를 추가하는 것은 효과가 있지만 마음에 들지 않는 것 같습니다 ... 어쨌든 코드를 변경하지 않고이 유스 케이스를 구현할 수 있습니까? – Jmorvan

+0

angular-translate는 실제로 angular-translate를 먼저 말해야하며, 번역을 정적으로 등록하거나 비동기 로더를 사용하여 작업하기 전에 먼저 작업해야하는 번역을 디자인해야합니다. 저는 github에 관한 문제로 돌아가서 팀이 그것에 대해 어떻게 생각하는지 봅니다. – PascalPrecht

0

:

응용 프로그램이을 시작하기 전에 이루어져야합니다 응용 프로그램 전체 구성에 대한 API 를 노출 할 경우에만 제공 조리법을 사용한다. 이는 대개 응용 프로그램간에 동작이 약간 다를 수있는 재사용 가능한 서비스에만 유용합니다.

공급자는 응용 프로그램의 .config 기능과 함께 사용해야합니다. 구성을위한 $translateProvider, 다른 서비스 및 컨트롤러의 경우 $translate.

+0

감사합니다. 나는 그것을 알고있다. 제 질문은 특별히 각도 번역을 지향하여 방향이있는 경우 지침에서 번역 데이터를 확장하는 방법을 찾습니다. 나는 다른 사람이 이것을 한 경우에 대비하여 발견 할 수있는 소스를 살펴보기 시작했지만 여기에 게시했습니다. – Jmorvan

1

Asynchronous loading 페이지를보십시오. 원하는 곳에서 변환을로드 할 팩토리를 작성할 수 있습니다.

새 번역을 유지하기 위해 각도 상수를 만들었습니다. 새 번역을 추가하려면 상수에 추가합니다. 그런 다음 내 사용자 정의 로더에서 상수가 있는지 확인하여 변환이 있는지 확인합니다 (새 것 또는 업데이트 된 것). 그렇다면 상수로부터로드합니다. 그렇지 않다면 .json 파일 (또는 처음 번역을로드 한 곳)에서로드합니다. $translate.refresh()을 사용하여 번역을 다시로드하고 다시 평가하도록합니다.

Demo here

데모는 아주 간단합니다. 번역본의 일부를 바꾸고 싶다면 좀 더 많은 작업을해야하지만, 일반적인 생각을 들으실 수 있습니다.

+0

그게 좋은데! 더 직접적인 방법으로 해보고 싶지만 ... @PascalPrecht 입력을 기다리고 있습니다 ... 감사합니다. – Jmorvan

+0

답장을 보내 주셔서 감사합니다. 일을 단순화하는 것이 더 좋지만이 방법이 유용했습니다. 당신의 방법이 이것을하는 유일한 표준 방법 인 것처럼 보입니다. https://github.com/angular-translate/angular-translate/pull/612#issuecomment-46778725 – Jmorvan