예제 #1
0
            public LocalizedStringWithId CreateName(string val, ContentLanguageSelection language)
            {
                var name = new LocalizedStringWithId(val, language);

                nameManager.Add(name);
                return(name);
            }
        private LocalizedStringWithIdContract NameOrEmpty(INameManager nameManager, ContentLanguageSelection lang)
        {
            if (nameManager.HasNameForLanguage(lang))
                return new LocalizedStringWithIdContract(nameManager.FirstNameBase(lang));

            return New(lang);
        }
예제 #3
0
        public ContentLanguageSelection Detect(string str, ContentLanguageSelection def = ContentLanguageSelection.Unspecified)
        {
            var factory    = new RankedLanguageIdentifierFactory();
            var identifier = factory.Load(LanguageFilePath);
            var res        = identifier.Identify(str).FirstOrDefault();

            if (res == null)
            {
                return(def);
            }

            var langCode = res.Item1.Iso639_2T;

            if (string.Equals(langCode, "jpn", StringComparison.InvariantCultureIgnoreCase))
            {
                return(ContentLanguageSelection.Japanese);
            }

            if (string.Equals(langCode, "eng", StringComparison.InvariantCultureIgnoreCase))
            {
                return(ContentLanguageSelection.English);
            }

            return(def);
        }
 public TranslatedStringContract(string english, string japanese, 
     string romaji, ContentLanguageSelection defaultLanguage)
 {
     English = english;
     Japanese = japanese;
     Romaji = romaji;
     DefaultLanguage = defaultLanguage;
 }
예제 #5
0
 public TranslatedStringContract(string english, string japanese,
                                 string romaji, ContentLanguageSelection defaultLanguage)
 {
     English         = english;
     Japanese        = japanese;
     Romaji          = romaji;
     DefaultLanguage = defaultLanguage;
 }
예제 #6
0
 public TranslatedString(string original, string romaji, string english,
                         ContentLanguageSelection defaultLanguage)
 {
     Japanese        = original;
     Romaji          = romaji;
     English         = english;
     DefaultLanguage = defaultLanguage;
 }
예제 #7
0
        private LocalizedStringWithIdContract NameOrEmpty(INameManager nameManager, ContentLanguageSelection lang)
        {
            if (nameManager.HasNameForLanguage(lang))
            {
                return(new LocalizedStringWithIdContract(nameManager.FirstNameBase(lang)));
            }

            return(New(lang));
        }
예제 #8
0
        private LocalizedStringWithId AddName(string name, ContentLanguageSelection lang = ContentLanguageSelection.English)
        {
            var str = new LocalizedStringWithId(name, lang)
            {
                Id = id++
            };

            nameManager.Add(str);
            return(str);
        }
예제 #9
0
파일: Album.cs 프로젝트: ffdd270/vocadb
        public virtual AlbumName CreateName(string val, ContentLanguageSelection language)
        {
            ParamIs.NotNullOrEmpty(() => val);

            var name = new AlbumName(this, new LocalizedString(val, language));

            Names.Add(name);

            return(name);
        }
예제 #10
0
        public ReleaseEvent(string description, DateTime?date, ContentLanguageSelection defaultNameLanguage)
            : this()
        {
            ParamIs.NotNull(() => names);

            Description = description;
            Date        = date;
            TranslatedName.DefaultLanguage = defaultNameLanguage;
            TranslatedName.Clear();
        }
예제 #11
0
        public virtual LyricsForSong CreateLyrics(ContentLanguageSelection language, string val, string source)
        {
            ParamIs.NotNullOrEmpty(() => val);
            ParamIs.NotNull(() => source);

            var entry = new LyricsForSong(this, language, val, source);

            Lyrics.Add(entry);

            return(entry);
        }
예제 #12
0
        public Venue(ContentLanguageSelection defaultLanguage, ICollection <ILocalizedString> names, string description) : this()
        {
            ParamIs.NotNull(() => names);

            if (!names.Any())
            {
                throw new ArgumentException("Need at least one name", nameof(names));
            }

            TranslatedName.DefaultLanguage = defaultLanguage;
            Description = description;

            foreach (var a in names)
            {
                CreateName(a);
            }
        }
