Робота з 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!'