Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример).
Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать?
В Django по умолчанию есть готовая функция slugify для таких случаев.
Но я её никогда не использую. Почему? Потому что её недостаточно!
Приведём пример
>>> from django.utils.text import slugify
>>> slugify('This is a Title')
'this-is-a-title'
Пока всё отлично
>>> slugify('This is a "Title!"')
'this-is-a-title'
Спец символы удалились, всё хорошо.
>>> slugify('Это заголовок статьи')
''
Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить
>>> slugify('Это заголовок статьи', allow_unicode=True)
'это-заголовок-статьи'
Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте.
Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою.
Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку:
🔸1. Исходный текст:
>>> text = 'Мой заголовок №10 😁!'
Взял специально посложней со специальными символами.
🔸2. Транслит
Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги.
from unidecode import unidecode
>>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山")
'N S (r) u P 1/4 Yue Shan'
Очень крутая библиотека, советую👍
В нашем случае получаем такое преобразование:
>>> text = unidecode(text)
>>> print(text)
'Moi zagolovok No. 10 !'
Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы.
А еще наш код уже поддерживает любой язык, будь то хинди или корейский.
🔸4. Фильтр символов
Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона.
>>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text)
>>> print(text)
'Moi_zagolovok_No_10_'
Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_".
🔸5. Slugify
Осталось удалить лишние символы по краям и сделать нижний регистр
>>> text = text.strip('_').lower()
>>> print(text)
'moi_zagolovok_no_10'
Получаем отличный slug! 😎
🌎 Полный код в виде функции.
______________
PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию.
#libs#tricks#django
Dizayn tizimingdagi tokenlar ish jarayonini qanday o‘zgartirib yuborishini bilasanmi?
Komponentlar va auto layoutlar bu «zo‘r narsa», lekin tokenlarsiz sen vaqtni tejash va dizayndagi bir xillik (consistency)ning eng muhim qismini boy berasan.
Tokenlar — bu ranglar (colors), shriftlar (typography), bo‘shliqlar (spacing) va boshqa uslubiy (style) parametrlar uchun o‘zgaruvchilar (variables) hisoblanadi.
Tasavvur qil, bitta token qiymatini o‘zgartirasan va butun mahsulot avtomatik yangilanadi. 💎
50 ta ekran dizaynini qo‘lda tahrirlashni xohlaysanmi? 🤯
— Albatta yo‘q. Tokenlar bu ishni atigi ikki bosishda hal qiladi, xatolar sonini kamaytiradi va relizlarni (releases) tezlashtiradi.
P.S. Tokenlar bilan ishlashdagi samarali tajribalarni izohda yozib qoldiramiz)
@suxrobblog
» #designsystem#token#variables
🦄 Привет, сделал набор для визуализации цветовых токенов и анимации и ещё кое-что
👉 Ссылка на кит в community
У меня давно возникла идея наглядно визуализировать цвета, чтобы было прямо как в цветовой палитре, но сразу все цвета, с явными взаимосвязями.
Я делился скринами этой "витрины токенов" в чате по дизайн системам и недавно мне напомнили, попросили скинуть.
Недолго думая, решил прост опубликовать в community.
Плюс докрутил ещё один вид с тремя графиками которые пересекаются (saturation-lightness-hue), это будет полезно если токены сильно разбросаны по hue или saturation.
Ну и ещё пару мелочей до кучи: handoff для анимации и красивые стрелочки
Не знаю, насколько полезно кому-то кроме меня. Но в любом случае, я уже потратил на это добрую половину своего сна, и его уже не вернуть
👁️👄👁️
Если кто-то заглянет и оценит, буду очень благодарен 🍊 а за коммент-фидбек виртуально обниму-приподниму каждого ♥️
Всё в голубой альфе (если что)
@Apollosvg ⋅ #resource#designsystem ⋅ #ui#ux#фигма#uikit
👊 У Smashing Magazine сегодня будет бесплатная онлайн-конференция по дизайн системам (19:00 мск), если кому интересно
https://smashingconf.com/meets-design-systems-2026/schedule
🗣️ Будет 3 выступления (на английском):
1. Как культура может сократить разрыв в ценности дизайн-систем (19:10 – 19:50 по мск)
Как корпоративная культура помогает преодолеть разрыв между ожидаемой и реальной ценностью дизайн-систем, делая их по-настоящему полезными для команд.
2. Можно ли отключить эту кнопку? Управление дизайн-системами в крупных организациях (19:50 – 20:30 по мск)
Как устанавливать правила, предотвращать хаос и сохранять гибкость без ущерба для креативности.
3. Beats to Buttons: дизайн-система диджеинга (20:40 – 21:20 по мск)
Как принципы дизайн-систем применяются к миру диджеинга — от ритмов к интерфейсам, с практическими примерами креативного подхода.
Кликните на вашу любимую реакцию, если было полезно 💘🍌🐳
@Apollosvg ⋅ #designsystem#ds ⋅ #ui#ux#фигма#uikit
🤨 Разные продукты с одной дизайн системой (?)
Могут ли разные продукты на основе одной ДС иметь различия в компонентах, цветах и тд? Вроде бы банальный вопрос, и ответ очевиден — да.
Но недавно столкнулся с таким необычным мнением: у приложений Гугла «буквально нет одинаковых элементов». Мнение было подкреплено скринами Google One и News...
Решил выяснить, что разного увидел собеседник, ведь приложения практически идентичны по визуалу и очевидно используют одну ДС. Ответ убил: «отличается между ними буквально все, шрифт, цвета, отступы».
Понятно, что это довольно редкое (даже уникальное) мнение и, похоже, непонимание предмета разговора.
Но давайте разберём эти отличия и отличия ли это вообще.
[ Под картинкой весь текст не помещается, разбор в следующих постах ]
Перейти к 🧪 Часть 2: Шрифт, Цвета и Отступы
@Apollosvg ⋅ #designsystem ⋅ #ui#ux#интерфейс#дизайнсистема#дс
Привет, спишь?) Я тут случайно наткнулся на open-ui ⚹¹ это очередная база дизайн систем (и их компонентов), вроде ничего особенного, но... Там есть очень занятная сравнительная таблица компонентов ⚹² и в целом у проекта упор на статистику частотности названий.
В общем, таблица сложночитаемая и немного странненькая, но её можно смело юзать при подборе названия для своих компонентов. Плюс можно быстро перейти к странице условного button компонента в разных системах, не тратя время на гуглёжку :)
А какие ресурсы вы юзаете когда нужно подобрать название компонента? Напишите в комментах ✍️👀 (да, это призыв к активности)
Upd. Написал заумный пост = минус два подпичника...
⚹ open-ui.org
@Apollosvg ⋅ #resource#designsystem ⋅ #ui#ux#figma#фигма#дизайн#дс
✨ Статья: как я создал figma-плагин без написания кода (всё на AI)
Фух потратил на неё миллион часов. Вышло длинновато (4600+ слов...), но я оформил с оглавлением и некоторые главы можно смело скипать, если не интересно (например, про мои отношения с AI).
Поддержите прочтениями и лайками/сохранениями, если понравилась. Буду супер-благодарен ♥️
О, ещё там опрос в конце, можно проголосовать
ㅤ
👉 Ссылка на статью
ㅤ
↖ Пост про сам плагин
@Apollosvg ⋅ #article#resource#plugin#designsystem ⋅ #ui#ux#фигма#uikit