nextzen / nextzen.js

Javascript SDK for Mapzen products
ISC License
84 stars 43 forks source link

Improve ease of language localization #440

Open rfriberg opened 6 years ago

rfriberg commented 6 years ago

Goal: mapzen.js should make it easy for users to set a default language for all components.

Mapzen Basemaps, Search (geocoder), and Turn-by-turn (routing) all individually allow for language localization. However, these parameters are somewhat buried and not shared across components.

For example, to change the basemap, search, and routing directions to German, you must set a parameter in three different places:

// Add map
var map = L.Mapzen.map('map', {
  tangramOptions: {
    scene: {
      import: L.Mapzen.BasemapStyles.Refill,
      global: {
        ux_language: 'de'
      }
    }
  }
});

// Add search box
var geocoder = L.Mapzen.geocoder({
  params: {
    lang: 'de'
  }
}).addTo(map);

// Add routing
var routingControl = L.Mapzen.routing.control({
  waypoints: [
    L.latLng(37.752, -122.418),
    L.latLng(37.779, -122.391)
  ],
  geocoder: L.Mapzen.routing.geocoder(),
  reverseWaypoints: true,
  router: L.Mapzen.routing.router({
    directions_options: {
      language: 'de'
    }
  })
}).addTo(map);

There are a few ways we could make this easier for the user:

  1. Set up a global variable on L.Mapzen (e.g., L.Mapzen.language) to be used by all components (similar to how we handle api keys)

  2. Set up an attribute on the MapControl object and pass to all components

  3. Improve documentation for changing the default language on all three components

Other things to consider:

@hanbyul-here thoughts?

hanbyul-here commented 6 years ago

This is an awesome idea. I am bit biased to passing this options to maps. It would be better not to have too many globals going on? If we are going to set this option up, we probably have to offer a way to change the language on the map too.

( one thing that comes up to my mind now: if we update the language of Tangram, it would reflect it right away, but others (routing machine and geocoder) would hold the changes until they get something to execute. 🤔 )

rfriberg commented 6 years ago

I'm leaning towards # 2, as well (set up attribute on MapControl rather than on L.Mapzen).

I'm going to bump this up to a more near-term milestone because "We Can Do It!" 💪