Vra

Ek gaan om te werk aan 'n projek waar 'n redelike groot web app moet tweaked om verskeie tale te hanteer. Die ding loop met 'n handgemaakte PHP-kode, maar dit is redelik skoon.

Ek het gewonder wat sou die beste manier om dit te doen nie?

  1. Die maak van iets op my eie, probeer om die werklike argitektuur pas.

  2. Herskrywing 'n goeie deel van dit met behulp van 'n raamwerk (bv Symfony) wat i18n sal bestuur vir my?

Vir opsie 1, waar moet ek die i18n data te stoor? * Po, XLIFF, suiwer DB?

Ek het gedink oor 'n alternatief: die gebruik van Symfony net vir die vertaling, maar die opstel van die kontroles op die webwerf te laai as wat dit reeds is. Vinnige, maar vuil. Aan die ander kant, dit stel ons in staat om die volgende verandering te maak, beweeg stadig na volle Symfony:. Hierdie webwerf is regtig 'n goeie kandidaat vir daardie

Maar miskien is daar is 'n paar losstaande vertaling enjins wat die werk beter sou doen as 'n hele web raamwerk. Dit is 'n bietjie soos die gebruik van 'n bazooka om 'n vlieg dood te maak ...

Was dit nuttig?

Oplossing

Daar is 'n aantal van maniere van aanpak van hierdie. Nie een van hulle "die beste manier" en almal van hulle met probleme in die kort termyn of die lang termyn. Die heel eerste ding om te sê, is dat verskeie tale plekke is nie maklik nie, vertalers en pragtige mense, maar moeilik om te werk met en die meeste programmeerders sien die probleem as net 'n tegniese een. Daar is ook 'n ander dimensie, buite die bestek van hierdie antwoord, om te bepaal of jy die vertaling of lokalisering. Dit behels die soeke na die teikengehore kulturele mores en dan kleremakery taal, styl, uitleg, kleur, lettertipe ens, om daardie kultuur. Uiteindelik nie gebruik MT, masjien vertaling, vir enigiets ernstig of indien dit nodig om akkuraat te wees en wanneer die verkryging van vertalers te verseker dat hulle die vertaling van 'n vreemde taal in hul moedertaal wat beteken dat hulle al die nuanses van die teiken taal te verstaan.

Reg. Oplossings. Op die basis dat jy nie wil hê om die webwerf te herskryf dan net kloon die webwerf wat jy het en vertaal die afskrifte van die doeltaal. Die aanvaarding van die kode basis is stabiel kan jy 'n VCS gebruik om enige kode veranderinge te bestuur. Jy kan individuele dele van die werf af te stel om die doeltaal pas, byvoorbeeld Franse teks is gemiddeld 30% groter as die ekwivalent Engelse teks so die gebruik van 'n site te lewer dit beteken dat jy kan (sal) moet opmaak probleme en moet 'n ruil verskillende css lêer in en uit, afhangende van die taal. Dit mag dalk 'n clunky manier om dit te doen lyk maar dan hoe lank is die webwerwe gaan om te bestaan? Die bestuur oorhoofse doen dit op hierdie manier kan goed minder as ander opsies wees.

