번역하다


"국제화"(종종 i18n으로 약칭됨)는 프로그램(추상)에서 지역적 특성이 있는 문자열 및 기타 조각을 추출하여 다음과 같은 레이어에 배치하는 것을 의미합니다. 사용자의 지역(언어, 국가 등)에 따라 번역, 변형됩니다. 텍스트의 경우 이는 텍스트(또는 "정보")를 사용자가 원하는 언어로 번역하는 기능을 사용하여 텍스트의 각 부분을 제거하는 것을 의미합니다.

// 文本始终以英语输出echo 'Hello World'; // 文本将以用户指定语言或默认英语输出echo $translator->trans('Hello World');

locale 단순히 사용자의 언어와 국가를 의미합니다. 이는 프로그램의 임의의 문자열일 수 있으며 번역 및 기타 형식 정보(예: 통화)를 관리하는 데 사용됩니다. ISO 639-1 언어 코드를 사용하고 밑줄(_)을 추가한 후 ISO 3166-1 alpha-2_),再跟一个ISO 3166-1 alpha-2国家代码(比如fr_FR这个locale是指“法国法语”French/France)。

在本章,你将学习如何使用Symfony框架中的translation组件。你可以阅读翻译组件来了解更多。整体上,翻译的过程有如下几步:

  1. 开启和配置Symfony的翻译服务;

  2. 将字符串抽象出来(如“xxxx”),这是通过调用Translator去剥离它们来实现的 ;(参考 翻译基础)

  3. 针对每个被支持的locale,创建翻译资源/文件,用于翻译程序中每一个待译字串;

  4. 针对request(请求)和可选的 基于用户整个session过程,来 确定、设置和管理用户的locale信息

配置 

翻译的过程是通过translator국가 코드(예: fr_FR 이 로캘은 "프랑스어 프랑스어" 프랑스어/를 나타냅니다. 프랑스).

#🎜🎜#이 장에서는 Symfony 프레임워크에서 번역 구성 요소를 사용하는 방법을 배웁니다. 자세히 알아보려면 번역 구성요소#🎜🎜#을 읽어보세요. 전반적으로 번역 과정은 다음과 같은 단계로 이루어집니다: #🎜🎜#
  1. #🎜🎜##🎜🎜#Symfony의 번역 서비스를 열고 구성합니다. #🎜🎜#
  2. #🎜🎜#Translator를 호출하여 수행되는 문자열(예: "xxxx")을 추상화합니다. 스트리핑으로 구현됩니다. (번역 기본 사항#🎜🎜# 참조)#🎜🎜#
  3. #🎜🎜#지원되는 각 로케일에 대해 번역 프로그램에서 번역할 각 문자열에 대한 번역 리소스/파일 #🎜🎜#을 생성합니다. #🎜🎜#
  4. #🎜🎜# 요청(요청)에 사용 가능합니다. 선택한 은 사용자의 전체 세션 프로세스에 따라 결정됩니다#🎜🎜#, 사용자의 로케일 정보를 설정 및 관리#🎜🎜#. #🎜🎜#

구성 ¶#🎜🎜#

#🎜🎜#Translated 프로세스는 사용자가 지정한 로케일을 사용하여 번역된 정보를 찾아 반환하는 translator 서비스를 통해 처리됩니다. 번역기를 사용하기 전에 구성 파일에서 활성화하세요: #🎜🎜#
PHP:// app/config/config.php$container->loadFromExtension('framework', array('translator' => array('fallbacks' => array('en')),));
XML:<!-- app/config/config.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="http://symfony.com/schema/dic/services"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xmlns:framework="http://symfony.com/schema/dic/symfony"           xsi:schemaLocation="http://symfony.com/schema/dic/services        http://symfony.com/schema/dic/services/services-1.0.xsd        http://symfony.com/schema/dic/symfony        http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">     <framework:config>
        <framework:translator>
            <framework:fallback>en</framework:fallback>
        </framework:translator>
    </framework:config></container>
#🎜🎜#
YAML:# app/config/config.ymlframework:translator: { fallbacks: [en] }
#🎜🎜#

fallbacks 키워드 및 번역 언어를 찾을 수 없을 때 Symfony가 처리하는 방법에 대한 자세한 내용은 번역 중 로컬 롤백을 참조하세요.

번역에 사용된 로캘 정보는 요청 개체에 저장됩니다. 일반적으로 라우팅 시 _locale 속성으로 설정됩니다. 로캘 및 URL_locale 属性。请参考 The Locale and the URL

翻译基础 

translator 服务负责完成对文本的翻译。为了翻译一个文本块(被称为“message”,以下称作“信息”),使用trans()方法。例如,你要在controller中翻译一个简单的信息:

// ...use Symfony\Component\HttpFoundation\Response; public function indexAction(){$translated = $this->get('translator')->trans('Symfony is great'); return new Response($translated);}

上述代码被执行后,Symfony就尝试基于用户的 locale을 참조하세요.

번역 기본 사항

translator🎜 서비스는 텍스트 번역을 완료하는 역할을 합니다. 텍스트 블록("메시지", 이하 "정보"라고 함)을 번역하려면 trans() 메서드를 사용합니다. 예를 들어, 컨트롤러에서 간단한 메시지를 번역하려고 합니다. 🎜
PHP:// messages.fr.phpreturn array('Symfony is great' => 'J\'aime Symfony',);
🎜위 코드가 실행된 후 Symfony는 사용자의 로케일을 기반으로 "Symfony is great" 메시지를 번역하려고 시도합니다. 이 프로세스가 작동하려면 "번역 리소스"를 통해 번역을 수행하는 방법을 Symfony에 알려야 합니다. 일반적으로 번역 소스는 지정된 로케일에 해당하는 번역 정보 그룹이 포함된 파일입니다. 번역을 위한 '사전'과 같아서 다양한 형식으로 생성이 가능하지만, 활용을 권장합니다.

해당 파일의 저장 위치에 대한 자세한 내용은 번역 소스/파일 이름 및 위치

를 참조하세요. 이제 사용자의 로케일이 프랑스어인 경우(예: fr_FR 또는 fr_BE< /code> ) 이전 정보가 J'aime Symfony로 변환됩니다. 템플릿fr_FRfr_BE ),那么前面的信息将被翻译为 J'aime Symfony。你也可以在 模板(templates) 中完成翻译。

翻译的处理过程 

为了能翻译一条信息,Symfony执行以下简明流程: