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);
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        //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);
            }
        }
Exemplo n.º 9
0
        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;
            }
        }