2017-02-17 12 views
13

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

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

+0

Знаете ли вы, какой текст вы хотите найти? –

+0

@SekalfNroc no, просто твердый код любого типа – supersize

ответ

1

Я думаю, что вы можете получить очень далеко, используя только Grep:

cat $(find . | grep .html.erb) | grep -v '[=<>{}$/;]' | grep '\w \w' 

Это находит тексты, основанные на идее о том, что Есть некоторые символы, которые не являются типичными для текстов

grep -v '[=<>{}$/;]' 

и что должно быть по крайней мере одно пространство с символом предшествующего слова и один, где следует символ слова

grep '\w \w' 

Это не может быть на сто процентов точным, но это быстрый и простой способ быстро проверить жесткий текст.

+0

Это не работает для меня. Он нашел одну из частей жестко закодированного текста в моем проекте, но в основном он нашел Ruby-код, где между именем метода и аргументами было пробел. –

+0

Возможно, вы можете расширить его, чтобы найти два пробела в строке 'grep '\ (\ w \ + \ s \) \ {2, \}''. Это было просто хорошей отправной точкой, которая может быть оптимизирована. Просто измените «2» на «4» и посмотрите, что происходит, например. – Andi

+0

@ Это очень хорошо работает до сих пор. Мне нужно проверить более подробно, чтобы убедиться, что он надежный! – supersize

1

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

Это должно быть в основном точны в поиске трудно закодированный текст.

+0

аккуратная идея, но на самом деле это выплескивает множество длинных строк, которые являются классами CSS в HAML слишком – supersize

+0

, вы могли бы использовать этот метод + nokogiri и потреблять взгляды/частичные. Но вам придется пропустить препроцессор, который запускает erb, чтобы вы видели теги erb и на чем-то отфильтровывали, так как вы видели бы теги erb (<%= %>) в виде текста. Возможно, вам придется скриптировать дублирование файлов erb и удалить расширение .erb, но я думаю, вы могли бы написать что-то довольно быстро, чтобы выполнить эту операцию. – engineerDave

1

Вы можете использовать регулярное выражение, чтобы найти что-либо, не заключенное в угловые скобки (улавливание большинства тегов HTML и Ruby), а также не теги в стиле, сценарии или заголовки.

^(?!.*(<(style|script|title).*?<\/\1>|<.*?>)).*$

Если вы обнаружите, что какие-либо другие теги доходят, просто добавить их в список исключений.

+0

Я заметил, что кто-то проголосовал за этот ответ. Пожалуйста, не могли бы вы объяснить? Я рад улучшить его в соответствии с вашими советами. –

0

Почему вы не делаете исключения в средах разработки и тестирования, когда переводы отсутствуют. В области разработки и тестирования вы можете добавить это:

Rails.application.configure do |config| 
    config.action_view.raise_on_missing_translations = true 
end 

Это должно помочь. Для получения дополнительной информации см. this.


Кроме того, если вы просто хотите, чтобы найти все недостающие переводы this gem выглядит многообещающим. Я лично не использовал этот драгоценный камень, но кажется, что идеальный способ найти недостающие переводы вместо того, чтобы писать сценарий сам:

i18n-tasks missing 

Gem также имеет задачу, чтобы найти все неиспользованные переводы.

+0

этот вопрос не о недостающих переводах, он вот-вот найдет жесткий текст, чтобы переместить его в файл перевода. – supersize

Смежные вопросы