Puncte:0

Este posibil să redați o vizualizare pe baza limbii conținutului?

drapel us

Drupal acceptă conceptul de limbaj de interfață și limbaj de conținut. Eu (și fiecare client pe care l-am întrebat vreodată) par să am o părere diferită despre ceea ce este „conținut” și ce este „interfață” decât are Drupal (în majoritatea cazurilor). Consider Interfața ca elementele pe care un administrator sau un editor le-ar folosi pentru a-și face treaba (meniul de administrare, fila de editare, detalii de ajutor pentru formulare etc.), iar conținutul este ceea ce ar vedea non-administratorii (adesea, acesta este Anon, dar nu întotdeauna).

O viziune pe care o creez pentru a prezenta „conținut” pe site, în mod firesc o consider conținut – dar Drupal are o idee inconsecventă și adesea incorectă despre ce este acesta.

Pentru început, am configurat site-ul astfel încât limba interfeței să fie definită de limba preferată a utilizatorului (cum ar seta un administrator/editor de site) și limba conținutului este definită de prefixul codului de limbă URL.

Un exemplu de vizualizare de testare arată astfel în FR (url-ul este /fr/test) - Limba interfeței este setată la EN:

continut = FR, interfata = EN

Acest lucru este în mod clar incorect, așa cum se poate vedea cu afișajul corespunzător când am setat limba interfeței la FR:

continut = FR, interfata = FR

Views are numeroase opțiuni pentru a seta modul în care este determinată limba de randare a „conținutului”. Pentru exemplul meu de mai sus, este setat să se redeze pe baza „limbii de conținut” a paginii (și, prin urmare, adresa URL). Acest lucru funcționează pentru majoritatea datelor de câmp (titlu, termeni de taxonomie, câmpuri de text traduse); dar, din păcate, nu funcționează pentru câmpurile Datetime - par a fi greu codificate pentru a traduce incorect folosind Interfață. Dar puteți vedea, de asemenea, că porțiunile de configurare ale vizualizării (titlul vizualizării, etichetele câmpurilor etc.) sunt traduse și ca interfață.

Există vreo modalitate de a spune unei vizualizări să traducă folosind limba de conținut?

Am folosit următorul cod:

  $languageManager = \Drupal::languageManager();
  $langcode = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
  $language = $languageManager->getLanguage($langcode);
  $languageManager->setConfigOverrideLanguage($limba);

în cadrul unei funcții de preprocesare a blocurilor pentru a permite unora dintre bucățile bloc care folosesc incorect limbajul de interfață să se traducă cu limba de conținut. Există vreo modalitate similară de a suprascrie limba interfeței pe care o vizualizare o folosește pentru traducere? Sper că este ceva asemănător codului de mai sus, dar pur și simplu nu îl introduc în locul potrivit (am încercat fără succes cârlige pentru pre-build, pre-render, query_alter).

Dacă acest lucru este posibil, mi-ar plăcea să scriu un modul contrib pentru a utiliza interfața existentă într-o vizualizare pentru a seta limbajul de randare și a-l face să redea totul, mai degrabă decât anumite câmpuri.