예제 #13
0
        private void SetValueFor(ContentLanguageSelection language)
        {
            if (!Names.Any())
            {
                return;
            }

            var name = GetFirstName(language);

            if (name != null)
            {
                SortNames[language] = name.Value;
            }

            if (string.IsNullOrEmpty(SortNames[language]))
            {
                SortNames[language] = Names.First().Value;
            }
        }
		public ContentLanguageSelection Detect(string str, ContentLanguageSelection def = ContentLanguageSelection.Unspecified) {
			
			var factory = new RankedLanguageIdentifierFactory();
			var identifier = factory.Load(LanguageFilePath);
			var res = identifier.Identify(str).FirstOrDefault();

			if (res == null)
				return def;

			var langCode = res.Item1.Iso639_2T;

			if (string.Equals(langCode, "jpn", StringComparison.InvariantCultureIgnoreCase))
				return ContentLanguageSelection.Japanese;

			if (string.Equals(langCode, "eng", StringComparison.InvariantCultureIgnoreCase))
				return ContentLanguageSelection.English;

			return def;

		}
예제 #15
0
        public virtual string this[ContentLanguageSelection language] {
            get {
                switch (language)
                {
                case ContentLanguageSelection.English:
                    return(English);

                case ContentLanguageSelection.Japanese:
                    return(Japanese);

                case ContentLanguageSelection.Romaji:
                    return(Romaji);

                default:
                    return(Default);
                }
            }
            set {
                switch (language)
                {
                case ContentLanguageSelection.English:
                    English = value;
                    break;

                case ContentLanguageSelection.Japanese:
                    Japanese = value;
                    break;

                case ContentLanguageSelection.Romaji:
                    Romaji = value;
                    break;

                default:
                    Default = value;
                    break;
                }
            }
        }
예제 #16
0
        public ReleaseEvent(string description, DateTime?date, ReleaseEventSeries series, int seriesNumber, string seriesSuffix,
                            ContentLanguageSelection defaultNameLanguage, bool customName)
            : this()
        {
            ParamIs.NotNull(() => series);

            Description  = description;
            Date         = date;
            Series       = series;
            SeriesNumber = seriesNumber;
            SeriesSuffix = seriesSuffix;
            CustomName   = customName;
            TranslatedName.Clear();

            if (customName)
            {
                TranslatedName.DefaultLanguage = defaultNameLanguage;
            }
            else
            {
                TranslatedName.DefaultLanguage = Series.TranslatedName.DefaultLanguage;
            }
        }
예제 #17
0
        private T GetFirstName(ContentLanguageSelection languageSelection)
        {
            if (!Names.Any())
            {
                return(null);
            }

            var name = FirstName(languageSelection);

            // Substitute English with Romaji
            if (name == null && languageSelection == ContentLanguageSelection.English)
            {
                name = FirstName(ContentLanguageSelection.Romaji);
            }

            // Substitute Romaji with English
            if (name == null && languageSelection == ContentLanguageSelection.Romaji)
            {
                name = FirstName(ContentLanguageSelection.English);
            }

            return(name ?? GetDefaultName());
        }
예제 #18
0
 public static string ContentLanguageSelectionName(ContentLanguageSelection languageSelection)
 {
     return ContentLanguageSelectionNames.ResourceManager.GetString(languageSelection.ToString());
 }
예제 #19
0
		private bool AcceptImportedSong(ISession session, Album album, InspectedTrack inspectedTrack, 
			ContentLanguageSelection languageSelection, int[] selectedSongIds) {

			Song song = null;
			var diff = new SongDiff(false);

			if (NewTrack(inspectedTrack, selectedSongIds, album)) {

				song = new Song(new LocalizedString(inspectedTrack.ImportedTrack.Title, languageSelection));
				session.Save(song);
				album.AddSong(song, inspectedTrack.ImportedTrack.TrackNum, inspectedTrack.ImportedTrack.DiscNum);
				diff.Names = true;

			} else if (selectedSongIds.Contains(inspectedTrack.ExistingSong.Id)) {

				song = session.Load<Song>(inspectedTrack.ExistingSong.Id);

				if (!album.HasSong(song))
					album.AddSong(song, inspectedTrack.ImportedTrack.TrackNum, inspectedTrack.ImportedTrack.DiscNum);

				var newName = inspectedTrack.ImportedTrack.Title;

				if (!song.Names.HasName(newName) && !song.Names.HasNameForLanguage(languageSelection)) {
					song.CreateName(new LocalizedString(newName, languageSelection));
					diff.Names = true;
				}

			}

			if (song != null) {

				if (inspectedTrack.ImportedTrack != null) {
					foreach (var artistName in inspectedTrack.ImportedTrack.ArtistNames) {
						if (CreateArtist(session, song, artistName, ArtistRoles.Composer))
							diff.Artists = true;
					}

					foreach (var artistName in inspectedTrack.ImportedTrack.VocalistNames) {
						if (CreateArtist(session, song, artistName, ArtistRoles.Vocalist))
							diff.Artists = true;
					}

					song.UpdateArtistString();

				}

				Services.Songs.Archive(session, song, diff, SongArchiveReason.AutoImportedFromMikuDb,
					string.Format("Auto-imported from MikuDB for album '{0}'", album.DefaultName));

				session.Update(song);
				return true;

			}

			return false;

		}
