Comments 20
В тексте используются скриншоты некой внешней системы управления переводами, где-то есть готовые решения? Или подразумевается, что можно просто самому написать такой сервис?
Вопрос только в том куда сохраняют — сразу в файлы генерят или в базу?
Как планируется вычленять переменные из строк?
We are glad to have you back {$name}
debug_backtrace()
находим файл и номера строк, откуда произошел вызов функции, а затем делаем статический анализ (PhpParser) этих строк, чтобы отделить куски чистого текста от переменных и запомнить имена переменных (для читаемости). я проверил — работаетЧасто возникает дилемма — использовать существующий текст или создать новый? А вдруг в этом новом месте чуть-чуть другой контекст?
А вот эта проблема как решается? К примеру у нас есть одна и та же фраза, но в разных файлах и, соответственно, разный контекст. Правильно я понимаю, в админке будет зарегистрированы две фразы и соответственно то, где они вызываются, и переводчикам самим предлагается определить контекст перевода?
А если вдруг мы код отрефакторили и теперь эти фразы вызываются из другого места?
Если код отрефакторили, то делаем попытку определить откуда по параметрам — изменился файл, откуда происходит вызов, но скорее всего исходный параметр остался тем же — вроде
"Hello {$name}"
. Опять же, показываем диалог: «Это, наверное, перенесенный текст отсюда… Подтвердить?»Получается, если разработчик решил порефакторить код, а работа с переводами уже закончена, т.е. никто в админку не зайдет и не увидит этих сообщений, то могут быть проблемы?
Сначала из кода программы выносят тексты для упрощения восприятия, потом отдают эти тексты на аутсорс в перевод, где сверхразумы переводят всё (включая имена ключей).
Это напоминает ситуацию с SQL, который был изобретён как упрощённое средство для простых пользователей по работе с данными, но в итоге из-за сложности вошёл в перечень программерских скиллов в нагрузку к всему остальному.
Ну вот например — «сохранено». Усложненный вариант: контроллер с формой, отдельный контроллер обработки формы, добавление сессионного сообщения, редирект обратно на форму.
i18s так же умеет числительные, как это будет у вас реализовано?
echo "Привет, у меня есть {$apples} яблок";
Наш сервис видит (благодаря статическому анализу), что внутри текста есть переменная $apples. В админке мы берем и выделяем мышкой слово «яблок» и нажимаем кнопку: «привязать к числу», где нам предлагается выбрать переменную. Она тут одна — $apples. Тогда подобно i18n, мы в админке предоставляем варианты написания в зависимости от цифры. Такой способ очень гибкий — не обязательно переводить весь текст, можно менять только фрагмент. Можно иметь несколько цифр внутри текста и тд. Ну и конечно, самый простой вариант — обязывать программиста передавать число вторым параметром в функцию p()
, как это сделано сейчас в i18n. Но это не менее гибкий вариант и больше ручной работыМожно на пальцах рассказать чем предложенный велосипед лучше стандартного простого gettext?
1) облачное управление, а не редактирование массы текстовых файлов
Ок, раз пошли такие пляски и перевод стрелок с подменой понятий.
То чем ваше решение лучше тех же crowdin, alconost?
2) авто-детект, где используются тексты — контекст
Это в каком месте автодетект?
Там где пишете @p?
3) предпросмотр/рендеры
Вот прямо пререндер моего любого мобильного приложения или апи? Это где такое?
4) авто-определение отсутствующих текстов, и многое другое.
Это все есть давно.
Ваш аргумент можно использовать и про Dropbox и Google Drive — зачем велосипед, когда есть стандартный простой FTP
Я пока свои аргументы не излагал. Но задал всего лишь вопрос.
Как SaaS вам нужно сравниваться с другими подобными сервисами (чего в статье вы не делаете).
А как инструментарий on-premise ну как бы все уже давно есть в стандартных вещах.
3) пререндер через популярные современные утилиты вроде puppeteer. могу сразу увидеть, что тайская версия текста для кнопки — не влазит в ширину на телефоне
про облачные существующие сервисы — я не знал, я искал, хорошо искал, но не смог найти ни одного. поэтому благодарен за названия — я обязательно посмотрю. если там что-то подобное — то я просто буду пользоваться готовым :)
Разделение кода и текста: прототип