-
-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 2.4: (30 commits) [#4166] Fixing small typo caution on `null` values in Expression constraint Fixed all the errors found by Ryan Removed two highlight formats which are "experimental" and not used by end users Reworded the explanation about the limitation of enablin PHP templates Improved the explanation thanks to @stof comments More and more fixes and improvements Added another bunch of fixes suggested by reviewers Added lots of fixes suggested by reviewers Added a note about not using relative internal links in the doc Switched another relative link into an absolute reference lways use absolute links instead of relative for internal doc links Added missing link Revamped the documentation about "Contributing Docs" do not reference services in parameters Fix reference label Add label book-security-roles Add formatting, links, and clarity Added a note about the side effects of enabling both PHP and Twig Caution that roles should start with ROLE_ ...
- Loading branch information
Showing
15 changed files
with
525 additions
and
289 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
.. index:: | ||
single: Translation; Adding Custom Format Support | ||
|
||
Adding Custom Format Support | ||
============================ | ||
|
||
Sometimes, you need to deal with custom formats for translation files. The | ||
Translation component is flexible enough to support this. Just create a | ||
loader (to load translations) and, optionally, a dumper (to dump translations). | ||
|
||
Imagine that you have a custom format where translation messages are defined | ||
using one line for each translation and parentheses to wrap the key and the | ||
message. A translation file would look like this: | ||
|
||
.. code-block:: text | ||
(welcome)(accueil) | ||
(goodbye)(au revoir) | ||
(hello)(bonjour) | ||
Creating a Custom Loader | ||
------------------------ | ||
|
||
To define a custom loader that is able to read these kinds of files, you must create a | ||
new class that implements the | ||
:class:`Symfony\\Component\\Translation\\Loader\\LoaderInterface`. The | ||
:method:`Symfony\\Component\\Translation\\Loader\\LoaderInterface::load` | ||
method will get a filename and parse it into an array. Then, it will | ||
create the catalog that will be returned:: | ||
|
||
use Symfony\Component\Translation\MessageCatalogue; | ||
use Symfony\Component\Translation\Loader\LoaderInterface; | ||
|
||
class MyFormatLoader implements LoaderInterface | ||
{ | ||
public function load($resource, $locale, $domain = 'messages') | ||
{ | ||
$messages = array(); | ||
$lines = file($resource); | ||
|
||
foreach ($lines as $line) { | ||
if (preg_match('/\(([^\)]+)\)\(([^\)]+)\)/', $line, $matches)) { | ||
$messages[$matches[1]] = $matches[2]; | ||
} | ||
} | ||
|
||
$catalogue = new MessageCatalogue($locale); | ||
$catalogue->add($messages, $domain); | ||
|
||
return $catalogue; | ||
} | ||
|
||
} | ||
|
||
Once created, it can be used as any other loader:: | ||
|
||
use Symfony\Component\Translation\Translator; | ||
|
||
$translator = new Translator('fr_FR'); | ||
$translator->addLoader('my_format', new MyFormatLoader()); | ||
|
||
$translator->addResource('my_format', __DIR__.'/translations/messages.txt', 'fr_FR'); | ||
|
||
echo $translator->trans('welcome'); | ||
|
||
It will print *"accueil"*. | ||
|
||
Creating a Custom Dumper | ||
------------------------ | ||
|
||
It is also possible to create a custom dumper for your format, which is | ||
useful when using the extraction commands. To do so, a new class | ||
implementing the | ||
:class:`Symfony\\Component\\Translation\\Dumper\\DumperInterface` | ||
must be created. To write the dump contents into a file, extending the | ||
:class:`Symfony\\Component\\Translation\\Dumper\\FileDumper` class | ||
will save a few lines:: | ||
|
||
use Symfony\Component\Translation\MessageCatalogue; | ||
use Symfony\Component\Translation\Dumper\FileDumper; | ||
|
||
class MyFormatDumper extends FileDumper | ||
{ | ||
protected function format(MessageCatalogue $messages, $domain = 'messages') | ||
{ | ||
$output = ''; | ||
|
||
foreach ($messages->all($domain) as $source => $target) { | ||
$output .= sprintf("(%s)(%s)\n", $source, $target); | ||
} | ||
|
||
return $output; | ||
} | ||
|
||
protected function getExtension() | ||
{ | ||
return 'txt'; | ||
} | ||
} | ||
|
||
The :method:`Symfony\\Component\\Translation\\Dumper\\FileDumper::format` | ||
method creates the output string, that will be used by the | ||
:method:`Symfony\\Component\\Translation\\Dumper\\FileDumper::dump` method | ||
of the FileDumper class to create the file. The dumper can be used like any other | ||
built-in dumper. In the following example, the translation messages defined in the | ||
YAML file are dumped into a text file with the custom format:: | ||
|
||
use Symfony\Component\Translation\Loader\YamlFileLoader; | ||
|
||
$loader = new YamlFileLoader(); | ||
$catalogue = $loader->load(__DIR__ . '/translations/messages.fr_FR.yml' , 'fr_FR'); | ||
|
||
$dumper = new MyFormatDumper(); | ||
$dumper->dump($catalogue, array('path' => __DIR__.'/dumps')); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,3 +6,4 @@ Translation | |
|
||
introduction | ||
usage | ||
custom_formats |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.