/// <summary> /// lokalizace objektu (LMData souboru) /// </summary> public static void Localize(lm_scorm root) { if (HttpContext.Current == null) return; adjustThreadCulture(); StringBuilder buf = new StringBuilder(); ResxFilesManager resx = new ResxFilesManager(root.PageInfo.FileName); if (resx == null) return; object[] objs; foreach (TranslateInfo info in toTranslate(root, new TranslateInfo())) switch (info.Typ) { case LocalizeType.string2string: //Lokalizovatelna String property, vysledkem lokalizace je lokalizovatelny LMLiteral string valStr = (string)info.Value; if (string.IsNullOrEmpty(valStr)) break; if (!valStr.StartsWith(localizeStringPrefix)) info.setValue(createLiteral(valStr)); else info.setValue(resx.propertyTolocalizedLiteral(info, valStr.Substring(localizeStringPrefix.Length))); break; case LocalizeType.items2string: //HTML: vysledkem lokalizace je jeden lokalizovatelny LMLiteral objs = (object[])info.Value; if (objs.Length == 0) break; if (objs.Length == 1 && objs[0] is LMLiteral) info.setValue(objs[0]); else { bool first = true; foreach (object res in localizeObjectList(objs, buf, resx)) { if (!first || !(res is LMLiteral)) throw new Exception(); first = true; info.setValue(res); } } break; case LocalizeType.items2items: //HTML a LMScormObj: vysledkem lokalizace je seznam lokalizovatelnych LMLiteral a LMScormObj objs = (object[])info.Value; if (objs.Length == 0) break; bool noLocalize = true; foreach (LMScormObj item in objs) if (item is trans || item is img) { noLocalize = false; break; } if (noLocalize) info.setValue(objs); else { List<LMScormObj> items = new List<LMScormObj>(); foreach (LMScormObj res in localizeObjectList(objs, buf, resx)) items.Add(res); LMScormObj[] resObjs = new LMScormObj[items.Count]; items.CopyTo(resObjs); info.setValue(resObjs); } break; } }