{"id":25593948,"url":"https://github.com/professionalwiki/messagebuilder","last_synced_at":"2026-05-08T16:48:44.326Z","repository":{"id":278637505,"uuid":"936150919","full_name":"ProfessionalWiki/MessageBuilder","owner":"ProfessionalWiki","description":"Mini library with MessageBuilder interface and implementations for message localization","archived":false,"fork":false,"pushed_at":"2025-02-20T21:29:09.000Z","size":17,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-02-20T21:30:32.558Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ProfessionalWiki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-20T15:58:34.000Z","updated_at":"2025-02-20T21:29:13.000Z","dependencies_parsed_at":"2025-02-20T21:40:46.532Z","dependency_job_id":null,"html_url":"https://github.com/ProfessionalWiki/MessageBuilder","commit_stats":null,"previous_names":["professionalwiki/messagebuilder"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessionalWiki%2FMessageBuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessionalWiki%2FMessageBuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessionalWiki%2FMessageBuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessionalWiki%2FMessageBuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ProfessionalWiki","download_url":"https://codeload.github.com/ProfessionalWiki/MessageBuilder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239994839,"owners_count":19730918,"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":[],"created_at":"2025-02-21T10:22:29.322Z","updated_at":"2025-11-11T16:03:25.993Z","avatar_url":"https://github.com/ProfessionalWiki.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Message Builder\n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/ProfessionalWiki/MessageBuilder/ci.yml?branch=master)](https://github.com/ProfessionalWiki/MessageBuilder/actions?query=workflow%3ACI)\n[![Type Coverage](https://shepherd.dev/github/ProfessionalWiki/MessageBuilder/coverage.svg)](https://shepherd.dev/github/ProfessionalWiki/MessageBuilder)\n[![codecov](https://codecov.io/gh/ProfessionalWiki/MessageBuilder/branch/master/graph/badge.svg?token=GnOG3FF16Z)](https://codecov.io/gh/ProfessionalWiki/MessageBuilder)\n[![Latest Stable Version](https://poser.pugx.org/professional-wiki/message-builder/v/stable)](https://packagist.org/packages/professional-wiki/message-builder)\n[![Download count](https://poser.pugx.org/professional-wiki/message-builder/downloads)](https://packagist.org/packages/professional-wiki/message-builder)\n[![License](https://poser.pugx.org/professional-wiki/message-builder/license)](LICENSE)\n\nMessage Builder is a small message localization library for PHP.\n\nThis library was extracted from the [EDTF library](https://github.com/ProfessionalWiki/EDTF).\nIt can be used together with [TranslateWiki](https://translatewiki.net/), though does not depend on it.\n\n## MessageBuilder interface\n\n```php\ninterface MessageBuilder {\n\t/**\n\t * @throws UnknownMessageKey\n\t */\n\tpublic function buildMessage( string $messageKey, string ...$arguments ): string;\n}\n```\n\n## Usage\n\n```php\n$messageBuilder = new ArrayMessageBuilder( [ \n\t'hello-something' =\u003e 'Hello, $1!',\n\t'multi-argument-example' =\u003e 'foo $2 $1 bar $3', \n\t'plural-example' =\u003e 'You have $1 {{plural:$1|item|items}} in your cart.',\n] );\n\nfunction someCode( MessageBuilder $messageBuilder ) {\n\t// Returns 'Hello, world!'\n\t$messageBuilder-\u003egetMessage( 'hello-something', [ 'world' ] );\n}\n```\n\nFor a real world usage example, see the [EDTF library](https://github.com/ProfessionalWiki/EDTF).\n\n## Implementations\n\n* `ArrayMessageBuilder` - In-memory message builder with PLURAL keyword support\n* `FallbackMessageBuilder` - Fallback message builder that delegates to multiple message builders\n* `MessageBuilderSpy` - Message builder that records all messages built for testing\n\n## Development\n\nStart by installing the project dependencies by executing\n\n    composer install\n\nYou can run test and static analysis via Make. See Makefile for available commands.\nIf you do not have Make, you can run the commands listed in the Makefile manually.\n\nTo run all checks run by the GitHub Actions CI, simply run `make`.\n\n## Release notes\n\n### Version 1.0.1 (2025-02-21)\n\n* Removed superfluous `ext-json` dependency.\n\n### Version 1.0.0 (2025-02-20)\n\n* Initial release with `ArrayMessageBuilder`, `FallbackMessageBuilder`, and `MessageBuilderSpy` implementations.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprofessionalwiki%2Fmessagebuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprofessionalwiki%2Fmessagebuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprofessionalwiki%2Fmessagebuilder/lists"}