Робота з emoji

Дата оновлення перекладу 2025-08-25

Робота з emoji

7.1

Компонент emoji було представлено в Symfony 7.1.

Symfony надає декілька утиліт для роботи з символами та послідовностями емодзі з набору даних Unicode CLDR. Вони доступні через компонент Emoji, який ви маєте попередньо встановити у вашому додатку:

1
$ composer require symfony/emoji

Note

Якщо ви встановлюєте цей компонент поза додатком Symfony, вам потрібно підключити файл vendor/autoload.phpу вашому коді для включення механізму автозавантаження класів, наданих Composer. Детальніше можна прочитати у цій статті.

Дані, необхідні для зберігання транслітерації всіх емодзі ( 5,000) всіма мовами, займають значний обсяг дискового простору.

Якщо вам потрібно заощадити місце на диску (наприклад, через те, що ви розгортаєте систему на якомусь сервісі з жорсткими обмеженнями розміру), виконайте цю команду
(наприклад, як автоматичний скрипт після composer install), щоб стиснути
внутрішні файли даних емодзі Symfony за допомогою розширення PHP zlib:

1
2
# налаштувати шлях до бинарності 'compress', засновуючись на установці вашого додатку
$ php ./vendor/symfony/emoji/Resources/bin/compress

Транслітерація емодзі

Клас EmojiTransliterator пропонує спосіб перекладу емодзі у їхнє текстове представлення
всіма мовами на основі набору даних Unicode CLDR:

1
2
3
4
5
6
7
8
9
10
11
use Symfony\Component\Emoji\EmojiTransliterator;

// Описати емодзі англійською
$transliterator = EmojiTransliterator::create('en');
$transliterator->transliterate('Menus with 🍕 or 🍝');
// => 'Menus with pizza or spaghetti'

// Описати емодзі українською
$transliterator = EmojiTransliterator::create('uk');
$transliterator->transliterate('Menus with 🍕 or 🍝');
// => 'Menus with піца or спагеті'

Tip

При використанні слагера з компонента String,
ви можете комбінувати його з EmojiTransliterator для
слагіфікації емодзі .

Транслітерація коротких текстових кодів емодзі

Такі сервіси, як GitHub та Slack, дозволяють включати емодзі у ваші повідомлення за допомогою
коротких текстових кодів (наприклад, ви можете додати код :+1: для відображення емодзі 👍).

Symfony також надає можливість транслітерувати емодзі в короткі коди і навпаки.
Короткі коди дещо відрізняються для кожного сервісу, тому ви повинні передати назву сервісу як аргумент при створенні транслітератора.

Транслітерація коротких кодів емодзі GitHub

Конвертуйте емодзі в короткі коди GitHub за допомогою локалі emoji-github:

1
2
3
$transliterator = EmojiTransliterator::create('emoji-github');
$transliterator->transliterate('Teenage 🐢 really love 🍕');
// => 'Teenage :turtle: really love :pizza:'

Конвертуйте короткі коди GitHub в емодзі за допомогою локалі github-emoji:

1
2
3
$transliterator = EmojiTransliterator::create('github-emoji');
$transliterator->transliterate('Teenage :turtle: really love :pizza:');
// => 'Teenage 🐢 really love 🍕'

Транслітерація коротких кодів емодзі Gitlab

Конвертуйте емодзі в короткі коди Gitlab за допомогою локалі emoji-gitlab:

1
2
3
$transliterator = EmojiTransliterator::create('emoji-gitlab');
$transliterator->transliterate('Breakfast with 🥝 or 🥛');
// => 'Breakfast with :kiwi: or :milk:'

Конвертуйте короткі коди Gitlab в емодзі за допомогою локалі gitlab-emoji:

1
2
3
$transliterator = EmojiTransliterator::create('gitlab-emoji');
$transliterator->transliterate('Breakfast with :kiwi: or :milk:');
// => 'Breakfast with 🥝 or 🥛'

Транслітерація коротких кодів емодзі Slack

Конвертуйте емодзі в короткі коди Slack за допомогою локалі emoji-slack:

1
2
3
$transliterator = EmojiTransliterator::create('emoji-slack');
$transliterator->transliterate('Menus with 🥗 or 🧆');
// => 'Menus with :green_salad: or :falafel:'

Конвертуйте короткі коди Slack в емодзі за допомогою локалі slack-emoji:

1
2
3
$transliterator = EmojiTransliterator::create('slack-emoji');
$transliterator->transliterate('Menus with :green_salad: or :falafel:');
// => 'Menus with 🥗 or 🧆'

Транслітерація універсальних коротких кодів емодзі

Якщо ви не знаєте, який сервіс був використаний для генерації коротких кодів, ви можете скористатися локаллю text-emoji, яка об'єднує всі коди з усіх сервісів:

1
2
3
4
5
6
7
8
9
10
11
$transliterator = EmojiTransliterator::create('text-emoji');

// короткі коди Github
$transliterator->transliterate('Breakfast with :kiwi-fruit: or :milk-glass:');
// короткі коди Gitlab
$transliterator->transliterate('Breakfast with :kiwi: or :milk:');
// короткі коди Slack
$transliterator->transliterate('Breakfast with :kiwifruit: or :glass-of-milk:');

// усі приклади вище призводять до одного результату:
// => 'Breakfast with 🥝 or 🥛'

Ви можете перетворити емодзі на короткі коди за допомогою локалі emoji-text:

1
2
3
$transliterator = EmojiTransliterator::create('emoji-text');
$transliterator->transliterate('Breakfast with 🥝 or 🥛');
// => 'Breakfast with :kiwifruit: or :milk-glass:

Зворотна транслітерація емодзі

Маючи текстове представлення емодзі, ви можете перетворити його назад, щоб отримати власне емодзі завдяки фільтру emojify :

1
2
3
{{ 'I like :kiwi-fruit:'|emojify }} {# renders: I like 🥝 #}
{{ 'I like :kiwi:'|emojify }}       {# renders: I like 🥝 #}
{{ 'I like :kiwifruit:'|emojify }}  {# renders: I like 🥝 #}

За замовчуванням emojify використовує текстовий каталог , який об'єднує текстові коди емодзі всіх сервісів. Якщо ви бажаєте, ви можете вибрати конкретний каталог для використання:

1
2
3
4
{{ 'I :green-heart: this'|emojify }}                  {# відображає: I 💚 this #}
{{ ':green_salad: is nice'|emojify('slack') }}        {# відображає: 🥗 is nice #}
{{ 'My :turtle: has no name yet'|emojify('github') }} {# відображає: My 🐢 has no name yet #}
{{ ':kiwi: is a great fruit'|emojify('gitlab') }}     {# відображає: 🥝 is a great fruit #}

Видалення емодзі

За допомогою EmojiTransliterator можна також видалити всі емодзі з рядка, за допомогою спеціальної локалі strip:

1
2
3
4
5
use Symfony\Component\Emoji\EmojiTransliterator;

$transliterator = EmojiTransliterator::create('strip');
$transliterator->transliterate('🎉Hey!🥳 🎁Happy Birthday!🎁');
// => 'Hey! Happy Birthday!'