예제 #20
0
        /// <summary>
        /// Gets the translation matching the selected language, or the first translation if the specified language has no translation.
        /// </summary>
        /// <param name="defaultLanguage">Selected language. If this is Unspecified, DefaultLanguage will be used.</param>
        /// <returns>Translated name for the selected language, or first translation. Cannot be null. Can be empty, but only if there are no translations.</returns>
        public virtual string GetDefaultOrFirst(ContentLanguageSelection defaultLanguage)
        {
            var val = (defaultLanguage != ContentLanguageSelection.Unspecified || DefaultLanguage != ContentLanguageSelection.Unspecified ? this[defaultLanguage] : null);

            return(!string.IsNullOrEmpty(val) ? val : All.FirstOrDefault(n => !string.IsNullOrEmpty(n)) ?? string.Empty);
        }
예제 #21
0
		private AlbumContract AcceptImportedAlbum(ISession session, ContentLanguageSelection languageSelection, 
			InspectedAlbum acceptedAlbum, int[] selectedSongIds) {
			
			Album album;
			var diff = new AlbumDiff(false);

			if (acceptedAlbum.MergedAlbum == null) {

				album = new Album(new LocalizedString(acceptedAlbum.ImportedAlbum.Title, languageSelection));

				if (languageSelection != ContentLanguageSelection.Unspecified)
					album.Names.SortNames.DefaultLanguage = languageSelection;

				album.DiscType = DiscType.Unknown;
				diff.Names = true;
				session.Save(album);

			} else {

				album = session.Load<Album>(acceptedAlbum.MergedAlbum.Id);

				if (!album.Names.HasName(acceptedAlbum.ImportedAlbum.Title)) {
					album.CreateName(acceptedAlbum.ImportedAlbum.Title, languageSelection);
					diff.Names = true;
				}

			}

			foreach (var inspectedArtist in acceptedAlbum.Artists) {

				if (inspectedArtist.ExistingArtist != null) {

					var artist = session.Load<Artist>(inspectedArtist.ExistingArtist.Id);

					if (!artist.HasAlbum(album)) {
						session.Save(artist.AddAlbum(album));
						diff.Artists = true;
					}

				} else {
					album.AddArtist(inspectedArtist.Name, false, ArtistRoles.Default);
					diff.Artists = true;
				}

			}

			if (acceptedAlbum.MergedAlbum == null || acceptedAlbum.MergeTracks) {

				foreach (var inspectedTrack in acceptedAlbum.Tracks) {
					if (AcceptImportedSong(session, album, inspectedTrack, languageSelection, selectedSongIds))
						diff.Tracks = true;
				}

			}

			var importedAlbum = session.Load<MikuDbAlbum>(acceptedAlbum.ImportedAlbum.Id);
			importedAlbum.Status = AlbumStatus.Approved;

			if (importedAlbum.CoverPicture != null && album.CoverPictureData == null) {

				album.CoverPictureData = importedAlbum.CoverPicture;

				using (var stream = new MemoryStream(album.CoverPictureData.Bytes)) {
					var thumbs = ImageHelper.GenerateThumbs(stream, new[] { 250 });
					if (thumbs.Any()) {
						album.CoverPictureData.Thumb250 = new PictureThumb250(thumbs.First().Bytes);
					}
				}

				diff.Cover = true;
			}

			if (acceptedAlbum.ImportedAlbum.Data.ReleaseYear != null && album.OriginalReleaseDate.Year == null) {
				album.OriginalReleaseDate.Year = acceptedAlbum.ImportedAlbum.Data.ReleaseYear;
				diff.OriginalRelease = true;
			}

			if (!album.WebLinks.Any(w => w.Url.Contains("mikudb.com"))) {
				album.CreateWebLink("MikuDB", acceptedAlbum.ImportedAlbum.SourceUrl, WebLinkCategory.Reference);
				diff.WebLinks = true;
			}

			album.UpdateArtistString();

			AuditLog(string.Format("accepted imported album '{0}'", acceptedAlbum.ImportedAlbum.Title), session);
			AddEntryEditedEntry(session, album, EntryEditEvent.Created);

			Services.Albums.Archive(session, album, diff, AlbumArchiveReason.AutoImportedFromMikuDb);

			session.Update(album);
			session.Update(importedAlbum);

			return new AlbumContract(album, PermissionContext.LanguagePreference);

		}
