Selaa lähdekoodia

UI: Reorganize Game Info dialog popup + localization

Evan Husted 1 vuosi sitten
vanhempi
sitoutus
717851985e

+ 218 - 118
src/Ryujinx/Assets/locales.json

@@ -1525,151 +1525,151 @@
     {
       "ID": "GameListHeaderDeveloper",
       "Translations": {
-        "ar_SA": "المطور",
-        "de_DE": "Entwickler",
-        "el_GR": "Προγραμματιστής",
-        "en_US": "Developer",
-        "es_ES": "Desarrollador",
-        "fr_FR": "Développeur",
-        "he_IL": "מפתח",
-        "it_IT": "Sviluppatore",
-        "ja_JP": "開発元",
-        "ko_KR": "개발자",
-        "no_NO": "Utvikler",
-        "pl_PL": "Twórca",
-        "pt_BR": "Desenvolvedor",
-        "ru_RU": "Разработчик",
-        "sv_SE": "Utvecklare",
-        "th_TH": "ผู้พัฒนา",
-        "tr_TR": "Geliştirici",
-        "uk_UA": "Розробник",
-        "zh_CN": "制作商",
-        "zh_TW": "開發者"
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Developed by {0}",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
       }
     },
     {
       "ID": "GameListHeaderVersion",
       "Translations": {
-        "ar_SA": "الإصدار",
+        "ar_SA": "",
         "de_DE": "",
-        "el_GR": "Έκδοση",
-        "en_US": "Version",
-        "es_ES": "Versión",
+        "el_GR": "Έκδοση: {0}",
+        "en_US": "Version: {0}",
+        "es_ES": "Versión: {0}",
         "fr_FR": "",
-        "he_IL": "גרסה",
-        "it_IT": "Versione",
-        "ja_JP": "バージョン",
-        "ko_KR": "버전",
-        "no_NO": "Versjon",
-        "pl_PL": "Wersja",
-        "pt_BR": "Versão",
-        "ru_RU": "Версия",
+        "he_IL": "",
+        "it_IT": "Versione: {0}",
+        "ja_JP": "バージョン: {0}",
+        "ko_KR": "버전: {0}",
+        "no_NO": "Versjon: {0}",
+        "pl_PL": "Wersja: {0}",
+        "pt_BR": "Versão: {0}",
+        "ru_RU": "Версия: {0}",
         "sv_SE": "",
-        "th_TH": "เวอร์ชั่น",
-        "tr_TR": "Sürüm",
-        "uk_UA": "Версія",
-        "zh_CN": "版本",
-        "zh_TW": "版本"
+        "th_TH": "เวอร์ชั่น: {0}",
+        "tr_TR": "Sürüm: {0}",
+        "uk_UA": "Версія: {0}",
+        "zh_CN": "版本: {0}",
+        "zh_TW": "版本: {0}"
       }
     },
     {
       "ID": "GameListHeaderTimePlayed",
       "Translations": {
-        "ar_SA": "وقت اللعب",
-        "de_DE": "Spielzeit",
-        "el_GR": "Χρόνος",
-        "en_US": "Play Time",
-        "es_ES": "Tiempo jugado",
-        "fr_FR": "Temps de jeu",
-        "he_IL": "זמן משחק",
-        "it_IT": "Tempo di gioco",
-        "ja_JP": "プレイ時間",
-        "ko_KR": "플레이 타임",
-        "no_NO": "Spilletid",
-        "pl_PL": "Czas w grze:",
-        "pt_BR": "Tempo de jogo",
-        "ru_RU": "Время в игре",
-        "sv_SE": "Speltid",
-        "th_TH": "เล่นไปแล้ว",
-        "tr_TR": "Oynama Süresi",
-        "uk_UA": "Зіграно часу",
-        "zh_CN": "游玩时长",
-        "zh_TW": "遊玩時數"
+        "ar_SA": "",
+        "de_DE": "Spielzeit: {0}",
+        "el_GR": "Χρόνος: {0}",
+        "en_US": "Play Time: {0}",
+        "es_ES": "Tiempo jugado: {0}",
+        "fr_FR": "Temps de jeu: {0}",
+        "he_IL": "",
+        "it_IT": "Tempo di gioco: {0}",
+        "ja_JP": "プレイ時間: {0}",
+        "ko_KR": "플레이 타임: {0}",
+        "no_NO": "Spilletid: {0}",
+        "pl_PL": "Czas w grze: {0}",
+        "pt_BR": "Tempo de jogo: {0}",
+        "ru_RU": "Время в игре: {0}",
+        "sv_SE": "Speltid: {0}",
+        "th_TH": "เล่นไปแล้ว: {0}",
+        "tr_TR": "Oynama Süresi: {0}",
+        "uk_UA": "Зіграно часу: {0}",
+        "zh_CN": "游玩时长: {0}",
+        "zh_TW": "遊玩時數: {0}"
       }
     },
     {
       "ID": "GameListHeaderLastPlayed",
       "Translations": {
-        "ar_SA": "آخر مرة لُعبت",
-        "de_DE": "Zuletzt gespielt",
-        "el_GR": "Παίχτηκε",
-        "en_US": "Last Played",
-        "es_ES": "Jugado por última vez",
-        "fr_FR": "Dernière partie jouée",
-        "he_IL": "שוחק לאחרונה",
-        "it_IT": "Ultima partita",
-        "ja_JP": "最終プレイ日時",
-        "ko_KR": "마지막 플레이",
-        "no_NO": "Sist Spilt",
-        "pl_PL": "Ostatnio grane",
-        "pt_BR": "Último jogo",
-        "ru_RU": "Последний запуск",
-        "sv_SE": "Senast spelad",
-        "th_TH": "เล่นล่าสุด",
-        "tr_TR": "Son Oynama Tarihi",
-        "uk_UA": "Востаннє зіграно",
-        "zh_CN": "最近游玩",
-        "zh_TW": "最近遊玩"
+        "ar_SA": "",
+        "de_DE": "Zuletzt gespielt: {0}",
+        "el_GR": "Παίχτηκε: {0}",
+        "en_US": "Last Played: {0}",
+        "es_ES": "Jugado por última vez: {0}",
+        "fr_FR": "Dernière partie jouée: {0}",
+        "he_IL": "",
+        "it_IT": "Ultima partita: {0}",
+        "ja_JP": "最終プレイ日時: {0}",
+        "ko_KR": "마지막 플레이: {0}",
+        "no_NO": "Sist Spilt: {0}",
+        "pl_PL": "Ostatnio grane: {0}",
+        "pt_BR": "Último jogo: {0}",
+        "ru_RU": "Последний запуск: {0}",
+        "sv_SE": "Senast spelad: {0}",
+        "th_TH": "เล่นล่าสุด: {0}",
+        "tr_TR": "Son Oynama Tarihi: {0}",
+        "uk_UA": "Востаннє зіграно: {0}",
+        "zh_CN": "最近游玩: {0}",
+        "zh_TW": "最近遊玩: {0}"
       }
     },
     {
       "ID": "GameListHeaderFileExtension",
       "Translations": {
-        "ar_SA": "صيغة الملف",
-        "de_DE": "Dateiformat",
-        "el_GR": "Κατάληξη",
-        "en_US": "File Ext",
-        "es_ES": "Extensión",
-        "fr_FR": "Extension du Fichier",
-        "he_IL": "סיומת קובץ",
-        "it_IT": "Estensione",
-        "ja_JP": "ファイル拡張子",
-        "ko_KR": "파일 확장자",
-        "no_NO": "Fil Eks.",
-        "pl_PL": "Rozszerzenie pliku",
-        "pt_BR": "Extensão",
-        "ru_RU": "Расширение файла",
-        "sv_SE": "Filänd",
-        "th_TH": "นามสกุลไฟล์",
-        "tr_TR": "Dosya Uzantısı",
-        "uk_UA": "Розширення файлу",
-        "zh_CN": "扩展名",
-        "zh_TW": "副檔名"
+        "ar_SA": "",
+        "de_DE": "Dateiformat: {0}",
+        "el_GR": "Κατάληξη: {0}",
+        "en_US": "Extension: {0}",
+        "es_ES": "Extensión: {0}",
+        "fr_FR": "Extension du Fichier: {0}",
+        "he_IL": "",
+        "it_IT": "Estensione: {0}",
+        "ja_JP": "ファイル拡張子: {0}",
+        "ko_KR": "파일 확장자: {0}",
+        "no_NO": "Fil Eks.: {0}",
+        "pl_PL": "Rozszerzenie pliku: {0}",
+        "pt_BR": "Extensão: {0}",
+        "ru_RU": "Расширение файла: {0}",
+        "sv_SE": "Filänd: {0}",
+        "th_TH": "นามสกุลไฟล์: {0}",
+        "tr_TR": "Dosya Uzantısı: {0}",
+        "uk_UA": "Розширення файлу: {0}",
+        "zh_CN": "扩展名: {0}",
+        "zh_TW": "副檔名: {0}"
       }
     },
     {
       "ID": "GameListHeaderFileSize",
       "Translations": {
-        "ar_SA": "حجم الملف",
-        "de_DE": "Dateigröße",
-        "el_GR": "Μέγεθος Αρχείου",
-        "en_US": "File Size",
-        "es_ES": "Tamaño del archivo",
-        "fr_FR": "Taille du Fichier",
-        "he_IL": "גודל הקובץ",
-        "it_IT": "Dimensione file",
-        "ja_JP": "ファイルサイズ",
-        "ko_KR": "파일 크기",
-        "no_NO": "Fil Størrelse",
-        "pl_PL": "Rozmiar pliku",
-        "pt_BR": "Tamanho",
-        "ru_RU": "Размер файла",
-        "sv_SE": "Filstorlek",
-        "th_TH": "ขนาดไฟล์",
-        "tr_TR": "Dosya Boyutu",
-        "uk_UA": "Розмір файлу",
-        "zh_CN": "大小",
-        "zh_TW": "檔案大小"
+        "ar_SA": "",
+        "de_DE": "Dateigröße: {0}",
+        "el_GR": "Μέγεθος Αρχείου: {0}",
+        "en_US": "File Size: {0}",
+        "es_ES": "Tamaño del archivo: {0}",
+        "fr_FR": "Taille du Fichier: {0}",
+        "he_IL": "",
+        "it_IT": "Dimensione file: {0}",
+        "ja_JP": "ファイルサイズ: {0}",
+        "ko_KR": "파일 크기: {0}",
+        "no_NO": "Fil Størrelse: {0}",
+        "pl_PL": "Rozmiar pliku: {0}",
+        "pt_BR": "Tamanho: {0}",
+        "ru_RU": "Размер файла: {0}",
+        "sv_SE": "Filstorlek: {0}",
+        "th_TH": "ขนาดไฟล์: {0}",
+        "tr_TR": "Dosya Boyutu: {0}",
+        "uk_UA": "Розмір файлу: {0}",
+        "zh_CN": "大小: {0}",
+        "zh_TW": "檔案大小: {0}"
       }
     },
     {
@@ -1697,6 +1697,106 @@
         "zh_TW": "路徑"
       }
     },
