Skip to content

Commit

Permalink
Merge pull request #103 from willdale/add-localisation
Browse files Browse the repository at this point in the history
Add Localization support
  • Loading branch information
willdale authored Jul 19, 2021
2 parents 18eab2d + c9f08f0 commit eb5105f
Show file tree
Hide file tree
Showing 21 changed files with 135 additions and 97 deletions.
58 changes: 45 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -536,26 +536,58 @@ struct LineChartDemoView: View {
}
```

# Accessibility

---
Inside certain elements are additional tags to help describe the chart for VoiceOver.

See [Localization of Accessibility](#Localization-of-Accessibility)

FONTS
# Localization

Y Axis - caption
X Axis Title - caption
Y Axis Title - caption
All labels support localization. There are, however, some hidden labels that are there to support VoiceOver. See [Localization of Accessibility](#Localization-of-Accessibility)

Header Box ------------------
# Localization of Accessibility

Chart Title - title3
Chart Subtitle - subheadline
See the localization demo in the [Demo Project](https://github.com/willdale/SwiftUICharts-Demo).

Value - title3
Description - subheadline
---

Voice over description of a datapoint when the user touches the area closest to the data point.
The VoiceOver will say `<chart title>, <data point value>, <data point description>`.
```swift
"%@ <local_description_of_a_data_point>" = "%@, <Description of a data point>";
```

Touch Overlay Box ------------------

Description - subheadline
Value - title3
Read out before a `poiMarker`.
The VoiceOver will say `<p o i marker>, <marker legend title>, <marker value>`.
```swift
"P-O-I-Marker" = "P O I Marker";
"Average" = "Average";
```

Voice over description of a `poiMarker`.
The VoiceOver will say `<P-O-I-Marker>, <marker legend title>, <marker value>`.
```swift
"<local_marker_legend_title> %@" = "local_marker_legend_title, %@";
```



Read out before a `axisLabel`.
The VoiceOver will say `<axisLabel>, <marker value>`.
```
"X-Axis-Label" = "X Axis Label";
"Y-Axis-Label" = "Y Axis Label";
```

Read out before a `legend`.
The VoiceOver will say `<chart type legend>, <legend title>`.
```swift
"Line-Chart-Legend" = "Line Chart Legend";
"P-O-I-Marker-Legend" = "P O I Marker Legend";
"Bar-Chart-Legend" = "Bar Chart Legend";
"P-O-I-Marker-Legend" = "P O I Marker Legend";
"Pie-Chart-Legend" = "Pie Chart Legend";
"P-O-I-Marker-Legend" = "P O I Marker Legend";
```
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,12 @@ public final class HorizontalBarChartData: CTHorizontalBarChartDataProtocol, Get
public final func getXAxisLabels() -> some View {
HStack(spacing: 0) {
ForEach(self.labelsArray.indices, id: \.self) { i in
Text(self.labelsArray[i])
Text(LocalizedStringKey(self.labelsArray[i]))
.font(self.chartStyle.yAxisLabelFont)
.foregroundColor(self.chartStyle.yAxisLabelColour)
.lineLimit(1)
.accessibilityLabel(Text("Y Axis Label"))
.accessibilityValue(Text(self.labelsArray[i]))
.accessibilityLabel(LocalizedStringKey("Y-Axis-Label"))
.accessibilityValue(LocalizedStringKey(self.labelsArray[i]))
.overlay(
GeometryReader { geo in
Color.clear
Expand Down Expand Up @@ -133,7 +133,7 @@ public final class HorizontalBarChartData: CTHorizontalBarChartDataProtocol, Get
ForEach(labelArray, id: \.self) { data in
Spacer()
.frame(minHeight: 0, maxHeight: 500)
Text(data)
Text(LocalizedStringKey(data))
.font(self.chartStyle.xAxisLabelFont)
.lineLimit(1)
.foregroundColor(self.chartStyle.xAxisLabelColour)
Expand All @@ -146,8 +146,8 @@ public final class HorizontalBarChartData: CTHorizontalBarChartDataProtocol, Get
}
}
)
.accessibilityLabel(Text("X Axis Label"))
.accessibilityValue(Text("\(data)"))
.accessibilityLabel(LocalizedStringKey("Y-Axis-Label"))
.accessibilityValue(LocalizedStringKey(data))

Spacer()
.frame(minHeight: 0, maxHeight: 500)
Expand Down
5 changes: 3 additions & 2 deletions Sources/SwiftUICharts/BarChart/Views/BarChart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import SwiftUI
```