예제 #22
0
 public LocalizedStringContract(string value, ContentLanguageSelection language)
 {
     Value    = value;
     Language = language;
 }
예제 #23
0
 public ContentLanguageSelection Detect(string str, ContentLanguageSelection def)
 {
     return(def);
 }
예제 #24
0
        private AlbumContract AcceptImportedAlbum(ISession session, IAlbumImporter importer, ContentLanguageSelection languageSelection,
                                                  InspectedAlbum acceptedAlbum, int[] selectedSongIds)
        {
            Album album;
            var   diff  = new AlbumDiff(false);
            var   isNew = acceptedAlbum.MergedAlbum == null;

            if (isNew)
            {
                album = new Album(new LocalizedString(acceptedAlbum.ImportedAlbum.Title, languageSelection));

                if (languageSelection != ContentLanguageSelection.Unspecified)
                {
                    album.Names.SortNames.DefaultLanguage = languageSelection;
                }

                album.DiscType = DiscType.Unknown;
                diff.Names.Set();
                session.Save(album);
            }
            else
            {
                album = session.Load <Album>(acceptedAlbum.MergedAlbum.Id);

                if (!album.Names.HasName(acceptedAlbum.ImportedAlbum.Title))
                {
                    album.CreateName(acceptedAlbum.ImportedAlbum.Title, languageSelection);
                    diff.Names.Set();
                }
            }

            foreach (var inspectedArtist in acceptedAlbum.Artists)
            {
                if (inspectedArtist.ExistingArtist != null)
                {
                    var artist = session.Load <Artist>(inspectedArtist.ExistingArtist.Id);

                    if (!artist.HasAlbum(album))
                    {
                        session.Save(artist.AddAlbum(album));
                        diff.Artists.Set();
                    }
                }
                else
                {
                    album.AddArtist(inspectedArtist.Name, false, ArtistRoles.Default);
                    diff.Artists.Set();
                }
            }

            if (acceptedAlbum.MergedAlbum == null || acceptedAlbum.MergeTracks)
            {
                foreach (var inspectedTrack in acceptedAlbum.Tracks)
                {
                    if (AcceptImportedSong(session, importer, album, inspectedTrack, languageSelection, selectedSongIds))
                    {
                        diff.Tracks.Set();
                    }
                }
            }

            var importedAlbum = session.Load <MikuDbAlbum>(acceptedAlbum.ImportedAlbum.Id);

            importedAlbum.Status = AlbumStatus.Approved;

            if (importedAlbum.CoverPicture != null && album.CoverPictureData == null)
            {
                album.CoverPictureData = importedAlbum.CoverPicture;
                album.CoverPictureMime = importedAlbum.CoverPictureMime;

                // TODO: should generate thumbnail as well

                diff.Cover.Set();
            }

            if (acceptedAlbum.ImportedAlbum.Data.ReleaseYear != null && album.OriginalReleaseDate.Year == null)
            {
                album.OriginalReleaseDate.Year = acceptedAlbum.ImportedAlbum.Data.ReleaseYear;
                diff.OriginalRelease.Set();
            }

            // Add link if not already added a link to that service
            var sourceUrl = acceptedAlbum.ImportedAlbum.SourceUrl;

            if (importer != null && !string.IsNullOrEmpty(sourceUrl))
            {
                if (album.WebLinks.All(w => !string.Equals(w.Url, sourceUrl, StringComparison.InvariantCultureIgnoreCase) && !importer.IsValidFor(w.Url)))
                {
                    album.CreateWebLink(importer.ServiceName, sourceUrl, WebLinkCategory.Reference, disabled: false);
                    diff.WebLinks.Set();
                }
            }

            album.UpdateArtistString();

            var importerName = importer != null ? importer.ServiceName : "(unknown)";
            var archived     = _albumService.Archive(session, album, diff, AlbumArchiveReason.AutoImportedFromMikuDb, "Imported from " + importerName);

            AuditLog($"accepted imported album '{acceptedAlbum.ImportedAlbum.Title}'", session);
            AddEntryEditedEntry(session, album, isNew ? EntryEditEvent.Created : EntryEditEvent.Updated, archived);


            session.Update(album);
            session.Update(importedAlbum);

            return(new AlbumContract(album, PermissionContext.LanguagePreference));
        }
