survos / libre-translate-bundle
Package info
github.com/survos/LibreTranslateBundle
Type:symfony-bundle
pkg:composer/survos/libre-translate-bundle
Fund package maintenance!
1.7.0
2026-06-08 20:14 UTC
Requires
- php: ^8.4
- symfony/config: ^7.4|^8.0
- symfony/dependency-injection: ^7.4|^8.0
- symfony/http-client: ^7.4|^8.0
- symfony/http-kernel: ^7.4|^8.0
- symfony/string: ^7.4|^8.0
- symfony/validator: ^7.4|^8.0
- twig/twig: ^3.4
Requires (Dev)
- phpstan/phpstan: ^2.0
- symfony/browser-kit: ^7.4|^8.0
- symfony/cache: ^7.4|^8.0
- symfony/framework-bundle: ^7.4|^8.0
- symfony/phpunit-bridge: ^7.4|^8.0
- symfony/twig-bundle: ^7.4|^8.0
- symfony/var-dumper: ^7.4|^8.0
This package is auto-updated.
Last update: 2026-06-08 20:15:45 UTC
README
A bundle based on jefs42/libretranslate
Setup
Install libretranslate local
Demo
symfony new TranslationDemo --webapp && cd TranslationDemo composer req survos/libre-translate-bundle bin/console make:controller AppController
dokku storage:mount /mnt/volume-1/project-data/trans/data:/app/data chown -R 32767:32767 /mnt/volume-1/project-data/trans
Open AppController.php and add
#[Route('/{target}', name: 'app_homepage')] public function home( LibreTranslate $libreTranslate, CacheInterface $cache, string $target = 'es'): Response { $url = 'https://saurav.tech/NewsAPI/top-headlines/category/health/in.json'; $data = $cache->get(md5($url), fn(CacheItem $item) => json_decode(file_get_contents($url))); $translations = []; foreach ($data->articles as $idx => $article) { $translations[] = $cache->get(md5($article->title).$target, fn(CacheItem $cacheItem) => $libreTranslate->Translate($article->title, target: $target) ); } return $this->render('app/index.html.twig', [ 'headlines' => $data, 'translations' => $translations, 'languages' => $libreTranslate->Languages() ]); }
Open app/index.html and replace the body with
{% for locale, lang in languages %}
<a href="{{ path('app_homepage', {target: locale}) }}">
{{ lang }}
</a>
|
{% endfor %}
<table>
<tbody>
{% for idx, headline in headlines.articles %}
<tr>
<td>
<img style="width: 100px" src="{{ headline.urlToImage }}" />
</td>
<td>
{{ headline.title }}
<br />
<i>
{{ translations[idx] }}
</i>
</td>
</tr>
{% endfor %}
</tbody>
</table>
Run the symfony server to see the results:
symfony server:start
Generating code classes
Install java 11 or higher
Get CLI jar:
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/6.6.0/openapi-generator-cli-6.6.0.jar -O openapi-generator-cli.jar
Run command to generate classes:
java -jar openapi-generator-cli.jar generate -i libretranslate.json -g php -o ~/projects/survos/test-libre-gen/