I have to translate my AppResources from english to the other 4 languages available at the moment in WP7. So I decided to create a snippet to translate it, Of course simply change the TargetLanguage to get the translated section.
What you have to do is:
1.- Create the AppResources.es-ES.resx,AppResources.it-IT.resx and else in your WP7 app.
2.- Have an AppID for Bing Services.
3.- Add the following code to a WPF/SL app with the Bing Service reference.
4.- Copy from the first
to the last from the resx.file like:
</data lang="xml">data name="alanguage" xml:space="preserve">
<value>Answer Language</value>
</data>
<data name="animage" xml:space="preserve">
<value>An image!</value>
</data>
<data name="bonus" xml:space="preserve">
<value>BONUS </value>
</data>
The Code:
String source;
List<String> words;
String TargetLanguage = "it";
private void button1_Click(object sender, RoutedEventArgs e)
{
source = textBox1.Text;
List<String> input = (from prod in source.Split(new string[] { "<data ", "</data>" }, StringSplitOptions.None).ToList()
where prod.Contains("name")
select prod).ToList();
words = new List<string>();
Int32 odx, fdx = -1;
input.ForEach(inp =>
{
odx = inp.IndexOf("<value>") + "<value>".Length;
fdx = inp.IndexOf("</value>");
words.Add(inp.Substring(odx, fdx - odx));
});
StringBuilder sb = new StringBuilder(" ");
words.ForEach(s => sb.Append(String.Concat("| ", s, " ")));
TranslateWord(sb.ToString(),"en",TargetLanguage,ProcessTranslated);
}
public static void TranslateWord(string source,string SourceL,string TargetL,Func<List<String>,bool> ProcessTranslated)
{
List<string> ret = new List<string>();
SearchRequest request = new SearchRequest();
request.Sources = new SourceType[] { SourceType.Translation };
request.AppId = "YOURAPPID";
request.Query = source;
TranslationRequest tr = new TranslationRequest();
tr.SourceLanguage = SourceL;
tr.TargetLanguage = TargetL;
request.Translation = tr;
BingPortTypeClient client = new BingPortTypeClient();
client.SearchCompleted += (s, e) =>
{
String result = e.Result.Translation.Results[0].TranslatedTerm;
ret = result.Split('|').ToList();
ret.ForEach(s2 =>
{
if (s2.Length > 0 && s2[0] == ' ')
s2 = s2.Trim();
});
ret.RemoveAt(0);
ProcessTranslated(ret);
};
client.SearchAsync(request);
}
public bool ProcessTranslated(List<string> input)
{
if(input.Count == words.Count)
{
words.ForEach(w => source = source.Replace("<value>"+w, "<value>"+input[words.IndexOf(w)].Substring(1)));
}
textBox2.Text = source.Replace(" </value>","</value>");
return true;
}
And that's all, replace textBox2.Text the result in the .it-IT.resx and else. It may work in WPF and SL too.