Move language selection to account creation and link it to user account
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"] = {}
|
||||
|
||||
@@ -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"]
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user