Сделал приложение, которое собирает данные репозитариев с github.com.
Приложение собирает в отдельные поля таблицы информацию о репозитарии: "краткое описание" и "полное описание" (README.md).
Данные отправляются в БД.
Нашёл переводчик текста.
Взял из него нужные классы.
Подключил переводчик к своему приложению (на сколько хватило опыта).
Закомментировал ненужные места (на сколько хватило опыта).
В результате получил проблемы:
- перевод "краткого описания" и "полного описание" (README.md) в базе данных заменён
местами;
- перевод "краткого описания" смещается вниз на одну запись;
- в БД не заносится первая запись (см. скрин);
Отладка показала, что я что-то неправильно "нахимичил" в классе "_TranslateMain.cs ".
А что не так, понять не могу.
Т.е. происходит следующее:
- "краткое описание" отправляем в "_TranslateMain.cs "
- в "txtDesc = result;" возвращается null
GTranslateService.TranslateAsync(
text,
lngSrc,
lngDest,
textTranslatorUrlKey
,(success, result)
=>
{
// SetResult(result);
// IsBusy(false);
txtDesc = result;
});
Вопрос
Как устранить проблемы?
Grid_uc.cs
_TranslateMain traslateText_cls;
private void Grid_uc_Load(object sender, EventArgs e) // при загрузке формы
{
// Перевод текста
traslateText_cls = new _TranslateMain(); //
}
// Присваиваем значение переменным. Заполняем ДатаТабле
// public async void VarAddValue()
public async Task<DataTable> VarAddValue()
{
for (int i = 1; i <= 5; i++)
{
// Обращаемся к экземпляру репозитария
// var instanceRepo = resultRepo.Items[i];
instanceRepo = resultRepo.Items[i];
instanceRepoId = instanceRepo.Id;
descript = instanceRepo.Description; // описание репозитария краткое (которое под именем находится)
descrip_translate = traslateText_cls.TranslateText(descript);
var readme = await client_cur.Repository.Content.GetReadme(instanceRepoId);
var rawText = readme.Content;
readme_content = rawText.ToString(); // содержание "readme"
readme_content_translate = traslateText_cls.TranslateText(readme_content);
}
}
_TranslateMain.cs
using System.Threading.Tasks;
//
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
//
using AutoResxTranslator;
namespace rsh.Core.Translate
{
class _TranslateMain
{
public string txtDesc; // текст переведённый
private readonly Dictionary<string, string> _languages = new Dictionary<string, string>
{
{"auto", "(Detect)"},
{"af", "Afrikaans"},
{"sq", "Albanian"},
{"ar", "Arabic"},
{"hy", "Armenian"},
{"az", "Azerbaijani"},
{"eu", "Basque"},
{"be", "Belarusian"},
{"bn", "Bengali"},
{"bg", "Bulgarian"},
{"ca", "Catalan"},
{"zh-CN", "Chinese (Simplified)"},
{"zh-TW", "Chinese (Traditional)"},
{"hr", "Croatian"},
{"cs", "Czech"},
{"da", "Danish"},
{"nl", "Dutch"},
{"en", "English"},
{"eo", "Esperanto"},
{"et", "Estonian"},
{"tl", "Filipino"},
{"fi", "Finnish"},
{"fr", "French"},
{"gl", "Galician"},
{"ka", "Georgian"},
{"de", "German"},
{"el", "Greek"},
{"gu", "Gujarati"},
{"ht", "Haitian Creole"},
{"iw", "Hebrew"},
{"hi", "Hindi"},
{"hu", "Hungarian"},
{"is", "Icelandic"},
{"id", "Indonesian"},
{"ga", "Irish"},
{"it", "Italian"},
{"ja", "Japanese"},
{"kn", "Kannada"},
{"km", "Khmer"},
{"ko", "Korean"},
{"lo", "Lao"},
{"la", "Latin"},
{"lv", "Latvian"},
{"lt", "Lithuanian"},
{"mk", "Macedonian"},
{"ms", "Malay"},
{"mt", "Maltese"},
{"no", "Norwegian"},
{"fa", "Persian"},
{"pl", "Polish"},
{"pt", "Portuguese"},
{"ro", "Romanian"},
{"ru", "Russian"},
{"sr", "Serbian"},
{"sk", "Slovak"},
{"sl", "Slovenian"},
{"es", "Spanish"},
{"sw", "Swahili"},
{"sv", "Swedish"},
{"ta", "Tamil"},
{"te", "Telugu"},
{"th", "Thai"},
{"tr", "Turkish"},
{"uk", "Ukrainian"},
{"ur", "Urdu"},
{"vi", "Vietnamese"},
{"cy", "Welsh"},
{"yi", "Yiddish"}
};
void FillComboBoxes()
{
//cmbSrc.DisplayMember = "Value";
//cmbSrc.ValueMember = "Key";
//cmbDesc.DisplayMember = "Value";
//cmbDesc.ValueMember = "Key";
// lstResxLanguages.Items.Clear();
//foreach (var k in _languages)
//{
// cmbSrc.Items.Add(k);
// if (k.Key == "auto")
// continue;
// cmbDesc.Items.Add(k);
// // cmbSourceResxLng.Items.Add(k);
// // lstResxLanguages.Items.Add(k.Key, k.Value, -1);
//}
// cmbSrc.SelectedIndex = 0;
// cmbDesc.Text = "English";
//
// srcLang = "auto";
// descLang = "Russian";
}
public string TranslateText(string text_str)
{
string lngSrc_str = "auto";
string lngDest_str = "ru";
// string text_str = textBox1.Text;
var lngSrc = lngSrc_str; // язык "КОТОРЫЙ" нужно перевести
var lngDest = lngDest_str; // язык "НА КОТОРЫЙ" нужно перевести
var text = text_str; // текст для перевода
// There is no longer a key to validate
// Нет больше ключа для проверки
var textTranslatorUrlKey = "";
// IsBusy(true);
GTranslateService.TranslateAsync(
text,
lngSrc,
lngDest,
textTranslatorUrlKey
,(success, result)
=>
{
// SetResult(result);
// IsBusy(false);
txtDesc = result;
});
return txtDesc;
}
void IsBusy(bool isbusy)
{
//if (this.InvokeRequired)
//{
// this.BeginInvoke(new Action<bool>(IsBusy), isbusy);
// return;
//}
//else
//{
// // tabMain.Enabled = !isbusy;
//}
}
public void SetResult(string result)
{
#region MyRegion
//// if (InvokeRequired)
//// if (this.InvokeRequired)
//{
// // this.BeginInvoke(new Action<string>(SetResult), result);
// // BeginInvoke(new Action<string>(SetResult), result);
// return;
//}
//else
//{
// txtDesc = result; // переведённый текст
//}
#endregion
}
}
}
GTranslateService.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
namespace AutoResxTranslator
{
public class GTranslateService
{
private const string RequestUserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0";
private const string RequestGoogleTranslatorUrl = "https://translate.googleapis.com/translate_a/single?client=gtx&sl={0}&tl={1}&hl=en&dt=t&dt=bd&dj=1&source=icon&tk=467103.467103&q={2}";
public delegate void TranslateCallBack(bool succeed, string result);
public static void TranslateAsync(
string text,
string sourceLng,
string destLng,
string textTranslatorUrlKey,
TranslateCallBack callBack)
{
var request = CreateWebRequest(text, sourceLng, destLng, textTranslatorUrlKey);
request.BeginGetResponse(
TranslateRequestCallBack,
new KeyValuePair<WebRequest, TranslateCallBack>(request, callBack));
}
public static bool Translate(
string text,
string sourceLng,
string destLng,
string textTranslatorUrlKey,
out string result)
{
var request = CreateWebRequest(text, sourceLng, destLng, textTranslatorUrlKey);
try
{
var response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode != HttpStatusCode.OK)
{
result = "Response is failed with code: " + response.StatusCode;
return false;
}
using (var stream = response.GetResponseStream())
{
string output;
var succeed = ReadGoogleTranslatedResult(stream, out output);
result = output;
return succeed;
}
}
catch (Exception ex)
{
result = ex.Message;
return false;
}
}
static WebRequest CreateWebRequest(
string text,
string lngSourceCode,
string lngDestinationCode,
string textTranslatorUrlKey)
{
text = HttpUtility.UrlEncode(text);
var url = string.Format(RequestGoogleTranslatorUrl, lngSourceCode, lngDestinationCode, text);
var create = (HttpWebRequest)WebRequest.Create(url);
create.UserAgent = RequestUserAgent;
create.Timeout = 50 * 1000;
return create;
}
private static void TranslateRequestCallBack(IAsyncResult ar)
{
var pair = (KeyValuePair<WebRequest, TranslateCallBack>)ar.AsyncState;
var request = pair.Key;
var callback = pair.Value;
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.EndGetResponse(ar);
if (response.StatusCode != HttpStatusCode.OK)
{
callback(false, "Response is failed with code: " + response.StatusCode);
return;
}
using (var stream = response.GetResponseStream())
{
string output;
var succeed = ReadGoogleTranslatedResult(stream, out output);
callback(succeed, output);
}
}
catch (Exception ex)
{
callback(false, "Request failed.\r\n" + ex.Message);
}
finally
{
if (response != null)
{
response.Close();
}
}
}
/// <summary>
/// the main trick :)
/// </summary>
static bool ReadGoogleTranslatedResult(Stream rawdata, out string result)
{
string text;
using (var reader = new StreamReader(rawdata, Encoding.UTF8))
{
text = reader.ReadToEnd();
}
try
{
dynamic obj = SimpleJson.DeserializeObject(text);
var final = "";
// the number of lines
int lines = obj[0].Count;
for (int i = 0; i < lines; i++)
{
// the translated text.
final += (obj[0][i][0]).ToString();
}
result = final;
return true;
}
catch (Exception ex)
{
result = ex.Message;
return false;
}
}
}
Добавление записей в БД
public void InsertRecordInDb(
string full_name_repo
,string descrip
,string descrip_translate
,string Readme
,string Readme_traslate
,string html_url
//,string full_name_repo
//,string full_name_repo
)
{
using (OleDbConnection cn = new OleDbConnection())
{
connection = new OleDbConnection(connectionString);
connection.Open();
string sql = string.Format("Insert Into " + table +
"(full_name_repo, descrip, descrip_translate, Readme, Readme_traslate, html_url) " +
"Values(@full_name_repo, @descrip, @descrip_translate, @Readme, @Readme_traslate, @html_url)");
using (OleDbCommand cmd = new OleDbCommand(sql, this.connection))
{
// Добавить параметры
cmd.Parameters.AddWithValue("@full_name_repo", full_name_repo);
cmd.Parameters.AddWithValue("@descrip", descrip);
cmd.Parameters.AddWithValue("@descrip_translate", descrip_translate);
cmd.Parameters.AddWithValue("@Readme", Readme);
cmd.Parameters.AddWithValue("@Readme_traslate", Readme_traslate);
cmd.Parameters.AddWithValue("@html_url", html_url);
cmd.ExecuteNonQuery();
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я задал первому елементу меню висоту 60 и textalign = MiddleCenter Но елемент просто игнорит свойство
Всем привет ! В питоне есть такая штука как subprocess и создавая его можно заставить программу писать в консоль и читать результат из консолиТ...
Когда добавляешь BoxCollider к новому предмету, он автоматически растягивается под его размерыКогда меняешь меш этого предмета - коллайдер не подтягивается...