Jaypan avatar
drapel de
„Acest lucru este în mod clar incorect, după cum se poate vedea”
liquidcms avatar
drapel us
ok, poate nu chiar asa de clar? Limba conținutului este setată (prefixul URL) la franceză - așa că aș dori ca tabelul să fie în franceză. Totul. Singurele părți care sunt setate la FR așa cum se stabilește de limbajul de redare a vizualizării sunt datele din coloana (1). Celelalte părți: titlurile coloanelor, datele din coloanele 2 și 3 (date) și titlul vizualizării sunt încă afișate în EN. Ieșirea corectă poate fi văzută de a doua imagine când am setat limba interfeței la FR.
Jaypan avatar
drapel de
Datele sunt interfețe, motiv pentru care cred că sunt afișate în funcție de limba interfeței, mai degrabă decât de limba de conținut actual. Din păcate, nu am o soluție la asta.
liquidcms avatar
drapel us
Nu mă pot gândi la raționamentul potrivit căruia datele ar fi considerate, indiferent de definiția Drupal a interfeței, dar da, sunt traduse incorect ca interfață. Sunt sigur că este un bug; dar nu despre ce întreb. În loc să trimit un patch pentru a remedia modulul Datetime, vreau să îmi dau seama cum să fac o redare completă a vederii cu un limbaj definit.
drapel ru
Datele nu sunt traduse, sunt localizate (la fel ca simbolul punctului zecimal), iar localizarea se bazează pe limba interfeței. De exemplu. `07/12` este `12 iulie` în SUA, în timp ce fiecare european ar citi acest lucru drept `7 decembrie`. Fără context, `1.000` ar fi `unu (virgulă zero)` în SUA și este `o mie` în țările vorbitoare de germană. Localizarea lui Drupal este excelentă și perfect așa cum este.
Jaypan avatar
drapel de
Datele pot fi traduse - sunt configurații, iar traducerea poate fi activată pentru ele.
liquidcms avatar
drapel us
@Hudri, înțeleg cum funcționează întâlnirile. De fapt, 2 bucăți: șiruri localizate, cum ar fi luna și ziua săptămânii, precum și formate traduse așa cum menționează Jaypan. Problema este „bazată pe limbajul interfeței” – da, este adevărat – și greșită. De ce ați dori vreodată un tabel Vizualizări cu fiecare coloană în limba corectă, cu excepția coloanei date? Bănuiesc că ați rulat întotdeauna cu Drupal implicit, care este să aveți interfață/traducere de conținut legate împreună. Notă: OP-ul meu se referă la controlul modului în care vizualizările sunt randate - nu despre date. Cred că Jaypan înțelege ce încerc să fac. :)
drapel ru
*Problema este „bazată pe limbajul interfeței” - da, este adevărat - și greșit.* - Nu sunt absolut de acord aici :-) Compania noastră se concentrează pe clienții din turism, _toate_ proiectele noastre sunt multilingve. De exemplu. oferă pachete de vacanță și este esențial să obțineți formatul de dată în formatul de dată obișnuit al oaspeților (chiar dacă nodul nu este tradus, totuși primesc date localizate din limba interfeței). Acest lucru salvează o mulțime de întrebări și probleme în afacerea noastră. La subiect: Îmi pare rău, nu știu răspunsul.
liquidcms avatar
drapel us
Da, cazurile noastre de utilizare sunt diferite. Al meu este pentru un site al guvernului federal canadian. Nu există pagini netraduse. Scopul meu este să creez un site în care conținutul (care include datele) este definit de limbajul de conținut al site-ului (url); dar editorii site-ului pot lucra în limba (interfața) preferată. Dar mai la obiect; Drupal aproape permite aceste cazuri de utilizare diferite. Chiar și pentru Vizualizări, au o opțiune despre cum să decidă limba pentru a reda vizualizarea - pur și simplu nu funcționează corect. Bănuiesc că site-ul dvs. are setarea de detectare a conținutului/interfeței la fel, corect?
Puncte:0
drapel us

Ughh.. se pare că întrebarea mea a avut răspunsul tot timpul. Când adaug fragmentul de cod:

  $languageManager = \Drupal::languageManager();
  $langcode = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
  $language = $languageManager->getLanguage($langcode);
  $languageManager->setConfigOverrideLanguage($limba);

la un cârlig _views_pre_render, face ceea ce vreau și folosește limbajul de suprascriere de configurare pentru a înlocui limba folosită pentru părțile configurabile ale vizualizării (titlu, titluri de coloană și multe altele). Singurul lucru pe care nu îl gestionează sunt datele - deoarece acestea sunt doar greșite în modulul Datetime. Nu sunt sigur de ce nu am văzut că funcționează când l-am încercat mai devreme.

Și pot suprascrie serviciul de bază DateFormatter pentru a utiliza limbajul de conținut în loc de limba implicită (care este interfața) și acest lucru fixează datele peste tot pe site. Acest lucru ar trebui probabil trimis ca un patch la bază, deoarece sunt sigur că acesta este o eroare - de ce ar fi datele considerate interfață diferit de orice alt conținut?

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.