@@ -1314,6 +1314,132 @@ adapted to the format required by GitHub, but you can force that format too:
1314
1314
1315
1315
$ php vendor/bin/yaml-lint translations/
1316
1316
1317
+ Pseudo-localization translator
1318
+ ------------------------------
1319
+
1320
+ .. note ::
1321
+
1322
+ The pseudolocalization translator is meant to be used for development only.
1323
+
1324
+ The following image shows the main menu of the interface of a popular Internet
1325
+ service:
1326
+
1327
+ .. image :: /_images/translation/pseudolocalization-interface-original.png
1328
+
1329
+ This other image shows the same menu when the user switches the language to
1330
+ Spanish. Unexpectedly, some text is cut and other contents are so long that
1331
+ they overflow and you can't see them:
1332
+
1333
+ .. image :: /_images/translation/pseudolocalization-interface-translated.png
1334
+
1335
+ These kind of errors are very common, because different languages can be longer
1336
+ or shorter than the original application language. Another common issue is to
1337
+ only check if the application works when using basic accented letters, instead
1338
+ of checking for more complex characters such as the ones found in Polish,
1339
+ Czech, etc.
1340
+
1341
+ These problems can be solved with `pseudolocalization `_, a software testing method
1342
+ used for testing internationalization. In this method, instead of translating
1343
+ the text of the software into a foreign language, the textual elements of an
1344
+ application are replaced with an altered version of the original language.
1345
+
1346
+ For example, ``Account Settings `` is *translated * as ``[!!! Àççôûñţ
1347
+ Šéţţîñĝš !!!] ``. First, the original text is expanded in length with characters
1348
+ like ``[!!! !!!] `` to test the application when using languages more verbose
1349
+ than the original one. This solves the first problem.
1350
+
1351
+ In addition, the original characters are replaced by similar but accented
1352
+ characters. This makes the text highly readable, while allowing to test the
1353
+ application with all kinds of accented and special characters. This solves the
1354
+ second problem.
1355
+
1356
+ Full support for pseudolocalization was added to help you debug
1357
+ internationalization issues in your applications. You can enable and configure
1358
+ it in the translator configuration:
1359
+
1360
+ .. configuration-block ::
1361
+
1362
+ .. code-block :: yaml
1363
+
1364
+ # config/packages/translation.yaml
1365
+ framework :
1366
+ translator :
1367
+ pseudo_localization :
1368
+ # replace characters by their accented version
1369
+ accents : true
1370
+ # wrap strings with brackets
1371
+ brackets : true
1372
+ # controls how many extra characters are added to make text longer
1373
+ expansion_factor : 1.4
1374
+ # maintain the original HTML tags of the translated contents
1375
+ parse_html : true
1376
+ # also translate the contents of these HTML attributes
1377
+ localizable_html_attributes : ['title']
1378
+
1379
+ .. code-block :: xml
1380
+
1381
+ <!-- config/packages/translation.xml -->
1382
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
1383
+ <container xmlns =" http://symfony.com/schema/dic/services"
1384
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
1385
+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
1386
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
1387
+ https://symfony.com/schema/dic/services/services-1.0.xsd
1388
+ http://symfony.com/schema/dic/symfony
1389
+ https://symfony.com/schema/dic/symfony/symfony-1.0.xsd" >
1390
+
1391
+ <framework : config >
1392
+ <framework : translator >
1393
+ <!-- accents: replace characters by their accented version -->
1394
+ <!-- brackets: wrap strings with brackets -->
1395
+ <!-- expansion_factor: controls how many extra characters are added to make text longer -->
1396
+ <!-- parse_html: maintain the original HTML tags of the translated contents -->
1397
+ <framework : pseudo-localization
1398
+ accents =" true"
1399
+ brackets =" true"
1400
+ expansion_factor =" 1.4"
1401
+ parse_html =" true"
1402
+ >
1403
+ <!-- also translate the contents of these HTML attributes -->
1404
+ <framework : localizable-html-attribute >title</framework : localizable-html-attribute >
1405
+ </framework : pseudo-localization >
1406
+ </framework : translator >
1407
+ </framework : config >
1408
+ </container >
1409
+
1410
+ .. code-block :: php
1411
+
1412
+ // config/packages/translation.php
1413
+ use Symfony\Config\FrameworkConfig;
1414
+
1415
+ return static function (FrameworkConfig $framework) {
1416
+ // ...
1417
+ $framework
1418
+ ->translator()
1419
+ ->pseudoLocalization()
1420
+ // replace characters by their accented version
1421
+ ->accents(true)
1422
+ // wrap strings with brackets
1423
+ ->brackets(true)
1424
+ // controls how many extra characters are added to make text longer
1425
+ ->expansionFactor(1.4)
1426
+ // maintain the original HTML tags of the translated contents
1427
+ ->parseHtml(true)
1428
+ // also translate the contents of these HTML attributes
1429
+ ->localizableHtmlAttributes(['title'])
1430
+ ;
1431
+ };
1432
+
1433
+ That's all. The application will now start displaying those strange, but
1434
+ readable, contents to help you internationalize it. See for example the
1435
+ difference in the `Symfony Demo `_ application. This is the original page:
1436
+
1437
+ .. image :: /_images/translation/pseudolocalization-symfony-demo-disabled.png
1438
+
1439
+ And this is the same page with pseudolocalization enabled:
1440
+
1441
+ .. image :: /_images/translation/pseudolocalization-symfony-demo-enabled.png
1442
+
1317
1443
Summary
1318
1444
-------
1319
1445
@@ -1351,3 +1477,5 @@ Learn more
1351
1477
.. _`Machine object format` : https://www.gnu.org/software/gettext/manual/html_node/MO-Files.html
1352
1478
.. _`QT Translations TS XML` : https://doc.qt.io/qt-5/linguist-ts-file-format.html
1353
1479
.. _`GitHub Actions` : https://docs.github.com/en/free-pro-team@latest/actions
1480
+ .. _`pseudolocalization` : https://en.wikipedia.org/wiki/Pseudolocalization
1481
+ .. _`Symfony Demo` : https://github.com/symfony/demo
0 commit comments