Packages

ex_cldr

0.0.3
2.47.5 2.47.4 2.47.3 2.47.2 2.47.1 2.47.0 2.46.0 2.45.2 2.45.1 2.45.0 2.44.1 2.44.0 2.43.2 2.43.1 2.43.0 2.42.0 2.41.1 2.41.0 2.40.4 2.40.3 2.40.2 2.40.1 2.40.0 2.39.2 2.39.1 2.39.0 2.38.1 2.38.0 2.37.5 2.37.4 2.37.3 retired 2.37.2 2.37.1 2.37.0 2.36.0 2.35.1 2.35.0 retired 2.34.2 2.34.1 2.34.0 2.33.2 2.33.1 2.33.1-rc.0 2.33.0 2.32.1 2.32.0 2.31.0 2.30.0 2.29.0 2.28.0 2.27.1 2.27.0 retired 2.26.3 2.26.2 2.26.1 2.26.0 2.25.0 2.24.2 2.24.1 2.24.0 2.24.0-rc.6 2.24.0-rc.5 2.24.0-rc.4 2.24.0-rc.3 2.24.0-rc.2 2.24.0-rc.1 2.24.0-rc.0 2.23.2 2.23.1 2.23.0 2.22.1 2.22.0 2.21.0 2.20.0 2.20.0-rc.3 2.20.0-rc.2 2.20.0-rc.1 2.20.0-rc.0 2.19.1 2.19.0 2.18.2 2.18.1 2.18.0 2.18.0-rc.0 2.17.2 2.17.1 2.17.0 2.16.2 2.16.1 2.16.1-rc.0 2.16.0 2.15.0 2.14.1 2.14.0 2.14.0-rc.0 2.13.0 2.12.1 2.12.0 2.11.1 2.11.0 2.10.2 2.10.1 2.10.0 retired 2.9.0 2.8.1 2.8.0 2.7.2 2.7.1 2.7.0 2.6.2 2.6.1 2.6.0 2.5.0 2.4.3 2.4.2 2.4.1 2.4.0 2.3.2 2.3.1 2.3.0 2.2.7 2.2.6 2.2.5 2.2.4 2.2.3 2.2.2 2.2.1 2.2.0 2.1.0 2.0.4 2.0.3 2.0.2 2.0.1 2.0.0 2.0.0-rc.3 retired 2.0.0-rc.2 retired 2.0.0-rc.1 retired 2.0.0-rc.0 retired 1.8.2 1.8.1 1.8.0 1.7.1 1.7.0 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.2 1.5.1 1.5.0 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 retired 1.4.0-rc.3 retired 1.4.0-rc.2 retired 1.4.0-rc.1 retired 1.4.0-rc.0 retired 1.3.2 1.3.1 1.3.0 1.2.0 1.1.0 1.0.0 1.0.0-rc.3 retired 1.0.0-rc.2 retired 1.0.0-rc.1 retired 1.0.0-rc.0 retired 0.13.1 0.13.0 0.12.2 retired 0.12.1 retired 0.12.0 retired 0.11.0 retired 0.10.0 retired 0.9.0 retired 0.8.3 retired 0.8.2 retired 0.8.1 retired 0.8.0 retired 0.7.0 retired 0.6.2 retired 0.6.1 retired 0.6.0 retired 0.5.2 retired 0.5.1 retired 0.5.0 retired 0.4.2 retired 0.4.1 retired 0.4.0 retired 0.3.0 retired 0.2.1 retired 0.2.0 retired 0.1.3 retired 0.1.2 retired 0.1.1 retired 0.1.0 retired 0.0.20 retired 0.0.19 retired 0.0.18 retired 0.0.17 retired 0.0.16 retired 0.0.15 retired 0.0.14 retired 0.0.13 retired 0.0.12 retired 0.0.11 retired 0.0.10 retired 0.0.8 retired 0.0.7 retired 0.0.6 retired 0.0.5 retired 0.0.4 retired 0.0.3 retired

Common Locale Data Repository (CLDR) functions for Elixir to localize and format numbers, dates, lists, messages, languages, territories and units with support for over 700 locales for internationalized (i18n) and localized (L10N) applications.