예제 #25
0
 public static string ContentLanguageSelectionName(ContentLanguageSelection languageSelection)
 {
     return(ContentLanguageSelectionNames.ResourceManager.GetString(languageSelection.ToString()));
 }
예제 #26
0
        private void CreateName(Album album, string val, ContentLanguageSelection language)
        {
            var name = album.CreateName(val, language);

            querySource.Add(name);
        }
예제 #27
0
 public virtual bool HasNameForLanguage(ContentLanguageSelection language)
 {
     return(FirstName(language) != null);
 }
예제 #28
0
		public bool HasNameForLanguage(ContentLanguageSelection language) {
			return true;
		}
예제 #29
0
 public PartialViewResult CreateName(string nameVal, ContentLanguageSelection language)
 {
     return PartialView("LocalizedStringEditableRow", new LocalizedStringEdit { Language = language, Value = nameVal });
 }
예제 #30
0
        public virtual string this[ContentLanguageSelection language]
        {
            get {

                switch (language) {
                    case ContentLanguageSelection.English:
                        return English;
                    case ContentLanguageSelection.Japanese:
                        return Japanese;
                    case ContentLanguageSelection.Romaji:
                        return Romaji;
                    default:
                        return Default;
                }

            }
            set {

                switch (language) {
                    case ContentLanguageSelection.English:
                        English = value;
                        break;
                    case ContentLanguageSelection.Japanese:
                        Japanese = value;
                        break;
                    case ContentLanguageSelection.Romaji:
                        Romaji = value;
                        break;
                    default:
                        Default = value;
                        break;
                }

            }
        }
예제 #31
0
        private bool AcceptImportedSong(ISession session, IAlbumImporter importer, Album album, InspectedTrack inspectedTrack,
                                        ContentLanguageSelection languageSelection, int[] selectedSongIds)
        {
            Song song = null;
            var  diff = new SongDiff(false);

            if (NewTrack(inspectedTrack, selectedSongIds, album))
            {
                song = new Song(new LocalizedString(inspectedTrack.ImportedTrack.Title, languageSelection));
                session.Save(song);
                album.AddSong(song, inspectedTrack.ImportedTrack.TrackNum, inspectedTrack.ImportedTrack.DiscNum);
                diff.Names.Set();
            }
            else if (selectedSongIds.Contains(inspectedTrack.ExistingSong.Id))
            {
                song = session.Load <Song>(inspectedTrack.ExistingSong.Id);

                if (!album.HasSong(song))
                {
                    album.AddSong(song, inspectedTrack.ImportedTrack.TrackNum, inspectedTrack.ImportedTrack.DiscNum);
                }

                var newName = inspectedTrack.ImportedTrack.Title;

                if (!song.Names.HasName(newName) && !song.Names.HasNameForLanguage(languageSelection))
                {
                    song.CreateName(new LocalizedString(newName, languageSelection));
                    diff.Names.Set();
                }
            }

            if (song != null)
            {
                if (inspectedTrack.ImportedTrack != null)
                {
                    foreach (var artistName in inspectedTrack.ImportedTrack.ArtistNames)
                    {
                        if (CreateArtist(session, song, artistName, ArtistRoles.Composer))
                        {
                            diff.Artists.Set();
                        }
                    }

                    foreach (var artistName in inspectedTrack.ImportedTrack.VocalistNames)
                    {
                        if (CreateArtist(session, song, artistName, ArtistRoles.Vocalist))
                        {
                            diff.Artists.Set();
                        }
                    }

                    song.UpdateArtistString();
                }

                if (diff.ChangedFields.Value != SongEditableFields.Nothing)
                {
                    var importerName = importer != null ? importer.ServiceName : "(unknown)";

                    _songService.Archive(session, song, diff, SongArchiveReason.AutoImportedFromMikuDb,
                                         $"Auto-imported from {importerName} for album '{album.DefaultName}'");
                }

                session.Update(song);
                return(true);
            }

            return(false);
        }
