|
5 | 5 | using Serilog; |
6 | 6 | using System; |
7 | 7 | using System.IO; |
| 8 | +using System.Runtime.CompilerServices; |
8 | 9 | using System.Threading.Tasks; |
9 | 10 | using Windows.Storage; |
10 | 11 |
|
@@ -32,20 +33,32 @@ protected override async void OnLaunched(LaunchActivatedEventArgs args) |
32 | 33 | this.window.Activate(); |
33 | 34 | } |
34 | 35 |
|
35 | | - private static async Task CreateStringResourceFileIfNotExists(StorageFolder stringsFolder, string language, string resourceFileName) |
| 36 | + private static async Task MakeSureStringResourceFileExists(StorageFolder stringsFolder, string language, string resourceFileName) |
36 | 37 | { |
37 | 38 | StorageFolder languageFolder = await stringsFolder.CreateFolderAsync( |
38 | | - language, |
| 39 | + desiredName: language, |
39 | 40 | CreationCollisionOption.OpenIfExists); |
40 | 41 |
|
41 | | - if (await languageFolder.TryGetItemAsync(resourceFileName) is null) |
| 42 | + string appResourceFilePath = Path.Combine(stringsFolder.Name, language, resourceFileName); |
| 43 | + StorageFile appResourceFile = await LoadStringResourcesFileFromAppResource(appResourceFilePath); |
| 44 | + |
| 45 | + IStorageItem? localResourceFile = await languageFolder.TryGetItemAsync(resourceFileName); |
| 46 | + |
| 47 | + if (localResourceFile is null || |
| 48 | + (await GetModifiedDate(appResourceFile)) > (await GetModifiedDate(localResourceFile))) |
42 | 49 | { |
43 | | - string resourceFilePath = Path.Combine(stringsFolder.Name, language, resourceFileName); |
44 | | - StorageFile resourceFile = await LoadStringResourcesFileFromAppResource(resourceFilePath); |
45 | | - _ = await resourceFile.CopyAsync(languageFolder); |
| 50 | + _ = await appResourceFile.CopyAsync( |
| 51 | + destinationFolder: languageFolder, |
| 52 | + desiredNewName: appResourceFile.Name, |
| 53 | + option: NameCollisionOption.ReplaceExisting); |
46 | 54 | } |
47 | 55 | } |
48 | 56 |
|
| 57 | + private static async Task<DateTimeOffset> GetModifiedDate(IStorageItem file) |
| 58 | + { |
| 59 | + return (await file.GetBasicPropertiesAsync()).DateModified; |
| 60 | + } |
| 61 | + |
49 | 62 | private static async Task<StorageFile> LoadStringResourcesFileFromAppResource(string filePath) |
50 | 63 | { |
51 | 64 | Uri resourcesFileUri = new($"ms-appx:///{filePath}"); |
@@ -115,9 +128,9 @@ private async Task InitializeLocalizer() |
115 | 128 |
|
116 | 129 | // Create string resources file from app resources if doesn't exists. |
117 | 130 | string resourceFileName = "Resources.resw"; |
118 | | - await CreateStringResourceFileIfNotExists(stringsFolder, "en-US", resourceFileName); |
119 | | - await CreateStringResourceFileIfNotExists(stringsFolder, "es-ES", resourceFileName); |
120 | | - await CreateStringResourceFileIfNotExists(stringsFolder, "ja", resourceFileName); |
| 131 | + await MakeSureStringResourceFileExists(stringsFolder, "en-US", resourceFileName); |
| 132 | + await MakeSureStringResourceFileExists(stringsFolder, "es-ES", resourceFileName); |
| 133 | + await MakeSureStringResourceFileExists(stringsFolder, "ja", resourceFileName); |
121 | 134 | #endif |
122 | 135 |
|
123 | 136 | ILocalizer localizer = await new LocalizerBuilder() |
|
0 commit comments