Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Localization
Code

Пабудова загрузнага з PHP: Лакалізацыя З I18n

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup With PHP: Geolocation and Google Places
Building Your Startup: Access Control, Active Record Relations and Slugs

Belarusian (беларуская мова) translation by Alex Grigorovich (you can also view the original English article)

Final product image
What You'll Be Creating

Гэта частка чатыры будынкі загрузнага з PHP серыяй на Tuts+.  У гэтай серыі я правяду вас праз запуск стартапа ад канцэпцыі да рэальнасці з дапамогай майго Meeting Planner прыкладання як рэальны прыклад жыцця.  Кожны крок на гэтым шляху, мы выпусцім Meeting Planner коды ў якасці прыкладаў з адкрытым зыходным кодам вы можаце даведацца з.  Мы будзем таксама вырашаць дзелавыя пытанні запуску, звязаныя, як яны ўзнікаюць.

У гэтым уроку я хацеў зрабіць крок назад і дадаць I18n падтрымкі інтэрнацыяналізацыі для нашага прыкладання, перш чым будаваць ўсё больш і больш коды.  Згодна з Вікіпедыі, I18n з'яўляецца numeronym:

18 азначае колькасць літар паміж першай і апошняй I п ў інтэрнацыяналізацыі, з выкарыстаннем прыдуманы ў DEC ў 1970-х ці 80-х гадоў.

З I18n, усе тэкставыя радкі адлюстроўваюцца карыстальніку з прыкладання замяняюцца выклікамі функцыі, якія могуць дынамічна загружаць перакладзеныя радкі для любой мовы карыстальнік выбірае.

Увесь код для Планоўшчык сустрэч напісана ў Yii2 Framework для PHP, які мае убудаваную падтрымку I18n. Калі вы хочаце даведацца больш аб Yii2, праверыць наш паралельны шэраг Праграмаванне з Yii2 на Tuts+.

Проста напамін, я ўдзельнічаць у каментары разьбе ніжэй.  Я асабліва цікава, калі ў вас ёсць розныя падыходы, ці дадатковыя ідэі, або хочаце прапанаваць тэмы для будучых падручнікаў.

Мэты Інтэрнацыяналізацыя

Пры стварэнні стартапа, гэта карысна думаць глабальна з самага пачатку, але не заўсёды.  З іншага боку, гэта можа мець сэнс толькі засяродзіцца на стварэнні для мясцовага рынку.  Ці мае патрэбу ваш мінімальны жыццяздольны прадукт для працы на іншых мовах для карыстальнікаў з розных краін?

У нашым выпадку Yii Framework забяспечвае убудаваную падтрымку I18n, так што адносна лёгка пабудаваць падтрымку для I18n з самага пачатку, і адымае шмат часу, каб дадаць яго ў далейшым.

Колькі I18n работ

I18n працуе шляхам замены ўсіх спасылак на тэкст адлюстроўваецца карыстачу з выклікамі функцыі, якія забяспечваюць пераклад, калі гэта неабходна.

Напрыклад, вось што імёны атрыбутаў поля ў Place мадэлі выглядаюць як раней I18n:

Прадастаўленне перакладных версій коды стане вельмі складаным.  Нетэхнічнае перакладчыкі павінны перавесці код на месца, хутчэй за ўсё, парушэнне сінтаксісу.

Вось што той жа код выглядае з I18n:

Yii:t() з'яўляецца выклік функцыі, якая правярае, якую мову выбраны ў дадзены момант, і адлюстроўвае адпаведны пераклад радка.  'frontend' ставіцца да падзелу нашага прыкладання. Пераклады могуць быць дадаткова арганізаваны ў адпаведнасці з рознымі катэгорыямі.  Але там, дзе з'яўляюцца гэтыя перакладзеныя радкі?

Мову па змаўчанні, у дадзеным выпадку ангельскай, запісваюцца ў код, як паказана вышэй.  файлы рэсурсы спісы масіваў радкоў якіх ключ з'яўляецца мова па змаўчанні тэксту напрыклад. 'Place Type'-і кожны файл ўтрымлівае перакладзены тэкст значэнне для іх адпаведнай мовы.

Вось прыклад з нашага запоўненай файла іспанскага перакладу, мова кода "es".  Yii:t() функцыя выкарыстоўвае гэты файл, каб знайсці падыходны варыянт перакладу для адлюстравання:

У той час як гэта выглядае працаёмкім, Yii прадастаўляе сцэнары для аўтаматызацыі генерацыі і арганізацыі гэтых файлаў.

