Skip to content

Commit f4d1f8f

Browse files
authored
refactor: Rename LocaleAffinity enum value (#20)
1 parent 3b0a9b2 commit f4d1f8f

8 files changed

Lines changed: 264 additions & 264 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ We define the affinity between two locales using a `LocaleAffinity` enum value:
7373
- `LOW`: Locales are somewhat related, meaning they either have low similarities from a linguistic
7474
perspective or co-exist in given geopolitical or cultural contexts.
7575
- `HIGH`: Locales are quite related, meaning they have similarities from a linguistic perspective.
76-
- `SAME_OR_INTERCHANGEABLE`: Locales either identify the same language, or languages that are
76+
- `SAME_OR_MUTUALLY_INTELLIGIBLE`: Locales either identify the same language, or languages that are
7777
similar to a point where a person should understand both if they understand one of them.
7878

7979
We offer two separate logics, each dedicated to separate use-cases:

examples/locales-affinity-examples/src/main/java/com/spotify/i18n/locales/affinity/examples/AffinityCalculationExampleMain.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import static com.spotify.i18n.locales.common.model.LocaleAffinity.LOW;
2424
import static com.spotify.i18n.locales.common.model.LocaleAffinity.NONE;
25-
import static com.spotify.i18n.locales.common.model.LocaleAffinity.SAME_OR_INTERCHANGEABLE;
25+
import static com.spotify.i18n.locales.common.model.LocaleAffinity.SAME_OR_MUTUALLY_INTELLIGIBLE;
2626

2727
import com.ibm.icu.util.ULocale;
2828
import com.spotify.i18n.locales.common.LocaleAffinityCalculator;
@@ -120,18 +120,18 @@ private static Map<String, LocaleAffinity> getLanguageTagToExpectedAffinityMap()
120120
map.put("en-US", NONE);
121121

122122
// Spanish in Europe should ok
123-
map.put("es-419", SAME_OR_INTERCHANGEABLE);
124-
map.put("es-GB", SAME_OR_INTERCHANGEABLE);
125-
map.put("es-US", SAME_OR_INTERCHANGEABLE);
123+
map.put("es-419", SAME_OR_MUTUALLY_INTELLIGIBLE);
124+
map.put("es-GB", SAME_OR_MUTUALLY_INTELLIGIBLE);
125+
map.put("es-US", SAME_OR_MUTUALLY_INTELLIGIBLE);
126126

127127
// Basque should be matched, since we support Spanish
128128
map.put("eu", LOW);
129129

130130
// French
131-
map.put("fr", SAME_OR_INTERCHANGEABLE);
132-
map.put("fr-BE", SAME_OR_INTERCHANGEABLE);
133-
map.put("fr-CA", SAME_OR_INTERCHANGEABLE);
134-
map.put("fr-FR", SAME_OR_INTERCHANGEABLE);
131+
map.put("fr", SAME_OR_MUTUALLY_INTELLIGIBLE);
132+
map.put("fr-BE", SAME_OR_MUTUALLY_INTELLIGIBLE);
133+
map.put("fr-CA", SAME_OR_MUTUALLY_INTELLIGIBLE);
134+
map.put("fr-FR", SAME_OR_MUTUALLY_INTELLIGIBLE);
135135

136136
// Galician should be matched, since we support Spanish
137137
map.put("gl", LOW);
@@ -140,41 +140,41 @@ private static Map<String, LocaleAffinity> getLanguageTagToExpectedAffinityMap()
140140
map.put("hi", NONE);
141141

142142
// Croatian should be nicely matched with Bosnian
143-
map.put("hr-HR", SAME_OR_INTERCHANGEABLE);
143+
map.put("hr-HR", SAME_OR_MUTUALLY_INTELLIGIBLE);
144144

145145
// Serbian Cyrillic should be matched, although only Latin script is supported
146-
map.put("sr", SAME_OR_INTERCHANGEABLE);
147-
map.put("sr-Latn", SAME_OR_INTERCHANGEABLE);
148-
map.put("sr-Cyrl-ME", SAME_OR_INTERCHANGEABLE);
146+
map.put("sr", SAME_OR_MUTUALLY_INTELLIGIBLE);
147+
map.put("sr-Latn", SAME_OR_MUTUALLY_INTELLIGIBLE);
148+
map.put("sr-Cyrl-ME", SAME_OR_MUTUALLY_INTELLIGIBLE);
149149

150150
// Portuguese
151-
map.put("pt", SAME_OR_INTERCHANGEABLE);
152-
map.put("pt-BR", SAME_OR_INTERCHANGEABLE);
153-
map.put("pt-SE", SAME_OR_INTERCHANGEABLE);
154-
map.put("pt-US", SAME_OR_INTERCHANGEABLE);
151+
map.put("pt", SAME_OR_MUTUALLY_INTELLIGIBLE);
152+
map.put("pt-BR", SAME_OR_MUTUALLY_INTELLIGIBLE);
153+
map.put("pt-SE", SAME_OR_MUTUALLY_INTELLIGIBLE);
154+
map.put("pt-US", SAME_OR_MUTUALLY_INTELLIGIBLE);
155155

156156
// Only Traditional Chinese should be matched, not Simplified
157157
map.put("zh-CN", NONE);
158-
map.put("zh-TW", SAME_OR_INTERCHANGEABLE);
159-
map.put("zh-HK", SAME_OR_INTERCHANGEABLE);
158+
map.put("zh-TW", SAME_OR_MUTUALLY_INTELLIGIBLE);
159+
map.put("zh-HK", SAME_OR_MUTUALLY_INTELLIGIBLE);
160160
return map;
161161
}
162162

