아포스트로피가 리소스 번들에 배치 될 때 제대로 번역되지 않습니다.


90

아포스트로피는 리소스 번들에 배치 될 때 제대로 번역되지 않습니다.

key = {0}'s brush is {1} centimeters tall

(e.g. Sam's brush is 4 centimeters tall)

여기서 위의 키를 포맷하면 아포스트로피가 누락됩니다. java.util.ResourceBundleWhat could be the problem here?


4
+1이 문제를 직접 만났고 이에 대한 작은 블로그 게시물을 작성했습니다. 이 "기능"을 실행하는 사람들에게 추가 정보를 제공 할 수 있습니다. mscharhag.com/2013/10/…
micha

답변:


120

작은 따옴표를 다음과 같이 이스케이프해야합니다.

key = {0}''s brush is {1} centimeters tall

좋은 대답입니다. 이것은 작은 따옴표로 내 문제를 해결했습니다. 감사합니다 :) +1
Anish B.

35

나는 문제가 자원 번들이 아니라 MessageFormater 라는 것을 강하게 믿습니다. 메시지를 인쇄하는 데 사용 .

MessageFormater 자바 문서에서 :

문자열 내에서 ''( 두 개의 작은 따옴표 )는 작은 따옴표를 나타냅니다. QuotedString은 작은 따옴표를 제외한 임의의 문자를 포함 할 수 있습니다. 둘러싼 작은 따옴표가 제거됩니다. UnquotedString은 작은 따옴표와 왼쪽 중괄호를 제외한 임의의 문자를 포함 할 수 있습니다. 따라서 형식화 된 메시지 '{0}'가되는 문자열은 '' '{'0} ''또는 '' '{0}' ''로 작성할 수 있습니다.

따라서 다음과 같이 작성해야합니다.

{0}''s brush is {1} centimeters tall

6

여기 에서 javadoc을보세요

문자열 내에서 " ''"는 작은 따옴표를 나타냅니다. QuotedString은 작은 따옴표를 제외한 임의의 문자를 포함 할 수 있습니다. 둘러싼 작은 따옴표가 제거됩니다. UnquotedString은 작은 따옴표와 왼쪽 중괄호를 제외한 임의의 문자를 포함 할 수 있습니다. 따라서 형식화 된 메시지 " '{0}'"가되는 문자열은 " '' '{'0} ''"또는 " '' '{0}' ''"로 기록 될 수 있습니다.



5

@Ralph의 답변에 추가 : 다음 MessageFormat과 같은 텍스트가있을 때 이것이 사실임을 알게 될 것입니다.

text1=It's too late

text2={0}''s too late

text1아마도 MessageFormater를 통해 실행되지 않을 것입니다 (예 : 인자가 전달되거나 전달되지 않으면 spring은 다른 코드 경로를 가짐) text2. 따라서에서 두 개의 작은 따옴표를 사용하면 그렇게 text1표시 될 수 있습니다. 따라서 인수가 형식화되었는지 여부를 확인하고 그에 따라 하나 또는 두 개의 작은 따옴표를 사용해야합니다.


5

위의 방법 중 어느 것도 작동하지 않은 것처럼 완전히 멈춘 경우 아포스트로피 기호를 유니 코드 : \ u0027로 바꿀 수 있습니다. 속성 파일에서 항상 UTF 기호를 사용할 수 있습니다.



1

string.xml에 Android 문제가있는 모든 사람은 작은 따옴표 대신 \ '\'를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.