/ / Detecta el idioma de la cadena de Google API C # - c #

Detectar lenguaje de cadena de Google API C # - c #

Estoy tratando de detectar en qué idioma está escrito el txt del reproductor. LastChat es, y estoy teniendo algunas dificultades.

Aquí está el código que tengo:

String[] words = player.LastChat.Trim().Split(new Char[]{" ","t",",",".",":","!","?",";","(",")","]","[","""});
StringBuilder edited = new StringBuilder();
// Remove exception list words from line
foreach (String w in words) {
if (plugin.isInList(w, "good_words")) {
continue;
}
edited.Append(w);
edited.Append(" ");
}

// URL Encode edited string
String UnreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
StringBuilder Result = new StringBuilder();
String Input = edited.ToString();

for (int x = 0; x < Input.Length; ++x)
{
if (UnreservedChars.IndexOf(Input[x]) != -1)
Result.Append(Input[x]);
else
Result.Append("%").Append(String.Format("{0:X2}", (int)Input[x]));
}
String key = "API KEY";
// Test for badness
bool jsonresult = false;

try {
WebClient client = new WebClient();
String json = client.DownloadString("https://www.googleapis.com/language/translate/v2/detect?key=" + key + "&q=" + Result.ToString());
jsonresult = json.Contains("en");
} catch (Exception e) {
plugin.ConsoleWrite("Language check failed! Error: " + e);
}
if (!jsonresult) {
return true;
}
plugin.ConsoleWrite("Language: " + jsonresult);
return jsonresult; // for Actions

Entonces, lo que estoy tratando de lograr es devolver verdadero si es cualquier otro idioma que no sea "en" (inglés), pero es verdadero sin importar lo que pase.

La respuesta de google es esta:

{
"data": {
"detections": [
[
{
"language": "en",
"isReliable": false,
"confidence": 0.03396887
}
]
]
}
}

Cualquier ayuda es muy apreciada, y no tengo idea de cómo codificar, este código está tomado de otro script.

Saludos.

Respuestas

3 para la respuesta № 1

Para que el método funcione como se describe, debe cambiar:

if (!jsonresult) {
return true;
}
plugin.ConsoleWrite("Language: " + jsonresult);
return jsonresult;

a:

plugin.ConsoleWrite("Language: " + jsonresult);
return !jsonresult;

también esta línea

jsonresult = json.Contains("en");

está comprobando cualquier ocurrencia de "en" en texto json (y se encuentra en "confidence" en tu json). Lo que debe hacer es analizar Json usando json.net (u otra lib), o simplemente hacer esto (pero es un truco feo):

jsonresult = json.Contains(""language": "en",");