# View Modifiers

The order of the view modifiers is some what important
as the modifiers are various types for stacks that wrap
around the previous views.
Expand Down Expand Up @@ -58,10 +59,10 @@ public struct BarChart<ChartData>: View where ChartData: BarChartData {
switch chartData.barStyle.colourFrom {
case .barStyle:
BarChartBarStyleSubView(chartData: chartData)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
case .dataPoints:
BarChartDataPointSubView(chartData: chartData)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
}
}
// Needed for axes label frames
Expand Down
6 changes: 3 additions & 3 deletions Sources/SwiftUICharts/BarChart/Views/GroupedBarChart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ internal struct GroupedBarCell<ChartData>: View where ChartData: GroupedBarChart
ColourBar(chartData: chartData,
dataPoint: dataPoint,
colour: colour)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
} else if dataPoint.group.colour.colourType == .gradientColour,
let colours = dataPoint.group.colour.colours,
let startPoint = dataPoint.group.colour.startPoint,
Expand All @@ -131,7 +131,7 @@ internal struct GroupedBarCell<ChartData>: View where ChartData: GroupedBarChart
colours: colours,
startPoint: startPoint,
endPoint: endPoint)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
} else if dataPoint.group.colour.colourType == .gradientStops,
let stops = dataPoint.group.colour.stops,
let startPoint = dataPoint.group.colour.startPoint,
Expand All @@ -143,7 +143,7 @@ internal struct GroupedBarCell<ChartData>: View where ChartData: GroupedBarChart
stops: safeStops,
startPoint: startPoint,
endPoint: endPoint)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions Sources/SwiftUICharts/BarChart/Views/HorizontalBarChart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ public struct HorizontalBarChart<ChartData>: View where ChartData: HorizontalBar
switch chartData.barStyle.colourFrom {
case .barStyle:
HorizontalBarChartBarStyleSubView(chartData: chartData)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
case .dataPoints:
HorizontalBarChartDataPointSubView(chartData: chartData)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
}

}
Expand Down
4 changes: 2 additions & 2 deletions Sources/SwiftUICharts/BarChart/Views/RangedBarChart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ public struct RangedBarChart<ChartData>: View where ChartData: RangedBarChartDat
switch chartData.barStyle.colourFrom {
case .barStyle:
RangedBarChartBarStyleSubView(chartData: chartData)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
case .dataPoints:
RangedBarChartDataPointSubView(chartData: chartData)
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
}
}
// Needed for axes label frames
Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftUICharts/BarChart/Views/StackedBarChart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public struct StackedBarChart<ChartData>: View where ChartData: StackedBarChartD
.animateOnDisappear(using: chartData.chartStyle.globalAnimation) {
self.startAnimation = false
}
.accessibilityLabel( Text("\(chartData.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(chartData.metadata.title))
}
}
} else { CustomNoDataView(chartData: chartData) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ public final class MultiLineChartData: CTLineChartDataProtocol, GetDataProtocol,
AccessibilityRectangle(dataPointCount: dataSet.dataPoints.count,
dataPointNo: point)
.foregroundColor(Color(.gray).opacity(0.000000001))
.accessibilityLabel(Text("\(self.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(self.metadata.title))
.accessibilityValue(dataSet.dataPoints[point].getCellAccessibilityValue(specifier: self.infoView.touchSpecifier))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,7 @@ extension CTLineChartDataProtocol where SetType: CTLineChartDataSet {
dataPointNo: point)

.foregroundColor(Color(.gray).opacity(0.000000001))
.accessibilityLabel(Text("\(self.metadata.title)"))
.accessibilityLabel(LocalizedStringKey(self.metadata.title))
.accessibilityValue(self.dataSets.dataPoints[point].getCellAccessibilityValue(specifier: self.infoView.touchSpecifier))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ extension View {
case .none:
EmptyView()
case .label(let text, let colour, let font, let rFactor):
Text(text)
Text(LocalizedStringKey(text))
.font(font)
.foregroundColor(colour)
.position(chartData.getOverlayPosition(rect: rect,
Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftUICharts/PieChart/Views/DoughnutChart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public struct DoughnutChart<ChartData>: View where ChartData: DoughnutChartData
.zIndex(1)
.shadow(color: Color.primary, radius: 10)
}
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(chartData.metadata.title)
.accessibilityValue(chartData.dataSets.dataPoints[data].getCellAccessibilityValue(specifier: chartData.infoView.touchSpecifier))
}
}
Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftUICharts/PieChart/Views/PieChart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public struct PieChart<ChartData>: View where ChartData: PieChartData {
.zIndex(1)
.shadow(color: Color.primary, radius: 10)
}
.accessibilityLabel(Text("\(chartData.metadata.title)"))
.accessibilityLabel(chartData.metadata.title)
.accessibilityValue(chartData.dataSets.dataPoints[data].getCellAccessibilityValue(specifier: chartData.infoView.touchSpecifier))
}
}
Expand Down
38 changes: 19 additions & 19 deletions Sources/SwiftUICharts/Shared/API.swift
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public struct InfoExtra<T>: View where T: CTChartData {

public var body: some View {
if chartData.infoView.isTouchCurrent {
Text(text)
Text(LocalizedStringKey(text))
} else {
EmptyView()
}
Expand Down Expand Up @@ -87,7 +87,7 @@ extension LegendData {
LegendLine(width: width)
.stroke(colour, style: strokeStyle)
.frame(width: width, height: 3)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
.foregroundColor(textColor)
}
Expand All @@ -99,7 +99,7 @@ extension LegendData {
endPoint: .trailing),
style: strokeStyle)
.frame(width: width, height: 3)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
.foregroundColor(textColor)
}
Expand All @@ -112,7 +112,7 @@ extension LegendData {
endPoint: .trailing),
style: strokeStyle)
.frame(width: width, height: 3)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
.foregroundColor(textColor)
}
Expand All @@ -126,7 +126,7 @@ extension LegendData {
Rectangle()
.fill(colour)
.frame(width: width / 2, height: width / 2)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
}
} else if let colours = self.colour.colours,
Expand All @@ -139,7 +139,7 @@ extension LegendData {
startPoint: startPoint,
endPoint: endPoint))
.frame(width: width / 2, height: width / 2)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
}
} else if let stops = self.colour.stops,
Expand All @@ -153,7 +153,7 @@ extension LegendData {
startPoint: startPoint,
endPoint: endPoint))
.frame(width: width / 2, height: width / 2)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
}
}
Expand All @@ -164,7 +164,7 @@ extension LegendData {
Circle()
.fill(colour)
.frame(width: width / 2, height: width / 2)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
}
} else if let colours = self.colour.colours,
Expand All @@ -177,7 +177,7 @@ extension LegendData {
startPoint: startPoint,
endPoint: endPoint))
.frame(width: width / 2, height: width / 2)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
}

