- Extended localization to all DSO and star names.
parent
8e42c67af8
commit
d7b12d4110
|
@ -128,7 +128,7 @@ vector<string> DSODatabase::getCompletion(const string& name) const
|
|||
}
|
||||
|
||||
|
||||
string DSODatabase::getDSOName(const DeepSkyObject* const & dso) const
|
||||
string DSODatabase::getDSOName(const DeepSkyObject* const & dso, bool i18n) const
|
||||
{
|
||||
uint32 catalogNumber = dso->getCatalogNumber();
|
||||
|
||||
|
@ -137,7 +137,10 @@ string DSODatabase::getDSOName(const DeepSkyObject* const & dso) const
|
|||
DSONameDatabase::NumberIndex::const_iterator iter = namesDB->getFirstNameIter(catalogNumber);
|
||||
if (iter != namesDB->getFinalNameIter() && iter->first == catalogNumber)
|
||||
{
|
||||
return iter->second;
|
||||
if (i18n && iter->second != _(iter->second.c_str()))
|
||||
return _(iter->second.c_str());
|
||||
else
|
||||
return iter->second;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -341,9 +344,10 @@ bool DSODatabase::load(istream& in, const string& resourcePath)
|
|||
length = next - startPos;
|
||||
++next;
|
||||
}
|
||||
namesDB->add(objCatalogNumber, objName.substr(startPos, length));
|
||||
if (objName.substr(startPos, length) == "Milky Way" && string("Milky Way") != _("Milky Way"))
|
||||
namesDB->add(objCatalogNumber, _("Milky Way"));
|
||||
string DSOName = objName.substr(startPos, length);
|
||||
namesDB->add(objCatalogNumber, DSOName);
|
||||
if (DSOName != _(DSOName.c_str()))
|
||||
namesDB->add(objCatalogNumber, _(DSOName.c_str()));
|
||||
startPos = next;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ class DSODatabase
|
|||
const Point3d& obsPosition,
|
||||
float radius) const;
|
||||
|
||||
std::string getDSOName (const DeepSkyObject* const &) const;
|
||||
std::string getDSOName (const DeepSkyObject* const &, bool i18n = false) const;
|
||||
std::string getDSONameList(const DeepSkyObject* const &, const unsigned int maxNames = MAX_DSO_NAMES) const;
|
||||
|
||||
DSONameDatabase* getNameDatabase() const;
|
||||
|
|
|
@ -9242,7 +9242,7 @@ void StarRenderer::process(const Star& star, float distance, float appMag)
|
|||
if (dot(starDir, viewNormal) > cosFOV)
|
||||
{
|
||||
char nameBuffer[Renderer::MaxLabelLength];
|
||||
starDB->getStarName(star, nameBuffer, sizeof(nameBuffer));
|
||||
starDB->getStarName(star, nameBuffer, sizeof(nameBuffer), true);
|
||||
float distr = 3.5f * (labelThresholdMag - appMag)/labelThresholdMag;
|
||||
if (distr > 1.0f)
|
||||
distr = 1.0f;
|
||||
|
@ -9499,7 +9499,7 @@ void PointStarRenderer::process(const Star& star, float distance, float appMag)
|
|||
if (dot(starDir, viewNormal) > cosFOV)
|
||||
{
|
||||
char nameBuffer[Renderer::MaxLabelLength];
|
||||
starDB->getStarName(star, nameBuffer, sizeof(nameBuffer));
|
||||
starDB->getStarName(star, nameBuffer, sizeof(nameBuffer), true);
|
||||
float distr = 3.5f * (labelThresholdMag - appMag)/labelThresholdMag;
|
||||
if (distr > 1.0f)
|
||||
distr = 1.0f;
|
||||
|
@ -10005,7 +10005,7 @@ void DSORenderer::process(DeepSkyObject* const & dso,
|
|||
distr = 1.0f;
|
||||
|
||||
renderer->addBackgroundAnnotation(rep,
|
||||
dsoDB->getDSOName(dso),
|
||||
dsoDB->getDSOName(dso, true),
|
||||
Color(labelColor, distr * labelColor.alpha()),
|
||||
Point3f(relPos.x, relPos.y, relPos.z),
|
||||
Renderer::AlignLeft, Renderer::VerticalAlignCenter, symbolSize);
|
||||
|
|
|
@ -377,7 +377,7 @@ static void catalogNumberToString(uint32 catalogNumber, char* buf, unsigned int
|
|||
// mind that calling this method could possibly incur the overhead
|
||||
// of a memory allocation (though no explcit deallocation is
|
||||
// required as it's all wrapped in the string class.)
|
||||
string StarDatabase::getStarName(const Star& star) const
|
||||
string StarDatabase::getStarName(const Star& star, bool i18n) const
|
||||
{
|
||||
uint32 catalogNumber = star.getCatalogNumber();
|
||||
|
||||
|
@ -386,7 +386,10 @@ string StarDatabase::getStarName(const Star& star) const
|
|||
StarNameDatabase::NumberIndex::const_iterator iter = namesDB->getFirstNameIter(catalogNumber);
|
||||
if (iter != namesDB->getFinalNameIter() && iter->first == catalogNumber)
|
||||
{
|
||||
return iter->second;
|
||||
if (i18n && iter->second != _(iter->second.c_str()))
|
||||
return _(iter->second.c_str());
|
||||
else
|
||||
return iter->second;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -405,7 +408,7 @@ string StarDatabase::getStarName(const Star& star) const
|
|||
// A less convenient version of getStarName that writes to a char
|
||||
// array instead of a string. The advantage is that no memory allocation
|
||||
// will every occur.
|
||||
void StarDatabase::getStarName(const Star& star, char* nameBuffer, unsigned int bufferSize) const
|
||||
void StarDatabase::getStarName(const Star& star, char* nameBuffer, unsigned int bufferSize, bool i18n) const
|
||||
{
|
||||
assert(bufferSize != 0);
|
||||
|
||||
|
@ -416,7 +419,11 @@ void StarDatabase::getStarName(const Star& star, char* nameBuffer, unsigned int
|
|||
StarNameDatabase::NumberIndex::const_iterator iter = namesDB->getFirstNameIter(catalogNumber);
|
||||
if (iter != namesDB->getFinalNameIter() && iter->first == catalogNumber)
|
||||
{
|
||||
strncpy(nameBuffer, iter->second.c_str(), bufferSize);
|
||||
if (i18n && iter->second != _(iter->second.c_str()))
|
||||
strncpy(nameBuffer, _(iter->second.c_str()), bufferSize);
|
||||
else
|
||||
strncpy(nameBuffer, iter->second.c_str(), bufferSize);
|
||||
|
||||
nameBuffer[bufferSize - 1] = '\0';
|
||||
return;
|
||||
}
|
||||
|
@ -1311,9 +1318,10 @@ bool StarDatabase::load(istream& in, const string& resourcePath)
|
|||
length = next - startPos;
|
||||
++next;
|
||||
}
|
||||
if (catalogNumber == 0 && objName.substr(startPos, length) == "Sun" && string("Sun") != _("Sun"))
|
||||
namesDB->add(0, _("Sun"));
|
||||
namesDB->add(catalogNumber, objName.substr(startPos, length));
|
||||
string starName = objName.substr(startPos, length);
|
||||
namesDB->add(catalogNumber, starName);
|
||||
if (starName != _(starName.c_str()))
|
||||
namesDB->add(catalogNumber, _(starName.c_str()));
|
||||
startPos = next;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,8 +126,8 @@ class StarDatabase
|
|||
const Point3f& obsPosition,
|
||||
float radius) const;
|
||||
|
||||
std::string getStarName (const Star&) const;
|
||||
void getStarName(const Star& star, char* nameBuffer, unsigned int bufferSize) const;
|
||||
std::string getStarName (const Star&, bool i18n = false) const;
|
||||
void getStarName(const Star& star, char* nameBuffer, unsigned int bufferSize, bool i18n = false) const;
|
||||
std::string getStarNameList(const Star&, const unsigned int maxNames = MAX_STAR_NAMES) const;
|
||||
|
||||
StarNameDatabase* getNameDatabase() const;
|
||||
|
|
|
@ -3670,6 +3670,21 @@ void CelestiaCore::renderOverlay()
|
|||
selectionNames = sim->getUniverse()->getStarCatalog()->getStarNameList(*sel.star());
|
||||
}
|
||||
|
||||
// Skip displaying the English name if a localized version is present.
|
||||
string starName = sim->getUniverse()->getStarCatalog()->getStarName(*sel.star());
|
||||
string locStarName = sim->getUniverse()->getStarCatalog()->getStarName(*sel.star(), true);
|
||||
if (selectionNames.find("Sun") != string::npos && "Sun" != _("Sun"))
|
||||
{
|
||||
string::size_type startPos = selectionNames.find("Sun");
|
||||
string::size_type endPos = selectionNames.find(_("Sun"));
|
||||
selectionNames = selectionNames.erase(startPos, endPos - startPos);
|
||||
}
|
||||
else if (selectionNames.find(starName) != string::npos && starName != locStarName)
|
||||
{
|
||||
string::size_type startPos = selectionNames.find(locStarName);
|
||||
selectionNames = selectionNames.substr(startPos);
|
||||
}
|
||||
|
||||
overlay->setFont(titleFont);
|
||||
*overlay << selectionNames;
|
||||
overlay->setFont(font);
|
||||
|
@ -3690,14 +3705,13 @@ void CelestiaCore::renderOverlay()
|
|||
selectionNames = sim->getUniverse()->getDSOCatalog()->getDSONameList(sel.deepsky());
|
||||
}
|
||||
|
||||
// Skip displaying 'Milky Way' if there's a localized version of this name.
|
||||
// 'Milky Way' is the only DSO name which is localized so far.
|
||||
const char* locDSO = "Milky Way";
|
||||
if (selectionNames.find(locDSO) != string::npos && string(locDSO) != _(locDSO))
|
||||
// Skip displaying the English name if a localized version is present.
|
||||
string DSOName = sim->getUniverse()->getDSOCatalog()->getDSOName(sel.deepsky());
|
||||
string locDSOName = sim->getUniverse()->getDSOCatalog()->getDSOName(sel.deepsky(), true);
|
||||
if (selectionNames.find(DSOName) != string::npos && DSOName != locDSOName)
|
||||
{
|
||||
string::size_type startPos = selectionNames.find(locDSO);
|
||||
string::size_type endPos = selectionNames.find(_(locDSO));
|
||||
selectionNames = selectionNames.erase(startPos, endPos - startPos);
|
||||
string::size_type startPos = selectionNames.find(locDSOName);
|
||||
selectionNames = selectionNames.substr(startPos);
|
||||
}
|
||||
|
||||
overlay->setFont(titleFont);
|
||||
|
|
Loading…
Reference in New Issue