Do not uppercase dates if the language is not English #5880

Closed
opened 2026-02-05 11:49:19 +03:00 by OVERLORD · 8 comments
Owner

Originally created by @ClubZero1 on GitHub (Apr 23, 2025).

I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.

  • Yes

The bug

I've noticed that on the mobile application, the days and months don't contain a capital letter on the first letter if our phone isn't in English.

I've tried switching the phone to French and German and the problem is identical.

Telephone in French :
Image

Telephone in English :
Image

The OS that Immich Server is running on

Ubuntu 24.04.2

Version of Immich Server

v1.131.3

Version of Immich Mobile App

v1.131.3 build.193

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - '2283:2283'
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
      file: hwaccel.ml.yml
      service: openvino # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command:
      [
        'postgres',
        '-c',
        'shared_preload_libraries=vectors.so',
        '-c',
        'search_path="$$user", public, vectors',
        '-c',
        'logging_collector=on',
        '-c',
        'max_wal_size=2GB',
        '-c',
        'shared_buffers=512MB',
        '-c',
        'wal_compression=on',
      ]
    restart: always

  immich-public-proxy:
    image: alangrainger/immich-public-proxy:latest
    container_name: immich-public-proxy
    restart: always
    ports:
      - "3100:3000"
    environment:
      - IMMICH_URL=http://immich_server:2283
    healthcheck:
      test: wget -q --spider http://localhost:3000/share/healthcheck || exit 1
      start_period: 10s
      timeout: 5s

volumes:
  model-cache:

Your .env content

# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/md0/pictures
# The location where your database files are stored
DB_DATA_LOCATION=./postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=Europe/Paris
IMMICH_VERSION=release

DB_PASSWORD=postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

IMMICH_HOST=0.0.0.0

Reproduction steps

  1. Changing the phone language
  2. Relaunch the Immich application

Relevant log output


Additional information

No response

Originally created by @ClubZero1 on GitHub (Apr 23, 2025). ### I have searched the existing issues, both open and closed, to make sure this is not a duplicate report. - [x] Yes ### The bug I've noticed that on the mobile application, the days and months don't contain a capital letter on the first letter if our phone isn't in English. I've tried switching the phone to French and German and the problem is identical. Telephone in French : ![Image](https://github.com/user-attachments/assets/5f024c0f-f8b6-4f60-ba6d-ce6e5d90da7d) Telephone in English : ![Image](https://github.com/user-attachments/assets/ad5a2b74-cf89-4d8d-b3a9-42db61ce6208) ### The OS that Immich Server is running on Ubuntu 24.04.2 ### Version of Immich Server v1.131.3 ### Version of Immich Mobile App v1.131.3 build.193 ### Platform with the issue - [ ] Server - [ ] Web - [x] Mobile ### Your docker-compose.yml content ```YAML name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # extends: # file: hwaccel.transcoding.yml # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding volumes: # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - '2283:2283' depends_on: - redis - database restart: always healthcheck: disable: false immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag. # Example tag: ${IMMICH_VERSION:-release}-cuda image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration file: hwaccel.ml.yml service: openvino # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: always healthcheck: disable: false redis: container_name: immich_redis image: docker.io/redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5 healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' volumes: # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file - ${DB_DATA_LOCATION}:/var/lib/postgresql/data healthcheck: test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1 interval: 5m start_interval: 30s start_period: 5m command: [ 'postgres', '-c', 'shared_preload_libraries=vectors.so', '-c', 'search_path="$$user", public, vectors', '-c', 'logging_collector=on', '-c', 'max_wal_size=2GB', '-c', 'shared_buffers=512MB', '-c', 'wal_compression=on', ] restart: always immich-public-proxy: image: alangrainger/immich-public-proxy:latest container_name: immich-public-proxy restart: always ports: - "3100:3000" environment: - IMMICH_URL=http://immich_server:2283 healthcheck: test: wget -q --spider http://localhost:3000/share/healthcheck || exit 1 start_period: 10s timeout: 5s volumes: model-cache: ``` ### Your .env content ```Shell # The location where your uploaded files are stored UPLOAD_LOCATION=/mnt/md0/pictures # The location where your database files are stored DB_DATA_LOCATION=./postgres # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List TZ=Europe/Paris IMMICH_VERSION=release DB_PASSWORD=postgres DB_USERNAME=postgres DB_DATABASE_NAME=immich IMMICH_HOST=0.0.0.0 ``` ### Reproduction steps 1. Changing the phone language 2. Relaunch the Immich application ### Relevant log output ```shell ``` ### Additional information _No response_
Author
Owner

@ferrybig commented on GitHub (Apr 24, 2025):

Adding some context:

In many European languages, (like France,German, Dutch) the months do not start with an upper case letter. However, those locales do follow the convention to start sentences with an uppercase letter. Note that some regions have dialects where the month names must start with an uppercase, but those are the exceptions to the rule.

