2013-04-15 5 views
0

제 질문은 쉽습니다. 하지만 나는 XML에 관심이 없다. 그래서 그것은 나를 위해 이해할 수 없습니다. 설치 프로그램이 있으며 언어 파일은 xml 형식입니다. 터키어 파일은 다른 언어보다 매우 좁습니다. 그래서 "turkish.xml"을 "general.xml"으로 가져 오려고합니다. "general.xml"파일에서 동일한 노드가 있으면 노드 값이 변경됩니다. 그렇지 않다면 그대로 유지하십시오. 예를 들어 이것은 내 turkish.xml의 내용입니다. 나는 그것을 관리하는 경우다른 xml 파일의 내용을 xml 파일 문자열 값으로 변경하십시오.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<DICTIONARY type="singlelanguage" lang="neutral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dictionary.xsd"> 
    <STRING id="AI.Directory.DefaultDefaultDir" value="New Folder"/> 
    <STRING id="AI.Directory.Default32BitName" value="32-bit"/> 
    <STRING id="AI.DuplicateFile.DestName" value="Duplicate%s of %s"/> 
    <STRING id="AI.Feature.DefaultTitle" value="Feature"/> 
    </DICTIONARY> 

, 그것은 다음과 같이 될 것입니다 :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <DICTIONARY type="singlelanguage" lang="tr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dictionary.xsd"> 
     <STRING id="AI.Directory.DefaultDefaultDir" value="Yeni Klasör"/> 
     <STRING id="AI.Directory.Default32BitName" value="Otuziki bit"/> 
    </DICTIONARY> 

그리고 "general.xml"파일 아래

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<DICTIONARY type="singlelanguage" lang="neutral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dictionary.xsd"> 
    <STRING id="AI.Directory.DefaultDefaultDir" value="Yeni Klasör"/> 
    <STRING id="AI.Directory.Default32BitName" value="Otuziki bit"/> 
    <STRING id="AI.DuplicateFile.DestName" value="Duplicate%s of %s"/> 
    <STRING id="AI.Feature.DefaultTitle" value="Feature"/> 
    </DICTIONARY> 

나는 그것을 관리하는 방법을 모른다 . 친절하게 생각합니다.

답변

2

두 파일을 DOMDocument에로드 한 다음 일반 파일을 반복 할 수 있습니다. 루프 내부에서 터키 값이 있는지 확인하고이를 대체 할 수 있습니다. http://www.php.net/manual/en/book.dom.php

을 참조하십시오. 이 코드를 테스트하지는 않았지만 해결하기를 바랍니다. 이런 식으로해야합니다. 당신을 위해 무엇을 요구하는 것은 정말 유용 경우

편집 나는 루프에서 $ 결과 값을 사용하지 않은, 잘 모르겠어요 지금

<?php 
    $turkish = new DOMDocument(); 
    $turkish->load('turkish.xml'); 

    $general = new DOMDocument(); 
    $general->load('general.xml'); 

    $strings = $general->getElementsByTagName('STRING'); 
    $turkstrings = $turkish->getElementsByTagName('STRING'); 
    foreach($strings as $string) { 
     foreach($turkstrings as $turk) { 
      if($turk->getAttribute("id") == $string->getAttribute("id")) { 
       $string->setAttribute("value", $turk->getAttribute("value")); 
      } 
     } 
    } 
    echo $general->saveXML(); 
    ?> 
+1

당신이와 아무것도 너무 많은 루프를하고 있습니다. DOMDocument, checkout ['getElementById()'] (http://php.net/manual/en/domdocument.getelementbyid.php)를 선택하면 turkish 요소의 id로 일반 요소를 얻을 수 있습니다. 큰 문서를 변경하는 작은 문서에 대해 하나의 foreach를 사용하여이 작업을 수행 할 수 있습니다. –

+0

은 구조에 몇 개의 STRING 요소가 있는지에 따라 달라집니다. – Piddien

1

을 시도하기 때문에 소프트웨어해야와 이미 완전한 불완전한 번역 파일 즉석에서 기본값으로 설정됩니다.

그러나 확실히 기술적으로는 터키어 XML을 통과하고 일반 XML의 각 해당 항목을 변경하여, 예를 들어, 수는 :

$new = simplexml_load_string($general); 

$elements = simplexml_load_string($turkish)->STRING; 

foreach ($elements as $element) 
{ 
    $xpath = sprintf('//STRING[@id="%s"]', $element['id']); 

    if (list($found) = $new->xpath($xpath)) 
    { 
     $found['value'] = $element['value']; 
     $found['imported'] = 'turkish'; 
    } 
} 

$new->asXML('php://output'); 

이 예는 PHPs SimpleXML library를 사용합니다. 출력 :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<DICTIONARY xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" type="singlelanguage" lang="neutral" xsi:noNamespaceSchemaLocation="dictionary.xsd"> 
    <STRING id="AI.Directory.DefaultDefaultDir" value="Yeni Klasör" imported="turkish"/> 
    <STRING id="AI.Directory.Default32BitName" value="Otuziki bit" imported="turkish"/> 
    <STRING id="AI.DuplicateFile.DestName" value="Duplicate%s of %s"/> 
    <STRING id="AI.Feature.DefaultTitle" value="Feature"/> 
</DICTIONARY> 

See it in action.

+0

예, 괜찮습니다. 소프트웨어는 이미 불완전한 번역 파일을 즉시 기본값으로 완성해야합니다. 하지만 모든 콘텐츠를 모국어로 번역하고 싶습니다. 그러나 두 개의 다른 언어 파일을 가지고있을 때 나는 어느 것을 놓쳤습니다. 당신의 도움을 주셔서 감사합니다. –

+0

아, 이것은 좋은 소식입니다. 어떤 것을 (기계가 읽을 수있는 방식으로) 구별 할 수 있도록 요소를 가져온 경우 * 가져온 * 속성 설정을 소스 파일 언어 이름으로 업데이트했습니다. 병합 된 파일에서 얼마나 많은 문자열을 번역 할 필요가 있는지 쉽게 확인할 수 있습니다.) –

+0

대단히 감사합니다. 이것은 나를 위해 더 낫다. –

관련 문제