forked from Skillshare/formatphp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMessageFormatInterface.php
More file actions
79 lines (74 loc) · 2.74 KB
/
MessageFormatInterface.php
File metadata and controls
79 lines (74 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
/**
* This file is part of formatphp/formatphp
*
* formatphp/formatphp is open source software: you can distribute
* it and/or modify it under the terms of the MIT License
* (the "License"). You may not use this file except in
* compliance with the License.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
* @copyright Copyright (c) Skillshare, Inc. <https://www.skillshare.com>
* @copyright Copyright (c) FormatPHP Contributors <https://formatphp.dev>
* @license https://opensource.org/licenses/MIT MIT License
*/
declare(strict_types=1);
namespace FormatPHP\Intl;
use FormatPHP\Exception\UnableToFormatMessageException;
/**
* A message formatter designed to fit within the style and function of
* ECMA-402 formatters
*
* @link https://unicode-org.github.io/icu/userguide/format_parse/messages/
* @link https://github.com/unicode-org/message-format-wg
* @link https://www.php.net/MessageFormatter
* @link https://formatjs.io/docs/intl-messageformat/
* @link https://github.com/tc39/ecma402/issues/92
* @link http://messageformat.github.io/messageformat/api/core.messageformat/
*/
interface MessageFormatInterface
{
/**
* Formats an ICU message format pattern, using a locale configured with the
* message format instance and replacing any placeholders with the provided
* values
*
* In addition to string and number values, the `$values` parameter may have
* a callable that accepts a string and returns a string. For any callable,
* the array key should match a "tag" embedded in the message.
*
* For example, if you wish to produce the following HTML:
*
* Hello, <a href="/profile/1234">Ben</a>!
*
* Format the message like this:
*
* Hello, <profileLink>{name}</profileLink>!
*
* Then, pass a callable to `$values` with the key `profileLink`. It will
* look something like this:
*
* ```php
* $formatphp->formatMessage(
* [
* 'id' => 'welcome',
* 'defaultMessage' => 'Hello, <profileLink>{name}</profileLink>!',
* ],
* [
* 'name' => 'Ben',
* 'profileLink' => fn (string $text): string => '<a href="/profile/1234">' . $text . '</a>',
* ],
* );
* ```
*
* @param array<array-key, float | int | string | callable(string=):string> $values
*
* @throws UnableToFormatMessageException
*/
public function format(string $pattern, array $values = []): string;
}