If an sentence starts with a month name, because it is a sentence, the month is now written with an uppercase letter. (this is where the bug is, Immich never properly capitalizes the headings to make the first letter an uppercase)

The first screenshot should become:

Avril
20 avr. - 3 avr.

@ferrybig commented on GitHub (Apr 24, 2025): Adding some context: In many European languages, (like France,~~German~~, Dutch) the months do not start with an upper case letter. However, those locales do follow the convention to start sentences with an uppercase letter. Note that some regions have dialects where the month names must start with an uppercase, but those are the exceptions to the rule. If an sentence starts with a month name, because it is a sentence, the month is now written with an uppercase letter. (this is where the bug is, Immich never properly capitalizes the headings to make the first letter an uppercase) The first screenshot should become: > Avril > 20 avr. - 3 avr.
Author
Owner

@xathon commented on GitHub (Apr 24, 2025):

In many European languages, (like France, German, Dutch) the months do not start with an upper case letter.

In German, months are capitalized in every context. So no matter if it's Februar or Feb., because it's a noun, it's capitalized. For French and Dutch you're correct though.

@xathon commented on GitHub (Apr 24, 2025): > In many European languages, (like France, **German**, Dutch) the months do not start with an upper case letter. In German, months are capitalized in every context. So no matter if it's `Februar` or `Feb.`, because it's a noun, it's capitalized. For French and Dutch you're correct though.
Author
Owner

@atollk commented on GitHub (Apr 27, 2025):

Just to be clear: This is only in the mobile app (not the web client), and the fix would be to capitalize the month?

(implementation: It probably suffices to call https://api.flutter.dev/flutter/intl/toBeginningOfSentenceCase.html )

@atollk commented on GitHub (Apr 27, 2025): Just to be clear: This is only in the mobile app (not the web client), and the fix would be to capitalize the month? (implementation: It probably suffices to call https://api.flutter.dev/flutter/intl/toBeginningOfSentenceCase.html )
Author
Owner

@xathon commented on GitHub (Apr 27, 2025):

On the second part of the question, I'd say yes.

However, on the web client, there seems to be another problem. My browser is in English, and I just switched languages and locale around in the web app to check it, but it seems everything related to dates doesn't get changed in the front page. Reloading doesn't help, and clearing cookies just reverts it to browser locale.

Image

On my phone, which is in German, I can also only see the German dates on the web front page.

I'll create a seperate issue for this.

@xathon commented on GitHub (Apr 27, 2025): On the second part of the question, I'd say yes. However, on the web client, there seems to be another problem. My browser is in English, and I just switched languages and locale around in the web app to check it, but it seems everything related to dates doesn't get changed in the front page. Reloading doesn't help, and clearing cookies just reverts it to browser locale. ![Image](https://github.com/user-attachments/assets/c751b5e8-111f-4396-a305-d3739b96446d) On my phone, which is in German, I can also only see the German dates on the web front page. I'll create a seperate issue for this.
Author
Owner

@atollk commented on GitHub (Apr 27, 2025):

I noticed the date formatting issue too while I was looking into this and fixed it in the same go. If you want to create another issue, tag me, so I can link the PR.

@atollk commented on GitHub (Apr 27, 2025): I noticed the date formatting issue too while I was looking into this and fixed it in the same go. If you want to create another issue, tag me, so I can link the PR.
Author
Owner

@ClubZero1 commented on GitHub (Apr 27, 2025):

Thanks for the PR.

I wonder if we shouldn't do the same thing for the days of the week. On the web interface, the days start with a capital letter. That would make it possible to have uniformity between the two (web and mobile).

What do you think?

Image

Image

@ClubZero1 commented on GitHub (Apr 27, 2025): Thanks for the PR. I wonder if we shouldn't do the same thing for the days of the week. On the web interface, the days start with a capital letter. That would make it possible to have uniformity between the two (web and mobile). What do you think? ![Image](https://github.com/user-attachments/assets/cce16efe-0e2b-4c0c-85f6-26c03080c21d) ![Image](https://github.com/user-attachments/assets/257452b6-badf-4b33-ae27-67eebf321833)
Author
Owner

@atollk commented on GitHub (Apr 27, 2025):

Sure, that could be done. To me, it's just a question of design. I can only speak for English and German, and neither language has the issue. So if some French users or another language that is affected could tell what feels most natural to them, that would be helpful.

@atollk commented on GitHub (Apr 27, 2025): Sure, that could be done. To me, it's just a question of design. I can only speak for English and German, and neither language has the issue. So if some French users or another language that is affected could tell what feels most natural to them, that would be helpful.
Author
Owner

@ClubZero1 commented on GitHub (Apr 27, 2025):

I'm French 😊
And the most natural thing is to capitalise it. Like you, I couldn't say anything about other languages.

@ClubZero1 commented on GitHub (Apr 27, 2025): I'm French 😊 And the most natural thing is to capitalise it. Like you, I couldn't say anything about other languages.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#5880