From 8b7c2adf40cd571a45ed27d7944c187a96e83593 Mon Sep 17 00:00:00 2001 From: Carter Gividen Date: Mon, 28 Sep 2026 14:36:16 -0600 Subject: [PATCH 1/2] Add language parameter to the international autocomplete API. --- .../international_autocomplete/Client.java | 3 ++ .../international_autocomplete/Lookup.java | 11 +++++ .../ClientTest.java | 45 ++++++++++++++++++- 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/smartystreets/api/international_autocomplete/Client.java b/src/main/java/com/smartystreets/api/international_autocomplete/Client.java index ffd7602..5ab8df1 100644 --- a/src/main/java/com/smartystreets/api/international_autocomplete/Client.java +++ b/src/main/java/com/smartystreets/api/international_autocomplete/Client.java @@ -51,6 +51,9 @@ private Request buildRequest(Lookup lookup) { } request.putParameter("include_only_locality", lookup.getLocality()); request.putParameter("include_only_postal_code", lookup.getPostalCode()); + if (lookup.getLanguage() != null) { + request.putParameter("language", lookup.getLanguage().getName()); + } return request; } diff --git a/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java b/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java index 182dbd0..fd30dee 100644 --- a/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java +++ b/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java @@ -1,5 +1,7 @@ package com.smartystreets.api.international_autocomplete; +import com.smartystreets.api.international_street.LanguageMode; + /** * In addition to holding all of the input data for this lookup, this class also
* will contain the result of the lookup after it comes back from the API. @@ -22,6 +24,7 @@ public class Lookup { private boolean geolocation; private String locality; private String postalCode; + private LanguageMode language; //endregion @@ -87,6 +90,10 @@ public String getPostalCode() { return this.postalCode; } + public LanguageMode getLanguage() { + return this.language; + } + //endregion //region [ Setters ] @@ -126,5 +133,9 @@ public void setPostalCode(String postalCode) { this.postalCode = postalCode; } + public void setLanguage(LanguageMode language) { + this.language = language; + } + //endregion } diff --git a/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java b/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java index 52a1027..474b12a 100644 --- a/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java +++ b/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java @@ -2,6 +2,7 @@ import com.smartystreets.api.Response; import com.smartystreets.api.URLPrefixSender; +import com.smartystreets.api.international_street.LanguageMode; import com.smartystreets.api.mocks.FakeDeserializer; import com.smartystreets.api.mocks.FakeSerializer; import com.smartystreets.api.mocks.MockSender; @@ -52,13 +53,14 @@ public void testSendingSingleFullyPopulatedLookup() throws Exception { URLPrefixSender sender = new URLPrefixSender("http://localhost/", capturingSender); FakeSerializer serializer = new FakeSerializer(new Result()); Client client = new Client(sender, serializer); - String expectedURL = "http://localhost/?country=1&search=2&max_results=10&max_group_results=100&include_only_locality=4&include_only_postal_code=5"; + String expectedURL = "http://localhost/?country=1&search=2&max_results=10&max_group_results=100&include_only_locality=4&include_only_postal_code=5&language=native"; Lookup lookup = new Lookup(); lookup.setCountry("1"); lookup.setSearch("2"); lookup.setMaxResults(10); lookup.setLocality("4"); lookup.setPostalCode("5"); + lookup.setLanguage(LanguageMode.NATIVE); client.send(lookup); @@ -93,6 +95,47 @@ public void testSendingLookupWithCustomMaxGroupResults() throws Exception { assertTrue(capturingSender.getRequest().getUrl().contains("max_group_results=50")); } + @Test + public void testSendingLookupWithNativeLanguage() throws Exception { + RequestCapturingSender capturingSender = new RequestCapturingSender(); + URLPrefixSender sender = new URLPrefixSender("http://localhost/", capturingSender); + FakeSerializer serializer = new FakeSerializer(new Result()); + Client client = new Client(sender, serializer); + Lookup lookup = new Lookup("1"); + lookup.setLanguage(LanguageMode.NATIVE); + + client.send(lookup); + + assertTrue(capturingSender.getRequest().getUrl().contains("language=native")); + } + + @Test + public void testSendingLookupWithLatinLanguage() throws Exception { + RequestCapturingSender capturingSender = new RequestCapturingSender(); + URLPrefixSender sender = new URLPrefixSender("http://localhost/", capturingSender); + FakeSerializer serializer = new FakeSerializer(new Result()); + Client client = new Client(sender, serializer); + Lookup lookup = new Lookup("1"); + lookup.setLanguage(LanguageMode.LATIN); + + client.send(lookup); + + assertTrue(capturingSender.getRequest().getUrl().contains("language=latin")); + } + + @Test + public void testSendingLookupWithUnsetLanguageOmitsParameter() throws Exception { + RequestCapturingSender capturingSender = new RequestCapturingSender(); + URLPrefixSender sender = new URLPrefixSender("http://localhost/", capturingSender); + FakeSerializer serializer = new FakeSerializer(new Result()); + Client client = new Client(sender, serializer); + Lookup lookup = new Lookup("1"); + + client.send(lookup); + + assertFalse(capturingSender.getRequest().getUrl().contains("language")); + } + @Test public void testDefaultValues() { Lookup lookup = new Lookup(); From fd9f18e777dcc1fdaced19bd6b9b12be83e7556e Mon Sep 17 00:00:00 2001 From: Carter Gividen Date: Thu, 1 Oct 2026 10:40:15 -0600 Subject: [PATCH 2/2] Give international autocomplete its own language mode. --- .../LanguageMode.java | 21 +++++++++++++++++++ .../international_autocomplete/Lookup.java | 1 - .../InternationalAutocompleteExample.java | 2 ++ .../ClientTest.java | 1 - 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/smartystreets/api/international_autocomplete/LanguageMode.java diff --git a/src/main/java/com/smartystreets/api/international_autocomplete/LanguageMode.java b/src/main/java/com/smartystreets/api/international_autocomplete/LanguageMode.java new file mode 100644 index 0000000..b1a2b7d --- /dev/null +++ b/src/main/java/com/smartystreets/api/international_autocomplete/LanguageMode.java @@ -0,0 +1,21 @@ +package com.smartystreets.api.international_autocomplete; + +/** + * When not set, the output language will match the default for the country. When set to NATIVE the
+ * results will always be in the language of the output country whenever possible. When set to LATIN
+ * the results will always be provided using the Latin character set, with accents and other diacritics removed. + *

Note: For French diacritics in Canada, you must specify NATIVE.

+ */ +public enum LanguageMode { + NATIVE("native"), LATIN("latin"); + + private final String name; + + LanguageMode(String name){ + this.name = name; + } + + public String getName(){ + return name; + } +} diff --git a/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java b/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java index fd30dee..66bfe81 100644 --- a/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java +++ b/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java @@ -1,6 +1,5 @@ package com.smartystreets.api.international_autocomplete; -import com.smartystreets.api.international_street.LanguageMode; /** * In addition to holding all of the input data for this lookup, this class also
diff --git a/src/main/java/examples/InternationalAutocompleteExample.java b/src/main/java/examples/InternationalAutocompleteExample.java index 85ed4f7..23a3e96 100644 --- a/src/main/java/examples/InternationalAutocompleteExample.java +++ b/src/main/java/examples/InternationalAutocompleteExample.java @@ -6,6 +6,7 @@ import com.smartystreets.api.international_autocomplete.Client; import com.smartystreets.api.international_autocomplete.Lookup; import com.smartystreets.api.international_autocomplete.Candidate; +import com.smartystreets.api.international_autocomplete.LanguageMode; import java.io.IOException; @@ -26,6 +27,7 @@ public static void main(String[] args) { lookup.setLocality("Paris"); lookup.setMaxGroupResults(50); lookup.setGeolocation(true); + lookup.setLanguage(LanguageMode.NATIVE); client.send(lookup); diff --git a/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java b/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java index 474b12a..d38cebc 100644 --- a/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java +++ b/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java @@ -2,7 +2,6 @@ import com.smartystreets.api.Response; import com.smartystreets.api.URLPrefixSender; -import com.smartystreets.api.international_street.LanguageMode; import com.smartystreets.api.mocks.FakeDeserializer; import com.smartystreets.api.mocks.FakeSerializer; import com.smartystreets.api.mocks.MockSender;