Retired package: Deprecated

Current section

Files

Jump to
ex_cldr lib mix support downloader.ex
Raw

lib/mix/support/downloader.ex

defmodule Cldr.Downloader do
@moduledoc """
Downloads the CLDR repositoey from the Unicode consortium.
The files are downloaded `./data` directory, unzipped and
converted to JSON.
"""
@doc """
Downloads the CLDR repository files.
One task for per file is created which then fetches the
file and unzips it. This strategy works because there are
less than 5 files to be downloaded.
* `base_url` is the URL of the Unicode CLDR server
* `required_files` is a list of the files to be downloaded
* `destination_dir` is the directory of the download destination
"""
def download(base_url, required_files, destination_dir) do
ensure File.mkdir(destination_dir), destination_dir
add_dir_to_gitignore(destination_dir)
required_files
|> Enum.map(&Task.async(fn -> fetch_and_unzip_file(base_url, destination_dir, &1) end))
|> Enum.map(&Task.await(&1, 100_000))
end
@doc """
Adds the data directory to the `.gitignore` file of the project
if it does not exist.
* `destination_dir` is the name of the data dir, `./data`
"""
@gitignore ".gitignore"
def add_dir_to_gitignore(destination_dir) do
ignore_path = destination_dir
|> String.split(Cldr.Config.cldr_home())
|> Enum.reverse
|> hd
case System.cmd("grep", ["#{ignore_path}", @gitignore]) do
{_, 1} ->
{:ok, file} = File.open(@gitignore, [:append])
IO.binwrite(file, "#{ignore_path}\n")
File.close file
{_, 0} ->
:ok
{_, code} ->
raise RuntimeError, "Couldn't add #{inspect ignore_path} to " <>
".gitignore. Error code #{inspect code} was returned."
end
end
@doc """
Uses `wget` to retrieve the latest version of the CLDR repository
and stores it in the `./data` directory.
* `download_url` is the url of the Unicode CLDR repository
* `destination_dir` is the location to store the file. Usually
`./data`
* `file` is the name of the file to be downloaded from the server
"""
def fetch_and_unzip_file(download_url, destination_dir, file) do
url = download_url <> "/" <> file
case System.cmd("wget", [url, "-q", "-N"], cd: destination_dir) do
{_, 0} ->
fname = String.to_charlist(destination_dir <> "/" <> file)
case :zip.unzip(fname, cwd: destination_dir) do
{:error, code} ->
raise RuntimeError, "Could not unzip file #{file}. Error " <>
inspect(code) <> " was returned."
{:ok, files} ->
IO.puts "Downloaded #{inspect file} to #{inspect destination_dir} " <>
"and unzipped #{Enum.count(files)} files."
:ok
end
{_, code} ->
raise RuntimeError, "Error downloading #{inspect file}. " <>
"Exited with code #{inspect code} files."
end
end
@doc """
Converts the CLDR repository from XML to JSON using the Unicode
java-based utility `ldml2json`.
* `download_dir` is the location of the downloaded repository
* `destination_dir` is the destination for the converted files
"""
def convert_to_json(download_dir, destination_dir) do
args = ["-DCLDR_DIR=#{download_dir}", "-jar",
"#{download_dir}/tools/java/cldr.jar", "ldml2json",
"-d", destination_dir,
"-p", "true", "-r", "true", "-t"]
System.cmd("java", args ++ ["main"])
System.cmd("java", args ++ ["supplemental"])
end
def remove_package_files(data_dir) do
args1 = [data_dir, "-name", "package.json", "-exec", "rm", "-rf", "{}", "\;"]
args2 = [data_dir, "-name", "bower.json", "-exec", "rm", "-rf", "{}", "\;"]
System.cmd("find", args1)
System.cmd("find", args2)
end
def ensure(:ok, _dir), do: :ok
def ensure({:error, :eexist}, _dir), do: :ok
def ensure(error, dir) do
raise RuntimeError, "#{inspect error}: Could not create #{inspect dir}"
end
end