Skip to main content

reinhardt_conf/settings/
i18n.rs

1//! Internationalization settings fragment
2//!
3//! Django compatibility fields for i18n/l10n configuration.
4
5use reinhardt_core::macros::settings;
6use serde::{Deserialize, Serialize};
7
8/// Internationalization and localization settings.
9///
10/// Django compatibility fields. Currently reserved for future i18n support.
11#[settings(fragment = true, section = "i18n")]
12#[derive(Clone, Debug, Serialize, Deserialize)]
13pub struct I18nSettings {
14	/// Language code (e.g., `"en-us"`).
15	#[serde(default = "default_language_code")]
16	pub language_code: String,
17	/// Timezone (e.g., `"UTC"`).
18	#[serde(default = "default_time_zone")]
19	pub time_zone: String,
20	/// Enable internationalization.
21	#[serde(default = "default_true")]
22	pub use_i18n: bool,
23	/// Use timezone-aware datetimes.
24	#[serde(default = "default_true")]
25	pub use_tz: bool,
26}
27
28fn default_language_code() -> String {
29	"en-us".to_string()
30}
31
32fn default_time_zone() -> String {
33	"UTC".to_string()
34}
35
36fn default_true() -> bool {
37	true
38}
39
40impl Default for I18nSettings {
41	fn default() -> Self {
42		Self {
43			language_code: default_language_code(),
44			time_zone: default_time_zone(),
45			use_i18n: true,
46			use_tz: true,
47		}
48	}
49}
50
51#[cfg(test)]
52mod tests {
53	use super::*;
54	use crate::settings::fragment::SettingsFragment;
55	use rstest::rstest;
56
57	#[rstest]
58	fn test_i18n_settings_section() {
59		// Arrange / Act / Assert
60		assert_eq!(I18nSettings::section(), "i18n");
61	}
62
63	#[rstest]
64	fn test_i18n_settings_default() {
65		// Arrange / Act
66		let settings = I18nSettings::default();
67
68		// Assert
69		assert_eq!(settings.language_code, "en-us");
70		assert_eq!(settings.time_zone, "UTC");
71		assert!(settings.use_i18n);
72		assert!(settings.use_tz);
73	}
74}