예제 #32
0
        public virtual string GetBestMatch(ContentLanguagePreference preference, ContentLanguageSelection defaultLanguage)
        {
            var val = this[preference == ContentLanguagePreference.Default ? defaultLanguage : (ContentLanguageSelection)preference];

            return (!string.IsNullOrEmpty(val) ? val : GetDefaultOrFirst(defaultLanguage));
        }
예제 #33
0
		public LocalizedStringWithId FirstNameBase(ContentLanguageSelection languageSelection) {
			return new LocalizedStringWithId(name, languageSelection);
		}
예제 #34
0
        public virtual SongName CreateName(string val, ContentLanguageSelection language)
        {
            ParamIs.NotNullOrEmpty(() => val);

            return(CreateName(new LocalizedString(val, language)));
        }
예제 #35
0
 public LocalizedStringWithId(string val, ContentLanguageSelection language)
     : base(val, language)
 {
 }
예제 #36
0
		private void AddName(string name, ContentLanguageSelection lang) {
			nameManager.Add(new LocalizedStringWithId(name, lang));
		}
예제 #37
0
 private LocalizedStringWithIdContract New(ContentLanguageSelection lang)
 {
     return(new LocalizedStringWithIdContract {
         Language = lang
     });
 }
예제 #38
0
 public LocalizedString(string val, ContentLanguageSelection language)
     : this()
 {
     Value    = val;
     Language = language;
 }
예제 #39
0
        public virtual string GetBestMatch(ContentLanguagePreference preference, ContentLanguageSelection defaultLanguage)
        {
            var val = this[preference == ContentLanguagePreference.Default ? defaultLanguage : (ContentLanguageSelection)preference];

            return(!string.IsNullOrEmpty(val) ? val : GetDefaultOrFirst(defaultLanguage));
        }
예제 #40
0
 public LocalizedStringWithId FirstNameBase(ContentLanguageSelection languageSelection)
 {
     return(new LocalizedStringWithId(name, languageSelection));
 }
예제 #41
0
		public ContentLanguageSelection Detect(string str, ContentLanguageSelection def) {

			return def;

		}
예제 #42
0
 public bool HasNameForLanguage(ContentLanguageSelection language)
 {
     return(true);
 }
예제 #43
0
        /// <summary>
        /// Gets the translation matching the selected language, or the first translation if the specified language has no translation.
        /// </summary>
        /// <param name="defaultLanguage">Selected language. If this is Unspecified, DefaultLanguage will be used.</param>
        /// <returns>Translated name for the selected language, or first translation. Cannot be null. Can be empty, but only if there are no translations.</returns>
        public virtual string GetDefaultOrFirst(ContentLanguageSelection defaultLanguage)
        {
            var val = (defaultLanguage != ContentLanguageSelection.Unspecified || DefaultLanguage != ContentLanguageSelection.Unspecified ? this[defaultLanguage] : null);

            return !string.IsNullOrEmpty(val) ? val : All.FirstOrDefault(n => !string.IsNullOrEmpty(n)) ?? string.Empty;
        }
예제 #44
0
 private LocalizedStringWithIdContract New(ContentLanguageSelection lang)
 {
     return new LocalizedStringWithIdContract { Language = lang };
 }
예제 #45
0
		private void CreateName(Album album, string val, ContentLanguageSelection language) {

			var name = album.CreateName(val, language);
			querySource.Add(name);

		}
예제 #46
0
		public LocalizedStringWithId(string val, ContentLanguageSelection language) 
			: base(val, language) {}
예제 #47
0
 public override string this[ContentLanguageSelection language]
 {
     get => language switch
예제 #48
0
 public LocalizedStringContract(string value, ContentLanguageSelection language)
 {
     Value = value;
     Language = language;
 }