.. include:: /Includes.rst.txt .. _feature-93663: ========================================================================= Feature: #93663 - Backend user's preferred UI language stored as DB field ========================================================================= See :issue:`93663` Description =========== In previous TYPO3 versions, administrators could create new backend users and select from the list of all supported TYPO3-internal languages for their backend language (= all labels from XLIFF files). This information was stored in the database field :sql:`be_users.lang` and was only used on the first login of a user into TYPO3 backend. The backend users themselves could use the :guilabel:`User settings` module to change the UI language to their preferred language, based on the available language packs in the system. This information was then stored in the user's :sql:`uc` (user configuration), an arbitrary settings field. This approach - built over 18 years ago without any significant changes ever since - had several downsides: * The database field :sql:`be_users.lang` was not really needed * Administrators did not see available language packs when changing the language * Administrators could only change an editor's preferred language by switching to the user (:guilabel:`Switch User Mode`). * Administrators could not filter / sort editors to see what languages the users had chosen * Fetching the user's preferred language always meant to fetch the whole :sql:`uc` information and unpack it. * The preferred language was only selected if the user had logged in for the first time to initialize the :sql:`uc` values. Instead, TYPO3 now keeps the current language preference in the database field :sql:`be_users.lang`, allowing both editors and administrators to access the same value for fetching this information. Impact ====== When the user changes their language in the user settings module, the database record gets updated, and it is clear where this information is stored. It is now the same logic when an administrator updates the editor's record via FormEngine. The value is now always filled, and if English is chosen, the value is set to the string :php:`default` (instead of an empty value). An upgrade wizard migrates existing :sql:`uc` values into the database fields. The :sql:`uc` entry :sql:`user->uc['lang']` is kept in sync for backwards-compatibility. .. index:: Backend, JavaScript, ext:backend