Skip to content

Commit cebc95d

Browse files
Implement "copy if newer" for resources when sample app is packaged
1 parent b9472b9 commit cebc95d

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

WinUI3Localizer.SampleApp/App.xaml.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Serilog;
66
using System;
77
using System.IO;
8+
using System.Runtime.CompilerServices;
89
using System.Threading.Tasks;
910
using Windows.Storage;
1011

@@ -32,20 +33,32 @@ protected override async void OnLaunched(LaunchActivatedEventArgs args)
3233
this.window.Activate();
3334
}
3435

35-
private static async Task CreateStringResourceFileIfNotExists(StorageFolder stringsFolder, string language, string resourceFileName)
36+
private static async Task MakeSureStringResourceFileExists(StorageFolder stringsFolder, string language, string resourceFileName)
3637
{
3738
StorageFolder languageFolder = await stringsFolder.CreateFolderAsync(
38-
language,
39+
desiredName: language,
3940
CreationCollisionOption.OpenIfExists);
4041

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)))
4249
{
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);
4654
}
4755
}
4856

57+
private static async Task<DateTimeOffset> GetModifiedDate(IStorageItem file)
58+
{
59+
return (await file.GetBasicPropertiesAsync()).DateModified;
60+
}
61+
4962
private static async Task<StorageFile> LoadStringResourcesFileFromAppResource(string filePath)
5063
{
5164
Uri resourcesFileUri = new($"ms-appx:///{filePath}");
@@ -115,9 +128,9 @@ private async Task InitializeLocalizer()
115128

116129
// Create string resources file from app resources if doesn't exists.
117130
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);
121134
#endif
122135

123136
ILocalizer localizer = await new LocalizerBuilder()

WinUI3Localizer.SampleApp/WinUI3Localizer.SampleApp.csproj

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,15 @@
7070
<DefineConstants>IS_NON_PACKAGED</DefineConstants>
7171
</PropertyGroup>
7272

73-
<!-- Copy all "Resources.resw" files in the "Strings" folder to the output folder. -->
73+
<!-- If the app is "Non-Packaged", copy the "Strings" folder to the output directory -->
74+
<Target Name="CopyStringResources" AfterTargets="Build">
75+
<ItemGroup>
76+
<StringResources Include="$(ProjectDir)Strings\**\*.*" />
77+
</ItemGroup>
78+
<Copy SourceFiles="@(StringResources)" DestinationFiles="$(OutDir)Strings\%(RecursiveDir)%(Filename)%(Extension)" SkipUnchangedFiles="true" />
79+
</Target>
80+
81+
<!-- Embed all "Resources.resw" files in the "Strings" folder to the output folder. -->
7482
<ItemGroup>
7583
<Content Include="Strings\**\*.resw">
7684
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

0 commit comments

Comments
 (0)