Skip to content

Locale Ansible Role

Manage system locale on Debian-based systems using only built-in modules:

  • Generate required locales by editing /etc/locale.gen and running locale-gen
  • Set the default system locale by ensuring /etc/default/locale contains LANG and optional LC_* pairs

Installation (role)

roles:
  - name: locale
    src: https://gitlab.com/niclas-zone/tools/ansible/roles/locale.git
    version: 1.0.0
    scm: git

Role Variables

Variable Default Type Description
locale_lang de_CH.UTF-8 string Default LANG to set
locale_environment see defaults dict Extra LC_* pairs to set (e.g., LC_TIME, etc.). Empty values are ignored.
locale_generate [locale_lang] list Locales to generate (e.g., de_CH.UTF-8, en_US.UTF-8)
locale_default_charset UTF-8 string Charset appended in /etc/locale.gen when not present in the locale string

Notes:

  • For /etc/locale.gen, the role writes lines like de_CH.UTF-8 UTF-8. If a locale in locale_generate already includes a charset (e.g., de_CH.ISO-8859-1), that charset is used; otherwise locale_default_charset is applied.
  • /etc/default/locale lines are written as KEY="VALUE".

Example Playbooks

Basic (Swiss German)

- hosts: servers
  become: true
  roles:
    - role: locale

Custom locale

- hosts: servers
  become: true
  roles:
    - role: locale
      vars:
        locale_lang: "en_GB.UTF-8"
        locale_environment:
          LC_TIME: "en_GB.UTF-8"
        locale_generate:
          - "en_GB.UTF-8"
          - "de_CH.UTF-8"

British English language, Swiss German LC_*

- hosts: servers
  become: true
  roles:
    - role: locale
      vars:
        locale_lang: "en_GB.UTF-8"
        locale_environment:
          LC_TIME: "de_CH.UTF-8"
          LC_NUMERIC: "de_CH.UTF-8"
          LC_MONETARY: "de_CH.UTF-8"
          LC_PAPER: "de_CH.UTF-8"
          LC_MEASUREMENT: "de_CH.UTF-8"
        locale_generate:
          - "en_GB.UTF-8"
          - "de_CH.UTF-8"

Note: Keyboard layout is not managed by locales; configure it separately (e.g., console-setup or XKB).