blob: 018db07ebf4253316324906ca0d1bd3bb688d71e [file] [log] [blame]
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02001<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Contracts\Translation;
13
14/**
15 * @author Fabien Potencier <fabien@symfony.com>
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020016 */
17interface TranslatorInterface
18{
19 /**
20 * Translates the given message.
21 *
22 * When a number is provided as a parameter named "%count%", the message is parsed for plural
23 * forms and a translation is chosen according to this number using the following rules:
24 *
25 * Given a message with different plural translations separated by a
26 * pipe (|), this method returns the correct portion of the message based
27 * on the given number, locale and the pluralization rules in the message
28 * itself.
29 *
30 * The message supports two different types of pluralization rules:
31 *
32 * interval: {0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples
33 * indexed: There is one apple|There are %count% apples
34 *
35 * The indexed solution can also contain labels (e.g. one: There is one apple).
36 * This is purely for making the translations more clear - it does not
37 * affect the functionality.
38 *
39 * The two methods can also be mixed:
40 * {0} There are no apples|one: There is one apple|more: There are %count% apples
41 *
42 * An interval can represent a finite set of numbers:
43 * {1,2,3,4}
44 *
45 * An interval can represent numbers between two numbers:
46 * [1, +Inf]
47 * ]-1,2[
48 *
49 * The left delimiter can be [ (inclusive) or ] (exclusive).
50 * The right delimiter can be [ (exclusive) or ] (inclusive).
51 * Beside numbers, you can use -Inf and +Inf for the infinite.
52 *
53 * @see https://en.wikipedia.org/wiki/ISO_31-11
54 *
55 * @param string $id The message id (may also be an object that can be cast to string)
56 * @param array $parameters An array of parameters for the message
57 * @param string|null $domain The domain for the message or null to use the default
58 * @param string|null $locale The locale or null to use the default
59 *
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020060 * @throws \InvalidArgumentException If the locale contains invalid characters
61 */
Matthias Andreas Benkard1ba53812022-12-27 17:32:58 +010062 public function trans(string $id, array $parameters = [], string $domain = null, string $locale = null): string;
63
64 /**
65 * Returns the default locale.
66 */
67 public function getLocale(): string;
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020068}