Проверка жесткого текста в Rails-представлениях - I18n
некоторые из наших разработчиков (включая меня) не всегда считают серьезным помещать текст в файл локализации, результатом является много жестко кодированных текстов, разбросанных по множеству точек зрения.
Мне интересно, есть ли у кого-нибудь из вас идея автоматизировать поиск жестко закодированных текстов во взглядах? У кого-нибудь есть инструмент или подход, как проверить это? Я думал, что если бы изящный bash script выполнил эту работу, но я немного потерял, с чего начать. Любая помощь очень ценится.
Изменить: Не 100% точный, но лучше подходит для меня, поэтому я принял ответ Анди.
Ответы
Ответ 1
Я думаю, вы можете получить очень далеко, просто используя grep:
cat $(find . | grep .html.erb) | grep -v '[=<>{}$/;]' | grep '\w \w'
Это находит тексты, основанные на идее, что есть некоторые символы, которые не типичны для текстов
grep -v '[=<>{}$/;]'
и что должно быть хотя бы одно пространство с предшествующим символом слова и одно, где следует символ слова
grep '\w \w'
Это не может быть на сто процентов точным, но это быстрый и простой способ быстро проверить жесткий текст.
Ответ 2
Если большинство строк кода короткие, а текст с твердым кодом длинный, вы можете использовать strings -n [number]
для поиска текста с определенным количеством символов.
<html> |
<head> |
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
<title>Example Page</title> |
|
</head> |
|
<body> |
<h1><%= @page.name %></h1> |
<p> |
This is a piece of hard coded text which must be found.
</p> |
</body> |
</html> | 40 characters
Если вы установите длину 40...
$ cat $(find . | grep .html.erb) | strings -n 40
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
This is a piece of hard coded text which must be found.
Это должно быть в основном точным при поиске жестко кодированного текста.
Ответ 3
Вы можете использовать регулярное выражение, чтобы найти что-либо, не заключенное в угловые скобки (улавливание большинства тегов HTML и Ruby), а также стиль внутри, script или теги заголовков.
^(?!.*(<(style|script|title).*?<\/\1>|<.*?>)).*$
Если вы обнаружите, что все другие теги проходят, просто добавьте их в список исключений.
Ответ 4
почему бы вам не создавать исключения в средах разработки и тестирования, когда переводы отсутствуют. В среде разработки и тестирования вы можете добавить это:
Rails.application.configure do |config|
config.action_view.raise_on_missing_translations = true
end
Это должно помочь. Для более подробной информации читайте this.
Также, если вы просто хотите найти все недостающие переводы этот камень выглядит многообещающим. Я лично не использовал этот камень, но, похоже, идеальный способ найти недостающие переводы вместо написания script самостоятельно:
i18n-tasks missing
У Gem также есть задача найти все неиспользуемые переводы.