163163
public static void main(String[] args) {
164164
final LocaleAffinityCalculator affinityCalculator = getLocaleAffinityCalculator();
165165

166166
// Example 1: Filter the list of test language tags, and only retain the ones that result in a
167-
// locale affinity at the level of SAME_OR_INTERCHANGEABLE, therefore guaranteeing that the
168-
// associated
167+
// locale affinity at the level of SAME_OR_MUTUALLY_INTELLIGIBLE
169168
System.out.println("========================================");
170169
System.out.println(
171170
String.format(
172171
"Example 1: List of language tags with calculated affinity = %s",
173-
SAME_OR_INTERCHANGEABLE.name()));
172+
SAME_OR_MUTUALLY_INTELLIGIBLE.name()));
174173
getLanguageTagToExpectedAffinityMap().keySet().stream()
175174
.filter(
176175
languageTag ->
177-
affinityCalculator.calculate(languageTag).affinity() == SAME_OR_INTERCHANGEABLE)
176+
affinityCalculator.calculate(languageTag).affinity()
177+
== SAME_OR_MUTUALLY_INTELLIGIBLE)
178178
.forEach(System.out::println);
179179

180180
// Example 2: Check that calculated affinity for each language tag matches the expected value.

examples/locales-affinity-examples/src/main/java/com/spotify/i18n/locales/affinity/examples/ReferenceLocalesBasedJoinExampleMain.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,17 @@ public class ReferenceLocalesBasedJoinExampleMain {
4545
* <p>Possible joins in the execution output are:
4646
*
4747
* <ul>
48-
* <li>(de, de-AT), join on reference locale [de-AT] with SAME_OR_INTERCHANGEABLE affinity
49-
* <li>(en-GB, en-JP), join on reference locale [en-GB] with SAME_OR_INTERCHANGEABLE affinity
50-
* <li>(en-GB, en-SE), join on reference locale [en-SE] with SAME_OR_INTERCHANGEABLE affinity
51-
* <li>(es-BE, ca), join on reference locale [ca] with LOW affinity
52-
* <li>(fr-SE, fr-BE-u-ca-gregorian), join on reference locale [fr-BE] with
53-
* SAME_OR_INTERCHANGEABLE affinity
54-
* <li>(fr-SE, fr-CA), join on reference locale [fr-CA] with SAME_OR_INTERCHANGEABLE affinity
55-
* <li>(ja-IT, ja@calendar=buddhist), join on reference locale [ja] with SAME_OR_INTERCHANGEABLE
48+
* <li>(de, de-AT) on reference locale [de-AT] with SAME_OR_MUTUALLY_INTELLIGIBLE affinity
49+
* <li>(en-GB, en-JP) on reference locale [en-GB] with SAME_OR_MUTUALLY_INTELLIGIBLE affinity
50+
* <li>(en-GB, en-SE) on reference locale [en-SE] with SAME_OR_MUTUALLY_INTELLIGIBLE affinity
51+
* <li>(es-BE, ca) on reference locale [ca] with LOW affinity
52+
* <li>(fr-SE, fr-BE-u-ca-gregorian) on reference locale [fr-BE] with
53+
* SAME_OR_MUTUALLY_INTELLIGIBLE affinity
54+
* <li>(fr-SE, fr-CA) on reference locale [fr-CA] with SAME_OR_MUTUALLY_INTELLIGIBLE affinity
55+
* <li>(ja-IT, ja@calendar=buddhist) on reference locale [ja] with SAME_OR_MUTUALLY_INTELLIGIBLE
5656
* affinity
57-
* <li>(nl-BE, nl-ZA), join on reference locale [nl] with SAME_OR_INTERCHANGEABLE affinity
58-
* <li>(zh-Hans-US, zh-CN), join on reference locale [zh] with SAME_OR_INTERCHANGEABLE affinity
57+
* <li>(nl-BE, nl-ZA) on reference locale [nl] with SAME_OR_MUTUALLY_INTELLIGIBLE affinity
58+
* <li>(zh-Hans-US, zh-CN) on reference locale [zh] with SAME_OR_MUTUALLY_INTELLIGIBLE affinity
5959
* </ul>
6060
*
6161
* @param args
@@ -97,7 +97,7 @@ public static void main(String[] args) {
9797
(rrl) ->
9898
System.out.println(
9999
String.format(
100-
"(%s, %s), join on reference locale [%s] with %s affinity",
100+
"(%s, %s) on reference locale [%s] with %s affinity",
101101
languageTagInOriginDataset,
102102
languageTagInTargetDataset,
103103
rrl.referenceLocale().toLanguageTag(),

locales-common/src/main/java/com/spotify/i18n/locales/common/impl/LocaleAffinityCalculatorBaseImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public abstract class LocaleAffinityCalculatorBaseImpl implements LocaleAffinity
7575
private static final double DISTANCE_THRESHOLD = 224.0;
7676

7777
// Score to affinity thresholds
78-
private static final int SCORE_THRESHOLD_SAME_OR_INTERCHANGEABLE = 65;
78+
private static final int SCORE_THRESHOLD_SAME_OR_MUTUALLY_INTELLIGIBLE = 65;
7979
private static final int SCORE_THRESHOLD_HIGH = 30;
8080
private static final int SCORE_THRESHOLD_LOW = 0;
8181

@@ -103,7 +103,7 @@ private LocaleAffinity getAffinity(@Nullable final String languageTag) {
103103
// We attempt to match based on corresponding spoken language first, and make use of the
104104
// score-based affinity calculation as fallback.
105105
if (hasSameSpokenLanguageAffinity(languageTag)) {
106-
return LocaleAffinity.SAME_OR_INTERCHANGEABLE;
106+
return LocaleAffinity.SAME_OR_MUTUALLY_INTELLIGIBLE;
107107
} else {
108108
return calculateScoreBasedAffinity(languageTag);
109109
}
@@ -155,8 +155,8 @@ private int convertDistanceToAffinityScore(final int distance) {
155155
}
156156

157157
private LocaleAffinity convertScoreToLocaleAffinity(final int score) {
158-
if (score > SCORE_THRESHOLD_SAME_OR_INTERCHANGEABLE) {
159-
return LocaleAffinity.SAME_OR_INTERCHANGEABLE;
158+
if (score > SCORE_THRESHOLD_SAME_OR_MUTUALLY_INTELLIGIBLE) {
159+
return LocaleAffinity.SAME_OR_MUTUALLY_INTELLIGIBLE;
160160
} else if (score > SCORE_THRESHOLD_HIGH) {
161161
return LocaleAffinity.HIGH;
162162
} else if (score > SCORE_THRESHOLD_LOW) {

locales-common/src/main/java/com/spotify/i18n/locales/common/model/LocaleAffinity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ public enum LocaleAffinity {
4343
* Locales either identify the same language, or languages that are similar to a point where a
4444
* person should understand both if they understand one of them.
4545
*/
46-
SAME_OR_INTERCHANGEABLE
46+
SAME_OR_MUTUALLY_INTELLIGIBLE
4747
}

locales-common/src/test/java/com/spotify/i18n/locales/common/LocaleAffinityHelpersFactoryTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,15 +188,15 @@ void whenBuildingRelatedReferenceLocalesCalculator_returnsExpectedCalculator() {
188188
whenJoiningDatasetsUsingReferenceLocalesCalculator_joinsBasedOnExpectedRelatedReferenceLocale() {
189189
return Stream.of(
190190
// Chinese (Hong-Kong), Chinese (Traditional) -> Chinese (Taiwan)
191-
Arguments.of("zh-HK", "zh-Hant", "zh-TW", LocaleAffinity.SAME_OR_INTERCHANGEABLE),
191+
Arguments.of("zh-HK", "zh-Hant", "zh-TW", LocaleAffinity.SAME_OR_MUTUALLY_INTELLIGIBLE),
192192

193193
// Chinese (Hong-Kong), Cantonese (Hong-Kong) -> Cantonese
194194
Arguments.of("zh-HK", "yue-HK", "yue", LocaleAffinity.HIGH),
195195

196196
// Dutch (Belgium), Dutch (Netherlands) -> Dutch
197-
Arguments.of("nl-BE", "nl-NL", "nl", LocaleAffinity.SAME_OR_INTERCHANGEABLE),
197+
Arguments.of("nl-BE", "nl-NL", "nl", LocaleAffinity.SAME_OR_MUTUALLY_INTELLIGIBLE),
198198

199199
// French (Switzerland), French (Canada) -> French
200-
Arguments.of("fr-CH", "fr-CA", "fr-CA", LocaleAffinity.SAME_OR_INTERCHANGEABLE));
200+
Arguments.of("fr-CH", "fr-CA", "fr-CA", LocaleAffinity.SAME_OR_MUTUALLY_INTELLIGIBLE));
201201
}
202202
}

locales-common/src/test/java/com/spotify/i18n/locales/common/impl/LocaleAffinityCalculatorBaseImplTest.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import static com.spotify.i18n.locales.common.model.LocaleAffinity.LOW;
2424
import static com.spotify.i18n.locales.common.model.LocaleAffinity.NONE;
25-
import static com.spotify.i18n.locales.common.model.LocaleAffinity.SAME_OR_INTERCHANGEABLE;
25+
import static com.spotify.i18n.locales.common.model.LocaleAffinity.SAME_OR_MUTUALLY_INTELLIGIBLE;
2626
import static org.hamcrest.MatcherAssert.assertThat;
2727
import static org.hamcrest.Matchers.is;
2828
import static org.junit.jupiter.api.Assertions.*;
@@ -112,18 +112,18 @@ public static Stream<Arguments> whenCalculating_returnsExpectedAffinity() {
112112
Arguments.of("en-US", NONE),
113113

114114
// Spanish in Europe should be ranked higher
115-
Arguments.of("es-419", SAME_OR_INTERCHANGEABLE),
116-
Arguments.of("es-GB", SAME_OR_INTERCHANGEABLE),
117-
Arguments.of("es-US", SAME_OR_INTERCHANGEABLE),
115+
Arguments.of("es-419", SAME_OR_MUTUALLY_INTELLIGIBLE),
116+
Arguments.of("es-GB", SAME_OR_MUTUALLY_INTELLIGIBLE),
117+
Arguments.of("es-US", SAME_OR_MUTUALLY_INTELLIGIBLE),
118118

119119
// Basque should be matched, since we support Spanish
120120
Arguments.of("eu", LOW),
121121

122122
// French
123-
Arguments.of("fr", SAME_OR_INTERCHANGEABLE),
124-
Arguments.of("fr-BE", SAME_OR_INTERCHANGEABLE),
125-
Arguments.of("fr-CA", SAME_OR_INTERCHANGEABLE),
126-
Arguments.of("fr-FR", SAME_OR_INTERCHANGEABLE),
123+
Arguments.of("fr", SAME_OR_MUTUALLY_INTELLIGIBLE),
124+
Arguments.of("fr-BE", SAME_OR_MUTUALLY_INTELLIGIBLE),
125+
Arguments.of("fr-CA", SAME_OR_MUTUALLY_INTELLIGIBLE),
126+
Arguments.of("fr-FR", SAME_OR_MUTUALLY_INTELLIGIBLE),
127127

128128
// Galician should be matched, since we support Spanish
129129
Arguments.of("gl", LOW),
@@ -132,23 +132,23 @@ public static Stream<Arguments> whenCalculating_returnsExpectedAffinity() {
132132
Arguments.of("hi", NONE),
133133

134134
// Croatian should be nicely matched with Bosnian
135-
Arguments.of("hr-HR", SAME_OR_INTERCHANGEABLE),
135+
Arguments.of("hr-HR", SAME_OR_MUTUALLY_INTELLIGIBLE),
136136

137137
// Serbian Cyrillic should be matched, although only Latin script is supported
138-
Arguments.of("sr", SAME_OR_INTERCHANGEABLE),
139-
Arguments.of("sr-Latn", SAME_OR_INTERCHANGEABLE),
140-
Arguments.of("sr-Cyrl-ME", SAME_OR_INTERCHANGEABLE),
138+
Arguments.of("sr", SAME_OR_MUTUALLY_INTELLIGIBLE),
139+
Arguments.of("sr-Latn", SAME_OR_MUTUALLY_INTELLIGIBLE),
140+
Arguments.of("sr-Cyrl-ME", SAME_OR_MUTUALLY_INTELLIGIBLE),
141141

142142
// Portuguese
143-
Arguments.of("pt", SAME_OR_INTERCHANGEABLE),
144-
Arguments.of("pt-BR", SAME_OR_INTERCHANGEABLE),
145-
Arguments.of("pt-SE", SAME_OR_INTERCHANGEABLE),
146-
Arguments.of("pt-US", SAME_OR_INTERCHANGEABLE),
143+
Arguments.of("pt", SAME_OR_MUTUALLY_INTELLIGIBLE),
144+
Arguments.of("pt-BR", SAME_OR_MUTUALLY_INTELLIGIBLE),
145+
Arguments.of("pt-SE", SAME_OR_MUTUALLY_INTELLIGIBLE),
146+
Arguments.of("pt-US", SAME_OR_MUTUALLY_INTELLIGIBLE),
147147

148148
// Only Traditional Chinese should be matched, not Simplified
149149
Arguments.of("zh-CN", NONE),
150-
Arguments.of("zh-TW", SAME_OR_INTERCHANGEABLE),
151-
Arguments.of("zh-HK", SAME_OR_INTERCHANGEABLE));
150+
Arguments.of("zh-TW", SAME_OR_MUTUALLY_INTELLIGIBLE),
151+
Arguments.of("zh-HK", SAME_OR_MUTUALLY_INTELLIGIBLE));
152152
}
153153

154154
@Test

0 commit comments

Comments
 (0)