280 lines
9.6 KiB
C#
280 lines
9.6 KiB
C#
using Microsoft.AspNetCore.Html;
|
|
using Microsoft.AspNetCore.Mvc.Localization;
|
|
using Microsoft.Extensions.Localization;
|
|
using Microsoft.Extensions.Logging;
|
|
using Sarand.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using Saxonite.Net.Standard.Base.App;
|
|
using Saxonite.Net.Standard.Base.Bus;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Resources;
|
|
using System.Web;
|
|
|
|
namespace Saxonite.Net.Core.Web.Base.App
|
|
{
|
|
//=======================================================================
|
|
public abstract class SaxLocaliser
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Localisers are supplied by derived object.
|
|
/// </summary>
|
|
protected SaxLocaliser()
|
|
{
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Properties.
|
|
public abstract IStringLocalizer MainProperties { get; }
|
|
public virtual List<IStringLocalizer> AlternativeProperties { get; } = new List<IStringLocalizer>();
|
|
|
|
//-------------------------------------------------------------------
|
|
// Generic phrase translation.
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Retrieve localised text.</summary>
|
|
public LocalizedString GetText(string key)
|
|
{
|
|
return GetText(key, new object[] { });
|
|
}
|
|
public LocalizedString GetText(string key, object param)
|
|
{
|
|
return GetText(key, new object[] { param });
|
|
}
|
|
public LocalizedString GetText(string key, object param1, object param2)
|
|
{
|
|
return GetText(key, new object[] { param1, param2 });
|
|
}
|
|
public LocalizedString GetText(string key, object[] parameters)
|
|
{
|
|
LocalizedString text = MainProperties.GetString(key, parameters);
|
|
if (text.ResourceNotFound)
|
|
{
|
|
SaLogger.Debug(GetType().Name + ".GetText Key not found: " + key);
|
|
// Look up key in alternative property files.
|
|
foreach (IStringLocalizer properties in AlternativeProperties ?? new List<IStringLocalizer>())
|
|
{
|
|
text = properties.GetString(key, parameters);
|
|
if (!text.ResourceNotFound)
|
|
break;
|
|
}
|
|
}
|
|
return text;
|
|
}
|
|
|
|
// Square bracket indexing.
|
|
public LocalizedString this[String key]
|
|
{
|
|
get { return GetText(key); }
|
|
}
|
|
public LocalizedString this[String key, object param]
|
|
{
|
|
get { return GetText(key, param); }
|
|
}
|
|
public LocalizedString this[String key, object param1, object param2]
|
|
{
|
|
get { return GetText(key, param1, param2); }
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Localised HTML text.
|
|
/// <para>Line delimiters changed to '<br/>'.</para>
|
|
/// </summary>
|
|
public HtmlString GetHtmlText(string key, String param1 = "", String param2 = "")
|
|
{
|
|
return GetHtmlText(key, new Object[] { param1, param2 });
|
|
}
|
|
/// <summary>
|
|
/// Localised HTML text.
|
|
/// <para>Line delimiters changed to '<br/>'.</para>
|
|
/// </summary>
|
|
public HtmlString GetHtmlText(string key, object[] parameters)
|
|
{
|
|
LocalizedString localisedText = GetText(key, parameters);
|
|
String value = localisedText.Value;
|
|
// Replace all line delimiters.
|
|
value = value.Replace("\r\n", "\n").Replace("\n", "<br/>").Replace("\r", "<br/>");
|
|
return new HtmlString(value);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Localised javascript string.
|
|
/// <para>All quotes are escaped.</para>
|
|
/// </summary>
|
|
public LocalizedString GetJavascriptText(string key, String param1 = "", String param2 = "")
|
|
{
|
|
LocalizedString localisedText = GetText(key, param1, param2);
|
|
return new LocalizedString(localisedText, EscapeJavascriptText(localisedText.Value), localisedText.ResourceNotFound);
|
|
}
|
|
public String EscapeJavascriptText(string value)
|
|
{
|
|
// Escape all quotes.
|
|
value = value.Replace("'", "\\'").Replace("\"", "\\\"");
|
|
return value;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Numeric and datetime formatting
|
|
//-------------------------------------------------------------------
|
|
public static String DateFormat_Default { get; } = "d-MMM-yyyy";
|
|
public static String DateWithWeekdayFormat_Default { get; } = "ddd d-MMM-yyyy";
|
|
public String FormatDate(DateTime value, Boolean includeWeekday = true)
|
|
{
|
|
String dateFormat = includeWeekday ? DateWithWeekdayFormat_Default : DateFormat_Default;
|
|
return DateUtil.Format(value, dateFormat);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Specific phrase translation.
|
|
//-------------------------------------------------------------------
|
|
private class CodeCache
|
|
{
|
|
public List<TypeCodeDesc> genderCodes;
|
|
public List<TypeCodeDesc> sportParticipationCodes;
|
|
public List<TypeCodeDesc> sportOfficiatingCodes;
|
|
public List<TypeCodeDesc> regionTypeCodes;
|
|
public List<TypeCodeDesc> userRoleCodes;
|
|
public List<TypeCodeDesc> organisationTypeCodes;
|
|
public List<TypeCodeDesc> organisationCategoryCodes;
|
|
public List<TypeCodeDesc> organisationRoleCodes;
|
|
public List<TypeCodeDesc> opportunityTypeCodes;
|
|
}
|
|
private CodeCache codes = new CodeCache();
|
|
|
|
// Status.
|
|
public String GetStatusCaption(SaStatus status)
|
|
{
|
|
// ToDo Status description localisation.
|
|
return SacsSystem.GetStatusDesc(status);
|
|
}
|
|
|
|
// Gender.
|
|
public String GetGenderCaption(Sax.Gender gender)
|
|
{
|
|
if ((int)gender < 1) return "";
|
|
if (codes.genderCodes == null)
|
|
codes.genderCodes = SaxSystem.GetCodesOfType(Sax.CodeType.Gender);
|
|
// ToDo Opportunity Type localisation.
|
|
return codes.genderCodes.GetDescForType(gender);
|
|
}
|
|
|
|
// Sport Participation.
|
|
public String GetSportParticipationTypeCaption(Sax.SportParticipation participation)
|
|
{
|
|
if ((int)participation < 1) return "";
|
|
if (codes.sportParticipationCodes == null)
|
|
codes.sportParticipationCodes = SaxSystem.GetCodesOfType(Sax.CodeType.SportParticipation);
|
|
// ToDo Sport Participation localisation.
|
|
return codes.sportParticipationCodes.GetDescForType(participation);
|
|
}
|
|
|
|
// Sport Officiating.
|
|
public String GetSportOfficiatingTypeCaption(Sax.SportOfficiating participation)
|
|
{
|
|
if ((int)participation < 1) return "";
|
|
if (codes.sportOfficiatingCodes == null)
|
|
codes.sportOfficiatingCodes = SaxSystem.GetCodesOfType(Sax.CodeType.SportOfficiating);
|
|
// ToDo Sport Officiating localisation.
|
|
return codes.sportOfficiatingCodes.GetDescForType(participation);
|
|
}
|
|
|
|
// Region type.
|
|
public String GetRegionTypeCaption(Sax.RegionType regionType)
|
|
{
|
|
if ((int)regionType < 1) return "";
|
|
if (codes.regionTypeCodes == null)
|
|
codes.regionTypeCodes = SaxSystem.GetCodesOfType(Sax.CodeType.RegionType);
|
|
// ToDo Region type localisation.
|
|
return codes.regionTypeCodes.GetDescForType(regionType);
|
|
}
|
|
|
|
// User role.
|
|
public String GetUserRoleCaption(Sax.UserRole userRole)
|
|
{
|
|
if ((int)userRole < 1) return "";
|
|
if (codes.userRoleCodes == null)
|
|
codes.userRoleCodes = SaxSystem.GetCodesOfType(Sax.CodeType.UserRole);
|
|
// ToDo User Role localisation.
|
|
return codes.userRoleCodes.GetDescForType(userRole);
|
|
}
|
|
|
|
// Organisation type.
|
|
public String GetOrganisationTypeCaption(Sax.OrganisationType organisationType)
|
|
{
|
|
if ((int)organisationType < 1) return "";
|
|
if (codes.organisationTypeCodes == null)
|
|
codes.organisationTypeCodes = SaxSystem.GetCodesOfType(Sax.CodeType.OrganisationType);
|
|
// ToDo Organisation Type localisation.
|
|
return codes.organisationTypeCodes.GetDescForType(organisationType);
|
|
}
|
|
|
|
// Organisation category.
|
|
public String GetOrganisationCategoryCaption(Sax.OrganisationCategory organisationCategory)
|
|
{
|
|
if ((int)organisationCategory < 1) return "";
|
|
if (codes.organisationCategoryCodes == null)
|
|
codes.organisationCategoryCodes = SaxSystem.GetCodesOfType(Sax.CodeType.OrganisationCategory);
|
|
// ToDo Organisation Category localisation.
|
|
return codes.organisationCategoryCodes.GetDescForType(organisationCategory);
|
|
}
|
|
|
|
// Organisation role.
|
|
public String GetOrganisationRoleCaption(Sax.OrganisationRole organisationRole)
|
|
{
|
|
if ((int)organisationRole < 1) return "";
|
|
if (codes.organisationRoleCodes == null)
|
|
codes.organisationRoleCodes = SaxSystem.GetCodesOfType(Sax.CodeType.OrganisationRole);
|
|
// ToDo Organisation Role localisation.
|
|
return codes.organisationRoleCodes.GetDescForType(organisationRole);
|
|
}
|
|
|
|
// Opportunity type.
|
|
public String GetOpportunityTypeCaption(Sax.OpportunityType opportunityType)
|
|
{
|
|
if ((int)opportunityType < 1) return "";
|
|
if (codes.opportunityTypeCodes == null)
|
|
codes.opportunityTypeCodes = SaxSystem.GetCodesOfType(Sax.CodeType.OpportunityType);
|
|
// ToDo Opportunity Type localisation.
|
|
return codes.opportunityTypeCodes.GetDescForType(opportunityType);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Region.
|
|
public String GetRegionName(SaxRegion.Data region)
|
|
{
|
|
if (region == null) return "";
|
|
// ToDo Region name localisation.
|
|
return region.Name;
|
|
}
|
|
public String GetRegionName(SysId regionId, String regionName)
|
|
{
|
|
// ToDo Region name localisation.
|
|
return regionName;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Sport.
|
|
public String GetSportName(SaxSport.Data sport)
|
|
{
|
|
if (sport == null) return "";
|
|
// ToDo Sport name localisation.
|
|
return sport.Name;
|
|
}
|
|
public String GetSportName(SysId sportId, String sportName)
|
|
{
|
|
// ToDo Sport name localisation.
|
|
return sportName;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
} |