+    {
+      "ID": "GameListHeaderCompatibilityStatus",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Compatibility:",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
+    {
+      "ID": "GameListHeaderTitleId",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Title ID:",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
+    {
+      "ID": "GameListHeaderHostedGames",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Hosted Games: {0}",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
+    {
+      "ID": "GameListHeaderPlayerCount",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Online Players: {0}",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
     {
       "ID": "GameListContextMenuOpenUserSaveDirectory",
       "Translations": {
@@ -23298,4 +23398,4 @@
       }
     }
   ]
-}
+}

+ 88 - 98
src/Ryujinx/UI/Controls/ApplicationDataView.axaml

@@ -2,7 +2,7 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
-             xmlns:appLibrary="using:Ryujinx.Ava.Utilities.AppLibrary"
+             xmlns:ext="using:Ryujinx.Ava.Common.Markup"
              xmlns:viewModels="using:Ryujinx.Ava.UI.ViewModels"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
@@ -13,112 +13,102 @@
                MaxWidth="256"
                MinWidth="256"
                Source="{Binding AppData.Icon, Converter={x:Static helpers:BitmapArrayValueConverter.Instance}}" />
-        <Border Margin="5, 0" Width="2" Height="256" BorderBrush="Gray" Background="Gray" />
+        <Border Margin="5, 0" Width="1" Height="256" BorderBrush="Gray" Background="Gray" />
         <StackPanel Orientation="Vertical">
             <Grid
-                RowDefinitions="Auto, Auto, Auto, Auto"
+                RowDefinitions="Auto,Auto,Auto"
                 ColumnDefinitions="*">
-                <TextBlock Grid.Row="0"
-                           HorizontalAlignment="Center"
-                           Padding="0, -2, 0, 5"
-                           Classes="h1"
-                           Text="{Binding AppData.Name}" />
-                <TextBlock Grid.Row="1"
-                           HorizontalAlignment="Center"
-                           Text="{Binding FormattedVersion}"
-                           TextAlignment="Start"
-                           TextWrapping="Wrap" />
-                <TextBlock Grid.Row="2"
-                           HorizontalAlignment="Center"
-                           Text="{Binding FormattedDeveloper}"
-                           TextAlignment="Start"
-                           TextWrapping="Wrap" />
-                <StackPanel Grid.ColumnSpan="2" Grid.Row="3"
-                            HorizontalAlignment="Center"
-                            Orientation="Horizontal" Margin="0 10, 0, 0"
-                            Spacing="5">
-                    <Button
-                        Click="PlayabilityStatus_OnClick"
-                        HorizontalContentAlignment="Left"
-                        VerticalAlignment="Center"
-                        IsVisible="{Binding AppData.HasPlayabilityInfo}"
-                        Background="{DynamicResource AppListBackgroundColor}"
-                        Padding="0">
-                        <TextBlock
-                            Margin="1.5"
-                            Tag="{Binding AppData.IdString}"
-                            Text="{Binding AppData.LocalizedStatus}"
-                            Foreground="{Binding AppData.PlayabilityStatus, Converter={x:Static helpers:PlayabilityStatusConverter.Shared}}"
-                            TextAlignment="Start"
-                            TextWrapping="Wrap" />
-                        <Button.Styles>
-                            <Style Selector="Button">
-                                <Setter Property="MinWidth"
-                                        Value="0" />
-                                <!-- avoids very wide buttons from the overall project avalonia style -->
-                            </Style>
-                        </Button.Styles>
-                    </Button>
-                    <Button
-                        Click="IdString_OnClick"
-                        HorizontalContentAlignment="Left"
-                        VerticalAlignment="Center"
-                        Background="{DynamicResource AppListBackgroundColor}"
-                        Padding="0">
-                        <TextBlock
-                            Margin="1.5"
-                            HorizontalAlignment="Stretch"
-                            Text="{Binding AppData.IdString}"
-                            TextAlignment="Start"
-                            TextWrapping="Wrap" />
-                    </Button>
+                <StackPanel Grid.Row="0">
+                    <TextBlock HorizontalAlignment="Left"
+                               Text="{Binding FormattedVersion}"
+                               TextAlignment="Start"
+                               TextWrapping="Wrap" />
+                    <TextBlock HorizontalAlignment="Left"
+                               Text="{Binding FormattedDeveloper}"
+                               TextAlignment="Start"
+                               TextWrapping="Wrap" />
+                    <TextBlock HorizontalAlignment="Stretch"
+                               Text="{Binding FormattedFileExtension}"
+                               TextAlignment="Start"
+                               TextWrapping="Wrap" />
+                    <TextBlock HorizontalAlignment="Stretch"
+                               Text="{Binding FormattedFileSize}"
+                               TextAlignment="Start"
+                               TextWrapping="Wrap" />
                 </StackPanel>
-            </Grid>
-            <Separator Margin="0, 10, 0, 10" Height="2" BorderBrush="Gray" Background="Gray" />
-            <Grid ColumnDefinitions="Auto,*,Auto">
-                <StackPanel Grid.Column="0"
-                            Margin="10,0,0,0"
+                <Separator Grid.Row="1" Margin="0, 10, 0, 10" Height="1" BorderBrush="Gray" Background="Gray" />
+                <StackPanel Grid.Row="2"
                             HorizontalAlignment="Left"
-                            VerticalAlignment="Top"
                             Orientation="Vertical"
                             Spacing="5">
-                    <TextBlock
-                        HorizontalAlignment="Stretch"
-                        Text="{Binding FormattedFileExtension}"
-                        TextAlignment="Start"
-                        TextWrapping="Wrap" />
-                    <TextBlock
-                        HorizontalAlignment="Stretch"
-                        IsVisible="{Binding AppData.HasLdnGames}"
-                        Text="{Binding FormattedLdnInfo}"
-                        TextAlignment="Start"
-                        TextWrapping="Wrap" />
-                </StackPanel>
-                <StackPanel
-                    Grid.Column="2"
-                    Margin="0,0,10,0"
-                    HorizontalAlignment="Right"
-                    VerticalAlignment="Top"
-                    Orientation="Vertical"
-                    Spacing="5">
-                    <TextBlock
-                        HorizontalAlignment="Stretch"
-                        Text="{Binding FormattedLastPlayed}"
-                        TextAlignment="End"
-                        TextWrapping="Wrap" />
-                    <TextBlock
-                        HorizontalAlignment="Stretch"
-                        Text="{Binding FormattedPlayTime}"
-                        IsVisible="{Binding AppData.HasPlayedPreviously}"
-                        TextAlignment="End"
-                        TextWrapping="Wrap" />
-                    <TextBlock
-                        HorizontalAlignment="Stretch"
-                        Text="{Binding FormattedFileSize}"
-                        TextAlignment="End"
-                        TextWrapping="Wrap" />
+                    <StackPanel Orientation="Horizontal">
+                        <TextBlock Padding="0, 0, 5, 0" Text="{ext:Locale GameListHeaderCompatibilityStatus}" />
+                        <Button
+                            Click="PlayabilityStatus_OnClick"
+                            HorizontalContentAlignment="Left"
+                            VerticalAlignment="Center"
+                            IsVisible="{Binding AppData.HasPlayabilityInfo}"
+                            Background="{DynamicResource AppListBackgroundColor}"
+                            Padding="0">
+                            <TextBlock
+                                Margin="1.5"
+                                Tag="{Binding AppData.IdString}"
+                                Text="{Binding AppData.LocalizedStatus}"
+                                Foreground="{Binding AppData.PlayabilityStatus, Converter={x:Static helpers:PlayabilityStatusConverter.Shared}}"
+                                TextAlignment="Start"
+                                TextWrapping="Wrap" />
+                            <Button.Styles>
+                                <Style Selector="Button">
+                                    <Setter Property="MinWidth"
+                                            Value="0" />
+                                    <!-- avoids very wide buttons from the overall project avalonia style -->
+                                </Style>
+                            </Button.Styles>
+                        </Button>
+                    </StackPanel>
+                    <StackPanel Orientation="Horizontal">
+                        <TextBlock Padding="0, 0, 5, 0" Text="{ext:Locale GameListHeaderTitleId}" />
+                        <Button
+                            Click="IdString_OnClick"
+                            HorizontalContentAlignment="Left"
+                            VerticalAlignment="Center"
+                            Background="{DynamicResource AppListBackgroundColor}"
+                            Padding="0">
+                            <TextBlock
+                                Margin="1.5"
+                                HorizontalAlignment="Stretch"
+                                Text="{Binding AppData.IdString}"
+                                TextAlignment="Start"
+                                TextWrapping="Wrap" />
+                        </Button>
+                    </StackPanel>
                 </StackPanel>
             </Grid>
+            <Separator Margin="0, 10, 0, 10" Height="1" BorderBrush="Gray" Background="Gray" />
+            <TextBlock
+                HorizontalAlignment="Stretch"
+                IsVisible="{Binding AppData.HasLdnGames}"
+                Text="{Binding FormattedLdnInfo}"
+                TextAlignment="Start"
+                TextWrapping="Wrap" />
+            <Separator IsVisible="{Binding AppData.HasLdnGames}" Margin="0, 10, 0, 10" Height="1" BorderBrush="Gray" Background="Gray" />
+            <StackPanel
+                HorizontalAlignment="Left"
+                VerticalAlignment="Top"
+                Orientation="Vertical"
+                Spacing="5">
+                <TextBlock
+                    HorizontalAlignment="Stretch"
+                    Text="{Binding FormattedLastPlayed}"
+                    TextAlignment="Start"
+                    TextWrapping="Wrap" />
+                <TextBlock
+                    HorizontalAlignment="Stretch"
+                    Text="{Binding FormattedPlayTime}"
+                    IsVisible="{Binding AppData.HasPlayedPreviously}"
+                    TextAlignment="Start"
+                    TextWrapping="Wrap" />
+            </StackPanel>
         </StackPanel>
     </StackPanel>
 </UserControl>

+ 1 - 0
src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs

@@ -23,6 +23,7 @@ namespace Ryujinx.Ava.UI.Controls
         {
             ContentDialog contentDialog = new()
             {
+                Title = appData.Name,
                 PrimaryButtonText = string.Empty,
                 SecondaryButtonText = string.Empty,
                 CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose],

+ 10 - 18
src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs

@@ -1,34 +1,26 @@
 using Gommon;
+using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.Utilities.AppLibrary;
 
 namespace Ryujinx.Ava.UI.ViewModels
 {
     public class ApplicationDataViewModel : BaseModel
     {
-        private const string FormatVersion = "Current Version: {0}";
-        private const string FormatDeveloper = "Developed by {0}";
-        
-        private const string FormatExtension = "Game type: {0}";
-        private const string FormatLastPlayed = "Last played: {0}";
-        private const string FormatPlayTime = "Play time: {0}";
-        private const string FormatSize = "Size: {0}";
-
-        private const string FormatHostedGames = "Hosted Games: {0}";
-        private const string FormatPlayerCount = "Online Players: {0}";
-        
         public ApplicationData AppData { get; }
 
         public ApplicationDataViewModel(ApplicationData appData) => AppData = appData;
 
-        public string FormattedVersion => FormatVersion.Format(AppData.Version);
-        public string FormattedDeveloper => FormatDeveloper.Format(AppData.Developer);
+        public string FormattedVersion => LocaleManager.Instance[LocaleKeys.GameListHeaderVersion].Format(AppData.Version);
+        public string FormattedDeveloper => LocaleManager.Instance[LocaleKeys.GameListHeaderDeveloper].Format(AppData.Developer);
         
-        public string FormattedFileExtension => FormatExtension.Format(AppData.FileExtension);
-        public string FormattedLastPlayed => FormatLastPlayed.Format(AppData.LastPlayedString);
-        public string FormattedPlayTime => FormatPlayTime.Format(AppData.TimePlayedString);
-        public string FormattedFileSize => FormatSize.Format(AppData.FileSizeString);
+        public string FormattedFileExtension => LocaleManager.Instance[LocaleKeys.GameListHeaderFileExtension].Format(AppData.FileExtension);
+        public string FormattedLastPlayed => LocaleManager.Instance[LocaleKeys.GameListHeaderLastPlayed].Format(AppData.LastPlayedString);
+        public string FormattedPlayTime => LocaleManager.Instance[LocaleKeys.GameListHeaderTimePlayed].Format(AppData.TimePlayedString);
+        public string FormattedFileSize => LocaleManager.Instance[LocaleKeys.GameListHeaderFileSize].Format(AppData.FileSizeString);
         
         public string FormattedLdnInfo => 
-            $"{FormatHostedGames.Format(AppData.GameCount)}\n{FormatPlayerCount.Format(AppData.PlayerCount)}";
+            $"{LocaleManager.Instance[LocaleKeys.GameListHeaderHostedGames].Format(AppData.GameCount)}" +
+            $"\n" +
+            $"{LocaleManager.Instance[LocaleKeys.GameListHeaderPlayerCount].Format(AppData.PlayerCount)}";
     }
 }