public TranslationUserAccount LoadUserAccount(SPWeb spWeb, string sourceLanguage) { string login = string.Empty; string password = string.Empty; string url = string.Empty; List <string> userProfileList = new List <string>(); TranslationUserAccount translationUserAccount = new TranslationUserAccount(); SPUser currentUser = spWeb.CurrentUser; if (HttpRuntime.Cache.Get("OceanikTranslationAccount " + spWeb.ID.ToString() + currentUser.LoginName + "-" + sourceLanguage) == null) { try { SPUser rootSiteCurrentUser = spWeb.SiteUsers.GetByID(currentUser.ID); string systranAccount = string.Empty; //if (HttpRuntime.Cache.Get("OceanikTranslationAccount " + currentUser.LoginName) == null) //{ if (spWeb.Lists["Translation Accounts"] != null) { SPList accountsSystranList = spWeb.Lists["Translation Accounts"]; if (HttpRuntime.Cache.Get("OceanikTranslationAccountId " + spWeb.ID.ToString() + currentUser.LoginName) == null) { foreach (SPItem account in accountsSystranList.Items) { if (account["Groups"] != null) { SPFieldUserValueCollection groupsForThisAccount = (SPFieldUserValueCollection)account["Groups"]; foreach (SPFieldUserValue groupForThisAccount in groupsForThisAccount) { try { foreach (SPGroup groupForTheRootSiteCurrentUser in rootSiteCurrentUser.Groups) { if (groupForTheRootSiteCurrentUser.Name == groupForThisAccount.LookupValue) { if (accountsSystranList.Fields.ContainsField("Account")) { systranAccount = account["Account"].ToString(); HttpRuntime.Cache.Remove("OceanikTranslationAccountId " + spWeb.ID.ToString() + currentUser.LoginName); HttpRuntime.Cache.Add("OceanikTranslationAccountId " + spWeb.ID.ToString() + currentUser.LoginName, account.ID, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.High, null); //if (accountsSystranList.Fields.ContainsField("Profiles")) //{ // string profilesFieldValue = account["Profiles"].ToString(); // if (profilesFieldValue != string.Empty) // { // Regex lookupRegex = new Regex("[0-9]+;#(?<value>([^;]+))"); // foreach (Match profileName in lookupRegex.Matches(profilesFieldValue)) // { // userProfileArrayList.Add(profileName.Groups["value"].Value); // } // } //} } break; } } if (userProfileList.Count > 0) { break; } } catch { } } if (userProfileList.Count > 0) { break; } } } } if (accountsSystranList.Fields.ContainsField("Account") && accountsSystranList.Fields.ContainsField("Password") && accountsSystranList.Fields.ContainsField("Url")) { string accountId = Convert.ToString(HttpRuntime.Cache.Get("OceanikTranslationAccountId " + spWeb.ID.ToString() + currentUser.LoginName)); SPListItem accountItem = accountsSystranList.Items.Cast <SPListItem>().First(sPListItemTmp => sPListItemTmp.ID.ToString() == accountId); if (accountItem["Account"] != null && accountItem["Password"] != null && accountItem["Url"] != null) { login = accountItem["Account"].ToString(); password = accountItem["Password"].ToString(); url = accountItem["Url"].ToString(); userProfileList = GetProfilesList(url, login, password); } } } //} } catch { } translationUserAccount.Login = login; translationUserAccount.Password = password; translationUserAccount.Url = url; translationUserAccount.Profiles = userProfileList; HttpRuntime.Cache.Remove("OceanikTranslationAccount " + spWeb.ID.ToString() + currentUser.LoginName + "-" + sourceLanguage); HttpRuntime.Cache.Add("OceanikTranslationAccount " + spWeb.ID.ToString() + currentUser.LoginName + "-" + sourceLanguage, translationUserAccount, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.High, null); } else { translationUserAccount = (TranslationUserAccount)(HttpRuntime.Cache.Get("OceanikTranslationAccount " + spWeb.ID.ToString() + currentUser.LoginName + "-" + sourceLanguage)); } return(translationUserAccount); }
public byte[] TranslateFile(byte[] buffer, string sourceLang, string destinationLang, string profileId, TranslationUserAccount translationUserAccount, string fileName) { string username = string.Empty; string password = string.Empty; string gui = string.Empty; string fileData; if (translationUserAccount != null) { username = translationUserAccount.Login; password = translationUserAccount.Password; Tws.Url = translationUserAccount.Url; } sourceLang = sourceLang.Replace("CH", "zh"); destinationLang = destinationLang.Replace("CH", "zh"); sourceLang = sourceLang.Replace("JP", "ja"); destinationLang = destinationLang.Replace("JP", "ja"); sourceLang = sourceLang.Replace("DU", "nl"); destinationLang = destinationLang.Replace("DU", "nl"); //Tws.Url = "http://demov7.systran.fr/ws"; string lp = sourceLang.ToLower() + "_" + destinationLang.ToLower(); // read the file and encode as a base64 string try { fileData = Convert.ToBase64String(buffer); } catch (Exception e) { Utilities.LogException("Error in Translator2009.TranslatorAutoTranslation.CallFileTranslationSystranWebService: " + e.Message, EventLogEntryType.Warning); return(buffer); } // create request object and set options var request = new Request(); int optionCount = 5; int optExtra = optionCount; if (gui.Length != 0) { optionCount++; } if (!string.IsNullOrEmpty(profileId)) { optionCount++; } request.option = new Option[optionCount]; request.option[0] = new Option { name = "login.username", value = username }; request.option[1] = new Option { name = "login.password", value = password }; request.option[2] = new Option { name = "lp", value = lp }; request.option[3] = new Option { name = "translate_source", value = "file_data" }; request.option[4] = new Option { name = "input_file_data", value = fileData }; if (gui.Length != 0) { request.option[optExtra] = new Option { name = "gui", value = gui }; optExtra++; } if (!string.IsNullOrEmpty(profileId)) { request.option[optExtra] = new Option { name = "profile", value = profileId }; } // call the web service string status = null; // status indicates the percent completion of the request string requestid = null; // requestid uniquely identifies the request Response response = Tws.Translate(request); foreach (Option option in response.option) { if (option.name == "status") { status = option.value; } else if (option.name == "requestid") { requestid = option.value; } } // wait for the request to complete while (status == null || status != "100") { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); var infoRequest = new RequestInfo { option = new Option[0], infotype = "request", requestid = requestid }; response = Tws.GetInfo(infoRequest); foreach (Option option in response.option) { if (option.name == "status") { status = option.value; } } } // read the results var results = new Hashtable(); foreach (Option option in response.option) { results[option.name] = option.value; } // display the results if ((string)results["error"] == null) { // if the error option is set, an error occured try { buffer = Convert.FromBase64String((string)results["output_file_data"]); } catch (Exception e) { Utilities.LogException("Error in Translator2009.TranslatorAutoTranslation.CallFileTranslationSystranWebService: " + e.Message, EventLogEntryType.Warning); return(buffer); } } return(buffer); }
public string TranslateText(string toTranslate, string sourceLang, string destinationLang, string profileId, TranslationUserAccount translationUserAccount, bool isHtml) { string username = string.Empty; string password = string.Empty; sourceLang = sourceLang.Replace("CH", "zh"); destinationLang = destinationLang.Replace("CH", "zh"); sourceLang = sourceLang.Replace("JP", "ja"); destinationLang = destinationLang.Replace("JP", "ja"); sourceLang = sourceLang.Replace("DU", "nl"); destinationLang = destinationLang.Replace("DU", "nl"); if (translationUserAccount != null) { username = translationUserAccount.Login; password = translationUserAccount.Password; Tws.Url = translationUserAccount.Url; } //Tws.Url = "http://demov7.systran.fr/ws"; // promt user for language pair and input text string lp = sourceLang.ToLower() + "_" + destinationLang.ToLower(); string text = toTranslate; string gui = string.Empty; int optionCount = 7; if (!string.IsNullOrEmpty(profileId)) { optionCount++; } // create request object and set options var request = new Request { option = new Option[optionCount] }; request.option[0] = new Option { name = "lp", value = lp }; request.option[1] = new Option { name = "input_text", value = text }; request.option[2] = new Option { name = "translate_source", value = "string" }; request.option[3] = new Option { name = "nfw_marker", value = string.Empty }; request.option[4] = new Option { name = "gui", value = gui }; request.option[5] = new Option { name = "login.username", value = username }; request.option[6] = new Option { name = "login.password", value = password }; if (!string.IsNullOrEmpty(profileId)) { request.option[7] = new Option { name = "profile", value = profileId }; } // call the web service Response response = Tws.Translate(request); // wait for the request to complete string status = null; // status indicates the percent completion of the request string requestid = null; // requestid uniquely identifies the request foreach (Option option in response.option) { if (option.name == "status") { status = option.value; } else if (option.name == "requestid") { requestid = option.value; } } while (status == null || status != "100") { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); var infoRequest = new RequestInfo { option = new Option[0], infotype = "request", requestid = requestid }; response = Tws.GetInfo(infoRequest); foreach (Option option in response.option) { if (option.name == "status") { status = option.value; } } } // read the results var results = new Hashtable(); foreach (Option option in response.option) { results[option.name] = option.value; } // display the results if ((string)results["error"] != null) { return(toTranslate); } return(Convert.ToString(results["output_text"])); }
public byte[] TranslateFile(byte[] buffer, string sourceLang, string destinationLang, string profileId, TranslationUserAccount translationUserAccount, string fileName) { throw new NotImplementedException(); }
const string _profileIdFieldName = "Profile ID"; //"Profile_X0020_ID"; public static void CreateClonedMultilingualItem(IAutomaticTranslation automaticTranslationPlugin, SPWeb siteWeb, string listId, string url, string itemId, string lang, bool toTranslate, bool discussionBoardEdition) { try { using (var currentSite = new SPSite(url)) using (SPWeb web = currentSite.OpenWeb()) { web.AllowUnsafeUpdates = true; SPList currentList = web.Lists[new Guid(listId)]; //SPItem currentItem; //if (currentList.BaseTemplate == SPListTemplateType.DiscussionBoard) //{ // currentItem = currentList.Folders. //} SPListItem currentItem = currentList.GetItemById(Convert.ToInt32(itemId)); string currentItemLanguage = string.Empty; if (currentList.Fields.ContainsField("SharePoint_Item_Language")) { currentItemLanguage = (string)currentItem["SharePoint_Item_Language"]; currentItemLanguage = currentItemLanguage.Replace("(SPS_LNG_ALL)", string.Empty).Replace("SPS_LNG_", string.Empty); } var displayedLang = new ArrayList(); if (lang == "ALL") { foreach (LanguageItem languageItem in BaseStaticOverride <Dictionaries> .Instance.VisibleLanguages) { if (currentItemLanguage != languageItem.LanguageDestination) { displayedLang.Add(languageItem.LanguageDestination); } } } else { displayedLang.Add(lang); } foreach (string langTmp in displayedLang) { lang = langTmp; if (currentList.Fields.ContainsField(lang + " version")) { bool isLinkedItemExist = false; SPListItem cloneItem = null; if (currentItem[lang + " version"] != null) { string linkedItemId = currentItem[lang + " version"].ToString(); var query = new SPQuery { Query = "<Where><Eq><FieldRef Name='ID'/>" + "<Value Type='Number'>" + linkedItemId.Remove(linkedItemId.IndexOf(";")) + "</Value></Eq></Where>", QueryThrottleMode = SPQueryThrottleOption.Override }; if ((discussionBoardEdition) && (currentItem.Folder == null)) { query.ViewAttributes = "Scope='Recursive'"; } SPListItemCollection collListItems = currentList.GetItems(query); if (collListItems.Count > 0) { foreach (SPListItem listItemTmp in collListItems) { string listItemTmpLanguage = listItemTmp["SharePoint_Item_Language"].ToString(); if (listItemTmpLanguage == "SPS_LNG_" + lang) { isLinkedItemExist = true; cloneItem = listItemTmp; } } } } bool toOverwrite = false; if (currentItem["ItemsAutoCreation"] != null) { if (currentItem["ItemsAutoCreation"].ToString() == "Overwrite/Create items for all languages") { toOverwrite = true; } } if ((!isLinkedItemExist) || toOverwrite) { string cloneItemName; if (currentList.BaseType == SPBaseType.DocumentLibrary) { cloneItemName = currentItem.File.Name.Remove(currentItem.File.Name.LastIndexOf(".")) + "_" + lang + currentItem.Name.Substring(currentItem.Name.LastIndexOf(".")); } else { cloneItemName = currentItem.Name + "_" + lang; } if (!isLinkedItemExist) { if (currentList.BaseType == SPBaseType.DocumentLibrary) { byte[] fileBytes = currentItem.File.OpenBinary(); SPFile file = currentList.RootFolder.Files.Add(currentList.RootFolder.Url + "/" + cloneItemName, fileBytes); cloneItem = file.Item; cloneItem["Title"] = cloneItemName; cloneItem["ItemsAutoCreation"] = "None"; cloneItem.SystemUpdate(false); } else if (currentList.BaseTemplate == SPListTemplateType.DiscussionBoard) { string discussionParentId = string.Empty; //if (currentUrl.IndexOf("&DiscussionParentID=") > -1) //{ // discussionParentId = currentUrl.Substring(currentUrl.IndexOf("=", currentUrl.IndexOf("&DiscussionParentID=")) + 1); // if (discussionParentId.IndexOf("&") > -1) // discussionParentId = discussionParentId.Remove(discussionParentId.IndexOf("&")); //} //if (discussionParentId == string.Empty) //if (web.GetFolder(currentItem.Url).ParentFolder == null) if (currentItem.Folder != null) { cloneItem = SPUtility.CreateNewDiscussion(currentList.Items, cloneItemName); // currentList.Items.Add(); } else { SPFolder parentFolder = web.GetFolder(currentItem.Url).ParentFolder; SPListItem parentDiscussion = web.GetFolder(currentItem.Url).ParentFolder.Item; //SPListItem parentDiscussion = currentList.GetItemById(Convert.ToInt32(discussionParentId)); if ((parentDiscussion["SharePoint_Group_Language"] != null) && (Convert.ToInt32(parentDiscussion["SharePoint_Group_Language"]) != 0)) { var query = new SPQuery(); query.Query = "<Where><And><Eq><FieldRef Name=\"SharePoint_Item_Language\" /><Value Type=\"Text\">SPS_LNG_" + lang + "</Value></Eq>" + "<Eq><FieldRef Name='SharePoint_Group_Language'/>" + "<Value Type='Number'>" + parentDiscussion["SharePoint_Group_Language"].ToString() + "</Value></Eq></And></Where>"; SPListItemCollection clonedDiscussionsCollection = currentList.GetItems(query); foreach (SPListItem clonedDiscussion in clonedDiscussionsCollection) { cloneItem = SPUtility.CreateNewDiscussionReply(clonedDiscussion); break; } } } cloneItem[SPBuiltInFieldId.Body] = cloneItemName; cloneItem[SPBuiltInFieldId.TrimmedBody] = currentItem[SPBuiltInFieldId.TrimmedBody]; cloneItem["Title"] = cloneItemName; cloneItem["ItemsAutoCreation"] = "None"; cloneItem.SystemUpdate(false); } else { cloneItem = currentList.Items.Add(); cloneItem["Title"] = cloneItemName; cloneItem["ItemsAutoCreation"] = "None"; cloneItem.SystemUpdate(false); } } var oQuery = new SPQuery { QueryThrottleMode = SPQueryThrottleOption.Override }; if (currentList.BaseType == SPBaseType.DocumentLibrary) { oQuery.Query = "<Where><Eq><FieldRef Name='FileLeafRef'/>" + "<Value Type='File'>" + cloneItemName + "</Value></Eq></Where>"; } else { oQuery.Query = "<Where><Eq><FieldRef Name='Title'/>" + "<Value Type='Text'>" + cloneItemName + "</Value></Eq></Where>"; } if (currentList.Fields.ContainsField("MetadataToDuplicate")) { if (currentItem["MetadataToDuplicate"] != null) { string[] metadataToUpdateArray = ((string)currentItem["MetadataToDuplicate"]).Split(';'); foreach (string t in metadataToUpdateArray) { if (currentList.Fields.ContainsField(t)) { cloneItem[t] = currentItem[t]; cloneItem.SystemUpdate(false); } } } } bool isBodyExist = currentList.Fields.Cast <SPField>().Any(sPFieldTmp => sPFieldTmp.InternalName == "Body"); bool isTitleExist = currentList.Fields.Cast <SPField>().Any(sPFieldTmp => sPFieldTmp.InternalName == "Title"); bool isProfileExist = currentList.Fields.Cast <SPField>().Any(sPFieldTmp => sPFieldTmp.ToString() == _profileFieldName); string profileId = string.Empty; if (isProfileExist) { profileId = GetProfileId(web, currentItem); } TranslationUserAccount translationUserAccount = null; if (automaticTranslationPlugin != null) { translationUserAccount = automaticTranslationPlugin.LoadUserAccount(web.Site.RootWeb, currentItemLanguage); } if (isBodyExist && (currentItem["Body"] != null)) { string bodyContentToTranslate = currentItem["Body"].ToString(); string bodyContentTranslated = bodyContentToTranslate; if ((currentItem["AutoTranslation"] != null) && (currentItemLanguage != lang)) { if ((currentItem["AutoTranslation"].ToString() == "Yes") || toTranslate) { if (automaticTranslationPlugin != null) { bodyContentTranslated = automaticTranslationPlugin.TranslateText(bodyContentToTranslate, currentItemLanguage, lang, profileId, translationUserAccount, true); bodyContentTranslated += " " + HttpRuntime.Cache["AlphamosaikMessageForAutotranslateText"]; } else { bodyContentTranslated = bodyContentToTranslate; } if ((currentList.BaseTemplate == SPListTemplateType.DiscussionBoard) && (cloneItem[SPBuiltInFieldId.TrimmedBody] != null)) { if (automaticTranslationPlugin != null) { cloneItem[SPBuiltInFieldId.TrimmedBody] = automaticTranslationPlugin.TranslateText(currentItem[SPBuiltInFieldId.TrimmedBody].ToString(), currentItemLanguage, lang, profileId, translationUserAccount, true); if (!string.IsNullOrEmpty(cloneItem[SPBuiltInFieldId.TrimmedBody].ToString())) { cloneItem[SPBuiltInFieldId.TrimmedBody] += " " + HttpRuntime.Cache["AlphamosaikMessageForAutotranslateText"]; } } else { cloneItem[SPBuiltInFieldId.TrimmedBody] = currentItem[SPBuiltInFieldId.TrimmedBody]; } } } } if (currentList.BaseTemplate == SPListTemplateType.DiscussionBoard) { CopyDiscussionAttachments(currentItem, cloneItem); } cloneItem["Body"] = bodyContentTranslated; cloneItem.SystemUpdate(false); } if (currentList.BaseType != SPBaseType.DocumentLibrary) { if (isTitleExist && (currentItem["Title"] != null)) { string titleContentToTranslate = currentItem["Title"].ToString(); string titleContentTranslated = titleContentToTranslate; if (currentItem["AutoTranslation"] != null) { if (automaticTranslationPlugin != null && ((currentItem["AutoTranslation"].ToString() == "Yes") || toTranslate)) { titleContentTranslated = automaticTranslationPlugin.TranslateText(titleContentTranslated, currentItemLanguage, lang, profileId, translationUserAccount, false); } } cloneItem["Title"] = titleContentTranslated; cloneItem.SystemUpdate(false); } } else { if (currentItem["AutoTranslation"] != null) { if ((currentItem["AutoTranslation"].ToString() == "Yes") || toTranslate) { if (currentList.BaseTemplate == (SPListTemplateType)(850)) { string pageContentToTranslate = string.Empty; if (currentItem["PublishingPageContent"] != null) { pageContentToTranslate = currentItem["PublishingPageContent"].ToString(); } if (currentList.Fields.ContainsField("PublishingPageContent")) { if (automaticTranslationPlugin != null) { cloneItem["PublishingPageContent"] = automaticTranslationPlugin.TranslateText(pageContentToTranslate, currentItemLanguage, lang, profileId, translationUserAccount, true); } else { cloneItem["PublishingPageContent"] = pageContentToTranslate; } cloneItem.SystemUpdate(false); } } else if (automaticTranslationPlugin != null && automaticTranslationPlugin.SupportFileTranslation()) { cloneItem.SystemUpdate(false); lock (cloneItem) { byte[] fileBytes = currentItem.File.OpenBinary(); fileBytes = automaticTranslationPlugin.TranslateFile(fileBytes, currentItemLanguage, lang, profileId, translationUserAccount, currentItem.File.Name); cloneItem.File.SaveBinary(fileBytes); } } } } if (currentList.BaseTemplate == (SPListTemplateType)(850)) { CreatePublishingPage(currentItem, cloneItem, web, toOverwrite); } } url = url.Replace("?SPS_Trans_Code=CreateClonedMultilingualItem&", "?").Replace("&SPS_Trans_Code=CreateClonedMultilingualItem", string.Empty); Utilities.SetItemLanguage(siteWeb, listId, url, cloneItem.ID.ToString(), lang); Utilities.LinkItemWith(siteWeb, listId, url, itemId, cloneItem.ID.ToString()); } else { if (HttpContext.Current != null) { HttpContext.Current.Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri.Replace("?SPS_Trans_Code=CreateClonedMultilingualItem&", "?") .Replace("&SPS_Trans_Code=CreateClonedMultilingualItem", string.Empty), false); } } } else { if (HttpContext.Current != null) { HttpContext.Current.Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri.Replace("?SPS_Trans_Code=CreateClonedMultilingualItem&", "?") .Replace("&SPS_Trans_Code=CreateClonedMultilingualItem", string.Empty), false); } } } } if (HttpContext.Current != null) { HttpContext.Current.Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri.Replace("?SPS_Trans_Code=CreateClonedMultilingualItem&", "?") .Replace("&SPS_Trans_Code=CreateClonedMultilingualItem", string.Empty), false); } } catch (Exception exc) { Utilities.LogException("Error in Translator2010.TranslatorAutoTranslation.CreateClonedMultilingualItem: " + exc.Message, EventLogEntryType.Warning); } }
public string TranslateText(string toTranslate, string sourceLang, string destinationLang, string profileId, TranslationUserAccount translationUserAccount, bool isHtml) { if (string.IsNullOrEmpty(sourceLang) || string.IsNullOrEmpty(destinationLang)) { return(toTranslate); } try { sourceLang = sourceLang.Replace("CH", "zh-CHS"); destinationLang = destinationLang.Replace("CH", "zh-CHS"); sourceLang = sourceLang.Replace("JP", "ja"); destinationLang = destinationLang.Replace("JP", "ja"); sourceLang = sourceLang.Replace("DU", "nl"); destinationLang = destinationLang.Replace("DU", "nl"); string translatedText; using (var client = new LanguageService.LanguageServiceClient()) { translatedText = client.Translate(HttpRuntime.Cache["AlphamosaikBingApplicationId"].ToString(), toTranslate, sourceLang.ToLower(), destinationLang.ToLower()); } return(translatedText); } catch (Exception e) { Utilities.LogException("Error in BingTranslation.TranslateText: " + e.Message, EventLogEntryType.Warning); return(toTranslate); } }
public byte[] TranslateFile(byte[] buffer, string sourceLang, string destinationLang, string profileId, TranslationUserAccount translationUserAccount, string fileName) { byte[] bufferOriginal = buffer; try { using (Translator webService = GetWebService(translationUserAccount.Login, translationUserAccount.Password, translationUserAccount.Url)) { sourceLang = ConvertLanguageCode2LettersTo3Letters(sourceLang); destinationLang = ConvertLanguageCode2LettersTo3Letters(destinationLang); DirectionInfo directionInfo = GetDirectionInfo(webService, sourceLang, destinationLang); string outputFileExtension; int translationsLeft; string inputFileExtension = GetFileExtension(fileName); byte[] result = webService.TranslateStream(buffer, inputFileExtension, directionInfo, GetTemplateInfo(profileId, directionInfo), null, out translationsLeft, out outputFileExtension); return(result); } } catch (Exception e) { Utilities.LogException("TranslateFile", e, EventLogEntryType.Warning); return(bufferOriginal); } }
//private readonly string _webservicePath; //private readonly string _userName; //private readonly string _password; //public SoftissimoTranslation(string webservicePath, string userName, string password) //{ // _webservicePath = webservicePath; // _userName = userName; // _password = password; //} #region Implementation of IAutomaticTranslation public string TranslateText(string toTranslate, string sourceLang, string destinationLang, string profileId, TranslationUserAccount translationUserAccount, bool isHtml) { string toTranslateOriginal = toTranslate; try { sourceLang = ConvertLanguageCode2LettersTo3Letters(sourceLang); destinationLang = ConvertLanguageCode2LettersTo3Letters(destinationLang); if (string.IsNullOrEmpty(profileId)) { profileId = "General"; } using (Translator webService = GetWebService(translationUserAccount.Login, translationUserAccount.Password, translationUserAccount.Url)) { DirectionInfo directionInfo = GetDirectionInfo(webService, sourceLang, destinationLang); bool truncated; long wordsLeft; if (isHtml) { byte[] encbuff = Encoding.UTF8.GetBytes(toTranslate); toTranslate = Convert.ToBase64String(encbuff); string result = webService.TranslateHTML(toTranslate, directionInfo, GetTemplateInfo(profileId, directionInfo), string.Empty, false, null, "utf-8", out truncated, out wordsLeft); byte[] decodedBytes = Convert.FromBase64String(result); result = Encoding.UTF8.GetString(decodedBytes); return(result); } else { return(webService.TranslateText(toTranslate, directionInfo, GetTemplateInfo(profileId, directionInfo), null, out truncated, out wordsLeft)); } } } catch (Exception e) { Utilities.LogException("TranslateText", e, EventLogEntryType.Warning); return(toTranslateOriginal); } }
public TranslationUserAccount LoadUserAccount(SPWeb spWeb, string sourceLanguage) { string login = string.Empty; string password = string.Empty; string url = string.Empty; List <string> userProfileList = new List <string>(); TranslationUserAccount translationUserAccount = new TranslationUserAccount(); SPUser currentUser = spWeb.CurrentUser; string lang = string.Empty; if (string.IsNullOrEmpty(sourceLanguage)) { if (HttpContext.Current != null) { lang = Utilities.GetLanguageCode(HttpContext.Current); } else { lang = sourceLanguage; } } if (HttpRuntime.Cache.Get("OceanikTranslationAccount " + spWeb.ID.ToString() + currentUser.LoginName + "-" + lang) == null) { try { SPUser rootSiteCurrentUser = spWeb.SiteUsers.GetByID(currentUser.ID); string systranAccount = string.Empty; //if (HttpRuntime.Cache.Get("OceanikTranslationAccount " + currentUser.LoginName) == null) //{ if (spWeb.Lists["Translation Accounts"] != null) { SPList accountsSystranList = spWeb.Lists["Translation Accounts"]; if (HttpRuntime.Cache.Get("OceanikTranslationAccountId " + spWeb.ID.ToString() + currentUser.LoginName) == null) { foreach (SPItem account in accountsSystranList.Items) { if (account["Groups"] != null) { var o = account["Groups"]; SPFieldUserValueCollection groupsForThisAccount = (SPFieldUserValueCollection)account["Groups"]; foreach (SPFieldUserValue groupForThisAccount in groupsForThisAccount) { try { foreach (SPGroup groupForTheRootSiteCurrentUser in rootSiteCurrentUser.Groups) { if (groupForTheRootSiteCurrentUser.Name == groupForThisAccount.LookupValue) { if (accountsSystranList.Fields.ContainsField("Account")) { systranAccount = account["Account"].ToString(); HttpRuntime.Cache.Remove("OceanikTranslationAccountId " + spWeb.ID.ToString() + currentUser.LoginName); HttpRuntime.Cache.Add("OceanikTranslationAccountId " + spWeb.ID.ToString() + currentUser.LoginName, account.ID, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.High, null); //if (accountsSystranList.Fields.ContainsField("Profiles")) //{ // string profilesFieldValue = account["Profiles"].ToString(); // if (profilesFieldValue != string.Empty) // { // Regex lookupRegex = new Regex("[0-9]+;#(?<value>([^;]+))"); // foreach (Match profileName in lookupRegex.Matches(profilesFieldValue)) // { // userProfileArrayList.Add(profileName.Groups["value"].Value); // } // } //} } break; } } if (userProfileList.Count > 0) { break; } } catch { } } if (userProfileList.Count > 0) { break; } } } } if (accountsSystranList.Fields.ContainsField("Account") && accountsSystranList.Fields.ContainsField("Password") && accountsSystranList.Fields.ContainsField("Url")) { string accountId = Convert.ToString(HttpRuntime.Cache.Get("OceanikTranslationAccountId " + spWeb.ID.ToString() + currentUser.LoginName)); SPListItem accountItem = accountsSystranList.Items.Cast <SPListItem>().First(sPListItemTmp => sPListItemTmp.ID.ToString() == accountId); if (accountItem["Account"] != null && accountItem["Password"] != null && accountItem["Url"] != null) { login = accountItem["Account"].ToString(); password = EncryptionUtility.Encrypt(accountItem["Password"].ToString()); url = accountItem["Url"].ToString(); string languageItemSource = string.Empty; if (string.IsNullOrEmpty(sourceLanguage)) { if (HttpContext.Current != null) { languageItemSource = Utilities.GetLanguageCode(HttpContext.Current); } else { languageItemSource = sourceLanguage; } } //foreach (LanguageItem languageItemSource in Dictionaries.Instance.VisibleLanguages) { foreach (LanguageItem languageItemDestination in Dictionaries.Instance.VisibleLanguages) { if (languageItemSource != languageItemDestination.LanguageDestination) { List <string> userProfileListTmp = GetTemplates(ConvertLanguageCode2LettersTo3Letters(languageItemSource), ConvertLanguageCode2LettersTo3Letters(languageItemDestination.LanguageDestination), url, login, password); foreach (string languageItemName in userProfileListTmp) { if (!userProfileList.Contains(languageItemName)) { userProfileList.Add(languageItemName); } } } } } //userProfileList = GetTemplates("eng", "fra", url, login, password); } } } //} } catch { } translationUserAccount.Login = login; translationUserAccount.Password = password; translationUserAccount.Url = url; translationUserAccount.Profiles = userProfileList; HttpRuntime.Cache.Remove("OceanikTranslationAccount " + spWeb.ID.ToString() + currentUser.LoginName + "-" + lang); HttpRuntime.Cache.Add("OceanikTranslationAccount " + spWeb.ID.ToString() + currentUser.LoginName + "-" + lang, translationUserAccount, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.High, null); } else { translationUserAccount = (TranslationUserAccount)(HttpRuntime.Cache.Get("OceanikTranslationAccount " + spWeb.ID.ToString() + currentUser.LoginName + "-" + lang)); } return(translationUserAccount); }
/// <summary> /// Add a term to the dictionary /// </summary> /// <param name="term">Term to add</param> /// <param name="defaultLang">Default language</param> /// <returns>ItemStatus after the add</returns> public ItemStatus AddTerm(string term, string defaultLang) { try { SPListItemCollection collListItems = GetTerms(term, defaultLang); var resultQueryList = new ArrayList(); if (collListItems.Count > 0) { if (List.Fields.ContainsField(defaultLang)) { foreach (SPListItem currentItem in collListItems) { if (term.Trim() == currentItem[defaultLang].ToString().Trim()) { resultQueryList.Add(currentItem); } } } } ItemStatus itemStatus = ItemStatus.None; if (resultQueryList.Count > 0) { foreach (SPListItem currentItem in resultQueryList) { foreach (LanguageItem languageItem in Dictionaries.Instance.VisibleLanguages) { if (currentItem[languageItem.LanguageDestination] == null || string.IsNullOrEmpty(currentItem[languageItem.LanguageDestination].ToString())) { if (_automaticTranslationPlugin != null) { TranslationUserAccount translationUserAccount = _automaticTranslationPlugin.LoadUserAccount(Web, null); currentItem[languageItem.LanguageDestination] = "SPS_ADDED_" + _automaticTranslationPlugin.TranslateText(term.Trim(), defaultLang, languageItem.LanguageDestination, null, translationUserAccount, false); } else { currentItem[languageItem.LanguageDestination] = "SPS_ADDED_" + term.Trim(); } itemStatus = ItemStatus.Updated; } } if (itemStatus == ItemStatus.Updated) { if (List.Fields.ContainsField("isCustomize")) { currentItem["isCustomize"] = true; } Web.AllowUnsafeUpdates = true; currentItem.SystemUpdate(false); Web.AllowUnsafeUpdates = false; return(itemStatus); } break; } return(ItemStatus.Existing); } SPListItem newItem = List.Items.Add(); if (List.Fields.ContainsField("isCustomize")) { newItem["isCustomize"] = true; } if (List.Fields.ContainsField(defaultLang)) { newItem[defaultLang] = "SPS_ADDED_" + term.Trim(); } foreach (LanguageItem languageItem in Dictionaries.Instance.VisibleLanguages) { if (List.Fields.ContainsField(languageItem.LanguageDestination)) { if (_automaticTranslationPlugin != null) { TranslationUserAccount translationUserAccount = _automaticTranslationPlugin.LoadUserAccount(Web, null); newItem[languageItem.LanguageDestination] = "SPS_ADDED_" + _automaticTranslationPlugin.TranslateText(term.Trim(), defaultLang, languageItem.LanguageDestination, null, translationUserAccount, false); } else { newItem[languageItem.LanguageDestination] = "SPS_ADDED_" + term.Trim(); } itemStatus = ItemStatus.Inserted; } } Web.AllowUnsafeUpdates = true; newItem.SystemUpdate(false); Web.AllowUnsafeUpdates = false; return(itemStatus); } catch (Exception e) { Utilities.LogException("AddToDictionary", e, EventLogEntryType.Warning); throw; } }