Подтвердить что ты не робот

Проверка жесткого текста в Rails-представлениях - I18n

некоторые из наших разработчиков (включая меня) не всегда считают серьезным помещать текст в файл локализации, результатом является много жестко кодированных текстов, разбросанных по множеству точек зрения. Мне интересно, есть ли у кого-нибудь из вас идея автоматизировать поиск жестко закодированных текстов во взглядах? У кого-нибудь есть инструмент или подход, как проверить это? Я думал, что если бы изящный bash script выполнил эту работу, но я немного потерял, с чего начать. Любая помощь очень ценится.

Изменить: Не 100% точный, но лучше подходит для меня, поэтому я принял ответ Анди.

4b9b3361

Ответ 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 также есть задача найти все неиспользуемые переводы.