94
90

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AndroidAdvent Calendar 2015

Day 14

俺のstrings.xmlの管理方法

Posted at

strings.xmlは規模が大きくなるにつれて行数も多くなり、管理が難しくなりがちです。
しかし、GoogleのサンプルやOSSのリポジトリはそこまで大規模ではないため、strings.xmlのnameの命名やファイルの分割など、どのようにすべきなのか掴みにくい部分でもあります。

そこで、今回は自分なりのstrings.xmlの管理方法の指針をまとめておこうと思います。

と思ったのですが、実は間に合わず書きかけの状態です。。。
本当にすみません。明日中にはきちんと整理してまとめておきます。

翻訳の必要のないものはファイルを分ける

strings.xmlは、複数のファイルに分割することができます。
翻訳の必要のないstringsは、ファイルを分けて管理するとよいです。
例えば、以下のように役割ごとに分けることができます。

strings_no_translate.xml

アプリ名など、翻訳の必要のないテキストをまとめます。これは、Twidere-Androidを参考にしています。

strings_no_translate.xml
<string name="app_name" translatable="false">Twidere</string>

fonts.xml

フォントを指定する場合、フォントのテキストをまとめておきます。

api_keys.xml

FacebookSDKなどを使う場合、stringsでapi_keyを管理します。

transition_names.xml

ActivityTransitionのsharedElementを使う場合、transitionNameをまとめておきます。
これは、android-topekaを参考にしています。

transition_names.xml
<string name="transition_avatar">AvatarTransition</string>

sharedElementについてはこちらがわかりやすいです。
Android Activity Transitions を実装する

個人的には、翻訳が必要なものは過度にファイルを分割しない方が管理しやすくていいと思います。

nameの命名規則

基本は機能単位のprefix

機能単位でprefixをつけるようにしています。
画面単位でもいいのですが、さすがに細分化されすぎてしまうので機能ごとに分けています。
他の画面で似たような文言があっても、無理に使い回しはしません。経験上、その方が後々変更しやすいです。
これは、android-best-practicesを参考にしていますが、私はドットではなくアンダースコアで区切るようにしています。

共通のテキスト

明らかによく使うテキストは、共通のものとして上の方においておきます。
例えば、以下のようなテキストです。

<!-- Commons -->
<string name="open">Open</string>
<string name="close">Close</string>
<string name="ok">OK</string>
<string name="cancel">Cancel</string>
<string name="next">Next</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="retry">Retry</string>
<string name="back">Back</string>
<string name="edit">Edit</string>
<string name="write">Write</string>
<string name="save">Save</string>
<string name="select">Select</string>
<string name="logout">Logout</string>
<string name="resend">Resend</string>
<string name="send">Send</string>
<string name="loading">Loading</string>
<string name="sending">Sending</string>

記述ルール

わりとよくある記述ルール

CDATAの使用

長いテキストは、CDATAを使います。

<string name="cdata_test">
    <![CDATA[
        Hello, I'm konifar. I'm japanese.
        I like Japanese animation movie.
    ]]>
</string>

置換文字

%1$d などの置換文字をつかいます。
http://developer.android.com/intl/ja/guide/topics/resources/string-resource.html#FormattingAndStyling

複数形

zero, one, otherなど、複数形はpluralsを使ってまとめます。
http://developer.android.com/intl/ja/guide/topics/resources/string-resource.html#FormattingAndStyling
http://stackoverflow.com/questions/3656371/dynamic-string-using-string-xml

スタイルとフォーマット

ellipsis

... は使わず、TextViewやEditTextのellipsisで表現します。

コメント

strings には、commentやdescriptionがつけられますが、基本的には使用しません。
ほとんどの場合、nameから推測し、コードを読むだけで十分だからです。
ただし、外部に翻訳を依頼する場合には意識的につけるようにした方がいいかもしれません。

<string name="menu_stop" comment="After item Start in Menu">Stop</string>

メンテナンス

参考リポジトリ

94
90
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
94
90

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?