using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Globalization;
using SPC.Kiosk.Base;
namespace SPC.Kiosk.Common
{
///
/// 다국어 지원 Helper
///
public static class Languages
{
private static List MultiLanguagesStore = new List();
private static bool Init { get; set; } = false;
private static void initClass()
{
SetMessage("CommonYes", SupportLanguageType.en, "Yes");
SetMessage("CommonYes", SupportLanguageType.ko, "예");
SetMessage("CommonOK", SupportLanguageType.en, "OK");
SetMessage("CommonOK", SupportLanguageType.ko, "확인");
SetMessage("CommonNo", SupportLanguageType.en, "No");
SetMessage("CommonNo", SupportLanguageType.ko, "아니오");
SetMessage("CommonCancel", SupportLanguageType.en, "Cancel");
SetMessage("CommonCancel", SupportLanguageType.ko, "취소");
SetMessage("CommonClear", SupportLanguageType.en, "Clear");
SetMessage("CommonClear", SupportLanguageType.ko, "삭제");
SetMessage("CommonPrevious", SupportLanguageType.en, "Previous");
SetMessage("CommonPrevious", SupportLanguageType.ko, "이전으로");
SetMessage("CommonNext", SupportLanguageType.en, "Next");
SetMessage("CommonNext", SupportLanguageType.ko, "다음으로");
SetMessage("CommonRetry", SupportLanguageType.en, "Retry");
SetMessage("CommonRetry", SupportLanguageType.ko, "재시도");
SetMessage("CommonDetail", SupportLanguageType.en, "Detail");
SetMessage("CommonDetail", SupportLanguageType.ko, "상세보기");
SetMessage("CommonPayment", SupportLanguageType.en, "Payment");
SetMessage("CommonPayment", SupportLanguageType.ko, "결제하기");
SetMessage("CommonPopup", SupportLanguageType.en, "Popup");
SetMessage("CommonPopup", SupportLanguageType.ko, "팝업");
SetMessage("CommonExist", SupportLanguageType.en, "Exist");
SetMessage("CommonExist", SupportLanguageType.ko, "종료");
SetMessage("CommonToggle", SupportLanguageType.en, "Toggle");
SetMessage("CommonToggle", SupportLanguageType.ko, "토글");
SetMessage("TradeHeader", SupportLanguageType.en, "Test Item List");
SetMessage("TradeHeader", SupportLanguageType.ko, "테스트 상품 목록");
SetMessage("PopupHeader", SupportLanguageType.en, "PopupTest");
SetMessage("PopupHeader", SupportLanguageType.ko, "팝업 테스트");
SetMessage("PopupMessage", SupportLanguageType.en, "Test Message");
SetMessage("PopupMessage", SupportLanguageType.ko, "테스트 메세지");
SetMessage("TimePopupMessage", SupportLanguageType.en, "Time Popup Message");
SetMessage("TimePopupMessage", SupportLanguageType.ko, "타임 팝업 메세지");
SetMessage("MemberLoginTitle", SupportLanguageType.en, "Happy Point Member Login");
SetMessage("MemberLoginTitle", SupportLanguageType.ko, "해피 포인트 회원 확인");
SetMessage("MobileNumberMessage", SupportLanguageType.en, "Input HP number.");
SetMessage("MobileNumberMessage", SupportLanguageType.ko, "휴대폰 번호");
SetMessage("CompanyNumberMessage", SupportLanguageType.en, "Input Compay number.");
SetMessage("CompanyNumberMessage", SupportLanguageType.ko, "사업자번호");
SetMessage("VibrationBellNumber", SupportLanguageType.en, "Vibration bell number");
SetMessage("VibrationBellNumber", SupportLanguageType.ko, "진동벨번호");
SetMessage("InputBarCodeMessage", SupportLanguageType.en, "Input BarCode number.");
SetMessage("InputBarCodeMessage", SupportLanguageType.ko, "바코드 번호");
SetMessage("InputPassword", SupportLanguageType.en, "Input Password");
SetMessage("InputPassword", SupportLanguageType.ko, "비밀번호 입력");
SetMessage("TimeOver", SupportLanguageType.en, "Operation Time Over");
SetMessage("TimeOver", SupportLanguageType.ko, "입력 시간이 초과 되었습니다.");
SetMessage("CommonReserve", SupportLanguageType.en, "Reserve");
SetMessage("CommonReserve", SupportLanguageType.ko, "적립");
SetMessage("CommonUsing", SupportLanguageType.en, "Using");
SetMessage("CommonUsing", SupportLanguageType.ko, "사용");
SetMessage("CommonUsingAll", SupportLanguageType.en, "Using All");
SetMessage("CommonUsingAll", SupportLanguageType.ko, "모두 사용");
SetMessage("InputUsingPoints", SupportLanguageType.en, "Input Using Points");
SetMessage("InputUsingPoints", SupportLanguageType.ko, "사용포인트");
SetMessage("PriceForPayment", SupportLanguageType.en, "Price for payment");
SetMessage("PriceForPayment", SupportLanguageType.ko, "최종 결제금액");
SetMessage("ProcessingOK", SupportLanguageType.en, "Processing Sucess.");
SetMessage("ProcessingOK", SupportLanguageType.ko, "정상 처리 되었습니다.");
SetMessage("CommonPaymentAgain", SupportLanguageType.en, "Retry");
SetMessage("CommonPaymentAgain", SupportLanguageType.ko, "다시 결제");
SetMessage("CommonPaymentCancel", SupportLanguageType.en, "Cancel Payment");
SetMessage("CommonPaymentCancel", SupportLanguageType.ko, "결제 취소");
SetMessage("CommonPerson", SupportLanguageType.en, "Person");
SetMessage("CommonPerson", SupportLanguageType.ko, "개인");
SetMessage("CommonCompany", SupportLanguageType.en, "Company");
SetMessage("CommonCompany", SupportLanguageType.ko, "사업자");
Init = true;
}
///
/// Get Language Native Name
///
///
///
public static string GetLanguageNativeName(this SupportLanguageType _languageType)
{
string result = string.Empty;
try
{
result = _languageType.ToString().GetLanguageNativeName();
}
catch
{
result = string.Empty;
}
return result;
}
///
/// Get Language Native Name
///
///
///
public static string GetLanguageNativeName(this string _languageTypeString)
{
string result = string.Empty;
try
{
var cultureInfo = CultureInfo.GetCultureInfo(_languageTypeString);
result = cultureInfo.NativeName;
}
catch
{
result = string.Empty;
}
return result;
}
///
/// 특정 코드 다국어 객체 가져오기
///
///
///
public static List GetMessages(this string _code)
{
List result = new List();
try
{
if (!Init) initClass();
if (MultiLanguagesStore != null && MultiLanguagesStore.Count > 0)
{
var getLanguage = MultiLanguagesStore.Where(r => r.MessageCode.Equals(_code)).FirstOrDefault();
if (getLanguage is M_MultiLanguage)
{
result = getLanguage.MessageData;
}
}
if (result.Count.Equals(0))
{
foreach (var aLanguage in Enum.GetValues(typeof(SupportLanguageType)).Cast())
{
result.Add(new M_Language { Type = aLanguage, LanguageData = string.Format("{0}_{1}", _code, aLanguage.ToString()) });
}
}
}
catch
{
result = new List();
}
return result;
}
///
/// 다국어 정보 등록
///
///
///
///
public static void SetMessage(this string _code, SupportLanguageType _languageType, string _messageData)
{
try
{
if (string.IsNullOrEmpty(_code)) return;
if (string.IsNullOrEmpty(_messageData)) _messageData=string.Empty;
if (MultiLanguagesStore == null) MultiLanguagesStore = new List();
var getLanguage = MultiLanguagesStore.Where(r => r.MessageCode.Equals(_code)).FirstOrDefault();
if (getLanguage != null)
{
var getMessage = getLanguage.MessageData.Where(r => r.Type.Equals(_languageType)).FirstOrDefault();
if (getMessage is M_Language)
{
getMessage.LanguageData = _messageData; //update
}
else //Language Type Data 가 없는 경우 추가
{
getLanguage.MessageData.Add
(
new M_Language
{
Type = _languageType,
LanguageData = _messageData
}
);
}
}
else //해당 Language Code Data가 없는 경우
{
MultiLanguagesStore.Add
(
new M_MultiLanguage
{
MessageCode = _code,
MessageData = new List
{
new M_Language
{
Type = _languageType,
LanguageData = _messageData
}
}
}
);
}
}
catch
{
}
}
///
/// 특정 코드, 대상 언어 정보 가져오기
///
///
///
///
public static string GetLanguageData(this string _code, SupportLanguageType _supportLanguageType)
{
string result = string.Empty;
try
{
if (!Init) initClass();
if (MultiLanguagesStore != null && MultiLanguagesStore.Count > 0)
{
var getLanguage = MultiLanguagesStore.Where(r => r.MessageCode.Equals(_code)).FirstOrDefault().MessageData;
if (getLanguage is List)
{
result = getLanguage.GetLanguageData(_supportLanguageType);
}
}
}
catch
{
result = string.Empty;
}
return result;
}
///
/// 다국어 객체에서 특정 언어 정보 가져오기
///
///
///
///
public static string GetLanguageData(this List _multiLanguageData, SupportLanguageType _supportLanguageType)
{
string result = string.Empty;
try
{
if (_multiLanguageData != null)
{
var getMessage = _multiLanguageData.Where(r => r.Type.Equals(_supportLanguageType)).FirstOrDefault();
if (getMessage == null)
{
getMessage = _multiLanguageData.Where(r => r.Type.Equals(SupportLanguageType.ko)).FirstOrDefault();
}
if (getMessage is M_Language) result = getMessage.LanguageData.Replace("\\n", "\n");
}
}
catch
{
result = string.Empty;
}
return result;
}
///
/// 다국어 문자열 연결
///
///
///
///
///
public static List CombineLanguageData(this List _multiLanguageData1, List _multiLanguageData2, string _format = "")
{
List result = null;
try
{
if (_multiLanguageData1 != null && _multiLanguageData2 !=null)
{
result = new List();
foreach (var aLanguage in Enum.GetValues(typeof(SupportLanguageType)).Cast())
{
if (string.IsNullOrEmpty(_format)) _format = "{0}{1}";
var addedData = new M_Language
{
Type = aLanguage,
LanguageData = string.Format(_format, _multiLanguageData1.GetLanguageData(aLanguage), _multiLanguageData2.GetLanguageData(aLanguage))
};
result.Add(addedData);
}
}
}
catch
{
result = null;
}
return result;
}
///
/// 다국어 문자열 연결
///
///
///
///
public static List JoinLanguage(this List[] _multiLanguageDatas, string _joinString = "")
{
List result = null;
try
{
if (_multiLanguageDatas != null )
{
result = new List();
foreach (var aLanguageData in _multiLanguageDatas)
{
if (_multiLanguageDatas.Last().Equals(aLanguageData))
{
result = result.CombineLanguageData(aLanguageData);
}
else
{
result = result.CombineLanguageData(aLanguageData, "{0}{1}" + _joinString);
}
}
}
}
catch
{
result = null;
}
return result;
}
///
/// 다국어 정보 모두 삭제
///
public static void ClearMessage()
{
if (MultiLanguagesStore != null)
{
MultiLanguagesStore.Clear();
}
}
///
/// 다국어 정보 모두 삭제 후 해제
///
public static void Dispose()
{
if (MultiLanguagesStore != null)
{
MultiLanguagesStore.Clear();
MultiLanguagesStore = null;
}
}
}
}