답변:
Drupal은 필요한 문자열을 javascript 객체에 채우는 것을 처리합니다. 전체 문자열 모음이 모든 페이지에로드되는 것은 아니지만 필요한 문자열 만 JavaScript에 추가됩니다.
나는 이것이 실제로 페이지에 추가되기 전에 스크립트 파일을 순회함으로써 이루어 졌다고 생각합니다.
따라서 Drupal.t('Some string');
JavaScript 코드에 추가 하면 번역 인터페이스에서 해당 코드를 번역 할 수 있어야합니다.
오늘이 같은 문제에 부딪 히고 조금 더 연구했습니다. 위의 Chris는 좋은 의견을 가지고 있지만 궁극적으로 잘못되었습니다. 작동하기 위해 Drupal.behaviors를 사용할 필요는 없습니다.
그의 마지막 주석에서 JonMcL 자신이 언급했듯이 locale.inc의 _locale_parse_js_file 함수는 1493 행 (Drupal 7.22에서)부터 Drupal.t ( "somestring") 패턴의 구문 분석을 담당합니다.
preg_match_all('~
[^\w]Drupal\s*\.\s*t\s* # match "Drupal.t" with whitespace
\(\s* # match "(" argument list start
(' . LOCALE_JS_STRING . ')\s* # capture string argument
(?:,\s*' . LOCALE_JS_OBJECT . '\s* # optionally capture str args
(?:,\s*' . LOCALE_JS_OBJECT_CONTEXT . '\s*) # optionally capture context
?)? # close optional args
[,\)] # match ")" or "," to finish
~sx', $file, $t_matches);
시맨틱을 신경 쓰지 않고받는 파일에서 Drupal.t ( "something")의 모든 인스턴스를 찾기 만하는 "멍청한"구문 분석 함수일뿐입니다.
일반적인 문제점은 Drupal.t ( "translateme") 형식으로 소스 코드에 전체 문자열이 있어야한다는 것입니다. PHP에서 file_get_contents를 통해 파일을 열 때 자바 스크립트가 실행되지 않기 때문입니다. 즉, Drupal.t (somevariable)를 수행 할 수 없으며 Drupal이 Drupal.t에서 던지는 모든 문자열 포함 자바 스크립트 변수를 포착 할 수 있기를 바랍니다.
차트의 "women"을 번역하고 문자열에 컨텍스트를 제공하려는 경우 구문은 다음과 같습니다.
Drupal.t("women", {}, {context: "charts"}
또한 drush를 설치 한 경우 다음 명령으로 js 파일이 구문 분석되었는지 확인하십시오.
drush vget javascript_parsed
그런 다음 캐시를 정리할 수 있습니다
drush cc all
... 위의 vget 명령을 반복하여 이미 구문 분석 된 파일 목록이 비어 있는지 확인하십시오. 이렇게하면 다음에 파일을 다시 분석 할 수 있습니다 (확인하십시오).
drush vget javascript_parsed
! 번역 스크립트 파일을 강제로 다시 작성하는 빠른 방법은을 사용하여 CSS 및 JS 파일을 제거하는 것 drush @sitealias cc css-js
입니다.
Drupal 7에서 다국어 JS를 구현하는 동안 몇 가지 문제가 발생했습니다.
먼저 JS 파일이 inline에 포함되어 있지 않은지 확인하십시오 . Drupal 7.22부터 Drupal에서 JavaScript 파일을 인라인하는Drupal.locale.strings
경우 자동으로 업데이트되지 않는 것 같습니다 . 어쨌든 번역 인터페이스는 여전히 문자열을 집어 들고 혼란에 빠졌습니다.
둘째, Drupal.behaviors 를 사용하여 JS를 페이지에 연결하십시오. 규칙적인 JS 폐쇄는 Drupal의 "마법" Drupal.t()
호출 분석을 트리거하지 않습니다 . 이것은 기술적으로 당신이 어쨌든해야 할 일입니다.)
거기에서 그것은 정말로 고통스럽지 않습니다. 그냥 사용 Drupal.t()
하면 번역 할 텍스트를 주위 때마다이 파일을 업데이트하고 번역자의 인터페이스에서 새 문자열을 볼 수 캐시를 지 웁니다 /admin/config/regional/translate/translate
. 일단 작동하면 꽤 좋습니다.