mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-07-16 19:23:38 +01:00
Pushing missing changes
This commit is contained in:
23
MediaBrowser.Controller/Localization/AURatingsDictionary.cs
Normal file
23
MediaBrowser.Controller/Localization/AURatingsDictionary.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Controller.Localization
|
||||
{
|
||||
/// <summary>
|
||||
/// Class AURatingsDictionary
|
||||
/// </summary>
|
||||
public class AURatingsDictionary : Dictionary<string, int>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="AURatingsDictionary" /> class.
|
||||
/// </summary>
|
||||
public AURatingsDictionary()
|
||||
{
|
||||
Add("AU-G", 1);
|
||||
Add("AU-PG", 5);
|
||||
Add("AU-M", 6);
|
||||
Add("AU-M15+", 7);
|
||||
Add("AU-R18+", 9);
|
||||
Add("AU-X18+", 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
290
MediaBrowser.Controller/Localization/BaseStrings.cs
Normal file
290
MediaBrowser.Controller/Localization/BaseStrings.cs
Normal file
@@ -0,0 +1,290 @@
|
||||
using MediaBrowser.Common.Localization;
|
||||
using System.ComponentModel.Composition;
|
||||
|
||||
namespace MediaBrowser.Controller.Localization
|
||||
{
|
||||
[Export(typeof(LocalizedStringData))]
|
||||
public class BaseStrings : LocalizedStringData
|
||||
{
|
||||
public BaseStrings()
|
||||
{
|
||||
ThisVersion = "1.0002";
|
||||
Prefix = LocalizedStrings.BasePrefix;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Config Panel
|
||||
public string ConfigConfig = "Configuration";
|
||||
public string VersionConfig = "Version";
|
||||
public string MediaOptionsConfig = "Media Options";
|
||||
public string ThemesConfig = "Theme Options";
|
||||
public string ParentalControlConfig = "Parental Control";
|
||||
public string ContinueConfig = "Continue";
|
||||
public string ResetDefaultsConfig = "Reset Defaults";
|
||||
public string ClearCacheConfig = "Clear Cache";
|
||||
public string UnlockConfig = "Unlock";
|
||||
public string GeneralConfig = "General";
|
||||
public string EnableScreenSaverConfig = "Screen Saver";
|
||||
public string SSTimeOutConfig = "Timeout (mins)";
|
||||
public string TrackingConfig = "Tracking";
|
||||
public string AssumeWatchedIfOlderThanConfig = "Assume Played If Older Than";
|
||||
public string MetadataConfig = "Metadata";
|
||||
public string EnableInternetProvidersConfig = "Allow Internet Providers";
|
||||
public string UpdatesConfig = "Updates";
|
||||
public string AutomaticUpdatesConfig = "Check For Updates";
|
||||
public string LoggingConfig = "Logging";
|
||||
public string BetaUpdatesConfig = "Beta Updates";
|
||||
public string GlobalConfig = "Global";
|
||||
public string EnableEHSConfig = "Enable EHS";
|
||||
public string ShowClockConfig = "Show Clock";
|
||||
public string DimUnselectedPostersConfig = "Dim Unselected Posters";
|
||||
public string HideFocusFrameConfig = "Hide Focus Frame";
|
||||
public string AlwaysShowDetailsConfig = "Always Show Details";
|
||||
public string ExcludeRemoteContentInSearchesConfig = "Exclude Remote Content In Searches";
|
||||
public string EnhancedMouseSupportConfig = "Enhanced Mouse Support";
|
||||
public string ViewsConfig = "Views";
|
||||
public string PosterGridSpacingConfig = "Poster Grid Spacing";
|
||||
public string ThumbWidthSplitConfig = "Thumb Width Split";
|
||||
public string BreadcrumbCountConfig = "Breadcrumb Count";
|
||||
public string ShowFanArtonViewsConfig = "Show Fan Art on Views";
|
||||
public string ShowInitialFolderBackgroundConfig = "Show Initial Folder Background";
|
||||
public string ShowThemeBackgroundConfig = "Show Theme Background";
|
||||
public string ShowHDOverlayonPostersConfig = "Show HD Overlay on Posters";
|
||||
public string ShowIcononRemoteContentConfig = "Show Icon on Remote Content";
|
||||
public string EnableAdvancedCmdsConfig = "Enable Advanced Commands";
|
||||
public string MediaTrackingConfig = "Media Tracking";
|
||||
public string RememberFolderIndexingConfig = "Remember Folder Indexing";
|
||||
public string ShowUnwatchedCountConfig = "Show Unplayed Count";
|
||||
public string WatchedIndicatoronFoldersConfig = "Played Indicator on Folders";
|
||||
public string HighlightUnwatchedItemsConfig = "Highlight Unplayed Items";
|
||||
public string WatchedIndicatoronVideosConfig = "Played Indicator on Items";
|
||||
public string WatchedIndicatorinDetailViewConfig = "Played Indicator in Detail View";
|
||||
public string DefaultToFirstUnwatchedItemConfig = "Default To First Unplayed Item";
|
||||
public string GeneralBehaviorConfig = "General Behavior";
|
||||
public string AllowNestedMovieFoldersConfig = "Allow Nested Movie Folders";
|
||||
public string AutoEnterSingleFolderItemsConfig = "Auto Enter Single Folder Items";
|
||||
public string MultipleFileBehaviorConfig = "Multiple File Behavior";
|
||||
public string TreatMultipleFilesAsSingleMovieConfig = "Treat Multiple Files As Single Movie";
|
||||
public string MultipleFileSizeLimitConfig = "Multiple File Size Limit";
|
||||
public string MBThemeConfig = "Media Browser Theme";
|
||||
public string VisualThemeConfig = "Visual Theme";
|
||||
public string ColorSchemeConfig = "Color Scheme *";
|
||||
public string FontSizeConfig = "Font Size *";
|
||||
public string RequiresRestartConfig = "* Requires a restart to take effect.";
|
||||
public string ThemeSettingsConfig = "Theme Specific Settings";
|
||||
public string ShowConfigButtonConfig = "Show Config Button";
|
||||
public string AlphaBlendingConfig = "Alpha Blending";
|
||||
public string SecurityPINConfig = "Security PIN";
|
||||
public string PCUnlockedTxtConfig = "Parental Controls are Temporarily Unlocked. You cannot change values unless you re-lock.";
|
||||
public string RelockBtnConfig = "Re-Lock";
|
||||
public string EnableParentalBlocksConfig = "Enable Parental Blocks";
|
||||
public string MaxAllowedRatingConfig = "Max Allowed Rating ";
|
||||
public string BlockUnratedContentConfig = "Block Unrated Content";
|
||||
public string HideBlockedContentConfig = "Hide Blocked Content";
|
||||
public string UnlockonPINEntryConfig = "Unlock on PIN Entry";
|
||||
public string UnlockPeriodHoursConfig = "Unlock Period (Hours)";
|
||||
public string EnterNewPINConfig = "Enter New PIN";
|
||||
public string RandomizeBackdropConfig = "Randomize";
|
||||
public string RotateBackdropConfig = "Rotate";
|
||||
public string UpdateLibraryConfig = "Update Library";
|
||||
public string BackdropSettingsConfig = "Backdrop Settings";
|
||||
public string BackdropRotationIntervalConfig = "Rotation Time";
|
||||
public string BackdropTransitionIntervalConfig = "Transition Time";
|
||||
public string BackdropLoadDelayConfig = "Load Delay";
|
||||
public string AutoScrollTextConfig = "Auto Scroll Overview";
|
||||
public string SortYearsAscConfig = "Sort by Year in Ascending Order";
|
||||
public string AutoValidateConfig = "Automatically Validate Items";
|
||||
public string SaveLocalMetaConfig = "Save Locally";
|
||||
public string HideEmptyFoldersConfig = "Hide Empty TV Folders";
|
||||
|
||||
|
||||
//EHS
|
||||
public string RecentlyWatchedEHS = "last played";
|
||||
public string RecentlyAddedEHS = "last added";
|
||||
public string RecentlyAddedUnwatchedEHS = "last added unplayed";
|
||||
public string WatchedEHS = "Played";
|
||||
public string AddedEHS = "Added";
|
||||
public string UnwatchedEHS = "Unplayed";
|
||||
public string AddedOnEHS = "Added on";
|
||||
public string OnEHS = "on";
|
||||
public string OfEHS = "of";
|
||||
public string NoItemsEHS = "No Items To Show";
|
||||
public string VariousEHS = "(various)";
|
||||
|
||||
//Context menu
|
||||
public string CloseCMenu = "Close";
|
||||
public string PlayMenuCMenu = "Play Menu";
|
||||
public string ItemMenuCMenu = "Item Menu";
|
||||
public string PlayAllCMenu = "Play All";
|
||||
public string PlayAllFromHereCMenu = "Play All From Here";
|
||||
public string ResumeCMenu = "Resume";
|
||||
public string MarkUnwatchedCMenu = "Mark Unplayed";
|
||||
public string MarkWatchedCMenu = "Mark Played";
|
||||
public string ShufflePlayCMenu = "Shuffle Play";
|
||||
|
||||
//Media Detail Page
|
||||
public string GeneralDetail = "General";
|
||||
public string ActorsDetail = "Actors";
|
||||
public string ArtistsDetail = "Artists";
|
||||
public string PlayDetail = "Play";
|
||||
public string ResumeDetail = "Resume";
|
||||
public string RefreshDetail = "Refresh";
|
||||
public string PlayTrailersDetail = "Trailer";
|
||||
public string CacheDetail = "Cache 2 xml";
|
||||
public string DeleteDetail = "Delete";
|
||||
public string TMDBRatingDetail = "TMDb Rating";
|
||||
public string OutOfDetail = "out of";
|
||||
public string DirectorDetail = "Director";
|
||||
public string ComposerDetail = "Composer";
|
||||
public string HostDetail = "Host";
|
||||
public string RuntimeDetail = "Runtime";
|
||||
public string NextItemDetail = "Next";
|
||||
public string PreviousItemDetail = "Previous";
|
||||
public string FirstAiredDetail = "First aired";
|
||||
public string LastPlayedDetail = "Last played";
|
||||
public string TrackNumberDetail = "Track";
|
||||
|
||||
public string DirectedByDetail = "Directed By: ";
|
||||
public string WrittenByDetail = "Written By: ";
|
||||
public string ComposedByDetail = "Composed By: ";
|
||||
|
||||
//Display Prefs
|
||||
public string ViewDispPref = "View";
|
||||
public string ViewSearch = "Search";
|
||||
public string CoverFlowDispPref = "Cover Flow";
|
||||
public string DetailDispPref = "Detail";
|
||||
public string PosterDispPref = "Poster";
|
||||
public string ThumbDispPref = "Thumb";
|
||||
public string ThumbStripDispPref = "Thumb Strip";
|
||||
public string ShowLabelsDispPref = "Show Labels";
|
||||
public string VerticalScrollDispPref = "Vertical Scroll";
|
||||
public string UseBannersDispPref = "Use Banners";
|
||||
public string UseCoverflowDispPref = "Use Coverflow Style";
|
||||
public string ThumbSizeDispPref = "Thumb Size";
|
||||
public string NameDispPref = "Name";
|
||||
public string DateDispPref = "Date";
|
||||
public string RatingDispPref = "User Rating";
|
||||
public string OfficialRatingDispPref = "Rating";
|
||||
public string RuntimeDispPref = "Runtime";
|
||||
public string UnWatchedDispPref = "Unplayed";
|
||||
public string YearDispPref = "Year";
|
||||
public string NoneDispPref = "None";
|
||||
public string PerformerDispPref = "Performer";
|
||||
public string ActorDispPref = "Actor";
|
||||
public string GenreDispPref = "Genre";
|
||||
public string DirectorDispPref = "Director";
|
||||
public string StudioDispPref = "Studio";
|
||||
|
||||
//Dialog boxes
|
||||
//public string BrokenEnvironmentDial = "Application will now close due to broken MediaCenterEnvironment object, possibly due to 5 minutes of idle time and/or running with TVPack installed.";
|
||||
//public string InitialConfigDial = "Initial configuration is complete, please restart Media Browser";
|
||||
//public string DeleteMediaDial = "Are you sure you wish to delete this media item?";
|
||||
//public string DeleteMediaCapDial = "Delete Confirmation";
|
||||
//public string NotDeletedDial = "Item NOT Deleted.";
|
||||
//public string NotDeletedCapDial = "Delete Cancelled by User";
|
||||
//public string NotDelInvalidPathDial = "The selected media item cannot be deleted due to an invalid path. Or you may not have sufficient access rights to perform this command.";
|
||||
//public string DelFailedDial = "Delete Failed";
|
||||
//public string NotDelUnknownDial = "The selected media item cannot be deleted due to an unknown error.";
|
||||
//public string NotDelTypeDial = "The selected media item cannot be deleted due to its Item-Type or you have not enabled this feature in the configuration file.";
|
||||
//public string FirstTimeDial = "As this is the first time you have run Media Browser please setup the inital configuration";
|
||||
//public string FirstTimeCapDial = "Configure";
|
||||
//public string EntryPointErrorDial = "Media Browser could not launch directly into ";
|
||||
//public string EntryPointErrorCapDial = "Entrypoint Error";
|
||||
//public string CriticalErrorDial = "Media Browser encountered a critical error and had to shut down: ";
|
||||
//public string CriticalErrorCapDial = "Critical Error";
|
||||
//public string ClearCacheErrorDial = "An error occured during the clearing of the cache, you may wish to manually clear it from {0} before restarting Media Browser";
|
||||
//public string RestartMBDial = "Please restart Media Browser";
|
||||
//public string ClearCacheDial = "Are you sure you wish to clear the cache?\nThis will erase all cached and downloaded information and images.";
|
||||
//public string ClearCacheCapDial = "Clear Cache";
|
||||
//public string CacheClearedDial = "Cache Cleared";
|
||||
//public string ResetConfigDial = "Are you sure you wish to reset all configuration to defaults?";
|
||||
//public string ResetConfigCapDial = "Reset Configuration";
|
||||
//public string ConfigResetDial = "Configuration Reset";
|
||||
//public string UpdateMBDial = "Please visit www.mediabrowser.tv/download to install the new version.";
|
||||
//public string UpdateMBCapDial = "Update Available";
|
||||
//public string UpdateMBExtDial = "There is an update available for Media Browser. Please update Media Browser next time you are at your MediaCenter PC.";
|
||||
//public string DLUpdateFailDial = "Media Browser will operate normally and prompt you again the next time you load it.";
|
||||
//public string DLUpdateFailCapDial = "Update Download Failed";
|
||||
//public string UpdateSuccessDial = "Media Browser must now exit to apply the update. It will restart automatically when it is done";
|
||||
//public string UpdateSuccessCapDial = "Update Downloaded";
|
||||
//public string CustomErrorDial = "Customisation Error";
|
||||
//public string ConfigErrorDial = "Reset to default?";
|
||||
//public string ConfigErrorCapDial = "Error in configuration file";
|
||||
//public string ContentErrorDial = "There was a problem playing the content. Check location exists";
|
||||
//public string ContentErrorCapDial = "Content Error";
|
||||
//public string CannotMaximizeDial = "We can not maximize the window! This is a known bug with Windows 7 and TV Pack, you will have to restart Media Browser!";
|
||||
//public string IncorrectPINDial = "Incorrect PIN Entered";
|
||||
//public string ContentProtected = "Content Protected";
|
||||
//public string CantChangePINDial = "Cannot Change PIN";
|
||||
//public string LibraryUnlockedDial = "Library Temporarily Unlocked. Will Re-Lock in {0} Hour(s) or on Application Re-Start";
|
||||
//public string LibraryUnlockedCapDial = "Unlock";
|
||||
//public string PINChangedDial = "PIN Successfully Changed";
|
||||
//public string PINChangedCapDial = "PIN Change";
|
||||
//public string EnterPINToViewDial = "Please Enter PIN to View Protected Content";
|
||||
//public string EnterPINToPlayDial = "Please Enter PIN to Play Protected Content";
|
||||
//public string EnterCurrentPINDial = "Please Enter CURRENT PIN.";
|
||||
//public string EnterNewPINDial = "Please Enter NEW PIN (exactly 4 digits).";
|
||||
//public string EnterPINDial = "Please Enter PIN to Unlock Library";
|
||||
//public string NoContentDial = "No Content that can be played in this context.";
|
||||
//public string FontsMissingDial = "CustomFonts.mcml as been patched with missing values";
|
||||
//public string StyleMissingDial = "{0} has been patched with missing values";
|
||||
//public string ManualRefreshDial = "Library Update Started. Will proceed in the background.";
|
||||
//public string ForcedRebuildDial = "Your library is currently being migrated by the service. The service will re-start when it is finished and you may then run Media Browser.";
|
||||
//public string ForcedRebuildCapDial = "Library Migration";
|
||||
//public string RefreshFailedDial = "The last service refresh process failed. Please run a manual refresh from the service.";
|
||||
//public string RefreshFailedCapDial = "Service Refresh Failed";
|
||||
//public string RebuildNecDial = "This version of Media Browser requires a re-build of your library. It has started automatically in the service. Some information may be incomplete until this process finishes.";
|
||||
//public string MigrateNecDial = "This version of Media Browser requires a migration of your library. It has started automatically in the service. The service will restart when it is complete and you may then run Media Browser.";
|
||||
//public string RebuildFailedDial = "There was an error attempting to tell the service to re-build your library. Please run the service and do a manual refresh with the cache clear options selected.";
|
||||
//public string MigrateFailedDial = "There was an error attempting to tell the service to re-build your library. Please run the service and do a manual refresh with the cache clear options selected.";
|
||||
//public string RefreshFolderDial = "Refresh all contents too?";
|
||||
//public string RefreshFolderCapDial = "Refresh Folder";
|
||||
|
||||
//Generic
|
||||
public string Restartstr = "Restart";
|
||||
public string Errorstr = "Error";
|
||||
public string Playstr = "Play";
|
||||
public string MinutesStr = "mins"; //Minutes abbreviation
|
||||
public string HoursStr = "hrs"; //Hours abbreviation
|
||||
public string EndsStr = "Ends";
|
||||
public string KBsStr = "Kbps"; //Kilobytes per second
|
||||
public string FrameRateStr = "fps"; //Frames per second
|
||||
public string AtStr = "at"; //x at y, e.g. 1920x1080 at 25 fps
|
||||
public string Rated = "Rated";
|
||||
public string Or = "Or ";
|
||||
public string Lower = "Lower";
|
||||
public string Higher = "Higher";
|
||||
public string Search = "Search";
|
||||
public string Cancel = "Cancel";
|
||||
public string TitleContains = "Title Contains ";
|
||||
public string Any = "Any";
|
||||
|
||||
//Search
|
||||
public string IncludeNested = "Include Subfolders";
|
||||
public string UnwatchedOnly = "Include Only Unwatched";
|
||||
public string FilterByRated = "Filter by Rating";
|
||||
|
||||
//Profiler
|
||||
public string WelcomeProf = "Welcome to Media Browser";
|
||||
public string ProfilerTimeProf = "{1} took {2} seconds.";
|
||||
public string RefreshProf = "Refresh";
|
||||
public string SetWatchedProf = "Set Played {0}";
|
||||
public string RefreshFolderProf = "Refresh Folder and all Contents of";
|
||||
public string ClearWatchedProf = "Clear Played {0}";
|
||||
public string FullRefreshProf = "Full Library Refresh";
|
||||
public string FullValidationProf = "Full Library Validation";
|
||||
public string FastRefreshProf = "Fast Metadata refresh";
|
||||
public string SlowRefresh = "Slow Metadata refresh";
|
||||
public string ImageRefresh = "Image refresh";
|
||||
public string PluginUpdateProf = "An update is available for plug-in {0}";
|
||||
public string NoPluginUpdateProf = "No Plugin Updates Currently Available.";
|
||||
public string LibraryUnLockedProf = "Library Temporarily UnLocked. Will Re-Lock in {0} Hour(s)";
|
||||
public string LibraryReLockedProf = "Library Re-Locked";
|
||||
|
||||
//Messages
|
||||
public string FullRefreshMsg = "Updating Media Library...";
|
||||
public string FullRefreshFinishedMsg = "Library update complete";
|
||||
|
||||
}
|
||||
}
|
||||
24
MediaBrowser.Controller/Localization/GBRatingsDictionary.cs
Normal file
24
MediaBrowser.Controller/Localization/GBRatingsDictionary.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Controller.Localization
|
||||
{
|
||||
/// <summary>
|
||||
/// Class GBRatingsDictionary
|
||||
/// </summary>
|
||||
public class GBRatingsDictionary : Dictionary<string, int>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="GBRatingsDictionary" /> class.
|
||||
/// </summary>
|
||||
public GBRatingsDictionary()
|
||||
{
|
||||
Add("GB-U", 1);
|
||||
Add("GB-PG", 5);
|
||||
Add("GB-12", 6);
|
||||
Add("GB-12A", 7);
|
||||
Add("GB-15", 8);
|
||||
Add("GB-18", 9);
|
||||
Add("GB-R18", 15);
|
||||
}
|
||||
}
|
||||
}
|
||||
155
MediaBrowser.Controller/Localization/LocalizedStrings.cs
Normal file
155
MediaBrowser.Controller/Localization/LocalizedStrings.cs
Normal file
@@ -0,0 +1,155 @@
|
||||
using MediaBrowser.Common.Localization;
|
||||
using MediaBrowser.Common.Logging;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace MediaBrowser.Controller.Localization
|
||||
{
|
||||
/// <summary>
|
||||
/// Class LocalizedStrings
|
||||
/// </summary>
|
||||
public class LocalizedStrings
|
||||
{
|
||||
/// <summary>
|
||||
/// The base prefix
|
||||
/// </summary>
|
||||
public const string BasePrefix = "base-";
|
||||
/// <summary>
|
||||
/// The local strings
|
||||
/// </summary>
|
||||
protected ConcurrentDictionary<string, string> LocalStrings = new ConcurrentDictionary<string, string>();
|
||||
/// <summary>
|
||||
/// The _instance
|
||||
/// </summary>
|
||||
private static LocalizedStrings _instance;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the instance.
|
||||
/// </summary>
|
||||
/// <value>The instance.</value>
|
||||
public static LocalizedStrings Instance { get { return _instance ?? (_instance = new LocalizedStrings()); } }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LocalizedStrings" /> class.
|
||||
/// </summary>
|
||||
public LocalizedStrings()
|
||||
{
|
||||
foreach (var stringObject in Kernel.Instance.StringFiles)
|
||||
{
|
||||
AddStringData(LoadFromFile(GetFileName(stringObject),stringObject.GetType()));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the file.
|
||||
/// </summary>
|
||||
/// <param name="stringObject">The string object.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
protected string GetFileName(LocalizedStringData stringObject)
|
||||
{
|
||||
var path = Kernel.Instance.ApplicationPaths.LocalizationPath;
|
||||
var name = Path.Combine(path, stringObject.Prefix + "strings-" + CultureInfo.CurrentCulture + ".xml");
|
||||
if (File.Exists(name))
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
name = Path.Combine(path, stringObject.Prefix + "strings-" + CultureInfo.CurrentCulture.Parent + ".xml");
|
||||
if (File.Exists(name))
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
//just return default
|
||||
return Path.Combine(path, stringObject.Prefix + "strings-en.xml");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads from file.
|
||||
/// </summary>
|
||||
/// <param name="file">The file.</param>
|
||||
/// <param name="t">The t.</param>
|
||||
/// <returns>LocalizedStringData.</returns>
|
||||
protected LocalizedStringData LoadFromFile(string file, Type t)
|
||||
{
|
||||
var xs = new XmlSerializer(t);
|
||||
var strings = (LocalizedStringData)Activator.CreateInstance(t);
|
||||
strings.FileName = file;
|
||||
Logger.LogInfo("Using String Data from {0}", file);
|
||||
if (File.Exists(file))
|
||||
{
|
||||
using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
strings = (LocalizedStringData)xs.Deserialize(fs);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
strings.Save(); //brand new - save it
|
||||
}
|
||||
|
||||
if (strings.ThisVersion != strings.Version && file.ToLower().Contains("-en.xml"))
|
||||
{
|
||||
//only re-save the english version as that is the one defined internally
|
||||
strings = new BaseStrings {FileName = file};
|
||||
strings.Save();
|
||||
}
|
||||
return strings;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the string data.
|
||||
/// </summary>
|
||||
/// <param name="stringData">The string data.</param>
|
||||
public void AddStringData(object stringData )
|
||||
{
|
||||
//translate our object definition into a dictionary for lookups
|
||||
// and a reverse dictionary so we can lookup keys by value
|
||||
foreach (var field in stringData.GetType().GetFields().Where(f => f != null && f.FieldType == typeof(string)))
|
||||
{
|
||||
string value;
|
||||
|
||||
try
|
||||
{
|
||||
value = field.GetValue(stringData) as string;
|
||||
}
|
||||
catch (TargetException ex)
|
||||
{
|
||||
Logger.LogException("Error getting value for field: {0}", ex, field.Name);
|
||||
continue;
|
||||
}
|
||||
catch (FieldAccessException ex)
|
||||
{
|
||||
Logger.LogException("Error getting value for field: {0}", ex, field.Name);
|
||||
continue;
|
||||
}
|
||||
catch (NotSupportedException ex)
|
||||
{
|
||||
Logger.LogException("Error getting value for field: {0}", ex, field.Name);
|
||||
continue;
|
||||
}
|
||||
|
||||
LocalStrings.TryAdd(field.Name, value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the string.
|
||||
/// </summary>
|
||||
/// <param name="key">The key.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
public string GetString(string key)
|
||||
{
|
||||
string value;
|
||||
|
||||
LocalStrings.TryGetValue(key, out value);
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
23
MediaBrowser.Controller/Localization/NLRatingsDictionary.cs
Normal file
23
MediaBrowser.Controller/Localization/NLRatingsDictionary.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Controller.Localization
|
||||
{
|
||||
/// <summary>
|
||||
/// Class NLRatingsDictionary
|
||||
/// </summary>
|
||||
public class NLRatingsDictionary : Dictionary<string, int>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NLRatingsDictionary" /> class.
|
||||
/// </summary>
|
||||
public NLRatingsDictionary()
|
||||
{
|
||||
Add("NL-AL", 1);
|
||||
Add("NL-MG6", 2);
|
||||
Add("NL-6", 3);
|
||||
Add("NL-9", 5);
|
||||
Add("NL-12", 6);
|
||||
Add("NL-16", 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
162
MediaBrowser.Controller/Localization/Ratings.cs
Normal file
162
MediaBrowser.Controller/Localization/Ratings.cs
Normal file
@@ -0,0 +1,162 @@
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace MediaBrowser.Controller.Localization
|
||||
{
|
||||
/// <summary>
|
||||
/// Class Ratings
|
||||
/// </summary>
|
||||
public static class Ratings
|
||||
{
|
||||
/// <summary>
|
||||
/// The ratings def
|
||||
/// </summary>
|
||||
private static RatingsDefinition ratingsDef;
|
||||
/// <summary>
|
||||
/// The _ratings dict
|
||||
/// </summary>
|
||||
private static Dictionary<string, int> _ratingsDict;
|
||||
/// <summary>
|
||||
/// Gets the ratings dict.
|
||||
/// </summary>
|
||||
/// <value>The ratings dict.</value>
|
||||
public static Dictionary<string, int> RatingsDict
|
||||
{
|
||||
get { return _ratingsDict ?? (_ratingsDict = Initialize(false)); }
|
||||
}
|
||||
/// <summary>
|
||||
/// The ratings strings
|
||||
/// </summary>
|
||||
private static readonly Dictionary<int, string> ratingsStrings = new Dictionary<int, string>();
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the specified block unrated.
|
||||
/// </summary>
|
||||
/// <param name="blockUnrated">if set to <c>true</c> [block unrated].</param>
|
||||
/// <returns>Dictionary{System.StringSystem.Int32}.</returns>
|
||||
public static Dictionary<string, int> Initialize(bool blockUnrated)
|
||||
{
|
||||
//build our ratings dictionary from the combined local one and us one
|
||||
ratingsDef = new RatingsDefinition(Path.Combine(Kernel.Instance.ApplicationPaths.LocalizationPath, "Ratings-" + Kernel.Instance.Configuration.MetadataCountryCode+".txt"));
|
||||
//global value of None
|
||||
var dict = new Dictionary<string, int> {{"None", -1}};
|
||||
foreach (var pair in ratingsDef.RatingsDict)
|
||||
{
|
||||
dict.TryAdd(pair.Key, pair.Value);
|
||||
}
|
||||
if (Kernel.Instance.Configuration.MetadataCountryCode.ToUpper() != "US")
|
||||
{
|
||||
foreach (var pair in new USRatingsDictionary())
|
||||
{
|
||||
dict.TryAdd(pair.Key, pair.Value);
|
||||
}
|
||||
}
|
||||
//global values of CS
|
||||
dict.TryAdd("CS", 1000);
|
||||
|
||||
dict.TryAdd("", blockUnrated ? 1000 : 0);
|
||||
|
||||
//and rating reverse lookup dictionary (non-redundant ones)
|
||||
ratingsStrings.Clear();
|
||||
var lastLevel = -10;
|
||||
ratingsStrings.Add(-1,LocalizedStrings.Instance.GetString("Any"));
|
||||
foreach (var pair in ratingsDef.RatingsDict.OrderBy(p => p.Value))
|
||||
{
|
||||
if (pair.Value > lastLevel)
|
||||
{
|
||||
lastLevel = pair.Value;
|
||||
ratingsStrings.TryAdd(pair.Value, pair.Key);
|
||||
}
|
||||
}
|
||||
|
||||
ratingsStrings.TryAdd(999, "CS");
|
||||
|
||||
return dict;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Switches the unrated.
|
||||
/// </summary>
|
||||
/// <param name="block">if set to <c>true</c> [block].</param>
|
||||
public static void SwitchUnrated(bool block)
|
||||
{
|
||||
RatingsDict.Remove("");
|
||||
RatingsDict.Add("", block ? 1000 : 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Levels the specified rating STR.
|
||||
/// </summary>
|
||||
/// <param name="ratingStr">The rating STR.</param>
|
||||
/// <returns>System.Int32.</returns>
|
||||
public static int Level(string ratingStr)
|
||||
{
|
||||
if (ratingStr == null) ratingStr = "";
|
||||
if (RatingsDict.ContainsKey(ratingStr))
|
||||
return RatingsDict[ratingStr];
|
||||
|
||||
string stripped = StripCountry(ratingStr);
|
||||
if (RatingsDict.ContainsKey(stripped))
|
||||
return RatingsDict[stripped];
|
||||
|
||||
return RatingsDict[""]; //return "unknown" level
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Strips the country.
|
||||
/// </summary>
|
||||
/// <param name="rating">The rating.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
private static string StripCountry(string rating)
|
||||
{
|
||||
int start = rating.IndexOf('-');
|
||||
return start > 0 ? rating.Substring(start + 1) : rating;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a <see cref="System.String" /> that represents this instance.
|
||||
/// </summary>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <returns>A <see cref="System.String" /> that represents this instance.</returns>
|
||||
public static string ToString(int level)
|
||||
{
|
||||
//return the closest one
|
||||
while (level > 0)
|
||||
{
|
||||
if (ratingsStrings.ContainsKey(level))
|
||||
return ratingsStrings[level];
|
||||
|
||||
level--;
|
||||
}
|
||||
return ratingsStrings.Values.FirstOrDefault(); //default to first one
|
||||
}
|
||||
/// <summary>
|
||||
/// To the strings.
|
||||
/// </summary>
|
||||
/// <returns>List{System.String}.</returns>
|
||||
public static List<string> ToStrings()
|
||||
{
|
||||
//return the whole list of ratings strings
|
||||
return ratingsStrings.Values.ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// To the values.
|
||||
/// </summary>
|
||||
/// <returns>List{System.Int32}.</returns>
|
||||
public static List<int> ToValues()
|
||||
{
|
||||
//return the whole list of ratings values
|
||||
return ratingsStrings.Keys.ToList();
|
||||
}
|
||||
|
||||
//public Microsoft.MediaCenter.UI.Image RatingImage(string rating)
|
||||
//{
|
||||
// return Helper.GetMediaInfoImage("Rated_" + rating);
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
122
MediaBrowser.Controller/Localization/RatingsDefinition.cs
Normal file
122
MediaBrowser.Controller/Localization/RatingsDefinition.cs
Normal file
@@ -0,0 +1,122 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using MediaBrowser.Common.Logging;
|
||||
|
||||
namespace MediaBrowser.Controller.Localization
|
||||
{
|
||||
/// <summary>
|
||||
/// Class RatingsDefinition
|
||||
/// </summary>
|
||||
public class RatingsDefinition
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="RatingsDefinition" /> class.
|
||||
/// </summary>
|
||||
/// <param name="file">The file.</param>
|
||||
public RatingsDefinition(string file)
|
||||
{
|
||||
Logger.LogInfo("Loading Certification Ratings from file " + file);
|
||||
this.file = file;
|
||||
if (!Load())
|
||||
{
|
||||
Init(Kernel.Instance.Configuration.MetadataCountryCode.ToUpper());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Inits the specified country.
|
||||
/// </summary>
|
||||
/// <param name="country">The country.</param>
|
||||
protected void Init(string country)
|
||||
{
|
||||
//intitialze based on country
|
||||
switch (country)
|
||||
{
|
||||
case "US":
|
||||
RatingsDict = new USRatingsDictionary();
|
||||
break;
|
||||
case "GB":
|
||||
RatingsDict = new GBRatingsDictionary();
|
||||
break;
|
||||
case "NL":
|
||||
RatingsDict = new NLRatingsDictionary();
|
||||
break;
|
||||
case "AU":
|
||||
RatingsDict = new AURatingsDictionary();
|
||||
break;
|
||||
default:
|
||||
RatingsDict = new USRatingsDictionary();
|
||||
break;
|
||||
}
|
||||
Save();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The file
|
||||
/// </summary>
|
||||
readonly string file;
|
||||
|
||||
/// <summary>
|
||||
/// Save to file
|
||||
/// </summary>
|
||||
public void Save()
|
||||
{
|
||||
// Use simple text serialization - no need for xml
|
||||
using (var fs = new StreamWriter(file))
|
||||
{
|
||||
foreach (var pair in RatingsDict)
|
||||
{
|
||||
fs.WriteLine(pair.Key + "," + pair.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load from file
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
|
||||
protected bool Load()
|
||||
{
|
||||
// Read back in our simple serialized format
|
||||
RatingsDict = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
||||
try
|
||||
{
|
||||
using (var fs = new StreamReader(file))
|
||||
{
|
||||
while (!fs.EndOfStream)
|
||||
{
|
||||
var line = fs.ReadLine() ?? "";
|
||||
var values = line.Split(',');
|
||||
if (values.Length == 2)
|
||||
{
|
||||
|
||||
int value;
|
||||
|
||||
if (int.TryParse(values[1], out value))
|
||||
{
|
||||
RatingsDict[values[0].Trim()] = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.LogError("Invalid line in ratings file " + file + "(" + line + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Couldn't load - probably just not there yet
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The ratings dict
|
||||
/// </summary>
|
||||
public Dictionary<string, int> RatingsDict = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
}
|
||||
}
|
||||
39
MediaBrowser.Controller/Localization/USRatingsDictionary.cs
Normal file
39
MediaBrowser.Controller/Localization/USRatingsDictionary.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Controller.Localization
|
||||
{
|
||||
/// <summary>
|
||||
/// Class USRatingsDictionary
|
||||
/// </summary>
|
||||
public class USRatingsDictionary : Dictionary<string,int>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="USRatingsDictionary" /> class.
|
||||
/// </summary>
|
||||
public USRatingsDictionary()
|
||||
{
|
||||
Add("G", 1);
|
||||
Add("E", 1);
|
||||
Add("EC", 1);
|
||||
Add("TV-G", 1);
|
||||
Add("TV-Y", 2);
|
||||
Add("TV-Y7", 3);
|
||||
Add("TV-Y7-FV", 4);
|
||||
Add("PG", 5);
|
||||
Add("TV-PG", 5);
|
||||
Add("PG-13", 7);
|
||||
Add("T", 7);
|
||||
Add("TV-14", 8);
|
||||
Add("R", 9);
|
||||
Add("M", 9);
|
||||
Add("TV-MA", 9);
|
||||
Add("NC-17", 10);
|
||||
Add("AO", 15);
|
||||
Add("RP", 15);
|
||||
Add("UR", 15);
|
||||
Add("NR", 15);
|
||||
Add("X", 15);
|
||||
Add("XXX", 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user