Skip to content

Android:Resource:String

Android: Multiple substitutions specified in non-positional format

Android ADT 2.3에서 작업하다보면 Multiple substitutions specified in non-positional format에러가 나는 경우가 있습니다.

<string name="mystring">%s %s</string> 

와 같이 여러개의 대체할수 있는 것을 넣는 경우 에러가 나는데 해결책은

<string name="mystring">%1$s %2$s</string>

입니다. 저렇게 쓰는 이유는 특정 Locale에서 순서가 바뀔 경우를 위해서 입니다.

<string name="mystring">%2$s %1$s</string>

여기 에서, 1$, 2$는 Argument 순서이다.

만약, 포맷적용 확인을 Disable하고 싶을 경우 아래와 같이 formatted="false"속성을 추가하면 된다.

<string name="mystring" formatted="false">%s %s</string> 

Plurals

단수, 복수 표현 string 처리는 Plurals를 사용하면 된다.

Example

XML 예제는 아래와 같다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="numberOfSongsAvailable">
        <item quantity="one">One song found.</item>
        <item quantity="other">%d songs found.</item>
    </plurals>
</resources>

Java 코드는 아래와 같다.

int count = getNumberOfsongsAvailable();
Resources res = getResources();
String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);