Puncte:2

Traducerea unui site multilingv în engleză

drapel sa

Notă: Această întrebare se concentrează numai pe șirurile din fișierele sursă (fișiere PHP).

Când creați un site Drupal într-o țară care nu este engleză (să spunem Franța), veți crea toate fișierele PHP cu șiruri franceze în interior.

După aceea, puteți traduce acest site, să spunem în olandeză. Veți extrage fișierele PO, le veți trimite în traducere și le veți reimporta.

Până în acest moment, totul este în regulă.

Acum, clientul dvs. dorește ca site-ul să fie tradus și în engleză.

După cum probabil știți, toate fișierele sursă (cu șiruri franceze) sunt de fapt considerate a fi în limba engleză de către sistem.

Aceasta înseamnă că pentru a gestiona acest fapt, trebuie să:

  1. Extrageți fișierele PO pentru a le traduce în franceză

  2. Convertiți toate fișierele sursă cu șiruri franceze în aceleași fișiere sursă, dar cu șiruri în limba engleză (folosind traducerea creată la pasul 1)

  3. Reveniți limbile fișierului PO creat la pasul 1 (limba sursă devine limba țintă și invers)

  4. Importați fișierul inversat creat la pasul 3 în site

Dacă credeți că greșesc complet cu acest proces, nu ezitați să-mi explicați de ce. Cel mai complicat pas este pasul 2: cunoașteți un proces fără probleme sau un instrument bun pentru a-l gestiona?

Presupun că voi găsi ceva pentru pasul 3, dar orice idee este binevenită.

