- How to extract strings into strings.xml resource files in Android Studio
- EnvyAndroid
- EnvyAndroid
- The process goes like this:
- Android: Automatic string extraction
- Motivation
- Automation
- Excursus: Resource names
- Usage
- Conclusion
- Редактор кода
- Инъекция языка
- Перемещаем метод вверх или вниз
- Сворачиваем фрагменты кода
- Редактор кода для XML в режиме Text
- [I18N] Hardcoded string
- Вкладки
- Строка состояния
- Информационный желоб
- Анализ кода
- Автодополнение кода
- Перевод на новую строку
How to extract strings into strings.xml resource files in Android Studio
EnvyAndroid
Read more posts by this author.
EnvyAndroid
I have previously posted a guide on how to extract string resources in Eclipse, so I thought I would do it for Android Studio too, as it is not directly obvious how to acheive this.
All your applications strings should be placed in the various /values/strings.xml files in your app. This is the best practice, gathers all texts, and easily enables you to translate your app into other languages.
While developing apps, it might be easier to just hardcode the string values, but when you are done testing, you can hit ALT + Enter to bring up the string resource extraction dialog.
Choose Extract string resource and type a name for the resource in the dialog.
Your string should now have been moved to the strings.xml file you selected (default is in: values/strings.xml).
The process goes like this:
Set the cursor inside the text you want to extract (here the text is the title “Cancel”) and hit ALT + Enter and select “Extrac](http://envyandroid.com/wp/wp-content/uploads/2014/03/extract1.png)
Give your resource a describing ](http://envyandroid.com/wp/wp-content/uploads/2014/03/extract2.png)
Your string has now been moved to the strings.xml file.
To view it, you can hold down cmd while clicking it (here “menu_cancel”) with the mouse, this will open the strin](http://envyandroid.com/wp/wp-content/uploads/2014/03/extract3.png)
Источник
Android: Automatic string extraction
Nov 30, 2016 · 4 min read
Android features a simple localization mechanism. Strings are separated from layouts (or code) and stored in dedicated resource files. This mechanism works conveniently when a great number of resources are already extracted. However, the process of extracting strings from layouts for new application projects or new screens is quite cumbersome and may take some time for comprehensive layouts.
This article demonstrates an approach to automate the string extraction process.
Motivation
Imagine, you, as developer, are creating a new application or a new screen for an existing application. Maybe you have a nice UI specification from the customer or your UX designer. Thanks to Android Studio’s layout editor you have created several awesome layouts with lots of labels, hints, buttons and so one. Now, there is one last thing you need to do to localize your application: extract all strings from those layouts.
Fortunately, there is a shortcut which allows you to manually extract a single string occurrence. You need to select each string one-by-one, use the shortcut and provide a unique key for each value. These are two factors which slows down the process:
- select each string one-by-one
- manually provide a unique key for each string
As mentioned before, this task may take some time and becomes cumbersome for a larger amount of localizable strings.
Automation
To reduce the time to extract all hardcoded strings from all layouts of all flavors, we have implemented a custom Gradle plugin:
The plugin automatically extracts hardcoded strings from Android layouts. To do so, it uses a convention to automatically generate a key:
To uniquely identify a string, the plugin takes the layout name, the widget identifier and the attribute. Like showcased above, a hardcoded text of a TextView with the id “textView” within a layout file “example.xml” gets extracted and replaced by “example_textView_text”.
All automatically extracted strings will be written to a dedicated string resource file:
Excursus: Resource names
We’re using this pattern for string resource names for quite a long time now and for different kinds of Android projects. Even before we started to automate the extraction process. We’ve noticed, that for heavily scaling or already large projects, it’s mandatory to have a convention to name string resources.
The aforementioned convention features three major benefits:
Traceability: It allows direct referencing of string resources to screens and elements. This allows to provide a context for translators. For example, “Confirm” could be translated differently in a certain language, depending on the context. By having the layout and the widget of the string coded in its name, the translator has a better idea what should be expressed.
Reliability: We’ve noticed, that string resources often change over time. What was “Submit” today, becomes “Send” tomorrow and maybe just “OK” the day after tomorrow. By choosing a unique key for each text occurrence, there are no conflicts when changing a particular key’s value. By reusing one key in different layout there is a potential to change something in the wrong place.
Consistency: Conventions are nice, but as long as they are not enforced (e.g. by a custom Lint rule), there is a chance that developers may name things differently or others name changes are not applied to the string resource name. However, when automating the process you’ll get consistency by default.
Usage
The usage is pretty straightforward. The plugin is available via jcenter. You need to add the classpath to your project level build.gradle and apply it in your application level build.gradle:
Last but not least, when necessary, just execute the extractStringsFromLayouts task:
Conclusion
By automating the string extraction process we could significantly save time when creating new screens. If you are not restricted in the way you name your string resources, the presented approach may also help you to speed up string extraction.
Please note, this is the first release of the plugin. The feature set is limited and you may encounter bugs when using it (although we have a good test coverage). In case you encounter a bug, we would really appreciate if you file an issue to our issue tracker. Thanks and happy extracting 🙂
Источник
Редактор кода
Рассмотрим возможности редактора кода при написании приложений.
Инъекция языка
Студия позволяет делать инъекцию в существующий код. Что это такое? Например, JSON имеет свой формат данных. Если писать код вручную в данном формате, то можно столкнуться с неудобствами — вам приходится экранировать символы в большом фрагменте кода. Студия поможет нам. Создадим переменную jsonString:
Помещаем курсор между кавычками и нажимаем комбинацию Alt + Enter , выбираем пункт Inject language or reference, в выпадающем списке выбираем JSON (JSON files).
Далее следует ещё раз нажать комбинацию Alt + Enter , чтобы инъекция была постоянной. Студия добавит комментарий к переменной.
Если вы скопируете текст в формате JSON и вставите его между кавычками, то экранирование произойдёт автоматически.
Сам текст не обязательно копировать из другого источника, можете создавать JSON-запись в самой студии. Снова нажимаем Alt + Enter и выбираем пункт Edit JSON Fragment. Появится новая панель, в котором вы можете набирать текст, а в редакторе кода будет выводиться валидный код для работы.
Аналогично можно работать с регулярным выражением.
Перемещаем метод вверх или вниз
Иногда хочется для лучшей читаемости поменять местами методы в коде. Вырезать и вставлять в новое место слишком утомительно. Есть способ лучше. Установите указатель мыши на имени метода и нажмите комбинацию Ctrl+Shift+Стрелка_Вверх — метод автоматически перепрыгнет через метод над собой. Как переместить вниз вы сами догадаетесь.
Сворачиваем фрагменты кода
Студия умеет сворачивать фрагменты кода, которые являются структурной единицей, например, метод. Щёлкнув по фиговине (как это называется?), вы убираете код, чтобы не мозолил вам глаза.
Но мало кто знает, что свернуть можно любой свой код. Для этого ставим два слеша, как в комментариях, а затем добавляем слово region (без пробела) и через пробел название блока. Это будет началом блока. Конец блока обозначаем через //endregion
Теперь отмеченный блок можно сворачивать. Наведите порядок у себя в коде.
Редактор кода для XML в режиме Text
[I18N] Hardcoded string
Когда вы редактируете код разметки экрана активности, то можете встретить предупреждение [I18N] Hardcoded string «Какой-то ваш текст», should use @string resource.
Студия информирует вас о возможной проблеме, если вы в будущем задумаетесь о локализации приложения. Странное выражение I18N переводится очень просто. Здесь зашифровано слово INTERNATIONALIZATION — первая буква I, последняя буква N и восемнадцать букв между ними.
Вам нужно заменить свой жёстко закодированный текст на строковый ресурс. Установите курсор внутри текста, нажмите комбинацию клавиш Alt+Enter и выберите пункт Extract string resource. Далее в диалоговом окне придумываете имя для ресурса и выбираете файл для хранения (обычно, strings.xml).
Предположим, вы заменили везде текст на строковые ресурсы и решили отредактировать текст у кнопки. Снова ставим курсор на нужном тексте и нажимаем комбинацию клавиш Ctrl+B, у вас сразу откроется файл strings.xml и не надо его искать в дереве проекта.
Ещё один приём — если вы хотите видеть вместо кода android:text=»@string/click» реальный текст из ресурса, то нажмите комбинацию Ctrl+- (клавиша минус на цифровой клавиатуре) и он подтянется.
Вкладки
Каждый файл проекта открывается в собственной вкладке. Вкладки можно менять местами перетаскиванием с помощью мыши. Переключаться можно через клавиши Alt-стрелка влево и Alt-стрелка вправо. Также можно вызвать Switcher с помощью комбинации Ctrl+Tab.
Если будет открыто слишком много вкладок, то часть из них сгруппируется и будет доступна через выпадающий список по нажатию на треугольник.
Если имя файла на вкладке подчёркнуто красной волнистой линией, значит в коде содержится ошибка и не нужно запускать программы, то время потеряете. Сначала исправьте ошибку.
Вкладку можно «отстегнуть». Нажмите на вкладку и удерживая мышку, перетащите вкладку на рабочий стол. Также её можно вернуть обратно.
Каждая вкладка имеет контекстное меню и значок для закрытия. Изучите пункты меню самостоятельно. Например, можно разбить редактор кода на две части (по вертикали или горизонтали), чтобы видеть разные участки кода одновременно.
Строка состояния
В нижней части студии находится строка состояния. В нижнем правом углу имеется текстовая метка с информацией о текущем местоположении курсора в документе (номер строки:номер символа). Если подвести мышку к надписи, то можно увидеть всплывающую подсказку Click to go to line. Щелчок вызовет диалоговое окно для быстрого перехода на нужную позицию.
Рядом также имеется текстовая метка с указанием кодировки, в которой пишется код. В последних версиях студии это стало проблемой для русскоязычных программистов. Студия может использовать системную кодировку, которая часто бывает windows-1551, но в Android принято использовать UTF-8, и после запуска приложения вместо текста можно увидеть кракозябры.
Остальные элементы не представляют интереса.
Информационный желоб
Слева от редактора кода имеется отдельная полоска, которую я назвал информационным желобом. На ней можно увидеть различные значки. Например, у класса MainActivity выводится значок, связанный XML-разметкой для данного класса. Нажав на него, вы можете быстро открыть нужный XML-файл.
Также выводятся значки для методов. Каждый тип методов имеет свой цвет.
В данном желобе устанавливаются точки останова (breakpoint).
Доступно контекстное меню. Например, можно выбрать показ номеров строки.
На границе желоба и редактора кода имеются маркеры для сворачивания блоков кода.
Если нажать клавишу F11, то текущая строка будет помечена как закладка и появится галочка.
Анализ кода
Справа от редактора кода находится анализатор кода. Если код содержит ошибки, сверху будет гореть красный прямоугольник. Если ошибок нет, но есть предупреждения, то будет гореть жёлтый прямоугольник. При правильном коде горит зелёный прямоугольник.
В случае ошибок или предупреждений также выводятся зарубки. Если подвести к ним курсор мыши, то можно прочитать сообщение или сразу перейти в нужную строку для исправления, нажав на неё. Также есть синие зарубки для выделенных слов и задач TODO.
Автодополнение кода
Студия поддерживает автодополнение кода, когда по первым символам подставляет нужные слова. Распространяться на эту тему не буду.
Основная комбинация Ctrl+Space.
Если написать имя метода, например, «private void onClick()» и нажать комбинацию Ctrl+Shift+Enter, то студия сгенерирует фигурные скобки.
Когда у вас есть кусок кода и вы начинаете исправлять его, то возникает следующая ситуация. Студия предлагает подсказку, вы соглашаетесь и нажимаете Enter.
В данном случае мы хотим заменить переменную name на catName, но если нажмём на Enter, то подсказка присоединится к старому коду и мы получим catNamename. В следующий раз нажимайте на клавишу Tab и тогда старый вариант заменится на новый.
Также изучите другие клавиатурные комбинации.
Периодически используйте команды меню Code: Reformat Code и Rearrange Code. Первая команда полезна для Java-кода, а вторая для XML-разметки. Код станет аккуратнее.
Перевод на новую строку
Если курсор находится в середине выражения и вы хотите начать новую строку, не обязательно гнать курсор в конец строки. Просто нажмите комбинацию Shift+Enter.
Источник