문제

사용자에게 보내는 텍스트와 메시지를 번역하기 위해 getText를 사용하기 시작했습니다. 나는 Poedit을 편집자로 사용하고 있지만 동적 메시지로 어려움을 겪고 있습니다.

예를 들어 오류 유형을 알려주는 변수가있는 로그인과 같은 것들이 있습니다.

$this->translate('page-error-' . $error);

Poedit에서 자동 업데이트되면 "Page-Orror-"처럼 읽습니다. 내가하는 일은 자동 업데이트 할 때 POEDIT에 추가 할 수있는 모든 키가있는 Translate 메소드에 더미 호출을 배치하는 파일이있는 것입니다.

나는이 상황을 특히 좋아하지 않는다. 너희들은 어떻게합니까?

당신의 아이디어에 감사드립니다

도움이 되었습니까?

해결책

아니오 - 편집자 (및 gettext 도구)는 프로그램을 실행하지 않고 소스를 읽고 있습니다. 더미 통화를 유지하거나 번역 파일에 직접 키를 추가해야합니다.

다른 팁

당신은 같은 것을 시도하고 있습니까?

$this->translate(sprintf('page-error-%s', $error));

나는 같은 문제를 발견했다.

예를 들어 나는 가지고 있습니다

PHP에서

//Gives FORM_HEADER_ADD or FORM_HEADER_EDIT
echo $this->translate('FORM_HEADER_' . strtoupper($this->data)); 

Poedit과 동기화되면 코드에서 내가 가지고있는 식별자가 아닌 'form_header_'를 선택합니다.

그래서 나는 문제를 해결해야했다.

echo ($this->data === 'add') ? $this->translate('FORM_HEADER_ADD') : $this->translate('FORM_HEADER_EDIT');

업데이트!

나는이 문제를 계속 조사했다. 그리고 나는 현재 소스에서 수입을 포기했습니다. 이것이 더 나은 솔루션을 찾을 때까지 계속하는 방법입니다.

  1. 애플리케이션을 구축하고 가능한 많은 정적 식별자를 사용하십시오.
  2. 번역되지 않은 (동적) 식별자의 로깅을 활성화합니다

    protected function _initMyTranslate(){
    
        $date = new Zend_Date();
        $fileName = sprintf('/../logs/translation_%1$s.log', $date->toString('dd-MM'));
    
        $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . $fileName);
        $log    = new Zend_Log($writer);
    
        // get the translate resource from the ini file and fire it up
        $resource = $this->getPluginResource('translate');
        $translate = $resource->getTranslate();
    
        // add the log to the translate
        $translate->setOptions(
                array(
                    'log'             => $log,
                    'logUntranslated' => true
                )
            );
    
        // return the translate to get it in the registry and so on
        return $translate;
    }
    
  3. Poedit을 사용하여 소스와 동기화하고 발견 된 문자열을 번역하십시오.

  4. 테스트/디버깅 위상 중에 번역되지 않은 문자열을 검사하십시오.
  5. 트랜스할지되지 않은 문자열을 .po 파일에 추가하십시오.

    msgid "IDENTIFIER"
    msgstr "TRANSLATION STRING"
    
  6. PO 파일을 열고 저장하여 MO 파일을 만듭니다 (소스와 동기화되지 않거나 모두 손실되지 않음).

업데이트 2.

이제 텍스트 편집기 (gedit/notepad)를 사용하여 수동 식별자에 별도 파일을 사용합니다. 이제 두 개의 파일이 있습니다.

  1. Poedit에 의해 자동 생성 된u003Clanguage> .PO
  2. 수동으로 편집 된 파일이 호출됩니다u003Clanguage> _manual.po

언어 디렉토리의 모든 파일을 스캔하도록 Application.ini에서 Translate를 구성했습니다.

resources.translate.adapter = gettext
resources.translate.content = APPLICATION_PATH "/../library/languages/"
resources.translate.locale = auto ;use en to force english or nl for dutch..etc
resources.translate.scan = directory
resources.translate.options.disableNotices = false

POEDIT에서 다른 언어로 변환하려면 냄비 파일에서 파일 -> 새 카탈로그를하고 수동으로 추가 된 문자열을 번역하기 시작하십시오.

유한 한 수의 오류가 있으면 내부에 더미 코드를 추가 할 수 있습니다. if (false) 조건, 유일한 목적은 POEDIT가 번역을 집어 들게하는 것입니다.

예를 들어:

if (false) {
  _('role_visitor');
  _('role_hiker_reader');
  _('role_hiker');
  _('role_translator');
  _('role_proofreader');
  _('role_moderator');
  _('role_moderator_2');
  _('role_moderator_3');
  _('role_admin');
}

그런 다음 다음으로 번역 할 수 있습니다.

$translated_role = _('role_' . $role);

크레딧 : http://eng.marksw.com/2012/12/05/how-to-expose-dynamic-translatable-text-translation-tools-like-foedit/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top