### Install git-lfs Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Installs git-lfs using Homebrew. This must be done before cloning the repository due to large file dependencies. ```bash brew install git-lfs git lfs install ``` -------------------------------- ### Install Maven Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Installs the Maven build tool using Homebrew. Maven is required for generating the CLDR toolchain. ```bash brew install maven ``` -------------------------------- ### Configure ex_cldr Backend with Providers Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Define a backend module for ex_cldr, specifying locales and enabling specific providers. If :providers is nil, all installed providers are enabled by default. Use an empty list to disable all providers. ```elixir defmodule MyApp.Cldr do use Cldr, locales: ["en", "zh"], default_locale: "en", providers: [Cldr.Number, Cldr.List] end ``` -------------------------------- ### Get Available Units with Cldr.Unit Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Retrieve a list of all available unit symbols supported by the Cldr.Unit module. ```elixir iex> MyApp.Cldr.Unit.available_units [:acre, :acre_foot, :ampere, :arc_minute, :arc_second, :astronomical_unit, :bit, :bushel, :byte, :calorie, :carat, :celsius, :centiliter, :centimeter, :century, :cubic_centimeter, :cubic_foot, :cubic_inch, :cubic_kilometer, :cubic_meter, :cubic_mile, :cubic_yard, :cup, :cup_metric, :day, :deciliter, :decimeter, :degree, :fahrenheit, :fathom, :fluid_ounce, :foodcalorie, :foot, :furlong, :g_force, :gallon, :gallon_imperial, :generic, :gigabit, :gigabyte, :gigahertz, :gigawatt, :gram, :hectare, :hectoliter, :hectopascal, :hertz, :horsepower, :hour, :inch, ...] ``` -------------------------------- ### Clone CLDR Repository Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Clones the official CLDR repository. Ensure git-lfs is installed first. The CLDR_REPO environment variable should be set to your preferred directory. ```bash # Set to whatever directory is appropriate export CLDR_REPO="$HOME/development/cldr_repo" git clone https://github.com/unicode-org/cldr $CLDR_REPO ``` -------------------------------- ### Configure Maven GitHub Token Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Modifies or creates the $HOME/.m2/settings.xml file to include server credentials for accessing GitHub packages. Replace 'your github user id' and 'your access token' with your actual GitHub credentials. ```xml githubicu your github user id your access token ``` -------------------------------- ### Download ISO Currency Database Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Use the mix cldr.download.iso_currency task to fetch the latest ISO currency data. ```bash mix cldr.download.iso_currency ``` -------------------------------- ### Global Ex_cldr Configuration Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Define global configuration for Ex_cldr in your config.exs file. Valid keys include :json_library, :default_locale, :default_backend, :cacertfile, :data_dir, and :force_locale_download. Other keys may be used for migration but will print deprecation warnings. ```elixir config :ex_cldr, default_locale: "en", default_backend: MyApp.Cldr, json_library: Jason, cacertfile: "path/to/cacertfile" ``` -------------------------------- ### Create Staging and Production Directories Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Ensure that the CLDR staging and production directories exist before running the data generation script. The script will exit if these directories are not found. ```bash mkdir $CLDR_STAGING mkdir $CLDR_PRODUCTION ``` -------------------------------- ### Configure Locales with Wildcards in Ex_cldr Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Configure specific locales and use wildcard matching for regional variants. Ensures only specified locales are available, raising an error for unknown ones. ```elixir use Cldr, default_locale: "en", locales: ["en-*", "fr"] ``` -------------------------------- ### Format Lists with Cldr.List Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Use Cldr.List.to_string/2 for locale-aware list formatting. Specify the locale and optionally a format like :unit_narrow. ```elixir iex> MyApp.Cldr.List.to_string(["a", "b", "c"], locale: "en") "a, b, and c" ``` ```elixir iex> MyApp.Cldr.List.to_string(["a", "b", "c"], locale: "en", format: :unit_narrow) "a b c" ``` ```elixir iex> MyApp.Cldr.List.to_string(["a", "b", "c"], locale: "fr") "a, b et c" ``` -------------------------------- ### Update ex_cldr Repository Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Navigate to the ex_cldr directory and pull the latest changes from the repository. ```bash cd $EX_CLDR git pull ``` -------------------------------- ### Format Dates and Times with Cldr.DateTime Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Utilize Cldr.Date, Cldr.Time, and Cldr.DateTime modules for locale-aware date and time formatting. Cldr.DateTime.Relative provides relative date formatting. ```elixir iex> MyApp.Cldr.Date.to_string Date.utc_today() {:ok, "Aug 18, 2017"} ``` ```elixir iex> MyApp.Cldr.Time.to_string Time.utc_now {:ok, "11:38:55 AM"} ``` ```elixir iex> MyApp.Cldr.DateTime.to_string DateTime.utc_now {:ok, "Aug 18, 2017, 11:39:08 AM"} ``` ```elixir iex> MyApp.Cldr.DateTime.Relative.to_string 1, unit: :day, format: :narrow {:ok, "tomorrow"} ``` ```elixir iex> MyApp.Cldr.DateTime.Relative.to_string(1, unit: :day, locale: "fr") "demain" ``` ```elixir iex> MyApp.Cldr.DateTime.Relative.to_string(1, unit: :day, format: :narrow) "tomorrow" ``` ```elixir iex> MyApp.Cldr.DateTime.Relative.to_string(1234, unit: :year) "in 1,234 years" ``` ```elixir iex> MyApp.Cldr.DateTime.Relative.to_string(1234, unit: :year, locale: "fr") "dans 1 234 ans" ``` -------------------------------- ### Clone ex_cldr Repository Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Clones the ex_cldr repository. The EX_CLDR environment variable should be set to your preferred directory. ```bash export EX_CLDR="$HOME/Development/ex_cldr" git clone https://github.com/elixir-cldr/cldr $EX_CLDR ``` -------------------------------- ### Language Tag Handling Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Explains the conventions and standards used for language tags within ex_cldr. ```APIDOC ## Language Tag Standards ### Description `ex_cldr` uses language strings conforming to the [IETF standard](https://en.wikipedia.org/wiki/IETF_language_tag) as defined in [RFC5646](https://tools.ietf.org/html/rfc5646). It also supports the `u` extension ([RFC6067](https://tools.ietf.org/html/rfc6067)) and the `t` extension ([RFC6497](https://tools.ietf.org/html/rfc6497)), aligning with W3C standards. ### Differences from ISO 15897 The IETF standard differs from the [ISO/IEC 15897](http://www.open-std.org/jtc1/sc22/wg20/docs/n610.pdf) standard primarily in the use of separators: IETF/W3C use '-' while ISO 15897 uses '_'. ### Conventions Locale strings are case-insensitive, but common conventions include: - Language codes: lower-cased - Territory codes: upper-cased - Script names: capital-cased - Other subtags: lower-cased ``` ```APIDOC ## `Cldr.LanguageTag.Sigil` ### Description Provides a sigil (`~l`) for simplifying the creation of `t:Cldr.LanguageTag` structs. ### Usage ```elixir import Cldr.LanguageTag.Sigil # Example usage (assuming the sigil is imported) # ~l"en-US" ``` ### Availability Available since `ex_cldr` version 2.23.0. ``` -------------------------------- ### Configure Cldr Backend Module Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Configure the Cldr backend module with default locale, supported locales, fallback locales, gettext integration, data directory, OTP app, precompiled number formats and transliterations, providers, documentation generation, and locale download behavior. ```elixir defmodule MyApp.Cldr do use Cldr, default_locale: "en", locales: ["fr", "en", "bs", "si", "ak", "th"], add_fallback_locales: false, gettext: MyApp.Gettext, data_dir: "./priv/cldr", otp_app: :my_app, precompile_number_formats: ["¤¤#,##0.##"], precompile_transliterations: [{:latn, :arab}, {:thai, :latn}], providers: [Cldr.Number], generate_docs: true, force_locale_download: false end ``` -------------------------------- ### Configure Cldr Locales for Production Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Configure the Cldr backend module with multiple locales and precompiled transliterations for production environments, which may take longer to compile. ```elixir config :my_app, MyApp.Cldr, locales: ["fr", "en", "bs", "si", "ak", "th"], precompile_transliterations: [{:latn, :arab}, {:thai, :latn}] ``` -------------------------------- ### Configure Cldr Backend Module with OTP App Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Configure the Cldr backend module specifying the OTP app, default locale, gettext integration, JSON library, data directory, precompiled number formats, and providers. ```elixir defmodule MyApp.Cldr do use Cldr, otp_app: :my_app, default_locale: "en", gettext: MyApp.Gettext, json_library: Jason, data_dir: "./priv/cldr", precompile_number_formats: ["¤¤#,##0.##"], providers: [Cldr.Number] end ``` -------------------------------- ### Define a Cldr Backend Module Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Define a backend module to host ex_cldr configuration and public API functions. This allows for multiple configurations and prevents interference between different ex_cldr implementations. ```elixir defmodule MyApp.Cldr do @moduledoc """ Define a backend module that will host our Cldr configuration and public API. Most function calls in Cldr will be calls to functions on this module. """ use Cldr, locales: ["en", "fr", "zh", "th"], default_locale: "en" end ``` -------------------------------- ### Configure Ex_cldr with Gettext Integration Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Integrate ex_cldr with a Gettext module for locale management. Handles transliteration between Gettext's POSIX locale format and ex_cldr's Unicode format. ```elixir use Cldr, default_locale: "en", gettext: MyApp.Gettext, locales: ["en-*", "fr"] ``` -------------------------------- ### Consolidate ex_cldr Locale Data Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md After updating the repository, run the mix cldr.consolidate task to format the locales for ex_cldr. ```bash mix cldr.consolidate ``` -------------------------------- ### Date and Time Localization Source: https://github.com/elixir-cldr/cldr/blob/main/README.md The `Cldr.DateTime` and `Cldr.DateTime.Relative` modules provide APIs for localizing dates and times. ```APIDOC ## `Cldr.Date.to_string/1` ### Description Formats a `Date` struct into a locale-specific string. ### Method `to_string(date)` ### Parameters #### Path Parameters None #### Query Parameters - **date** (Date) - Required - The `Date` struct to format. ### Request Example ```elixir Mysystem.Cldr.Date.to_string(Date.utc_today()) ``` ### Response #### Success Response (tuple) - `{:ok, formatted_string}` or `{:error, reason}`. #### Response Example ```elixir {:ok, "Aug 18, 2017"} ``` ``` ```APIDOC ## `Cldr.Time.to_string/1` ### Description Formats a `Time` struct into a locale-specific string. ### Method `to_string(time)` ### Parameters #### Path Parameters None #### Query Parameters - **time** (Time) - Required - The `Time` struct to format. ### Request Example ```elixir Mysystem.Cldr.Time.to_string(Time.utc_now()) ``` ### Response #### Success Response (tuple) - `{:ok, formatted_string}` or `{:error, reason}`. #### Response Example ```elixir {:ok, "11:38:55 AM"} ``` ``` ```APIDOC ## `Cldr.DateTime.to_string/1` ### Description Formats a `DateTime` struct into a locale-specific string. ### Method `to_string(datetime)` ### Parameters #### Path Parameters None #### Query Parameters - **datetime** (DateTime) - Required - The `DateTime` struct to format. ### Request Example ```elixir Mysystem.Cldr.DateTime.to_string(DateTime.utc_now()) ``` ### Response #### Success Response (tuple) - `{:ok, formatted_string}` or `{:error, reason}`. #### Response Example ```elixir {:ok, "Aug 18, 2017, 11:39:08 AM"} ``` ``` ```APIDOC ## `Cldr.DateTime.Relative.to_string/2` ### Description Formats a relative date or time difference into a human-readable string. ### Method `to_string(value, opts)` ### Parameters #### Path Parameters None #### Query Parameters - **value** (number) - Required - The numeric value representing the time difference. - **unit** (atom) - Required - The unit of the time difference (e.g., `:day`, `:year`). - **locale** (string) - Optional - The locale to use for formatting. - **format** (atom) - Optional - The formatting style to use (e.g., `:narrow`). ### Request Example ```elixir Mysystem.Cldr.DateTime.Relative.to_string(1, unit: :day, format: :narrow) ``` ### Response #### Success Response (string or tuple) - The localized string representation of the relative time, or `{:ok, string}`. #### Response Example ```elixir "tomorrow" ``` ``` -------------------------------- ### Validate Locale with Timezone and Currency Format Extension Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Validates a locale string 'en-AU-u-tz-ausyd-cf-account' using MyApp.Cldr.validate_locale, demonstrating timezone and currency format extensions. ```elixir iex> MyApp.Cldr.validate_locale "en-AU-u-tz-ausyd-cf-account" {:ok, %Cldr.LanguageTag{ canonical_locale_name: "en-Latn-AU", cldr_locale_name: "en-AU", extensions: %{}, gettext_locale_name: "en", language: "en", language_subtags: [], language_variants: nil, locale: %Cldr.LanguageTag.U{cf: :account, timezone: "Australia/Sydney"}, private_use: [], rbnf_locale_name: "en", requested_locale_name: "en-AU", script: :Latn, territory: :AU, transform: %{} }} ``` -------------------------------- ### Add ex_cldr and JSON Library Dependency Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Add ex_cldr and a compatible JSON library (like jason) to your mix project's dependencies. If running on OTP 27+ or Elixir 1.18+, a JSON library is not required. ```elixir defp deps do [ {:ex_cldr, "~> 2.37"}, # Poison or any other compatible json library # that implements `encode!/1` and `decode!/1` # :jason is recommended {:jason, "~> 1.0"} # {:poison, "~> 2.1 or ~> 3.0"} ] end ``` -------------------------------- ### Unit Localization Source: https://github.com/elixir-cldr/cldr/blob/main/README.md The `Cldr.Unit` module handles unit localization. The main public API is `Cldr.Unit.to_string/3`. ```APIDOC ## `Cldr.Unit.to_string/3` ### Description Localizes a numeric value with a given unit according to locale-specific conventions. ### Method `to_string(value, unit, opts)` ### Parameters #### Path Parameters None #### Query Parameters - **value** (number) - Required - The numeric value to format. - **unit** (atom) - Required - The unit to associate with the value (e.g., `:gallon`, `:megahertz`). - **format** (atom) - Optional - The formatting style to use (e.g., `:long`, `:short`). ### Request Example ```elixir Mysystem.Cldr.Unit.to_string 123, :gallon ``` ### Response #### Success Response (string) - The localized string representation of the unit and value. #### Response Example ```elixir "123 gallons" ``` ``` ```APIDOC ## `Cldr.Unit.available_units/0` ### Description Returns a list of all available units that can be used for localization. ### Method `available_units()` ### Parameters None ### Request Example ```elixir Mysystem.Cldr.Unit.available_units() ``` ### Response #### Success Response (list) - A list of atoms representing available units. #### Response Example ```elixir [:acre, :acre_foot, :ampere, :arc_minute, :arc_second, :astronomical_unit, :bit, :bushel, :byte, :calorie, :carat, :celsius, :centiliter, :centimeter, :century, :cubic_centimeter, :cubic_foot, :cubic_inch, :cubic_kilometer, :cubic_meter, :cubic_mile, :cubic_yard, :cup, :cup_metric, :day, :deciliter, :decimeter, :degree, :fahrenheit, :fathom, :fluid_ounce, :foodcalorie, :foot, :furlong, :g_force, :gallon, :gallon_imperial, :generic, :gigabit, :gigabyte, :gigahertz, :gigawatt, :gram, :hectare, :hectoliter, :hectopascal, :hertz, :horsepower, :hour, :inch, ...] ``` ``` -------------------------------- ### Configure Cldr Locales for Development/Testing Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Configure the Cldr backend module with a single locale for faster compilation in development and test environments. ```elixir config :my_app, MyApp.Cldr, locales: ["en"] ``` -------------------------------- ### List Localization Source: https://github.com/elixir-cldr/cldr/blob/main/README.md The `Cldr.List` module provides functionality for localizing lists. The primary public API is `Cldr.List.to_string/2`. ```APIDOC ## `Cldr.List.to_string/2` ### Description Formats a list of strings into a human-readable string according to locale-specific conventions. ### Method `to_string(list, opts)` ### Parameters #### Path Parameters None #### Query Parameters - **locale** (string) - Required - The locale to use for formatting. - **format** (atom) - Optional - The formatting style to use (e.g., `:unit_narrow`). ### Request Example ```elixir Mysystem.Cldr.List.to_string(["a", "b", "c"], locale: "en") ``` ### Response #### Success Response (string) - The formatted string. #### Response Example ```elixir "a, b, and c" ``` ``` -------------------------------- ### Configure Cldr with Conditional Locale Download Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Conditionally forces locale data download during compilation based on the Mix environment. Useful for ensuring reproducible builds in production. ```elixir defmodule MyApp.Cldr do use Cldr, locales: ["en", "fr"], default_locale: "en", force_locale_download: Mix.env() == :prod end ``` -------------------------------- ### Export Environment Variables for CLDR Data Generation Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Set these environment variables to define the locations for ex_cldr, the Unicode CLDR repository, and staging/production data directories. ```bash export EX_CLDR=directory_where_you_cloned_ex_cldr export CLDR_REPO=directory_where_you_cloned_unicode_cldr export CLDR_STAGING=directory_where_staging_data_will_be_saved export CLDR_PRODUCTION=directory_where_production_data_will_be_saved ``` -------------------------------- ### Generate ex_cldr Language Tags Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Regenerate the language_tags.ebin file by setting the DEV shell variable to true, which disables locale stale tests. ```bash DEV=true mix cldr.generate_language_tags ``` -------------------------------- ### Configure Gettext Pluralization with Cldr.Gettext.Plural Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Define a custom gettext plural forms module using Cldr.Gettext.Plural to leverage CLDR plural rules. This module is then configured in your gettext backend. ```elixir defmodule MyApp.Gettext.Plural do use Cldr.Gettext.Plural, cldr_backend: MyApp.Cldr end ``` ```elixir defmodule MyApp.Gettext do use Gettext, plural_forms: MyApp.Gettext.Plural end ``` -------------------------------- ### Execute ldml2json Script Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Run the ldml2json script from the CLDR repository to process XML files into JSON format. This process can take a significant amount of time. ```bash $CLDR_REPO/ldml2json ``` -------------------------------- ### Localize Units with Cldr.Unit Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Employ Cldr.Unit.to_string/3 for unit localization. The function takes a number, a unit symbol, and optional format options. ```elixir iex> MyApp.Cldr.Unit.to_string 123, :gallon "123 gallons" ``` ```elixir iex> MyApp.Cldr.Unit.to_string 1234, :gallon, format: :long "1 thousand gallons" ``` ```elixir iex> MyApp.Cldr.Unit.to_string 1234, :gallon, format: :short "1K gallons" ``` ```elixir iex> MyApp.Cldr.Unit.to_string 1234, :megahertz "1,234 megahertz" ``` -------------------------------- ### Gettext Pluralization Integration Source: https://github.com/elixir-cldr/cldr/blob/main/README.md This section describes how to configure Gettext to use CLDR plural rules. ```APIDOC ## `use Cldr.Gettext.Plural` ### Description Allows a module to define plural forms based on CLDR plural rules for use with the `gettext` library. ### Usage ```elixir defmodule MyApp.Gettext.Plural do use Cldr.Gettext.Plural, cldr_backend: MyApp.Cldr end ``` ### Configuration This module is then used in the `gettext` backend configuration: ```elixir defmodule MyApp.Gettext do use Gettext, plural_forms: MyApp.Gettext.Plural end ``` ### Note This module does not guarantee the same `plural index` as `Gettext`'s default engine, which may lead to compatibility issues if mixing plural engines. ``` -------------------------------- ### Create Language Tags with Sigil_l Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Use the Sigil_l to simplify the creation of Cldr.LanguageTag structs. This sigil is available from ex_cldr version 2.23.0. ```elixir iex> import Cldr.LanguageTag.Sigil Cldr.LanguageTag.Sigil # Returns a locale that is valid and known to ``` -------------------------------- ### Format Numbers with ex_cldr Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Use Cldr.Number.to_string/2 to format numbers according to specified locales and formats. Supports various formats including currency, roman numerals, ordinals, and spellout. ```elixir iex> MyApp.Cldr.Number.to_string 12345 "12,345" ``` ```elixir iex> MyApp.Cldr.Number.to_string 12345, locale: "fr" "12 345" ``` ```elixir iex> MyApp.Cldr.Number.to_string 12345, locale: "fr", currency: "USD" "12 345,00 $US" ``` ```elixir iex> MyApp.Cldr.Number.to_string 12345, format: "#E0" "1.2345E4" ``` ```elixir iex(> MyApp.Cldr.Number.to_string 1234, format: :roman "MCCXXXIV" ``` ```elixir iex> MyApp.Cldr.Number.to_string 1234, format: :ordinal "1,234th" ``` ```elixir iex> MyApp.Cldr.Number.to_string 1234, format: :spellout "one thousand two hundred thirty-four" ``` -------------------------------- ### Parse Complex Language Tag with Extensions Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Parses a complex language tag including various Unicode extensions for calendar, currency, script, and more. ```elixir iex> ~l(en-u-ca-ethiopic-cu-aud-sd-gbsct-t-d0-lower-k0-extended-m0-ungegn-x-ux) #Cldr.LanguageTag ``` -------------------------------- ### Parse Language Tag with Specific Backend Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Parses a language tag (en-US) while specifying a custom backend module (MyApp.Cldr). ```elixir iex> ~l(en-US|MyApp.Cldr) #Cldr.LanguageTag ``` -------------------------------- ### Parse Default Language Tag Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Uses the ~l sigil to parse a default language tag (en-US). The tag is validated and known. ```elixir iex> ~l(en-US) #Cldr.LanguageTag ``` -------------------------------- ### Update CLDR Repository Source: https://github.com/elixir-cldr/cldr/blob/main/DEVELOPMENT.md Updates the local CLDR repository to the latest version by pulling changes from the remote repository. This command should be run from within the CLDR repository directory. ```bash cd $CLDR_REPO git pull ``` -------------------------------- ### Parse Language Tag with 'u' Flag Source: https://github.com/elixir-cldr/cldr/blob/main/README.md Parses a language tag (zh) with the 'u' flag, which validates the tag but may not recognize it as a configured locale. ```elixir iex> ~l(zh)u #Cldr.LanguageTag ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.