Падзяляючы тэкст з кода, мы робім яго больш лёгкім для нетэхнічнае шматмоўных экспертаў перакладаць нашы прыкладання для нас-не парушаючы код.

I18n таксама прапануе спецыялізаваныя функцыі для перакладу часу, валюты, множнага ліку і інш.  Я не буду ўдавацца ў падрабязнасці гэтых у гэтым падручніку.

Настройка падтрымкі I18n

На жаль, дакументацыя Yii2 для I18n яшчэ не вельмі апісальна-і гэта было цяжка працавалася, крок за крокам прыклады.  На шчасце для вас, я буду хадзіць вас праз тое, што я даведаўся ад саскрабаць дакументы і вэб-старонкі.  Я знайшоў I18n прыклад Кодэкса ніндзя і поўнае кіраўніцтва Yii2 па I18n карысным і Yii укладчыкам Аляксандр Макараў прапанаваў мне дапамогу, а таксама.

Стварэнне файла канфігурацыі I18n

Мы выкарыстоўваем Yii2 пашыраны шаблон для Planner Meeting.  Гэта стварае два Yii прыкладання ў нашай кодавай базы, вонкавым і ўнутраным.  І гэта стварае агульную вобласць для мадэляў падзяляем паміж двума праграмамі. Файлы канфігурацыі YII ў загрузцы, калі запыты старонак зробленыя.  Мы будзем выкарыстоўваць I18N сцэнары паведамленняў Yii, каб пабудаваць з файла канфігурацыі для I18n ў common/config канфігурацыі.

Ад нашага кораня кодавай базы, мы запусцім message/config скрыпт Yii:

Гэта стварае наступны шаблон файла, які можна наладзіць:

Я наладжваючы свой файл.  Я рухаюся messagePath даверху і наладзіць SourcePath і messagePath.  Я таксама з указаннем моў, я хачу, каб маё дадатак, каб падтрымаць, апроч ангельскай, у дадзеным выпадку іспанскі і нямецкі «es» і «de».  Вось спіс усіх моў I18n коды.

На наступным кроку мы будзем запускаць экстракт сцэнар Yii, якая будзе сканаваць увесь код у дрэве SourcePath для стварэння файлаў радок па змаўчанні для ўсіх пазнак, якія выкарыстоўваюцца ў нашым кодзе.  Я наладжваючы SourcePath сканаваць увесь код дрэва. Я наладжваючы messagePath генераваць атрыманыя файлы ў common/messages.

Вы ўбачыце Yii сканавання ўсіх файлаў кода:

Калі ён завершыцца, вы ўбачыце нешта накшталт гэтага ў вашым кодзе:

Meeting Planner I18n Message Files and Paths

Актывацыя i18n і выбар мовы

У агульным файле канфігурацыя, common/config/main.php, мы будзем казаць Yii аб нашай новай моўнай падтрымцы.  Я зраблю іспанскую мову майго мовы па змаўчанні:

Але ёсць яшчэ больш, каб зрабіць.  Мы павінны зрабіць наш код I18n вядома.

Выкарыстанне генератара Gii кода Yii з I18n

У другой частцы гэтай серыі, дом загрузным з PHP: Патрабаванні да функцый і праектавання баз дадзеных, мы выкарыстоўвалі дзіўны генератар кода Yii ў, Gii, генераваць нашы мадэлі, кантралёры і прадстаўлення.  Але, мы не актывавалі I18N, таму ўсе нашай коды убудаванай тэкставых радкоў.  Давайце паўтарыць гэта.

Вернемся да Gii, хутчэй за ўсё, http://localhost:8888/mp/gii ў вашым браўзэры, і паўторна запусціць мадэль і кантролер генератараў з I18n актываваныя.

Заўвага: Калі вы не адставаў частцы трэцяй нашай серыі, вы, магчыма, спатрэбіцца зрабіць заўвагу пра адрозненні з кожным файлам і ўручную перамясціць код зноў.  Ці, можа быць, прасцей за ўсё замяніць код з рэпазітаром Github для гэтага ўроку, звязанага ў правым верхнім куце.

Вось прыклад генерацыі мадэлі Сустрэчы коды I18n актываваная.  Звярніце ўвагу на тое, што мы паказваем «вонкавы інтэрфейс» для нашай катэгорыі паведамленняў.  Мы размяшчаючы ўсе нашы тэкставыя радкі вонкавага інтэрфейсу ў адным вонкавым інтэрфейсе катэгорыі файла.

