이것은 매우 흥미로운 문제입니다. 나는 더 많은 것을 가지고 놀기로 결심했고, 네, 여기서 당신의 문제를 반복 할 수 있습니다. 제 생각에 *
은 아랍어 텍스트가 아니므로 언어 형식이 적용되지 않습니다. 여기
는 내 시험이다 - 나는 위의 테스트를 실행하면
@Test
public void testArabicLanguage() {
// arabic
assertThat(toArabicLanguage("قضاة وحقوقيون يكشفون "), is("22.1.قضاة وحقوقيون يكشفون "));
// english
assertThat(toArabicLanguage("hey"), is("22.1.hey"));
// chinese
assertThat(toArabicLanguage("现在进入"), is("22.1.现在进入"));
// symbol
assertThat(toArabicLanguage("*"), is("22.1.*"));
}
private String toArabicLanguage(String navText) {
String s = String.format(new Locale("ar", "DZ"), "%d.%d.%s", 22, 1, navText);
System.out.println(s);
return s;
}
은, 모든 통과시켰다.
그러나 콘솔 출력과 IntelliJ에서 직접 테스트를 볼 때 아랍어 텍스트가 오른쪽에서 왼쪽으로 표시됩니다.
여기에 텍스트를 복사하여 붙여 넣을 때마다 항상 왼쪽에서 오른쪽으로 표시됩니다. 여기
콘솔 출력입니다 : -
이제
22.1.قضاة وحقوقيون يكشفون
22.1.hey
22.1.现在进入
22.1.*
, 그게 내가 인 IntelliJ에서 무엇을보고 비교, 아랍어 텍스트가 대신 오른쪽이 왼쪽으로 표시됩니다 -
업데이트
항상 navText
을 표시하고 싶다면 language-detection 라이브러리를 사용하면됩니다. 이 라이브러리는 작동시키기 위해서 jsonic 라이브러리가 필요합니다 ... 그렇습니다, 일본어로되어 있고, 일본어로 읽지 않습니다 ... 그냥 jsonic 1.3 (1.3.0)
을 찾아 다운로드하십시오.
public class MyTest {
// language-detection zip file comes with a `profile` dir... just point to it.
@Before
public void setup() {
try {
DetectorFactory.loadProfile("/path/to/language-detection/profiles");
}
catch (LangDetectException e) {
fail("Can't locate the language profiles");
}
}
@Test
public void testArabicLanguage() {
// arabic
assertThat(toArabicLanguage("قضاة وحقوقيون يكشفون "), is("22.1.قضاة وحقوقيون يكشفون "));
// english
assertThat(toArabicLanguage("hey"), is("hey.22.1"));
// chinese
assertThat(toArabicLanguage("现在进入"), is("现在进入.22.1"));
// symbol
assertThat(toArabicLanguage("*"), is("*.22.1"));
}
private String toArabicLanguage(String navText) {
boolean isArabicLanguage = false;
try {
Detector detector = DetectorFactory.create();
detector.append(navText);
isArabicLanguage = detector.detect().equals("ar");
}
catch (LangDetectException e) {
// `*` will throw this exception:-
// "com.cybozu.labs.langdetect.LangDetectException: no features in text"
//
// so, just catch it and treat it as non-Arabic language.
}
if (isArabicLanguage) {
return String.format(new Locale("ar", "DZ"), "%d.%d.%s", 22, 1, navText);
}
else {
return String.format("%s.%d.%d", navText, 22, 1);
}
}
}
이 솔루션은 약간의 과잉을 숙지하고, 비 아랍어 언어로 의도하지 않은 부작용이있을 수 있습니다 -이와
, 당신은 같은 것을 할 수 있습니다.
다른 아랍 낱말에서 그것은 잘 작동한다. arWord.25.3하지만 텍스트가 * 이와 같이 보일 때만. – MSaudi
은 별표'navText'입니까? –
예. 별표 일 때이 문제가 발생합니다. 어떤 다른 단어도 잘 작동합니다. – MSaudi