문제

얼마 전 나는 '에 관한 W3C 기사를 읽었습니다.스크립트 콘텐츠에서 문자열 재사용' 여기에는 국제화에 대한 몇 가지 유용한 조언이 포함되어 있지만 반복되는 코드를 제거하는 DRY(Don't Repeat Yourself) 원칙과 상충되는 것 같습니다.

예를 들어 다음과 같은 코드가 있을 수 있습니다.

print "The printer is ";
if (printer.working) {
    print "on.\n";
} else {
    print "off.\n";
}

print "The stapler is ";
if (stapler.working) {
    print "on.\n";
} else {
    print "off.\n";
}

내 본능은 대략 다음과 같이 반복을 제거하는 것입니다 ...

report-state(printer, "printer");
report-state(stapler, "stapler");

function report-state(name, object) {
    print "The "+name+" is ";
    if (object.working) {
        print "on\n";
    } else {
        print "off\n";
    }
}

...그러나 그렇게 하면 스페인어로 현지화해야 하는 경우 코드에 어려움이 발생할 수 있습니다. 왜냐하면 'on'에 대한 단어가 두 경우에서 분명히 다르기 때문입니다.

그래서 제 질문은 다른 개발자들이 DRY 원칙과 코드 국제화의 균형을 맞추는 데 어떻게 접근했습니까?입니다.

내 일부에서는 국제화가 극단적인 프로그래밍 중 하나라고 주장하고 싶습니다.너에겐 필요 없을 거야” 상황.그러나 반대로 DRY 원칙을 염두에 두고 리팩토링하면 여기서처럼 어렵지 않고 필요한 기능을 쉽게 구현할 수 있도록 하여 균형을 맞출 수 있습니다.

도움이 되었습니까?

해결책

나는 언어 자원에서 완전한 문장을 유지하려고 노력할 것입니다.말씀하신 것처럼 상황에 따라 다른 단어가 필요할 수도 있습니다.하지만 더 큰 문제는 언어마다 문장의 순서가 다를 수 있다는 것입니다.따라서 단어로 문자열을 구성하면 문제가 발생할 수 있습니다.

그냥 저장

The printer is on
The printer is off
The stapler is on
The stapler is off

모든 언어에 대한 언어 리소스에 있습니다.여기서 반복하는 것은 응용 프로그램에서 모든 단일 단어가 어디에 나타날지 알아내려고 노력하는 것보다 유지 관리의 골칫거리가 적습니다.

다른 팁

멘델트의 말에 100% 동의합니다.

이는 유지 관리 문제일 뿐만 아니라 언어적인 문제일 수도 있습니다.모든 라틴어에서는 주제의 성별, 수, 대소문자가 다른 요소에 영향을 미칩니다.루마니아어의 예

  The printer is on: Imprimanta este pornită // feminine
  The printer is off: Imprimanta este oprită
  The stapler is on: Perforatorul este pornit // masculine
  The stapler is off: Perforatorul este oprit

또한 참조하십시오 http://www.mihai-nita.net/article.php?artID=20060430a

나는 Mendelt Siebenga가 언어 리소스 파일에 전체 문장이나 구를 보관해야 한다는 말에 동의합니다.문법의 차이로 인해 항상 언어 간에 단일 단어 대체를 수행할 수 없습니다.개체 유형과 해당 상태만 확인한 다음 언어 리소스에서 적절한 메시지를 인쇄하면 되므로 첫 번째 예제보다 덜 반복적인 코드가 됩니다.

우리는 프로그램 조작으로 메시지 문자열을 생성하지 않으려고 노력합니다.팀에서는 볼 수 없습니다.

위치.팀은 실제로 별개이지만 거의 중복되는 메시지를 선호합니다.그러나 매개변수화된 메시지는 허용됩니다.

예: "%(appliance)%는 %(on_or_off)%입니다."

매개 변수는 분해될 수 있지만 적어도 작동할 때와 작동하지 않을 때는 loc 팀에게 더 분명합니다.

나는 그것이 당신이 달성하고자 하는 언어 품질의 수준에 달려 있다고 생각합니다.

이러한 실제 언어 문자열을 다루는 코드의 반복을 최소화하려고 노력함으로써 다른 언어의 구문과 구조에서 완전히 다른 논리 계층에 자신을 노출시키는 것입니다.반복을 최소화하면서 언어의 원래 구조를 유지하는 코드를 생성하는 데는 엄청난 양의 작업이 필요합니다.

특정 문제에 대해 어느 접근 방식이 더 적합한지 결정해야 합니다.반복되는 코드 또는 만능이 되려고 노력하고 수많은 언어 규칙을 수용하는 코드(의심할 바 없이 유지 관리의 악몽)입니다.

물론, 중간 지점을 찾아 코드 반복을 최소화할 수 있지만 만족스러운 문법적 웅변을 포기할 수 있습니다.Ultima Online의 예를 들어보세요. 현지화되었을 때 이전에 "329개의 금화 더미"라고 읽던 문자열은 "금화 더미:329".훌륭하지는 않지만 쉽게 현지화할 수 있는 상당히 합리적인 솔루션입니다.

현지화를 다루기 위해 텍스트 값을 하드코딩하는 것보다 CMS를 사용하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top