Tweede manier sonder herbou. Vervang al die inhoud in die huidige terrein met tags en sit dan die ander taal in lêer of db tafels, snuif die gebruikers gewenste taal (Het jy geregistreer gebruikers wat 'n voorkeur kan maak of wil jy die leser taal tag kry, of is dit gaan URL dot-com dot-fr, dot-de wat die keuse maak) en dan die etikette vervang met die doeltaal wees. Dan moet jy die grootte kwessies en die beeld kwessies afsonderlik aan te spreek. Hierdie oplossing is in effek wanneer raamwerke soos Symfony en Zend doen om l10n implementeer.

Dan kan jy weer op te bou met 'n raamwerk of met gettext en moontlik 'n skoner oplossing, maar onthou raamwerke is ontwerp om ander probleme, nie vertaling en die vertaling komponent het in die raamwerk as gedeeltelike oplossing nie die volle een kom op te los.

Die groot probleem met al die oplossings is deurlopende instandhouding. Want nie net het jy 'n kode basis, maar ook in verskeie tale basisse in stand te hou. Tensy jy al in 'n oplossing is regtig slim en effektiewe dan aan die gang taak sal moeilik wees.

Ander wenke

Werk met tale lêers.

  1. Vervang elke teks string deur 'n veranderlike
  2. Skep 'n taal lêer per taal en in dit definieer elke veranderlike met hul ooreenstemmende teks. (French.inc, dutch.inc ...)
  3. Sluit die reg lêer in elke bladsy.

Dit is vir klein sites.

As al hoe groter, die lêers te vervang deur 'n DB. :)

Dit is belangrik om te sien dat daar twee stappe voor te vertaal:

  1. Internasionalisering: dit wil sê, sodat jou webwerf te verskeie tale hanteer
  2. Lokalisering: dit sluit in jou tekste (wat in stap 1) vertaling van elke taal wat jy van plan is om te ondersteun

meer inligting oor hierdie Sien in Wikipedia .

Stap 1 sal jy nodig het om in ag te neem van die feit dat sommige tale geskryf regs na links (RTL) en nie-Europese karakters soos Japanese of Chinese. As jy nie van plan is om hierdie tale en karakters hanteer dit dalk makliker wees.

Vir hierdie tipe van situasie Ek sou verkies om 'n taal lêer (eintlik soveel taal lêers as tale Ek is van plan om te ondersteun, noem elke as langcode.php as in en.php of fr.php) met 'n assosiatiewe skikking met al die tekste wat gebruik word in die werf. Die prosedure sal gaan soos volg:

  1. Scan jou webwerf vir elke enkele teks wat gevolg moet word gelokaliseerde
  2. Vir elke bladsy / artikel Ek sal 'n $lang['sectionname'][] verskeidenheid skep
  3. Vir elke teks sou ek 'n $lang['sectionname']['textname'] inskrywing te skep
  4. Ek sou 'n Lang.php klas wat 'n lang parameter sou ontvang op Instantiëring maar sou 'n standaard in die geval geen lang ontvang het te skep (hierdie metode baie langcode.php afhangende van die parameter of 'n standaard, afhangende van jou voorkeur taal)
  5. Die klas sal 'n setPage() metode wat die bladsy / artikel jy sal vertoon sal ontvang het
  6. Die klas sal 'n show() metode wat die teks sou ontvang wat vertoon moet word (show() sou genoem word soveel keer as tekste word in 'n gegewe bladsy ... show() 'n soort van wrapper vir echo $lang['mypage']['mytext'])

Op hierdie manier wat jy kan soveel tale as wat jy wil in 'n baie maklike manier. Jy kan selfs 'n taal admin waar jy jou basis taal bladsy oop te maak (jy eintlik net lees rekursief die skikkings en vertoon dit in textareas) en kan dan "Save as ..." 'n ander taal.

Ek gebruik 'n soortgelyke benadering in my site . Dit is slegs een bladsy al is, maar ek gemaak het multi-bladsy webwerwe met hierdie idee.

As jy die gebruiker voorgelê inhoud of 'n paar nogal ingewikkeld CMS het sou dit 'n ander storie wees. Jy kan kyk vir i18n-vriendelike raamwerke (Drupal opkom).

Jy kan kyk na Zend_Translate , dit is 'n mooi omvattende, goed gedokumenteer en algehele kode gehalte is groot. Dit laat jou ook toe om 'n verenigde API gebruik vir gettext, CSV, db, ini lêer, skikking of wat ook al jy uiteindelik die redding van jou vertaal snare in.

Ook, kyk na / kyk hierdie draad: wat is 'n goeie gereedskap / raamwerke vir i18n van 'n php kodebasis? . Dit lyk soortgelyk aan jou vraag.

As dit multibyte karakter ondersteuning, dan is dit dalk die moeite werd uitcheck die multibyte string funksies in PHP wees:

http://uk.php.net/manual/en/book .mbstring.php

Dit sal beter hanteer multi-byte karakters.

Ek gebruik hl parameter en gettext kombinasie van enjin vertalings reeds daar met eie Po wat maak nuwe vertalings en tale verskyn wanneer enjin of my Django / Gae voorbeeld voeg by:

{% get_current_language as LANGUAGE_CODE %}{{ LANGUAGE_CODE }}{% get_available_languages as LANGUAGES %}{% for LANGUAGE in LANGUAGES %}{% ifnotequal LANGUAGE_CODE LANGUAGE.0 %}{{ LANGUAGE.0 }}{% endifnotequal %}{% endfor %}

So hou van duplikate en ten volle gebruik te maak van vertalings reeds daar laat uitgaan hier die vermiste bv Arabiese name maand direk verskyn óf wanneer enjin span voeg of app

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top