Move language selection to account creation and link it to user account

This commit is contained in:
Adrien Ufferte
2025-07-07 11:48:43 +02:00
parent b478929c03
commit 4689a7145d
8 changed files with 95 additions and 3 deletions
+2 -2
View File
@@ -19,10 +19,10 @@ const SUPPORTED_LOCALES: Array[String] = [
@export var language: String:
set(value):
Log.trace("DeviceSettings: set language from %s to %s" % [language, value])
language = value
Database.language = value
Database.language = value # Database language should be set by TeacherSettings, but this is useful when game starts to know which "welcome" audio speech to play.
TranslationServer.set_locale(value)
print("DeviceSettings: language SET: " + TranslationServer.get_locale())
@export var teacher: String
@export var device_id: int
@export var language_versions: Dictionary = {} # locale: datetime
+16
View File
@@ -18,6 +18,19 @@ const AVAILABLE_CODES: Array[int] = [123, 124, 125, 126, 132, 134, 135, 136, 142
@export var email: String
@export var token: String
@export var last_modified: String = ""
@export var _language: String = "" # internal variable exported by the inspector
var language: String:
get:
return _language if _language != "" else _get_default_language()
set(value):
Log.trace("TeacherSettings: set language from %s to %s" % [_language, value])
_language = value
Database.language = value
TranslationServer.set_locale(value)
func _get_default_language() -> String:
Log.warn("TeacherSettings: get_language called but language is empty, returning device language by default. This should not happen.")
return UserDataManager.get_device_settings().language
var devices_count: int
var password: String
@@ -34,6 +47,8 @@ func update_from_dict(dict: Dictionary) -> void:
token = dict.token
if dict.has("last_modified"):
last_modified = dict.last_modified
if dict.has("language"):
language = dict.language
students.clear()
var d_students: Dictionary = dict.students
@@ -112,6 +127,7 @@ func to_dict() -> Dictionary:
"password": password,
"education_method": education_method,
"last_modified": last_modified,
"language": language
}
dict["students"] = {}
+4 -1
View File
@@ -5,11 +5,14 @@ const NEXT_SCENE_PATH: String = "res://sources/menus/language_selection/package_
var current_steps: Array[Step] = []
@onready var language_step: PackedScene = preload("res://sources/menus/register/steps/language/language_step.tscn")
@onready var teacher_steps: Array[PackedScene] = [
language_step,
preload("res://sources/menus/register/steps/teacher/method_step.tscn"),
preload("res://sources/menus/register/steps/teacher/devices_count_step.tscn")
]
@onready var parent_steps: Array[PackedScene] = [
language_step,
preload("res://sources/menus/register/steps/parent/players_count_step.tscn")
]
@onready var last_steps: Array[PackedScene] = [
@@ -87,7 +90,7 @@ func _on_step_completed(step: Step) -> void:
else:
students_step_scene.queue_free()
for scene: PackedScene in last_steps:
current_steps.append(scene.instantiate())
current_steps.append(scene.instantiate())
progress_bar.max_value = current_steps.size()
"players":
# Adds students steps for parents
@@ -0,0 +1,39 @@
@tool
extends Step
class_name LanguageStep
@onready var language_field: OptionButton = %LanguageField
var items: Array[String] = []
func on_enter() -> void:
super.on_enter()
items.clear()
language_field.clear()
var idx: int = 0
for locale: String in DeviceSettings.SUPPORTED_LOCALES:
if not locale:
continue
var locale_name: String = TranslationServer.get_locale_name(locale)
if not locale_name:
continue
language_field.add_item(locale_name, idx)
items.append(locale)
if locale == UserDataManager.get_device_settings().language:
language_field.select(idx)
idx += 1
func get_selected_language() -> String:
var id: int = language_field.get_selected_id()
if id >= 0 and id < items.size():
return items[id]
return ""
func _on_language_selected(index: int) -> void:
if index >= 0 and index < items.size():
UserDataManager.set_language(items[index])
func _on_next() -> bool:
var lang: String = get_selected_language()
if lang:
UserDataManager.set_language(lang)
return true
@@ -0,0 +1 @@
uid://bd4h7edjvj8yf
@@ -0,0 +1,30 @@
[gd_scene load_steps=4 format=3 uid="uid://b6bpwjbb7crii"]
[ext_resource type="PackedScene" uid="uid://bxd3i06rqpxf0" path="res://sources/menus/register/steps/base_step.tscn" id="1"]
[ext_resource type="Script" uid="uid://bd4h7edjvj8yf" path="res://sources/menus/register/steps/language/language_step.gd" id="2"]
[ext_resource type="Script" uid="uid://dugl3xh4di2a5" path="res://sources/menus/main/language_field.gd" id="3"]
[node name="LanguageStep" instance=ExtResource("1")]
script = ExtResource("2")
step_name = "language"
question = "LANGUAGE"
[node name="LanguageContainer" type="HBoxContainer" parent="FormValidator/FormBinder/Control/Background/FormMargin/FormContainer" index="0"]
layout_mode = 2
[node name="LanguageLabel" type="Label" parent="FormValidator/FormBinder/Control/Background/FormMargin/FormContainer/LanguageContainer" index="0"]
custom_minimum_size = Vector2(350, 0)
layout_mode = 2
size_flags_vertical = 1
theme_override_font_sizes/font_size = 50
text = "LANGUAGE"
autowrap_mode = 3
[node name="LanguageField" type="OptionButton" parent="FormValidator/FormBinder/Control/Background/FormMargin/FormContainer/LanguageContainer" index="1"]
unique_name_in_owner = true
layout_mode = 2
theme_type_variation = &"Combobox"
theme_override_font_sizes/font_size = 70
script = ExtResource("3")
[connection signal="item_selected" from="FormValidator/FormBinder/Control/Background/FormMargin/FormContainer/LanguageContainer/LanguageField" to="." method="_on_language_selected"]
+1
View File
@@ -23,6 +23,7 @@ const SOUND_EXTENSION: String = ".mp3"
var language: String:
set(value):
Log.trace("Database: set language from %s to %s" % [language, value])
language = value
db_path = get_language_folder() + "/language.db"
words_path = get_language_folder() + "/words/"
@@ -318,6 +318,8 @@ func set_language_version(language: String, version: Dictionary) -> void:
if _device_settings:
_device_settings.language_versions[language] = version
_save_device_settings()
else:
Log.warn("UserDataManager: Cannot set language version because device settings not found")
func set_master_volume(value: float) -> void: