2016-11-15 5 views
2

のために、アレイのうちのstring-array定義の多くは、文字列を移動:Androidの文字列の配列は:そうのように、私のAndroidの文字列リソースファイルにIが含まれている優れた視認性の

<string-array name="my_items"> 
    <item>First Option</item> 
    <item>Second Option</item> 
    <item>Third Option</item> 
</string-array> 

を、これは正常に動作一方で、私は見つけることですそのアプリのローカリゼーションツールは一般的にstring-arrayの定義を理解していないため、翻訳用の文字列をエクスポートするのに苦労します。 Android Studioの翻訳エディターでさえ、これらの定義を無視しているようです。

それでは、私がやりたいことは、彼らがより良い可視性を持っており、そのような配列の内部からのものを参照する配列のうち、文字列そのものを移動することです:私はLOTを持っているので

<string name="my_items_1">First Option</string> 
<string name="my_items_2">Second Option</string> 
<string name="my_items_3">Third Option</string> 

<string-array name="my_items"> 
    <item>@string/my_items_1</item> 
    <item>@string/my_items_2</item> 
    <item>@string/my_items_3</item> 
</string-array> 

これらのうちいくつかの言語リソースファイルで、私はこの変換/マッピングを自動化する方法を探しています。私はおそらく、先読みやlookbehindsなど、非常に狡猾な正規表現ベースのソリューションがあるかもしれないと思っています。私は正規表現では絶望的なので、これが可能かどうかはわかりません。そうでない場合は、スクリプトベースの方法がありますか?

誰かからインスピレーションを得て祈っています!

+0

あなたのための答えの仕事をしましたか? –

答えて

0

上記のパターンがどのファイルに含まれているかを知る必要があります。一度、あなたが次のファイルを処理しなければならないファイルを知ったら、コードはjava7で書かれます。アンドロイド携帯電話...むしろあなたは開発環境のためにそれを必要とするので、あなたが望むようにファイルを修正するツールとして次のコードを考えてください:

package regex; 

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import static java.nio.file.Files.readAllBytes; 
import static java.nio.file.Paths.get; 

/** 
* 
* @author Maverick 
*/ 
public class Regex { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws IOException { 


     final String regex = "<string-array name=\\\"(.*?)\\\">(.*?)<\\/string-array>"; 
     String string = null; 
     string = new String(readAllBytes(get("G:/sample.xml"))); 
     final String subRegex = "(<item>)(.*?)(<\\/item>)"; 
     final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL); 
     final Pattern subPattern = Pattern.compile(subRegex, Pattern.MULTILINE | Pattern.DOTALL); 
     final Matcher matcher = pattern.matcher(string); 
     Matcher submatcher; 

     String str1 = "", str2 = ""; 
     String finalResult = ""; 

     while (matcher.find()) { 
      submatcher = subPattern.matcher(matcher.group(2)); 
      str1 = ""; 
      str2 = "<string-array name=\"" + matcher.group(1) + "\">\n"; 

      int j = 0; 
      while (submatcher.find()) { 
       j += 1; 
       str1 += "<string name=\"" + matcher.group(1) + "_" + j + "\">" + submatcher.group(2) + "</string>\n"; 
       str2 += "<item>@string/" + matcher.group(1) + "_" + j + "</item>\n"; 
      } 
      str1 += "\n\n"; 
      str2 += "</string-array>\n\n"; 

      finalResult = str1 + str2; 
      string = string.replace(matcher.group(0), finalResult); 
     } 
     File myFoo = new File("G:/sample.xml"); 
     FileWriter fooWriter = new FileWriter(myFoo, false); 
     fooWriter.write(string); 
     fooWriter.close(); 


    } 
} 

実行前の内容:

<string-array name="my_items1"> 
    <item>First Option1</item> 
    <item>Second Option1</item> 
    <item>Third Option1</item> 
</string-array> 

asdfadsf 
safasdfadsf 

<string-array name="my_items1"> 
    <item>First Option1</item> 
    <item>Second Option1</item> 
    <item>Third Option1</item> 
</string-array> 

sdfasfasdf 

<string-array name="my_items12"> 
    <item>First Option12</item> 
    <item>Second Option12</item> 
    <item>Third Option12</item> 
</string-array> 

aa 
basfad 

<string-array name="my_items13"> 
    <item>First Option13</item> 
    <item>Second Option13</item> 
    <item>Third Option13</item> 
</string-array> 

afsdfadsf 
実行後

<string name="my_items1_1">First Option1</string> 
<string name="my_items1_2">Second Option1</string> 
<string name="my_items1_3">Third Option1</string> 


<string-array name="my_items1"> 
<item>@string/my_items1_1</item> 
<item>@string/my_items1_2</item> 
<item>@string/my_items1_3</item> 
</string-array> 



asdfadsf 
safasdfadsf 

<string name="my_items1_1">First Option1</string> 
<string name="my_items1_2">Second Option1</string> 
<string name="my_items1_3">Third Option1</string> 


<string-array name="my_items1"> 
<item>@string/my_items1_1</item> 
<item>@string/my_items1_2</item> 
<item>@string/my_items1_3</item> 
</string-array> 



sdfasfasdf 

<string name="my_items12_1">First Option12</string> 
<string name="my_items12_2">Second Option12</string> 
<string name="my_items12_3">Third Option12</string> 


<string-array name="my_items12"> 
<item>@string/my_items12_1</item> 
<item>@string/my_items12_2</item> 
<item>@string/my_items12_3</item> 
</string-array> 



aa 
basfad 

<string name="my_items13_1">First Option13</string> 
<string name="my_items13_2">Second Option13</string> 
<string name="my_items13_3">Third Option13</string> 


<string-array name="my_items13"> 
<item>@string/my_items13_1</item> 
<item>@string/my_items13_2</item> 
<item>@string/my_items13_3</item> 
</string-array> 



afsdfadsf 
関連する問題