Expand All @@ -192,7 +192,7 @@ extension LegendData {
startPoint: startPoint,
endPoint: endPoint))
.frame(width: width / 2, height: width / 2)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
}
}
Expand All @@ -216,7 +216,7 @@ extension LegendData {
Circle()
.fill(colour)
.frame(width: width, height: width)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
.foregroundColor(textColor)
}
Expand All @@ -227,7 +227,7 @@ extension LegendData {
startPoint: .leading,
endPoint: .trailing))
.frame(width: width, height: width)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
.foregroundColor(textColor)
}
Expand All @@ -239,7 +239,7 @@ extension LegendData {
startPoint: .leading,
endPoint: .trailing))
.frame(width: width, height: width)
Text(self.legend)
Text(LocalizedStringKey(self.legend))
.font(font)
.foregroundColor(textColor)
}
Expand All @@ -251,21 +251,21 @@ extension LegendData {
switch self.chartType {
case .line:
if self.prioity == 1 {
return "Line Chart Legend"
return "Line-Chart-Legend"
} else {
return "P O I Marker Legend"
return "P-O-I-Marker-Legend"
}
case .bar:
if self.prioity == 1 {
return "Bar Chart Legend"
return "Bar-Chart-Legend"
} else {
return "P O I Marker Legend"
return "P-O-I-Marker-Legend"
}
case .pie:
if self.prioity == 1 {
return "Pie Chart Legend"
return "Pie-Chart-Legend"
} else {
return "P O I Marker Legend"
return "P-O-I-Marker-Legend"
}
}
}
Expand Down
Loading

0 comments on commit eb5105f

Please sign in to comment.