Skip to content

Commit 921561e

Browse files
Merge pull request #56 from Mitroz/localizable_columns
added support for column name localization
2 parents fa422ba + c3c48c6 commit 921561e

8 files changed

+189
-1
lines changed

src/NetCore.Utilities.Spreadsheet.Tests/NetCore.Utilities.Spreadsheet.Tests.csproj

+19
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,23 @@
2929
<Folder Include="SampleFiles\" />
3030
</ItemGroup>
3131

32+
<ItemGroup>
33+
<EmbeddedResource Update="TestResources.resx">
34+
<Generator>PublicResXFileCodeGenerator</Generator>
35+
<LastGenOutput>TestResources.Designer.cs</LastGenOutput>
36+
</EmbeddedResource>
37+
<EmbeddedResource Update="TestResources.cs-CZ.resx">
38+
<Generator>ResXFileCodeGenerator</Generator>
39+
<LastGenOutput>TestResources.cs-CZ.Designer.cs</LastGenOutput>
40+
</EmbeddedResource>
41+
</ItemGroup>
42+
43+
<ItemGroup>
44+
<Compile Update="TestResources.Designer.cs">
45+
<DesignTime>True</DesignTime>
46+
<AutoGen>True</AutoGen>
47+
<DependentUpon>TestResources.resx</DependentUpon>
48+
</Compile>
49+
</ItemGroup>
50+
3251
</Project>

src/NetCore.Utilities.Spreadsheet.Tests/OpenXmlSpreadsheetGeneratorTests.cs

+28
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Globalization;
34
using System.IO;
45
using Bogus;
56
using FluentAssertions;
@@ -110,6 +111,33 @@ public void CreateMultiSheetSpreadsheet_ShouldThrowError_WhenProvidedSheetsIsNul
110111
Assert.Equal("exportSheets", actualResult.ParamName);
111112
}
112113

114+
[Fact]
115+
public void CreateSheet_With_Localized_ColumnName()
116+
{
117+
var configuration = new SpreadsheetConfiguration<LocalizedSampleExportRecord>
118+
{
119+
WorksheetName = "TestSheet",
120+
ExportData = new List<LocalizedSampleExportRecord>()
121+
{
122+
new()
123+
{
124+
RecordTitle = "test record"
125+
}
126+
}
127+
};
128+
129+
CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo("cs-CZ");
130+
131+
using var ms = new MemoryStream();
132+
var result = _spreadsheetGenerator.CreateSingleSheetSpreadsheet(ms, configuration);
133+
134+
// ms.Seek(0, SeekOrigin.Begin);
135+
// File.WriteAllBytes(@"d:\dcore\test.xlsx", ms.ToArray());
136+
137+
result.Should().BeTrue();
138+
ms.Should().NotHaveLength(0);
139+
}
140+
113141
private static Faker<TestExportRecord> GetTestExportRecordFaker() =>
114142
new Faker<TestExportRecord>()
115143
.UseSeed(1415)

src/NetCore.Utilities.Spreadsheet.Tests/SampleExportRecord.cs

+6
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ public class DifferentTestExportRecord
118118

119119
}
120120

121+
public class LocalizedSampleExportRecord
122+
{
123+
[SpreadsheetColumn(ResourceFileType = typeof(TestResources), ResourceKey = nameof(TestResources.LocalizedColumn))]
124+
public string? RecordTitle { get; set; }
125+
}
126+
121127
public class SampleExportRecordWithFormula
122128
{
123129
[DisplayName("Title")]

src/NetCore.Utilities.Spreadsheet.Tests/TestResources.Designer.cs

+71
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
3+
<root>
4+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
5+
<xsd:element name="root" msdata:IsDataSet="true">
6+
7+
</xsd:element>
8+
</xsd:schema>
9+
<resheader name="resmimetype">
10+
<value>text/microsoft-resx</value>
11+
</resheader>
12+
<resheader name="version">
13+
<value>1.3</value>
14+
</resheader>
15+
<resheader name="reader">
16+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
17+
</resheader>
18+
<resheader name="writer">
19+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
20+
</resheader>
21+
<data name="LocalizedColumn" xml:space="preserve">
22+
<value>Lokalizovaný sloupec</value>
23+
</data>
24+
</root>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
3+
<root>
4+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
5+
<xsd:element name="root" msdata:IsDataSet="true">
6+
7+
</xsd:element>
8+
</xsd:schema>
9+
<resheader name="resmimetype">
10+
<value>text/microsoft-resx</value>
11+
</resheader>
12+
<resheader name="version">
13+
<value>1.3</value>
14+
</resheader>
15+
<resheader name="reader">
16+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
17+
</resheader>
18+
<resheader name="writer">
19+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
20+
</resheader>
21+
<data name="LocalizedColumn" xml:space="preserve">
22+
<value>LocalizedColumn</value>
23+
</data>
24+
</root>

src/NetCore.Utilities.Spreadsheet/SpreadsheetColumnAttribute.cs

+11-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,17 @@ public SpreadsheetColumnAttribute(string displayName = null, float width = 0, bo
5050
/// A custom format for the column. See <see cref="ColumnFormats" /> for valid values.
5151
/// </summary>
5252
public string Format { get; }
53-
53+
54+
/// <summary>
55+
/// If set, will use the resource file and key to get the display name
56+
/// </summary>
57+
public Type ResourceFileType { get; set; }
58+
59+
/// <summary>
60+
/// If set, will use the resource file and key to get the display name
61+
/// </summary>
62+
public string ResourceKey { get; set; }
63+
5464
/// <summary>
5565
/// A custom formula for the column. For example SUM, MIN, MAX, etc.
5666
/// </summary>

src/NetCore.Utilities.Spreadsheet/TypeDiscoverer.cs

+6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.ComponentModel;
44
using System.ComponentModel.DataAnnotations;
5+
using System.Resources;
56
using System.Text.RegularExpressions;
67

78
namespace ICG.NetCore.Utilities.Spreadsheet;
@@ -50,6 +51,11 @@ public static IList<PropDetail> GetProps(Type t)
5051
format = (sca.Format ?? format).ToLowerInvariant();
5152
propName = sca.DisplayName ?? propName;
5253
width = sca.Width;
54+
if (sca.ResourceFileType != null && string.IsNullOrWhiteSpace(sca.ResourceKey) == false)
55+
{
56+
ResourceManager rm = new(sca.ResourceFileType);
57+
propName = rm.GetString(sca.ResourceKey) ?? propName;
58+
}
5359
formula = sca.Formula;
5460
}
5561
else if (attr is DisplayAttribute display)

0 commit comments

Comments
 (0)