{"id":19692339,"url":"https://github.com/ddrv/php-translator","last_synced_at":"2026-05-26T16:33:36.576Z","repository":{"id":56964320,"uuid":"260708329","full_name":"ddrv/php-translator","owner":"ddrv","description":"PHP library for localization application","archived":false,"fork":false,"pushed_at":"2020-07-04T12:05:18.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-10T08:58:40.621Z","etag":null,"topics":["i18n","internationalization","l10n","localization","php","php-library","translation"],"latest_commit_sha":null,"homepage":"https://packagist.org/packages/ddrv/translator","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ddrv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"custom":"https://www.paypal.me/ddrv"}},"created_at":"2020-05-02T14:47:21.000Z","updated_at":"2020-07-04T12:05:20.000Z","dependencies_parsed_at":"2022-08-21T05:40:28.751Z","dependency_job_id":null,"html_url":"https://github.com/ddrv/php-translator","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrv%2Fphp-translator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrv%2Fphp-translator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrv%2Fphp-translator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrv%2Fphp-translator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ddrv","download_url":"https://codeload.github.com/ddrv/php-translator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241001172,"owners_count":19891946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["i18n","internationalization","l10n","localization","php","php-library","translation"],"created_at":"2024-11-11T19:13:02.381Z","updated_at":"2026-05-26T16:33:36.526Z","avatar_url":"https://github.com/ddrv.png","language":"PHP","funding_links":["https://www.paypal.me/ddrv"],"categories":[],"sub_categories":[],"readme":"# ddrv/translator\n\n[![Latest Stable Version](https://img.shields.io/packagist/v/ddrv/translator.svg?style=flat-square)](https://packagist.org/packages/ddrv/translator)\n[![Total Downloads](https://img.shields.io/packagist/dt/ddrv/translator.svg?style=flat-square)](https://packagist.org/packages/ddrv/translator/stats)\n[![License](https://img.shields.io/packagist/l/ddrv/translator.svg?style=flat-square)](https://github.com/ddrv/php-translator/blob/master/LICENSE)\n[![PHP](https://img.shields.io/packagist/php-v/ddrv/translator.svg?style=flat-square)](https://php.net)\n\n\nPHP library for localization application.\n\n# Install\n\n1. Run in terminal:\n    ```text\n    composer require ddrv/translator:^2\n    ```\n\n1. Include autoload file\n    ```php\n    require_once 'vendor/autoload.php';\n    ```\n\n# Usage\n\n1. Prepare translations\n\n```php\n\u003c?php\n# /path/to/translations/default/en_US.php\n\nreturn [\n    'test' =\u003e 'It is test!',\n    'hello' =\u003e 'Hello, %name%',\n    'count' =\u003e '%count% element|%count% elements|{0}no elements',\n    'interval' =\u003e '[-Inf,0[negative|[0,Inf]positive',\n    'multi' =\u003e [\n        'level' =\u003e [\n            'key' =\u003e 'It is key in multilevel array.',\n        ],\n    ],\n];\n```\n\n```php\n\u003c?php\n# /path/to/translations/default/ru_RU.php\n\nreturn [\n    'test' =\u003e 'Это тест!',\n    'hello' =\u003e 'Привет, %name%',\n    'count' =\u003e '%count% элемент|%count% элемента|%count% элементов|{0}элементов нет',\n    'interval' =\u003e '[-Inf,0[отрицательное|[0,Inf]положительное',\n    'multi' =\u003e [\n        'level' =\u003e [\n            'key' =\u003e 'Это ключ в многоуровневом массиве.',\n        ],\n    ],\n];\n```\n\n1. Init library\n```php\n\u003c?php\n\nuse Ddrv\\Translator\\Loader\\FileLoader;\nuse Ddrv\\Translator\\Provider\\TranslationProvider;\nuse Ddrv\\Translator\\Translator;\n\n// Create a loader instance. \n$loader = new FileLoader('/path/to/translations');\n\n$translations = new TranslationProvider($loader);\n\n$translator = new Translator('en_US', $translations);\n\n```\n\n1. Use it!\n\n```php\n\u003c?php\n\nuse Ddrv\\Translator\\Translator;\n\n/** @var Translator $translator */\n$translator-\u003etrans('default:test'); // It is test!\n$translator-\u003etrans('default:multi.level.key'); // It is key in multilevel array.\n$translator-\u003etrans('default:test', [], 'ru_RU'); // Это тест!\n\n$translator-\u003esetLocale('ru_RU');\n$translator-\u003etrans('default:test'); // Это тест!\n$translator-\u003etrans('default:multi.level.key'); // Это ключ в многоуровневом массиве.\n```\n\n1. Parameters\n\n```php\n\u003c?php\n\nuse Ddrv\\Translator\\Translator;\n\n/** @var Translator $translator */\n$translator-\u003etrans('default:hello', ['name' =\u003e 'Ivan']); // Hello, Ivan!\n$translator-\u003etrans('default:hello', ['name' =\u003e 'John']); // Hello, John!\n```\n\n1. Pluralization\n\n```php\n\u003c?php\n\nuse Ddrv\\Translator\\Translator;\n\n/** @var Translator $translator */\n$translator-\u003etrans('default:count', ['count' =\u003e 1]); // 1 element!\n$translator-\u003etrans('default:count', ['count' =\u003e 2]); // 2 elements!\n\n$translator-\u003etrans('default:interval', ['count' =\u003e -2]); // negative\n$translator-\u003etrans('default:interval', ['count' =\u003e 2]); // positive\n```\n\nYou can develop your loader that implements the `\\Ddrv\\Translator\\Contract\\DomainLoader` interface.\n\nYou can use multiple loaders at once\n\n```php\n\u003c?php\n\nuse Ddrv\\Translator\\Contract\\DomainLoader;\nuse Ddrv\\Translator\\Provider\\TranslationProvider;\nuse Ddrv\\Translator\\Loader\\MultiLoader;\nuse Ddrv\\Translator\\Translator;\n\n/**\n * @var DomainLoader $loader1\n * @var DomainLoader $loader2\n * @var DomainLoader $loader3\n */\n$loader = new MultiLoader($loader1);\n$loader-\u003eaddLoader($loader2);\n$loader-\u003eaddLoader($loader3);\n\n$translations = new TranslationProvider($loader);\n\n$translator = new Translator('en_US', $translations);\n```\n\nYou may wrap your loader to `\\Ddrv\\Translator\\Loader\\CachedLoader`\n\n```php\n\u003c?php\n\nuse Ddrv\\Translator\\Contract\\DomainLoader;\nuse Ddrv\\Translator\\Provider\\TranslationProvider;\nuse Ddrv\\Translator\\Loader\\CachedLoader;\nuse Ddrv\\Translator\\Translator;\nuse Psr\\SimpleCache\\CacheInterface;\n\n/**\n * @var DomainLoader $loader\n * @var CacheInterface $cache\n */\n$cached = new CachedLoader($loader, $cache, 'loader_1_');\n\n$translations = new TranslationProvider($cached);\n\n$translator = new Translator('en_US', $translations);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddrv%2Fphp-translator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fddrv%2Fphp-translator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddrv%2Fphp-translator/lists"}