Sohail avatar
drapel ru
O bună practică este să considerați întotdeauna șirurile din codul dvs. ca fiind engleză încă de la primul pas și apoi să le traduceți în limba dvs. principală, să spunem, franceză. dar da, dacă aș fi în locul tău, mi-aș schimba șirurile pe „engleză” și aș continua de acolo
apaderno avatar
drapel us
Sistemul de traducere Drupal funcționează când șirul sursă este în engleză.Dacă numesc `t()` ca `t('Sì, questa è una frase in italiano.")` șirul nu va fi tradus deoarece niciunul dintre șirurile sursă nu va conține expresii care nu sunt în engleză.
Baud avatar
drapel sa
@Sohail: clientul nu vrea să plătească pentru o traducere în engleză dacă nu a avut nevoie... Dar ai dreptate... cea mai bună practică! Aveți idee despre un proces de schimb de șiruri în fișierele php?
Baud avatar
drapel sa
@apaderno: Funcționează bine până când adăugați engleza ca limbă adăugată a site-ului. Până în acest moment, puteți face t("une phrase en français") va funcționa bine
apaderno avatar
drapel us
Da, dar pentru că returnează același șir pe care l-ați transmis la `t()`, atunci când o traducere nu este găsită. În mod clar, nu găsește o traducere pentru `'une phrase en français'` deoarece *une phrase en français* nu este o propoziție în engleză. Asta nu se traduce.
apaderno avatar
drapel us
`t()` este întotdeauna pentru a traduce din engleză în limba setată ca implicită de pe site, limba setată de utilizatori ca limbă sau limba setată pentru un nod. Nu se traduce din italiană în olandeză, de exemplu, sau din franceză în engleză. Acest lucru este documentat în [`t()`](https://api.drupal.org/api/drupal/core%21includes%21bootstrap.inc/function/t/8.9.x). ***șir $șir**: un șir care conține textul în limba engleză de tradus.*
Baud avatar
drapel sa
@apaderno ai dreptate, dar poți înțelege că un client nu vrea să plătească pentru a traduce un site francez în engleză doar pentru a avea fișierul sursă în engleză (presupunând că nu are nevoie de site în engleză) Dacă sunteți de acord cu asta, poți înțelege unde sunt.
apaderno avatar
drapel us
Nu trebuie să traduceți un site din franceză în engleză: Toate modulele folosesc șiruri în engleză, așa că site-ul este deja „tradus” în engleză. Dacă cineva trece la `t()` un șir în franceză, este „vina” acelei persoane.
Baud avatar
drapel sa
@apaderno: nu, trebuie să-l traduc deoarece am mai multe module personalizate cu mii de șiruri franceze în el...
apaderno avatar
drapel us
Editați șirurile pe care acele module le transmit la `t()` pentru a conține expresii în engleză, iar site-ul va apărea în engleză, când engleza este setată ca limbă implicită.
Puncte:1
drapel ru

După cum am menționat în comentarii, Începeți întotdeauna cu șir în engleză și traduceți asta, chiar dacă este un site web într-o singură limbă, pentru a ușura durerea, iată ce fac întotdeauna pentru a păstra șirurile și traducerile conținute în tema în sine:

deschide-ți THEMENAME.info.yml fișier și adăugați următoarele:

„proiect de traducere a interfeței”: THEMENAME
„model de server de traducere de interfață”: „themes/custom/THEMENAME/translations/%language.po”

apoi creați un traduceri directorul din tema ta și acolo poți adăuga traducerea .po fisiere, de ex. fr.po pentru franceza sau nb.po pentru norvegiană

Aceasta este sintaxa pe care trebuie să o ai în interiorul tău .po fişier:

msgstr "Bună lume"
msgstr "Bonjour le monde"

Deci ori de câte ori scrii Salut Lume sfoară în a t() funcție sau ca filtru în fișierul twig astfel: {{ Bună lume|t }} ar ști să importe traducerile de acolo

Dar cum se declanșează importul traducerii?

drush local: verifica - nu este necesar, dar verifică dacă sunt adăugate șiruri noi

local drush:actualizare - Importă traducerile și gata

Rețineți că puteți adăuga/rula acest lucru și la procedura de implementare și vă face viața mai ușoară, nu este nevoie de traducere UI, doar adăugați șirul dvs. la dvs. .po fișier ori de câte ori scrieți șir codificat în fișierele dvs

Actualizați: Nici nu am observat că vorbim de Drupal 7, aceasta se referă la Drupal 8 pentru viitorii cititori

Baud avatar
drapel sa
Ti-am recompensat raspunsul chiar daca nu imi raspunde la intrebare pentru ca am invatat multe lucruri din el
Sohail avatar
drapel ru
Mulțumesc, nici nu am observat că vorbim de Drupal 7, asta se referă la Drupal 8
Puncte:1
drapel de

Este într-adevăr cea mai bună practică ca șirurile din codul dvs. să fie scrise în engleză (nu voi discuta acest punct).

Totuși, am avut o problemă similară odată cu un site web (Drupal 7) dezvoltat de un coleg de-al meu. Clientul a dorit inițial să aibă site-ul în NL și FR și doar mulți ani mai târziu a decis să adauge o versiune EN.

Problemă: șirurile din cod erau o combinație de NL și FR...

Soluția pe care am găsit-o a fost să activez limba „engleză, britanică” (și să dezactivez limba de bază „engleză”, deoarece limba implicită era NL).În acest fel, toate șirurile dvs. pot fi traduse în en-gb din traducerea interfeței sau din importul unui fișier .po.

În Drupal 8/9, este și mai ușor cu cât există o casetă etichetată „Activați traducerea interfeței în engleză” pe pagina admin/config/regional/language/edit/en.

Baud avatar
drapel sa
Aceasta este, deocamdată, cea mai bună încercare de a-mi răspunde la întrebare... Sunt foarte bucuros de noua caracteristică Drupal 8/9 (din păcate, acesta este un site D7). Cred că nu voi folosi acest truc pentru că am multe alte conținuturi deja traduse în engleză (Node etc) Mi-e teamă să convertesc toate aceste lucruri în EN-GB... Dar, mulțumesc, acesta este un sfat frumos. (te-am recompensat)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.