i18n-stress-test
Подставляет в макет немецкий, арабский (RTL), японский и emoji-переполнение. Подсвечивает места поломки.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Подставляет в макет немецкий, арабский (RTL), японский и emoji-переполнение. Подсвечивает места поломки.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Research a company or person for sales intel — web search standalone, richer with enrichment tools or CRM connected. Trigger with "research [company]", "look up [person]", "intel on [prospect]", "who is [name] at [company]".
AI-музыка локально на your GPU (ACE-Step 1.5): инструменталы и песни, авто/кастомная лирика, модели base/xl-turbo; CLI scripts/generate.py. Триггеры: «напиши песню», jingle, soundtrack, background music. НЕ Suno (skill suno), не ElevenLabs Music.
OpenAI-совместимый HTTP-сервер поверх ЛОКАЛЬНОГО claude CLI (подписка Max, без API-ключа) — отдаёт Claude как /v1/chat/completions для n8n, OpenAI-SDK, IDE, curl, Open WebUI; SSE-стрим, X-Session-Id. НЕ: наружу к OpenAI/Perplexity/Runway→local-gateway; разовый вызов из Python→claude-cli-runner; боевые Hermes-боты→agent-builder tooling.
Prepare for a sales call — account context, attendee research, suggested agenda; richer with CRM, email, chat or transcripts connected. Trigger with "prep me for my call with [company]", "call prep [company]", "get me ready for [meeting]".
Создание визуальных карточек-каруселей для Telegram-канала — editorial стиль. HTML+CSS шаблон → Playwright render → PNG-серия 1080×1350. Библиотека шаблонов лежит в templates/ (read-only образцы); новая серия создаётся в рабочей директории (CWD). Вызывается сам или из tg-post. Триггеры — «карточки для канала», «карусель в канал», «сделай series», «нарисуй cover», «slides для поста».
Verify any fact, claim, number, statement, citation or AI-generated output for hallucinations — cross-check sources, validate research findings. Triggers: "/check-skill-solo", «проверь», «перепроверь», "verify", "fact-check".
| name | i18n-stress-test |
| version | 1.0.0 |
| description | Подставляет в макет немецкий, арабский (RTL), японский и emoji-переполнение. Подсвечивает места поломки. |
| when_to_use | Перед сдачей продуктового макета, который пойдёт в локализацию. |
90% макетов сделаны под английский. Локализаторы потом плачут. Этот скилл — превентивная проверка.
BestätigungseinstellungenAnwendungseinstellungenHerunterladenإعدادات الإشعارات通知設定をカスタマイズする方法通知设置自定义方法🌟⭐✨💫🌠☄️🌌🌃🌁🌉🌆🏙️templates/i18n-stress.mjs:
import { chromium } from 'playwright';
import { pathToFileURL } from 'node:url';
import path from 'node:path';
import fs from 'node:fs/promises';
const file = process.argv[2];
if (!file) { console.error('Usage: node i18n-stress.mjs <file>'); process.exit(1); }
const samples = {
de: ['Anwendungseinstellungen', 'Benachrichtigungseinstellungen', 'Bestätigungs-E-Mail'],
ar: ['إعدادات الإشعارات', 'احفظ التغييرات', 'تسجيل الدخول'],
ja: ['通知設定をカスタマイズ', '保存', 'サインイン'],
emoji: ['🌟⭐✨💫🌠☄️', '🎉🎊🥳', '👨👩👧👦'],
};
const browser = await chromium.launch();
for (const [lang, words] of Object.entries(samples)) {
const page = await browser.newPage({ viewport: { width: 1280, height: 800 } });
await page.goto(pathToFileURL(path.resolve(file)).href);
// RTL для арабского
if (lang === 'ar') await page.evaluate(() => document.documentElement.setAttribute('dir', 'rtl'));
// Заменим текстовые узлы
await page.evaluate((words) => {
function walk(node) {
if (node.nodeType === 3 && node.textContent.trim().length > 3) {
node.textContent = words[Math.floor(Math.random() * words.length)];
}
for (const c of node.childNodes) walk(c);
}
walk(document.body);
}, words);
// Найдём переполнения
const overflows = await page.evaluate(() => {
const out = [];
document.querySelectorAll('*').forEach(el => {
if (el.scrollWidth > el.clientWidth + 1 && el.clientWidth > 0) {
out.push({ tag: el.tagName, text: el.textContent.slice(0, 40), w: el.scrollWidth, cw: el.clientWidth });
}
});
return out.slice(0, 20);
});
await page.screenshot({ path: `i18n-${lang}.png` });
await page.close();
console.log(`\n[${lang.toUpperCase()}] screenshot → i18n-${lang}.png`);
if (overflows.length) {
console.log(' Переполнения:');
for (const o of overflows) console.log(` ${o.tag} (${o.cw}px < ${o.w}px): "${o.text}"`);
} else {
console.log(' ✓ нет переполнений');
}
}
await browser.close();
node i18n-stress.mjs index.html
# → i18n-de.png, i18n-ar.png, i18n-ja.png, i18n-emoji.png
# + список элементов, у которых текст не помещается
width: <px> для контейнеров с текстом. Используй min-width + max-width.Intl.NumberFormat, не вручную.Intl.DateTimeFormat.Intl.PluralRules, не «1 файл / 2 файлов».margin-inline-start вместо margin-left, inset-inline-end вместо right. CSS logical properties.font-family: Inter, "Noto Sans Arabic", "Noto Sans JP", sans-serif.grid-template-columns: 1fr 200px где справа — текст.position: absolute; right: 16px — в RTL должны быть слева.Прежняя расширенная версия скилла (дерево @2026-04-30) сохранена целиком в references/legacy-i18n-stress-test.md. Секции там: 4 категории риска, Test fixtures, Stress-test mode, Чек-лист, Решения проблем, Антипаттерны.