Meeting Planner I18n Gii Model Generator

Давайце рабіць тое ж самае для стварэння CRUD для кантролераў і ўяўленняў:

Meeting Planner I18n Message CRUD Generator with Gii

Калі прагледзець згенераваны код мадэлі, кантралёры і прадстаўлення, вы ўбачыце тэкставыя радкі замяняюцца на Yii:t('frontend',...):

Ўвасабленне Вашага паведамлення Файлаў

Зірніце на наш іспанскі файл паведамленняў, /common/messages/es/frontend.php.  Гэта доўгі спіс пустых значэнняў масіва:

Для мэтаў запаўнення нашых іспанскіх моўных перакладаў для гэтага ўроку я буду выкарыстоўваць Google Translate. Хітры, так?

Meeting Planner I18n Using Google Translator to Fill Message Files

Затым, мы зробім некаторыя выразаць і ўставіць з гэтымі перакладамі назад у файл паведамленняў.

Калі мы наведваем індэксную старонку Place, вы ўбачыце на іспанскай мове-добры, так?

Meeting Planner I18n Spanish Places Index Page

Звярніце ўвагу, што навігацыйная панэль застаецца на англійскай мове, гэта таму, што сцэнар Message/Extract ня падабраць вызначэнне масіва навігацыі Bootstrap і канвертаваць іх з дапамогай Yii:t().  Мы будзем рабіць гэта ўручную.  Акрамя таго, звярніце ўвагу, што Home і пэйджынгавай тэкст быў пераведзены аўтаматычна кодавы-Yii ўключае ў сябе моўныя пераклады для гэтых стандартных радкоў.

Вось стварыць месца формы:

Meeting Planner I18n Spanish Create a Place Form

Калі я хачу, каб пераключыцца назад на англійская, я проста змяніць файл канфігурацыі, /common/main.php, назад на ангельскую:

Meeting Planner Create a Place in English

Вы таксама заўважыце, як вы прыступіце, што замена радкоў у JavaScript мае свае складанасці.  Я не даследаваў гэта сам, але пашырэнне Yii 1.x JsTrans можа забяспечыць карысны арыенцір для падтрымкі гэтага.

Адпраўляючыся Далей З I18n

У рэшце рэшт, мы хочам, каб перавесці наша дадатак на некалькі моў.  Я адправіў запыт на функцыю Yii пашырыць сцэнар Message / Extract выкарыстоўваць Google Translate API для аўтаматызацыі гэтага працэсу.  Я таксама спытаў Tuts +, каб мне напісаць падручнік пра гэта, так што сочыце за абнаўленнямі.  Вядома, гэта толькі забяспечвае базавы пераклад.  Вы можаце наняць прафесійных перакладчыкаў, каб наладзіць файлы пасля.

Пэўныя праграмы дазваляюць карыстальнікам выбіраць сваю родную мову, так што, калі яны ўвайсці, карыстацкі інтэрфейс аўтаматычна перакладае іх.  У Yii, усталяваўшы $app->language пераменная робіць гэта:

Іншыя прыкладання, як JScrambler.com ніжэй, рычагі URL-шлях для пераключэння моў.  Карыстальнік проста націскае на прэфікс мовы, яны хочуць, напрыклад, «FR», і дадатак аўтаматычна перакладаюцца:

JScrambler Dynamic Language Paths

Заўвага: Глядзіце мой Tuts+ старонка інструктара для маючага адбыцца урока аб JScrambler-гэта вельмі карысны сэрвіс.  Гэта, магчыма, ужо з'явіліся да таго часу, калі Вы чытаеце гэта.

URL менеджэр Yii можа забяспечыць гэты тып functionaliaty, а таксама.  Я, верагодна, рэалізаваць гэтыя магчымасці для сустрэч Planner ў будучыні кіраўніцтве.

Што далей?

Я спадзяюся, што вы даведаліся нешта новае з гэтым кіраўніцтвам.  Я выкарыстаў I18N з Rails да, але гэта быў першы раз, калі я рэалізаваў яе з PHP.  Сачыце за наступныя падручнікі ў нашай хаце загрузнага З PHP серыяй-Ёсць шмат забаўляльных функцыі прыдумляюць.

Калі ласка, не саромейцеся дадаваць вашыя пытанні і каментары ніжэй; Я ўвогуле ўдзельнічаць у абмеркаваннях.  Вы таксама можаце звязацца са мной на Twitter @reifman або па электроннай пошце мне непасрэдна.

Спасылкі па тэме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.