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:
|
@export var language: String:
|
||||||
set(value):
|
set(value):
|
||||||
|
Log.trace("DeviceSettings: set language from %s to %s" % [language, value])
|
||||||
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)
|
TranslationServer.set_locale(value)
|
||||||
print("DeviceSettings: language SET: " + TranslationServer.get_locale())
|
|
||||||
@export var teacher: String
|
@export var teacher: String
|
||||||
@export var device_id: int
|
@export var device_id: int
|
||||||
@export var language_versions: Dictionary = {} # locale: datetime
|
@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 email: String
|
||||||
@export var token: String
|
@export var token: String
|
||||||
@export var last_modified: 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 devices_count: int
|
||||||
var password: String
|
var password: String
|
||||||
@@ -34,6 +47,8 @@ func update_from_dict(dict: Dictionary) -> void:
|
|||||||
token = dict.token
|
token = dict.token
|
||||||
if dict.has("last_modified"):
|
if dict.has("last_modified"):
|
||||||
last_modified = dict.last_modified
|
last_modified = dict.last_modified
|
||||||
|
if dict.has("language"):
|
||||||
|
language = dict.language
|
||||||
|
|
||||||
students.clear()
|
students.clear()
|
||||||
var d_students: Dictionary = dict.students
|
var d_students: Dictionary = dict.students
|
||||||
@@ -112,6 +127,7 @@ func to_dict() -> Dictionary:
|
|||||||
"password": password,
|
"password": password,
|
||||||
"education_method": education_method,
|
"education_method": education_method,
|
||||||
"last_modified": last_modified,
|
"last_modified": last_modified,
|
||||||
|
"language": language
|
||||||
}
|
}
|
||||||
|
|
||||||
dict["students"] = {}
|
dict["students"] = {}
|
||||||
|
|||||||
@@ -5,11 +5,14 @@ const NEXT_SCENE_PATH: String = "res://sources/menus/language_selection/package_
|
|||||||
|
|
||||||
var current_steps: Array[Step] = []
|
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] = [
|
@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/method_step.tscn"),
|
||||||
preload("res://sources/menus/register/steps/teacher/devices_count_step.tscn")
|
preload("res://sources/menus/register/steps/teacher/devices_count_step.tscn")
|
||||||
]
|
]
|
||||||
@onready var parent_steps: Array[PackedScene] = [
|
@onready var parent_steps: Array[PackedScene] = [
|
||||||
|
language_step,
|
||||||
preload("res://sources/menus/register/steps/parent/players_count_step.tscn")
|
preload("res://sources/menus/register/steps/parent/players_count_step.tscn")
|
||||||
]
|
]
|
||||||
@onready var last_steps: Array[PackedScene] = [
|
@onready var last_steps: Array[PackedScene] = [
|
||||||
@@ -87,7 +90,7 @@ func _on_step_completed(step: Step) -> void:
|
|||||||
else:
|
else:
|
||||||
students_step_scene.queue_free()
|
students_step_scene.queue_free()
|
||||||
for scene: PackedScene in last_steps:
|
for scene: PackedScene in last_steps:
|
||||||
current_steps.append(scene.instantiate())
|
current_steps.append(scene.instantiate())
|
||||||
progress_bar.max_value = current_steps.size()
|
progress_bar.max_value = current_steps.size()
|
||||||
"players":
|
"players":
|
||||||
# Adds students steps for parents
|
# 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:
|
var language: String:
|
||||||
set(value):
|
set(value):
|
||||||
|
Log.trace("Database: set language from %s to %s" % [language, value])
|
||||||
language = value
|
language = value
|
||||||
db_path = get_language_folder() + "/language.db"
|
db_path = get_language_folder() + "/language.db"
|
||||||
words_path = get_language_folder() + "/words/"
|
words_path = get_language_folder() + "/words/"
|
||||||
|
|||||||
@@ -318,6 +318,8 @@ func set_language_version(language: String, version: Dictionary) -> void:
|
|||||||
if _device_settings:
|
if _device_settings:
|
||||||
_device_settings.language_versions[language] = version
|
_device_settings.language_versions[language] = version
|
||||||
_save_device_settings()
|
_save_device_settings()
|
||||||
|
else:
|
||||||
|
Log.warn("UserDataManager: Cannot set language version because device settings not found")
|
||||||
|
|
||||||
|
|
||||||
func set_master_volume(value: float) -> void:
|
func set_master_volume(value: float) -> void:
|
||||||
|
|||||||
Reference in New Issue
Block a user