2011-12-30 54 views
0

我正在寫一個應用程序,它顯示所有菜單和所有應用程序的英文和西班牙文文本。 任何人都可以告訴我如何解決這個問題。我能做的一件事就是將所有文本轉換成西班牙語,當選擇西班牙語語言時,有任何內置的android功能可將所有文本轉換爲選定語言。android中的本地化

+1

http://developer.android.com/guide/topics/resources/localization.html – 2011-12-30 07:08:34

+0

可能的重複[如何實現Android l10n?](http://stackoverflow.com/questions/1152839/how-to - 實施 - Android的本地化) – 2011-12-30 07:11:34

回答

1
  1. 創建文件夾,價值-ES(西班牙)
  2. 創建的strings.xml文件西班牙語
  3. 我想你在第二個屏幕按鈕更改語言,添加以下代碼按鈕單擊

    String language ="es"; 
        Locale locale = null; 
        if (language.equalsIgnoreCase("en")) { 
         locale = new Locale("en"); 
        } else if (language.equalsIgnoreCase("es")) { 
         locale = new Locale("es"); 
        } 
        Locale.setDefault(locale); 
        Configuration config = new Configuration(); 
        config.locale = locale; 
        getBaseContext().getResources().updateConfiguration(config, null); 
    
  4. 如果要更改動態語言,那麼你甘蔗調用的OnCreate(空)

謝謝你,

0

本地化:

在此開發者需要爲不同的區域設置不同的值的文件夾objects.each值文件夾中包含了自己的strings.xml文件(串),colors.xml文件(用於顏色)。在那個值文件夾開發者必須提供特定的語言數據(歡迎消息就像用不同的語言,他想要什麼) 當本地化被改變時選擇適當的資源(使用模擬器設置首頁 - >菜單 - >設置 - > 語言&鍵盤 - >選擇語言)

1

創建不同的資源文件夾來處理本地化。例如,對於西班牙文cretae文件夾,名稱分別爲value-esvalue-en英文版將文件夾中的所有字符串與同名文件夾中的Strings.xml文件保存在一起,只存在值不同於西班牙文和英文版。

您可以以同樣的方式訪問字符串,你通常幹什麼用getString(R.string.name); enter image description here

0

類本地化:

package com.org.net; 

import android.util.Log; 

import java.util.Map; 
import java.util.HashMap; 

enum Languages { 
    lnEn, lnRu; 
} 

public class $ { 

    private static volatile $ instance; 

    private static $ getInstance() { 

     $ localInstance = instance; 

     if (localInstance == null) { 

      synchronized ($.class) { 
       localInstance = instance; 

       if (localInstance == null) { 
        instance = localInstance = new $(); 
       } 
      } 
     } 

     return localInstance; 
    } 

    public static String $(String key) { 

     String[] value = getInstance().map.get(key); 

     if (value != null) { 
      return value[ getInstance().lang.ordinal() ]; 
     } else { 
      Log.e("translate", "not found translate: " + "map.put(\"" + key + "\", new String[] {\"" + key + "\"});\n"); 
      return key; 
     } 
    } 

    public static void defaultLang() { 

     String lang = Locale.getDefault().getLanguage(); 

     if (lang.equals("ru")) { 
      $.setLang(Languages.lnRu); 
     } else { 
      $.setLang(Languages.lnEn); 
     } 
    } 

    public static void setLang(Languages lang) { 

     getInstance().lang = lang; 
    } 

    private Languages lang; 
    private Map<String, String[]> map; 

    private $() { 

     lang = Languages.lnEn; 

     map = new HashMap<String, String[]>(); 

     map.put("Hello", new String[] { 
       "Hello", 
       "Привет", 
     }); 

     map.put("Translate it", new String[] { 
       "Translate it", 
       "Переведи это", 
     }); 

     boolean success = true; 

     for (Map.Entry<String, String[]> entry : map.entrySet()) { 

      String[] value = entry.getValue(); 

      if (value.length != Languages.values().length) { 
       Log.e("translate", "not found translate: " + entry.getKey()); 
       success = false; 
      } 
     } 

     if (! success) { 
      throw new RuntimeException("not found translate"); 
     } 
    } 
} 

用途:

// $.defaultLang() or $.setLang(Languages.lnRu) for select language 
button.setText($.$("Hello")); 

實用程序搜索字符串in code(php):

<? 
    $h1 = opendir('code/'); 

    if ($h1 === false) { 
    return; 
    } 

    $files = array(); 

    while (false !== ($file = readdir($h1))) { 

    if ($file != "." && $file != "..") { 

     if ($file == "$.java") { 
     continue; 
     } 

     $files[] = 'code/'.$file; 
    } 
    } 

    closedir($h1); 

    sort($files); 

    $word_count = 0; 

    $inquotes_str = ""; 
    $translate_str = ""; 
    $map_fill_str = ""; 

    foreach ($files as $file) { 

    $contents = file_get_contents($file); 

    $matches = null; 
    preg_match_all('/(["\'])(?:\\\\\1|(?!\1).)+\1/', $contents, $matches); 

    foreach($matches[0] as $line) { 
     $inquotes_str .= "{$line}\n"; 
    } 

    $matches = null; 
    preg_match_all('/\$\.\$\(\s*".*?"\s*\)/', $contents, $matches); 

    foreach($matches[0] as $line) { 

     preg_match('/".*"/', $line, $line); 
     $line = $line[0]; 

     $translate_str .= "{$line}\n"; 
     $word_count += str_word_count($line); 

     $map_fill_str .= <<< EOF 
     map.put({$line}, new String[] { 
      {$line}, 
     }); 


EOF; 
    } 
    } 

    file_put_contents("inquotes_str.txt", $inquotes_str); 
    file_put_contents("translate_str.txt", $translate_str); 
    file_put_contents("map_fill_str.txt", $map_fill_str); 

    echo "{$word_count}\n"; 
?>