mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Fix i18n::list_localization
scanning the filesystem on each call
This commit is contained in:
parent
1358a5d40c
commit
09e38e085c
@ -247,24 +247,38 @@ impl assets::Compound for Localization {
|
||||
}
|
||||
}
|
||||
|
||||
/// Load all the available languages located in the voxygen asset directory
|
||||
pub fn list_localizations() -> Vec<LanguageMetadata> {
|
||||
let mut languages = vec![];
|
||||
// List language directories
|
||||
let i18n_root = assets::path_of("voxygen.i18n", "");
|
||||
for i18n_directory in std::fs::read_dir(&i18n_root).unwrap() {
|
||||
if let Ok(i18n_entry) = i18n_directory {
|
||||
if let Some(i18n_key) = i18n_entry.file_name().to_str() {
|
||||
// load the root file of all the subdirectories
|
||||
if let Ok(localization) = RawLocalization::load(
|
||||
&("voxygen.i18n.".to_string() + i18n_key + "." + LANG_MANIFEST_FILE),
|
||||
) {
|
||||
languages.push(localization.read().metadata.clone());
|
||||
#[derive(Clone, Debug)]
|
||||
struct LocalizationList(Vec<LanguageMetadata>);
|
||||
|
||||
impl assets::Compound for LocalizationList {
|
||||
fn load<S: assets::source::Source>(
|
||||
cache: &assets::AssetCache<S>,
|
||||
specifier: &str,
|
||||
) -> Result<Self, assets::Error> {
|
||||
// List language directories
|
||||
let mut languages = vec![];
|
||||
|
||||
let i18n_root = assets::path_of(specifier, "");
|
||||
for i18n_directory in std::fs::read_dir(&i18n_root)? {
|
||||
if let Ok(i18n_entry) = i18n_directory {
|
||||
if let Some(i18n_key) = i18n_entry.file_name().to_str() {
|
||||
// load the root file of all the subdirectories
|
||||
if let Ok(localization) = cache.load::<RawLocalization>(
|
||||
&(specifier.to_string() + "." + i18n_key + "." + LANG_MANIFEST_FILE),
|
||||
) {
|
||||
languages.push(localization.read().metadata.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(LocalizationList(languages))
|
||||
}
|
||||
languages
|
||||
}
|
||||
|
||||
/// Load all the available languages located in the voxygen asset directory
|
||||
pub fn list_localizations() -> Vec<LanguageMetadata> {
|
||||
LocalizationList::load_expect_cloned("voxygen.i18n").0
|
||||
}
|
||||
|
||||
/// Return the asset associated with the language_id
|
||||
|
Loading…
Reference in New Issue
Block a user