Changeset - r25223:b4d967fcf4cb
[Not reviewed]
master
0 3 0
frosch - 3 years ago 2021-04-11 15:28:47
frosch@openttd.org
Change: treat languages as finished, if translations are 75% completed.
Unfinished translations are not auto-picked from the locale.
In release builds, unfinished translations are not offered in the GUI.
Unfinished translations are available in non-release builds, or by editing openttd.cfg.
3 files changed with 16 insertions and 0 deletions:
0 comments (0 inline, 0 general)
src/language.h
Show inline comments
 
@@ -58,6 +58,7 @@ struct LanguagePackHeader {
 
	char cases[MAX_NUM_CASES][CASE_GENDER_LEN];     ///< the cases used by this translation
 

	
 
	bool IsValid() const;
 
	bool IsReasonablyFinished() const;
 

	
 
	/**
 
	 * Get the index for the given gender.
src/settings_gui.cpp
Show inline comments
 
@@ -218,6 +218,8 @@ struct GameOptionsWindow : Window {
 

	
 
			case WID_GO_LANG_DROPDOWN: { // Setup interface language dropdown
 
				for (uint i = 0; i < _languages.size(); i++) {
 
					bool hide_language = IsReleasedVersion() && !_languages[i].IsReasonablyFinished();
 
					if (hide_language) continue;
 
					bool hide_percentage = IsReleasedVersion() || _languages[i].missing < _settings_client.gui.missing_strings_threshold;
 
					auto item = new DropDownListParamStringItem(hide_percentage ? STR_JUST_RAW_STRING : STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE, i, false);
 
					if (&_languages[i] == _current_language) {
src/strings.cpp
Show inline comments
 
@@ -1717,6 +1717,15 @@ bool LanguagePackHeader::IsValid() const
 
}
 

	
 
/**
 
 * Check whether a translation is sufficiently finished to offer it to the public.
 
 */
 
bool LanguagePackHeader::IsReasonablyFinished() const
 
{
 
	/* "Less than 25% missing" is "sufficiently finished". */
 
	return 4 * this->missing < LANGUAGE_TOTAL_STRINGS;
 
}
 

	
 
/**
 
 * Read a particular language.
 
 * @param lang The metadata about the language.
 
 * @return Whether the loading went okay or not.
 
@@ -1969,6 +1978,10 @@ void InitializeLanguagePacks()
 
		}
 

	
 
		if (strcmp (lng.isocode, "en_GB") == 0) en_GB_fallback    = &lng;
 

	
 
		/* Only auto-pick finished translations */
 
		if (!lng.IsReasonablyFinished()) continue;
 

	
 
		if (strncmp(lng.isocode, lang, 5) == 0) chosen_language   = &lng;
 
		if (strncmp(lng.isocode, lang, 2) == 0) language_fallback = &lng;
 
	}
0 comments (0 inline, 0 general)