"El dolor es dolor, como sea que lo llames.
Esto es miedo, donde hay miedo, no hay lugar para el amor".
Agatha Christie
Cuántos proyectos no han pasado por mis manos, siempre los mismos, los archivos de traducciĂłn están en un estado terrible. Este problema se expresa mejor con las palabras de Agatha Christie al comienzo del artĂculo. Los matices lingĂĽĂsticos y la calidad de las traducciones no se entenderán aquĂ. Supongamos que tenemos excelentes traducciones. Bajo el corte se resuelven aquellos problemas que se pueden controlar por medios tĂ©cnicos y las herramientas diseñadas para ello. El material está destinado a personas con experiencia con Symfony y, en general, con la consola Linux. TambiĂ©n se supone que sabe cĂłmo conectar paquetes de terceros al proyecto. Por tanto, algunas de las cuestiones no se abordan desde el punto de vista de "todo está claro".
De todos los problemas asociados con las traducciones, existen aquellos que son muy difĂciles de controlar por medios tĂ©cnicos. Por ejemplo, la calidad de las traducciones, su significado semántico y la conveniencia de usar ciertas palabras en una parte particular de la interfaz de usuario. Y hay aquellos que tĂ©cnicamente son bastante fáciles de controlar. De la Ăşltima categorĂa, que solemos encontrar en proyectos, podemos destacar:
Falta de algunas traducciones. Incluso si se agregan traducciones para uno o dos idiomas, no se agregan para el resto.
No se agregaron traducciones en absoluto.
El uso de espinas similares, pero diferentes, para las mismas traducciones.
Diferentes traducciones para las mismas llaves (llaves duplicadas). Como resultado, obtenemos que la traducción requerida está disponible, pero no se muestra lo que esperamos.
Pero esta es una manifestaciĂłn externa del problema. Cual es su base?
3 :
. ? . . . . .
: . , , . . .
? . . PHPUnit. , CI ? - , .
. , 100500 . , “symfony/translation”. , , . , , .
. , . Github-. Symfony 4.4+ . .
, , — “” . , YAML . . — . . , . :
. , , - , .
.
. ( ) . , .
:
aeliot_trans_maintain:yaml:transform PATH_TO_FILE_IN PATH_TO_FILE_OUT
Symfony. , PATH_TO_FILE_OUT PATH_TO_FILE_IN. . Linux find grep . , YAML :
find PATH_TO_DIRECTORY -type f \( -iname \*.yml -o -iname \*.yaml \) | sort | xargs -I {} -t php bin/console aeliot_trans_maintain:yaml:transform $1{}
,
. — , Google Translate. , . . .
:
bin/console aeliot_trans_maintain:yaml:export_missed_translations DOMAIN DONOR_LOCALE FILTER_BY_LOCALE
:
DOMAIN — .
DONOR_LOCALE —
FILTER_BY_LOCALE — . , , . , .
. StdOut. . :
bin/console a:y:e messages en de > ./donor.txt
- , Symfony . .
PhpStorm . . , , .
! . YAML Symfony (\Symfony\Component\Yaml\Yaml::dump()), . , . .
, — . ( : insert_missed_keys). , , , .
:
no — . .
end —
merge — . .
: no end. dev , .. . - , - .
:
parameters:
env(TRANS_MAINTAIN_INSERT_MISSED_KEYS): no
aeliot_trans_maintain:
insert_missed_keys: "%env(TRANS_MAINTAIN_INSERT_MISSED_KEYS)%"
/ TRANS_MAINTAIN_INSERT_MISSED_KEYS .env .env.local - .
. . . . … . ? ?
:
aeliot_trans_maintain:lint:yaml KEY_1 KEY_2 KEY_N
0 1 . StdOut . . .
:
base — ().
all — . . , base , all .
:
files_missed — , . , . , .
keys_missed — , . , ( ) , . , , .
keys_duplicated — . , , .
base. , .
CI . , - , .
.
:
. , .
.
API Google/Yandex . .
. .