diff options
Diffstat (limited to 'indra')
242 files changed, 5086 insertions, 2165 deletions
diff --git a/indra/linux_crash_logger/llcrashloggerlinux.cpp b/indra/linux_crash_logger/llcrashloggerlinux.cpp index 7316717193..62465f9937 100644..100755 --- a/indra/linux_crash_logger/llcrashloggerlinux.cpp +++ b/indra/linux_crash_logger/llcrashloggerlinux.cpp @@ -133,6 +133,12 @@ bool LLCrashLoggerLinux::mainLoop() return true; } +bool LLCrashLoggerLinux::cleanup() +{ + commonCleanup(); + return true; +} + void LLCrashLoggerLinux::updateApplication(const std::string& message) { LLCrashLogger::updateApplication(message); diff --git a/indra/linux_crash_logger/llcrashloggerlinux.h b/indra/linux_crash_logger/llcrashloggerlinux.h index 65d5e4e653..dae6c46651 100644..100755 --- a/indra/linux_crash_logger/llcrashloggerlinux.h +++ b/indra/linux_crash_logger/llcrashloggerlinux.h @@ -39,6 +39,7 @@ public: virtual bool mainLoop(); virtual void updateApplication(const std::string& = LLStringUtil::null); virtual void gatherPlatformSpecificFiles(); + virtual bool cleanup(); }; #endif diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 1dc22519d7..aa37a03ef8 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@ const S32 LL_VERSION_MAJOR = 3; const S32 LL_VERSION_MINOR = 2; -const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_PATCH = 1; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index 331a1692ee..3461aa3e6c 100644..100755 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -42,6 +42,7 @@ #include "llpumpio.h" #include "llhttpclient.h" #include "llsdserialize.h" +#include "llproxy.h" LLPumpIO* gServicePump; BOOL gBreak = false; @@ -428,3 +429,9 @@ bool LLCrashLogger::init() return true; } + +// For cleanup code common to all platforms. +void LLCrashLogger::commonCleanup() +{ + LLProxy::cleanupClass(); +} diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h index 5d0cb5931c..1510d7e0b3 100644..100755 --- a/indra/llcrashlogger/llcrashlogger.h +++ b/indra/llcrashlogger/llcrashlogger.h @@ -48,7 +48,8 @@ public: virtual void updateApplication(const std::string& message = LLStringUtil::null); virtual bool init(); virtual bool mainLoop() = 0; - virtual bool cleanup() { return true; } + virtual bool cleanup() = 0; + void commonCleanup(); void setUserText(const std::string& text) { mCrashInfo["UserNotes"] = text; } S32 getCrashBehavior() { return mCrashBehavior; } bool runCrashLogPost(std::string host, LLSD data, std::string msg, int retries, int timeout); diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index e5ca47da69..3c1ae45d68 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -681,7 +681,7 @@ public: if (lt != 0x7) { - OCT_ERRS << "!!! ELEMENT EXCEEDS RANGE OF SPATIAL PARTITION !!!" << llendl; + //OCT_ERRS << "!!! ELEMENT EXCEEDS RANGE OF SPATIAL PARTITION !!!" << llendl; return false; } diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h index 87de202717..87de202717 100644..100755 --- a/indra/llmessage/llcurl.h +++ b/indra/llmessage/llcurl.h diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp index aea58be12a..0fcd937361 100644 --- a/indra/llui/lldockablefloater.cpp +++ b/indra/llui/lldockablefloater.cpp @@ -239,8 +239,21 @@ void LLDockableFloater::setDockControl(LLDockControl* dockControl) setDocked(isDocked()); } -const LLUIImagePtr& LLDockableFloater::getDockTongue() +const LLUIImagePtr& LLDockableFloater::getDockTongue(LLDockControl::DocAt dock_side) { + switch(dock_side) + { + case LLDockControl::LEFT: + mDockTongue = LLUI::getUIImage("windows/Flyout_Left.png"); + break; + case LLDockControl::RIGHT: + mDockTongue = LLUI::getUIImage("windows/Flyout_Right.png"); + break; + default: + mDockTongue = LLUI::getUIImage("windows/Flyout_Pointer.png"); + break; + } + return mDockTongue; } diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h index 8deb6c1159..89c9852f4a 100644 --- a/indra/llui/lldockablefloater.h +++ b/indra/llui/lldockablefloater.h @@ -113,6 +113,8 @@ public: bool getUniqueDocking() { return mUniqueDocking; } bool getUseTongue() { return mUseTongue; } + + void setUseTongue(bool use_tongue) { mUseTongue = use_tongue;} private: /** * Provides unique of dockable floater. @@ -122,7 +124,7 @@ private: protected: void setDockControl(LLDockControl* dockControl); - const LLUIImagePtr& getDockTongue(); + const LLUIImagePtr& getDockTongue(LLDockControl::DocAt dock_side = LLDockControl::TOP); // Checks if docking should be forced. // It may be useful e.g. if floater created in mouselook mode (see EXT-5609) diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp index 6397bbd0de..af39e41fa6 100644 --- a/indra/llui/lldockcontrol.cpp +++ b/indra/llui/lldockcontrol.cpp @@ -100,12 +100,16 @@ void LLDockControl::repositionDockable() if (!mDockWidget) return; LLRect dockRect = mDockWidget->calcScreenRect(); LLRect rootRect; + LLRect floater_rect = mDockableFloater->calcScreenRect(); mGetAllowedRectCallback(rootRect); - // recalculate dockable position if dock position changed, dock visibility changed, - // root view rect changed or recalculation is forced - if (mPrevDockRect != dockRect || mDockWidgetVisible != isDockVisible() - || mRootRect != rootRect || mRecalculateDocablePosition) + // recalculate dockable position if: + if (mPrevDockRect != dockRect //dock position changed + || mDockWidgetVisible != isDockVisible() //dock visibility changed + || mRootRect != rootRect //root view rect changed + || mFloaterRect != floater_rect //floater rect changed + || mRecalculateDockablePosition //recalculation is forced + ) { // undock dockable and off() if dock not visible if (!isDockVisible()) @@ -136,7 +140,8 @@ void LLDockControl::repositionDockable() mPrevDockRect = dockRect; mRootRect = rootRect; - mRecalculateDocablePosition = false; + mFloaterRect = floater_rect; + mRecalculateDockablePosition = false; mDockWidgetVisible = isDockVisible(); } } @@ -203,21 +208,33 @@ void LLDockControl::moveDockable() switch (mDockAt) { case LEFT: - x = dockRect.mLeft; - y = dockRect.mTop + mDockTongue->getHeight() + dockableRect.getHeight(); - // check is dockable inside root view rect - if (x < rootRect.mLeft) + + x = dockRect.mLeft - dockableRect.getWidth(); + y = dockRect.getCenterY() + dockableRect.getHeight() / 2; + + if (use_tongue) { - x = rootRect.mLeft; + x -= mDockTongue->getWidth(); } - if (x + dockableRect.getWidth() > rootRect.mRight) + + mDockTongueX = dockableRect.mRight; + mDockTongueY = dockableRect.getCenterY() - mDockTongue->getHeight() / 2; + + break; + + case RIGHT: + + x = dockRect.mRight; + y = dockRect.getCenterY() + dockableRect.getHeight() / 2; + + if (use_tongue) { - x = rootRect.mRight - dockableRect.getWidth(); + x += mDockTongue->getWidth(); } - - mDockTongueX = x + dockableRect.getWidth()/2 - mDockTongue->getWidth() / 2; - - mDockTongueY = dockRect.mTop; + + mDockTongueX = dockRect.mRight; + mDockTongueY = dockableRect.getCenterY() - mDockTongue->getHeight() / 2; + break; case TOP: @@ -315,13 +332,12 @@ void LLDockControl::moveDockable() dockableRect.setLeftTopAndSize(x, y, dockableRect.getWidth(), dockableRect.getHeight()); } + LLRect localDocableParentRect; - mDockableFloater->getParent()->screenRectToLocal(dockableRect, - &localDocableParentRect); - mDockableFloater->setRect(localDocableParentRect); - mDockableFloater->screenPointToLocal(mDockTongueX, mDockTongueY, - &mDockTongueX, &mDockTongueY); + mDockableFloater->getParent()->screenRectToLocal(dockableRect, &localDocableParentRect); + mDockableFloater->setRect(localDocableParentRect); + mDockableFloater->screenPointToLocal(mDockTongueX, mDockTongueY, &mDockTongueX, &mDockTongueY); } @@ -330,7 +346,7 @@ void LLDockControl::on() if (isDockVisible()) { mEnabled = true; - mRecalculateDocablePosition = true; + mRecalculateDockablePosition = true; } } @@ -341,7 +357,7 @@ void LLDockControl::off() void LLDockControl::forceRecalculatePosition() { - mRecalculateDocablePosition = true; + mRecalculateDockablePosition = true; } void LLDockControl::drawToungue() diff --git a/indra/llui/lldockcontrol.h b/indra/llui/lldockcontrol.h index 2e7359245f..c9602011f6 100644 --- a/indra/llui/lldockcontrol.h +++ b/indra/llui/lldockcontrol.h @@ -43,6 +43,7 @@ public: { TOP, LEFT, + RIGHT, BOTTOM }; @@ -79,12 +80,13 @@ private: private: get_allowed_rect_callback_t mGetAllowedRectCallback; bool mEnabled; - bool mRecalculateDocablePosition; + bool mRecalculateDockablePosition; bool mDockWidgetVisible; DocAt mDockAt; LLView* mDockWidget; LLRect mPrevDockRect; LLRect mRootRect; + LLRect mFloaterRect; LLFloater* mDockableFloater; LLUIImagePtr mDockTongue; S32 mDockTongueX; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 7100ea13a7..432397d3e9 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -935,7 +935,7 @@ void LLFloater::applyPositioning(LLFloater* other) case LLFloaterEnums::OPEN_POSITIONING_CASCADE_GROUP: case LLFloaterEnums::OPEN_POSITIONING_CASCADING: - if (other != NULL) + if (other != NULL && other != this) { stackWith(*other); } @@ -1070,7 +1070,7 @@ void LLFloater::handleReshape(const LLRect& new_rect, bool by_user) const LLRect old_rect = getRect(); LLView::handleReshape(new_rect, by_user); - if (by_user) + if (by_user && !isMinimized()) { storeRectControl(); mOpenPositioning = LLFloaterEnums::OPEN_POSITIONING_NONE; diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp index ceec9c7eb1..c1cd04186b 100644 --- a/indra/llui/llkeywords.cpp +++ b/indra/llui/llkeywords.cpp @@ -57,6 +57,22 @@ LLKeywords::LLKeywords() : mLoaded(FALSE) { } +inline BOOL LLKeywordToken::isTail(const llwchar* s) const +{ + BOOL res = TRUE; + const llwchar* t = mDelimiter.c_str(); + S32 len = mDelimiter.size(); + for (S32 i=0; i<len; i++) + { + if (s[i] != t[i]) + { + res = FALSE; + break; + } + } + return res; +} + LLKeywords::~LLKeywords() { std::for_each(mWordTokenMap.begin(), mWordTokenMap.end(), DeletePairedPointer()); @@ -106,6 +122,7 @@ BOOL LLKeywords::loadFromFile( const std::string& filename ) std::string SOL_LINE("[line "); std::string SOL_ONE_SIDED_DELIMITER("[one_sided_delimiter "); std::string SOL_TWO_SIDED_DELIMITER("[two_sided_delimiter "); + std::string SOL_DOUBLE_QUOTATION_MARKS("[double_quotation_marks "); LLColor3 cur_color( 1, 0, 0 ); LLKeywordToken::TOKEN_TYPE cur_type = LLKeywordToken::WORD; @@ -137,6 +154,12 @@ BOOL LLKeywords::loadFromFile( const std::string& filename ) cur_type = LLKeywordToken::TWO_SIDED_DELIMITER; continue; } + else if( line.find(SOL_DOUBLE_QUOTATION_MARKS) == 0 ) + { + cur_color = readColor( line.substr(SOL_DOUBLE_QUOTATION_MARKS.size()) ); + cur_type = LLKeywordToken::DOUBLE_QUOTATION_MARKS; + continue; + } else if( line.find(SOL_ONE_SIDED_DELIMITER) == 0 ) { cur_color = readColor( line.substr(SOL_ONE_SIDED_DELIMITER.size()) ); @@ -154,10 +177,26 @@ BOOL LLKeywords::loadFromFile( const std::string& filename ) if( !token_buffer.empty() && token_word_iter != word_tokens.end() ) { - // first word is keyword + // first word is the keyword or a left delimiter std::string keyword = (*token_word_iter); LLStringUtil::trim(keyword); + // second word may be a right delimiter + std::string delimiter; + if (cur_type == LLKeywordToken::TWO_SIDED_DELIMITER) + { + while (delimiter.length() == 0 && ++token_word_iter != word_tokens.end()) + { + delimiter = *token_word_iter; + LLStringUtil::trim(delimiter); + } + } + else if (cur_type == LLKeywordToken::DOUBLE_QUOTATION_MARKS) + { + // Closing delimiter is identical to the opening one. + delimiter = keyword; + } + // following words are tooltip std::string tool_tip; while (++token_word_iter != word_tokens.end()) @@ -170,11 +209,11 @@ BOOL LLKeywords::loadFromFile( const std::string& filename ) { // Replace : with \n for multi-line tool tips. LLStringUtil::replaceChar( tool_tip, ':', '\n' ); - addToken(cur_type, keyword, cur_color, tool_tip ); + addToken(cur_type, keyword, cur_color, tool_tip, delimiter ); } else { - addToken(cur_type, keyword, cur_color, LLStringUtil::null ); + addToken(cur_type, keyword, cur_color, LLStringUtil::null, delimiter ); } } } @@ -189,23 +228,26 @@ BOOL LLKeywords::loadFromFile( const std::string& filename ) void LLKeywords::addToken(LLKeywordToken::TOKEN_TYPE type, const std::string& key_in, const LLColor3& color, - const std::string& tool_tip_in ) + const std::string& tool_tip_in, + const std::string& delimiter_in) { LLWString key = utf8str_to_wstring(key_in); LLWString tool_tip = utf8str_to_wstring(tool_tip_in); + LLWString delimiter = utf8str_to_wstring(delimiter_in); switch(type) { case LLKeywordToken::WORD: - mWordTokenMap[key] = new LLKeywordToken(type, color, key, tool_tip); + mWordTokenMap[key] = new LLKeywordToken(type, color, key, tool_tip, LLWStringUtil::null); break; case LLKeywordToken::LINE: - mLineTokenList.push_front(new LLKeywordToken(type, color, key, tool_tip)); + mLineTokenList.push_front(new LLKeywordToken(type, color, key, tool_tip, LLWStringUtil::null)); break; case LLKeywordToken::TWO_SIDED_DELIMITER: + case LLKeywordToken::DOUBLE_QUOTATION_MARKS: case LLKeywordToken::ONE_SIDED_DELIMITER: - mDelimiterTokenList.push_front(new LLKeywordToken(type, color, key, tool_tip)); + mDelimiterTokenList.push_front(new LLKeywordToken(type, color, key, tool_tip, delimiter)); break; default: @@ -357,7 +399,7 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW } // cur is now at the first non-whitespace character of a new line - + // Line start tokens { BOOL line_done = FALSE; @@ -418,14 +460,15 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW S32 seg_end = 0; seg_start = cur - base; - cur += cur_delimiter->getLength(); + cur += cur_delimiter->getLengthHead(); - if( cur_delimiter->getType() == LLKeywordToken::TWO_SIDED_DELIMITER ) + LLKeywordToken::TOKEN_TYPE type = cur_delimiter->getType(); + if( type == LLKeywordToken::TWO_SIDED_DELIMITER || type == LLKeywordToken::DOUBLE_QUOTATION_MARKS ) { - while( *cur && !cur_delimiter->isHead(cur)) + while( *cur && !cur_delimiter->isTail(cur)) { // Check for an escape sequence. - if (*cur == '\\') + if (type == LLKeywordToken::DOUBLE_QUOTATION_MARKS && *cur == '\\') { // Count the number of backslashes. S32 num_backslashes = 0; @@ -435,10 +478,10 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW between_delimiters++; cur++; } - // Is the next character the end delimiter? - if (cur_delimiter->isHead(cur)) + // If the next character is the end delimiter? + if (cur_delimiter->isTail(cur)) { - // Is there was an odd number of backslashes, then this delimiter + // If there was an odd number of backslashes, then this delimiter // does not end the sequence. if (num_backslashes % 2 == 1) { @@ -461,13 +504,13 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW if( *cur ) { - cur += cur_delimiter->getLength(); - seg_end = seg_start + between_delimiters + 2 * cur_delimiter->getLength(); + cur += cur_delimiter->getLengthHead(); + seg_end = seg_start + between_delimiters + cur_delimiter->getLengthHead() + cur_delimiter->getLengthTail(); } else { // eof - seg_end = seg_start + between_delimiters + cur_delimiter->getLength(); + seg_end = seg_start + between_delimiters + cur_delimiter->getLengthHead(); } } else @@ -479,7 +522,7 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW between_delimiters++; cur++; } - seg_end = seg_start + between_delimiters + cur_delimiter->getLength(); + seg_end = seg_start + between_delimiters + cur_delimiter->getLengthHead(); } insertSegments(wtext, *seg_list,cur_delimiter, text_len, seg_start, seg_end, defaultColor, editor); diff --git a/indra/llui/llkeywords.h b/indra/llui/llkeywords.h index f6d75b7e75..d050cd7d7c 100644 --- a/indra/llui/llkeywords.h +++ b/indra/llui/llkeywords.h @@ -41,23 +41,44 @@ typedef LLPointer<LLTextSegment> LLTextSegmentPtr; class LLKeywordToken { public: - enum TOKEN_TYPE { WORD, LINE, TWO_SIDED_DELIMITER, ONE_SIDED_DELIMITER }; + /** + * @brief Types of tokens/delimters being parsed. + * + * @desc Tokens/delimiters that need to be identified/highlighted. All are terminated if an EOF is encountered. + * - WORD are keywords in the normal sense, i.e. constants, events, etc. + * - LINE are for entire lines (currently only flow control labels use this). + * - ONE_SIDED_DELIMITER are for open-ended delimiters which are terminated by EOL. + * - TWO_SIDED_DELIMITER are for delimiters that end with a different delimiter than they open with. + * - DOUBLE_QUOTATION_MARKS are for delimiting areas using the same delimiter to open and close. + */ + typedef enum TOKEN_TYPE + { + WORD, + LINE, + TWO_SIDED_DELIMITER, + ONE_SIDED_DELIMITER, + DOUBLE_QUOTATION_MARKS + }; - LLKeywordToken( TOKEN_TYPE type, const LLColor3& color, const LLWString& token, const LLWString& tool_tip ) + LLKeywordToken( TOKEN_TYPE type, const LLColor3& color, const LLWString& token, const LLWString& tool_tip, const LLWString& delimiter ) : mType( type ), mToken( token ), mColor( color ), - mToolTip( tool_tip ) + mToolTip( tool_tip ), + mDelimiter( delimiter ) // right delimiter { } - S32 getLength() const { return mToken.size(); } + S32 getLengthHead() const { return mToken.size(); } + S32 getLengthTail() const { return mDelimiter.size(); } BOOL isHead(const llwchar* s) const; + BOOL isTail(const llwchar* s) const; const LLWString& getToken() const { return mToken; } const LLColor3& getColor() const { return mColor; } TOKEN_TYPE getType() const { return mType; } const LLWString& getToolTip() const { return mToolTip; } + const LLWString& getDelimiter() const { return mDelimiter; } #ifdef _DEBUG void dump(); @@ -68,6 +89,7 @@ private: LLWString mToken; LLColor3 mColor; LLWString mToolTip; + LLWString mDelimiter; }; class LLKeywords @@ -85,7 +107,8 @@ public: void addToken(LLKeywordToken::TOKEN_TYPE type, const std::string& key, const LLColor3& color, - const std::string& tool_tip = LLStringUtil::null); + const std::string& tool_tip = LLStringUtil::null, + const std::string& delimiter = LLStringUtil::null); // This class is here as a performance optimization. // The word token map used to be defined as std::map<LLWString, LLKeywordToken*>. diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 515605200e..287e3e2b41 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -112,6 +112,10 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p) mStartDragItemCallback(NULL), mHandleDragItemCallback(NULL), mHandleDropCallback(NULL), + mButtonAddSignal(NULL), + mButtonEnterSignal(NULL), + mButtonLeaveSignal(NULL), + mButtonRemoveSignal(NULL), mDragAndDropTarget(false) { mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_WITH_TEXT] = p.button_icon_and_text; @@ -121,6 +125,10 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p) LLToolBar::~LLToolBar() { delete mPopupMenuHandle.get(); + delete mButtonAddSignal; + delete mButtonEnterSignal; + delete mButtonLeaveSignal; + delete mButtonRemoveSignal; } void LLToolBar::createContextMenu() @@ -212,7 +220,6 @@ bool LLToolBar::addCommand(const LLCommandId& commandId, int rank) mButtonPanel->addChild(button); mButtonMap.insert(std::make_pair(commandId.uuid(), button)); - // Insert the command and button in the right place in their respective lists if ((rank >= mButtonCommands.size()) || (rank == RANK_NONE)) { @@ -238,6 +245,14 @@ bool LLToolBar::addCommand(const LLCommandId& commandId, int rank) mNeedsLayout = true; + updateLayoutAsNeeded(); + + + if (mButtonAddSignal) + { + (*mButtonAddSignal)(button); + } + return true; } @@ -264,6 +279,11 @@ int LLToolBar::removeCommand(const LLCommandId& commandId) ++rank; } + if (mButtonRemoveSignal) + { + (*mButtonRemoveSignal)(*it_button); + } + // Delete the button and erase the command and button records delete (*it_button); mButtonCommands.erase(it_command); @@ -352,6 +372,23 @@ bool LLToolBar::stopCommandInProgress(const LLCommandId& commandId) return (command_button != NULL); } +bool LLToolBar::flashCommand(const LLCommandId& commandId, bool flash) +{ + LLButton * command_button = NULL; + + if (commandId != LLCommandId::null) + { + command_id_map::iterator it = mButtonMap.find(commandId.uuid()); + if (it != mButtonMap.end()) + { + command_button = it->second; + command_button->setFlashing(flash ? TRUE : FALSE); + } + } + + return (command_button != NULL); +} + BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask) { LLRect button_panel_rect; @@ -790,6 +827,11 @@ void LLToolBar::createButtons() { BOOST_FOREACH(LLToolBarButton* button, mButtons) { + if (mButtonRemoveSignal) + { + (*mButtonRemoveSignal)(button); + } + delete button; } mButtons.clear(); @@ -801,6 +843,11 @@ void LLToolBar::createButtons() mButtons.push_back(button); mButtonPanel->addChild(button); mButtonMap.insert(std::make_pair(command_id.uuid(), button)); + + if (mButtonAddSignal) + { + (*mButtonAddSignal)(button); + } } mNeedsLayout = true; } @@ -870,8 +917,7 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id) button->setCommitCallback(executeParam); } - - + // Set up "is running" query callback const std::string& isRunningFunction = commandp->isRunningFunctionName(); if (isRunningFunction.length() > 0) { @@ -898,6 +944,36 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id) return button; } +boost::signals2::connection connectSignal(LLToolBar::button_signal_t*& signal, const LLToolBar::button_signal_t::slot_type& cb) +{ + if (!signal) + { + signal = new LLToolBar::button_signal_t(); + } + + return signal->connect(cb); +} + +boost::signals2::connection LLToolBar::setButtonAddCallback(const button_signal_t::slot_type& cb) +{ + return connectSignal(mButtonAddSignal, cb); +} + +boost::signals2::connection LLToolBar::setButtonEnterCallback(const button_signal_t::slot_type& cb) +{ + return connectSignal(mButtonEnterSignal, cb); +} + +boost::signals2::connection LLToolBar::setButtonLeaveCallback(const button_signal_t::slot_type& cb) +{ + return connectSignal(mButtonLeaveSignal, cb); +} + +boost::signals2::connection LLToolBar::setButtonRemoveCallback(const button_signal_t::slot_type& cb) +{ + return connectSignal(mButtonRemoveSignal, cb); +} + BOOL LLToolBar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, @@ -969,8 +1045,6 @@ LLToolBarButton::LLToolBarButton(const Params& p) mOriginalImageOverlayColor(p.image_overlay_color), mOriginalImageOverlaySelectedColor(p.image_overlay_selected_color) { - mButtonFlashRate = 0.0; - mButtonFlashCount = 0; } LLToolBarButton::~LLToolBarButton() @@ -1012,6 +1086,7 @@ BOOL LLToolBarButton::handleHover(S32 x, S32 y, MASK mask) { handled = LLButton::handleHover(x, y, mask); } + return handled; } @@ -1024,6 +1099,23 @@ void LLToolBarButton::onMouseEnter(S32 x, S32 y, MASK mask) { mNeedsHighlight = TRUE; } + + LLToolBar* parent_toolbar = getParentByType<LLToolBar>(); + if (parent_toolbar && parent_toolbar->mButtonEnterSignal) + { + (*(parent_toolbar->mButtonEnterSignal))(this); + } +} + +void LLToolBarButton::onMouseLeave(S32 x, S32 y, MASK mask) +{ + LLButton::onMouseLeave(x, y, mask); + + LLToolBar* parent_toolbar = getParentByType<LLToolBar>(); + if (parent_toolbar && parent_toolbar->mButtonLeaveSignal) + { + (*(parent_toolbar->mButtonLeaveSignal))(this); + } } void LLToolBarButton::onMouseCaptureLost() @@ -1072,25 +1164,25 @@ void LLToolBarButton::setEnabled(BOOL enabled) } } - const std::string LLToolBarButton::getToolTip() const { std::string tooltip; + if (labelIsTruncated() || getCurrentLabel().empty()) { - return LLTrans::getString(LLCommandManager::instance().getCommand(mId)->labelRef()) + " -- " + LLView::getToolTip(); + tooltip = LLTrans::getString(LLCommandManager::instance().getCommand(mId)->labelRef()) + " -- " + LLView::getToolTip(); } else { - return LLView::getToolTip(); + tooltip = LLView::getToolTip(); } -} - - - - - - + LLToolBar* parent_toolbar = getParentByType<LLToolBar>(); + if (parent_toolbar && parent_toolbar->mButtonTooltipSuffix.length() > 0) + { + tooltip = tooltip + "\n(" + parent_toolbar->mButtonTooltipSuffix + ")"; + } + return tooltip; +} diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index e634e57f93..f10f39adc3 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -71,6 +71,7 @@ public: void setHandleDragCallback(tool_handledrag_callback_t cb) { mHandleDragItemCallback = cb; } void onMouseEnter(S32 x, S32 y, MASK mask); + void onMouseLeave(S32 x, S32 y, MASK mask); void onMouseCaptureLost(); void onCommit(); @@ -120,6 +121,8 @@ namespace LLToolBarEnums SIDE_RIGHT, SIDE_TOP, }; + + LLLayoutStack::ELayoutOrientation getOrientation(SideType sideType); } // NOTE: This needs to occur before Param block declaration for proper compilation. @@ -142,6 +145,7 @@ namespace LLInitParam class LLToolBar : public LLUICtrl { + friend class LLToolBarButton; public: struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> { @@ -187,6 +191,7 @@ public: bool hasCommand(const LLCommandId& commandId) const; bool enableCommand(const LLCommandId& commandId, bool enabled); bool stopCommandInProgress(const LLCommandId& commandId); + bool flashCommand(const LLCommandId& commandId, bool flash); void setStartDragCallback(tool_startdrag_callback_t cb) { mStartDragItemCallback = cb; } void setHandleDragCallback(tool_handledrag_callback_t cb) { mHandleDragItemCallback = cb; } @@ -195,6 +200,15 @@ public: LLToolBarButton* createButton(const LLCommandId& id); + typedef boost::signals2::signal<void (LLView* button)> button_signal_t; + boost::signals2::connection setButtonAddCallback(const button_signal_t::slot_type& cb); + boost::signals2::connection setButtonEnterCallback(const button_signal_t::slot_type& cb); + boost::signals2::connection setButtonLeaveCallback(const button_signal_t::slot_type& cb); + boost::signals2::connection setButtonRemoveCallback(const button_signal_t::slot_type& cb); + + void setTooltipButtonSuffix(const std::string& suffix) { mButtonTooltipSuffix = suffix; } + + LLToolBarEnums::SideType getSideType() const { return mSideType; } bool hasButtons() const { return !mButtons.empty(); } bool isModified() const { return mModified; } @@ -254,7 +268,14 @@ private: LLToolBarButton::Params mButtonParams[LLToolBarEnums::BTNTYPE_COUNT]; - LLHandle<class LLContextMenu> mPopupMenuHandle; + LLHandle<class LLContextMenu> mPopupMenuHandle; + + button_signal_t* mButtonAddSignal; + button_signal_t* mButtonEnterSignal; + button_signal_t* mButtonLeaveSignal; + button_signal_t* mButtonRemoveSignal; + + std::string mButtonTooltipSuffix; }; diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp index b555e92b96..8f1c1a2dd0 100644..100755 --- a/indra/mac_crash_logger/llcrashloggermac.cpp +++ b/indra/mac_crash_logger/llcrashloggermac.cpp @@ -249,5 +249,6 @@ void LLCrashLoggerMac::updateApplication(const std::string& message) bool LLCrashLoggerMac::cleanup() { + commonCleanup(); return true; } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 7288bf6933..bef775cdb8 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -241,6 +241,7 @@ set(viewer_SOURCE_FILES llfloatertopobjects.cpp llfloatertos.cpp llfloatertoybox.cpp + llfloatertranslationsettings.cpp llfloateruipreview.cpp llfloaterurlentry.cpp llfloatervoiceeffect.cpp @@ -807,6 +808,7 @@ set(viewer_HEADER_FILES llfloatertopobjects.h llfloatertos.h llfloatertoybox.h + llfloatertranslationsettings.h llfloateruipreview.h llfloaterurlentry.h llfloatervoiceeffect.h @@ -1987,12 +1989,19 @@ if (LL_TESTS) llmediadataclient.cpp lllogininstance.cpp llremoteparcelrequest.cpp + lltranslate.cpp llviewerhelputil.cpp llversioninfo.cpp llworldmap.cpp llworldmipmap.cpp ) + set_source_files_properties( + lltranslate.cpp + PROPERTIES + LL_TEST_ADDITIONAL_LIBRARIES "${JSONCPP_LIBRARIES}" + ) + ################################################## # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS ################################################## diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index b5f105439c..82b43432eb 100644 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -603,9 +603,11 @@ return Leave current function or event handler # Comment [one_sided_delimiter .8, .3, .15] // Comment:Non-functional commentary or disabled code +[two_sided_delimiter .8, .3, .15] +/* */ Comment:Non-functional commentary or disabled code # String literals -[two_sided_delimiter 0, .2, 0] +[double_quotation_marks 0, .2, 0] " String literal #functions are supplied by the program now diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 9f01674efe..5c0ea2f774 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11014,6 +11014,39 @@ <key>Value</key> <integer>0</integer> </map> + <key>TranslationService</key> + <map> + <key>Comment</key> + <string>Translation API to use. (google|bing)</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string>bing</string> + </map> + <key>GoogleTranslateAPIKey</key> + <map> + <key>Comment</key> + <string>Google Translate API key</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string></string> + </map> + <key>BingTranslateAPIKey</key> + <map> + <key>Comment</key> + <string>Bing AppID to use with the Microsoft Translator API</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string></string> + </map> <key>TutorialURL</key> <map> <key>Comment</key> @@ -13350,7 +13383,7 @@ <key>Comment</key> <string>Settings that are a applied per session (not saved).</string> <key>Persist</key> - <integer>1</integer> + <integer>0</integer> <key>Type</key> <string>String</string> <key>Value</key> @@ -13361,7 +13394,7 @@ <key>Comment</key> <string>User settings that are a applied per session (not saved).</string> <key>Persist</key> - <integer>1</integer> + <integer>0</integer> <key>Type</key> <string>String</string> <key>Value</key> diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index d8295ddb87..6ed4480cb1 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -33,6 +33,17 @@ <key>Value</key> <string /> </map> + <key>DisplayDestinationsOnInitialRun</key> + <map> + <key>Comment</key> + <string>Display the destinations guide when a user first launches FUI.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>LastInventoryInboxActivity</key> <map> <key>Comment</key> diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 5d6b10c047..6641c80b94 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -393,7 +393,26 @@ max_attachment_offset="2.0" visible_in_first_person="true" /> - + <attachment_point + id="39" + group="9" + pie_slice="1" + name="Neck" + joint="mNeck" + position="0 0 0" + rotation="0 0 0" + visible_in_first_person="true" /> + + <attachment_point + id="40" + group="9" + pie_slice="2" + name="Avatar Center" + joint="mRoot" + position="0 0 0" + rotation="0 0 0" + visible_in_first_person="true" /> + <param id="32" group="1" diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 9ad313a9a7..9ad313a9a7 100644..100755 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi Binary files differindex bd37e4ad4c..de7affe08a 100644 --- a/indra/newview/installers/windows/lang_ru.nsi +++ b/indra/newview/installers/windows/lang_ru.nsi diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi Binary files differindex 7b4ce358f3..5e7e3d797b 100644 --- a/indra/newview/installers/windows/lang_tr.nsi +++ b/indra/newview/installers/windows/lang_tr.nsi diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index ecfd101eeb..dc88c81d6a 100644..100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2825,48 +2825,15 @@ void LLAppViewer::initUpdater() void LLAppViewer::checkForCrash(void) { - #if LL_SEND_CRASH_REPORTS if (gLastExecEvent == LAST_EXEC_FROZE) { - llinfos << "Last execution froze, requesting to send crash report." << llendl; - // - // Pop up a freeze or crash warning dialog - // - S32 choice; - const S32 cb = gCrashSettings.getS32("CrashSubmitBehavior"); - if(cb == CRASH_BEHAVIOR_ASK) - { - std::ostringstream msg; - msg << LLTrans::getString("MBFrozenCrashed"); - std::string alert = LLTrans::getString("APP_NAME") + " " + LLTrans::getString("MBAlert"); - choice = OSMessageBox(msg.str(), - alert, - OSMB_YESNO); - } - else if(cb == CRASH_BEHAVIOR_NEVER_SEND) - { - choice = OSBTN_NO; - } - else - { - choice = OSBTN_YES; - } - - if (OSBTN_YES == choice) - { - llinfos << "Sending crash report." << llendl; + llinfos << "Last execution froze, sending a crash report." << llendl; - bool report_freeze = true; - handleCrashReporting(report_freeze); - } - else - { - llinfos << "Not sending crash report." << llendl; - } + bool report_freeze = true; + handleCrashReporting(report_freeze); } #endif // LL_SEND_CRASH_REPORTS - } // diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 98de418878..6c9058caf1 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -443,17 +443,17 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, { setLandingTab(dest); } - /* - * the condition dest == NULL can be satisfied not only in the case - * of dragging to the right from the last tab of the favbar. there is a - * small gap between each tab. if the user drags something exactly there - * then mLandingTab will be set to NULL and the dragged item will be pushed - * to the end of the favorites bar. this is incorrect behavior. that's why - * we need an additional check which excludes the case described previously - * making sure that the mouse pointer is beyond the last tab. - */ - else if (mLastTab && x >= mLastTab->getRect().mRight) + else if (mLastTab && (x >= mLastTab->getRect().mRight)) { + /* + * the condition dest == NULL can be satisfied not only in the case + * of dragging to the right from the last tab of the favbar. there is a + * small gap between each tab. if the user drags something exactly there + * then mLandingTab will be set to NULL and the dragged item will be pushed + * to the end of the favorites bar. this is incorrect behavior. that's why + * we need an additional check which excludes the case described previously + * making sure that the mouse pointer is beyond the last tab. + */ setLandingTab(NULL); } @@ -467,7 +467,6 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, if (drop) { handleExistingFavoriteDragAndDrop(x, y); - showDragMarker(FALSE); } } else @@ -490,7 +489,6 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, setLandingTab(NULL); } handleNewFavoriteDragAndDrop(item, favorites_id, x, y); - showDragMarker(FALSE); } } } @@ -504,20 +502,29 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, void LLFavoritesBarCtrl::handleExistingFavoriteDragAndDrop(S32 x, S32 y) { + // Identify the button hovered and the side to drop LLFavoriteLandmarkButton* dest = dynamic_cast<LLFavoriteLandmarkButton*>(mLandingTab); + bool insert_before = true; + if (!dest) + { + insert_before = false; + dest = dynamic_cast<LLFavoriteLandmarkButton*>(mLastTab); + } - // there is no need to handle if an item was dragged onto itself + // There is no need to handle if an item was dragged onto itself if (dest && dest->getLandmarkId() == mDragItemId) { return; } + // Insert the dragged item in the right place if (dest) { - LLInventoryModel::updateItemsOrder(mItems, mDragItemId, dest->getLandmarkId()); + LLInventoryModel::updateItemsOrder(mItems, mDragItemId, dest->getLandmarkId(), insert_before); } else { + // This can happen when the item list is empty mItems.push_back(gInventory.getItem(mDragItemId)); } @@ -534,22 +541,35 @@ void LLFavoritesBarCtrl::handleExistingFavoriteDragAndDrop(S32 x, S32 y) void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, const LLUUID& favorites_id, S32 x, S32 y) { - LLFavoriteLandmarkButton* dest = dynamic_cast<LLFavoriteLandmarkButton*>(mLandingTab); - - // there is no need to handle if an item was dragged onto itself + // Identify the button hovered and the side to drop + LLFavoriteLandmarkButton* dest = NULL; + bool insert_before = true; + if (!mItems.empty()) + { + dest = dynamic_cast<LLFavoriteLandmarkButton*>(mLandingTab); + if (!dest) + { + insert_before = false; + dest = dynamic_cast<LLFavoriteLandmarkButton*>(mLastTab); + } + } + + // There is no need to handle if an item was dragged onto itself if (dest && dest->getLandmarkId() == mDragItemId) { return; } - + LLPointer<LLViewerInventoryItem> viewer_item = new LLViewerInventoryItem(item); + // Insert the dragged item in the right place if (dest) { - insertBeforeItem(mItems, dest->getLandmarkId(), viewer_item); + insertItem(mItems, dest->getLandmarkId(), viewer_item, insert_before); } else { + // This can happen when the item list is empty mItems.push_back(viewer_item); } @@ -642,7 +662,7 @@ void LLFavoritesBarCtrl::draw() { // mouse pointer hovers over an existing tab LLRect rect = mLandingTab->getRect(); - mImageDragIndication->draw(rect.mLeft - w/2, rect.getHeight(), w, h); + mImageDragIndication->draw(rect.mLeft, rect.getHeight(), w, h); } else if (mLastTab) { @@ -650,6 +670,8 @@ void LLFavoritesBarCtrl::draw() LLRect rect = mLastTab->getRect(); mImageDragIndication->draw(rect.mRight, rect.getHeight(), w, h); } + // Once drawn, mark this false so we won't draw it again (unless we hit the favorite bar again) + mShowDragMarker = FALSE; } } @@ -721,7 +743,7 @@ void LLFavoritesBarCtrl::updateButtons() if (first_changed_item_index <= mItems.count()) { // Rebuild the buttons only - // child_list_t is a linked list, so safe to erase from the middle if we pre-incrament the iterator + // child_list_t is a linked list, so safe to erase from the middle if we pre-increment the iterator while (child_it != childs->end()) { @@ -810,9 +832,9 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem /** * WORKAROUND: - * there are some problem with displaying of fonts in buttons. - * Empty space (or ...) is displaying instead of last symbols, even though the width of the button is enough. - * Problem will gone, if we stretch out the button. For that reason I have to put additional 20 pixels. + * There are some problem with displaying of fonts in buttons. + * Empty space or ellipsis might be displayed instead of last symbols, even though the width of the button is enough. + * The problem disappears if we pad the button with 20 pixels. */ int required_width = mFont->getWidth(item->getName()) + 20; int width = required_width > def_button_width? def_button_width : required_width; @@ -840,7 +862,6 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem fav_btn->setRect(butt_rect); // change only left and save bottom fav_btn->setFont(mFont); - fav_btn->setName(item->getName()); fav_btn->setLabel(item->getName()); fav_btn->setToolTip(item->getName()); fav_btn->setCommitCallback(boost::bind(&LLFavoritesBarCtrl::onButtonClick, this, item->getUUID())); @@ -1298,25 +1319,24 @@ BOOL LLFavoritesBarCtrl::handleHover(S32 x, S32 y, MASK mask) LLUICtrl* LLFavoritesBarCtrl::findChildByLocalCoords(S32 x, S32 y) { - LLUICtrl* ctrl = 0; - S32 screenX, screenY; + LLUICtrl* ctrl = NULL; const child_list_t* list = getChildList(); - localPointToScreen(x, y, &screenX, &screenY); - - // look for a child which contains the point (screenX, screenY) in it's rectangle for (child_list_const_iter_t i = list->begin(); i != list->end(); ++i) { - LLRect rect; - localRectToScreen((*i)->getRect(), &rect); - - if (rect.pointInRect(screenX, screenY)) + // Look only for children that are favorite buttons + if ((*i)->getName() == "favorites_bar_btn") { - ctrl = dynamic_cast<LLUICtrl*>(*i); - break; + LLRect rect = (*i)->getRect(); + // We consider a button hit if the cursor is left of the right side + // This makes the hit a bit less finicky than hitting directly on the button itself + if (x <= rect.mRight) + { + ctrl = dynamic_cast<LLUICtrl*>(*i); + break; + } } } - return ctrl; } @@ -1337,29 +1357,28 @@ BOOL LLFavoritesBarCtrl::needToSaveItemsOrder(const LLInventoryModel::item_array return result; } -LLInventoryModel::item_array_t::iterator LLFavoritesBarCtrl::findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id) +void LLFavoritesBarCtrl::insertItem(LLInventoryModel::item_array_t& items, const LLUUID& dest_item_id, LLViewerInventoryItem* insertedItem, bool insert_before) { - LLInventoryModel::item_array_t::iterator result = items.end(); + // Get the iterator to the destination item + LLInventoryModel::item_array_t::iterator it_dest = LLInventoryModel::findItemIterByUUID(items, dest_item_id); + if (it_dest == items.end()) + return; - for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) + // Go to the next element if one wishes to insert after the dest element + if (!insert_before) { - if ((*i)->getUUID() == id) - { - result = i; - break; - } + ++it_dest; } - - return result; -} - -void LLFavoritesBarCtrl::insertBeforeItem(LLInventoryModel::item_array_t& items, const LLUUID& beforeItemId, LLViewerInventoryItem* insertedItem) -{ - LLViewerInventoryItem* beforeItem = gInventory.getItem(beforeItemId); - llassert(beforeItem); - if (beforeItem) + + // Insert the source item in the right place + if (it_dest != items.end()) + { + items.insert(it_dest, insertedItem); + } + else { - items.insert(findItemByUUID(items, beforeItem->getUUID()), insertedItem); + // Append to the list if it_dest reached the end + items.push_back(insertedItem); } } diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 1b11d6196e..2f75b3bb0e 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -130,7 +130,7 @@ private: * inserts an item identified by insertedItemId BEFORE an item identified by beforeItemId. * this function assumes that an item identified by insertedItemId doesn't exist in items array. */ - void insertBeforeItem(LLInventoryModel::item_array_t& items, const LLUUID& beforeItemId, LLViewerInventoryItem* insertedItem); + void insertItem(LLInventoryModel::item_array_t& items, const LLUUID& dest_item_id, LLViewerInventoryItem* insertedItem, bool insert_before); // finds an item by it's UUID in the items array LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id); diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 22f500ba15..83fb887d81 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -384,6 +384,9 @@ void LLFloaterAbout::setSupportText(const std::string& server_release_notes_url) // Render the LLSD from getInfo() as a format_map_t LLStringUtil::format_map_t args; + // allow the "Release Notes" URL label to be localized + args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes"); + for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap()); ii != iend; ++ii) { diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 5fdeb46daa..a333989e7e 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -345,6 +345,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) mCommitCallbackRegistrar.add("Pref.MaturitySettings", boost::bind(&LLFloaterPreference::onChangeMaturity, this)); mCommitCallbackRegistrar.add("Pref.BlockList", boost::bind(&LLFloaterPreference::onClickBlockList, this)); mCommitCallbackRegistrar.add("Pref.Proxy", boost::bind(&LLFloaterPreference::onClickProxySettings, this)); + mCommitCallbackRegistrar.add("Pref.TranslationSettings", boost::bind(&LLFloaterPreference::onClickTranslationSettings, this)); sSkin = gSavedSettings.getString("SkinCurrent"); @@ -599,6 +600,9 @@ void LLFloaterPreference::cancel() } // hide joystick pref floater LLFloaterReg::hideInstance("pref_joystick"); + + // hide translation settings floater + LLFloaterReg::hideInstance("prefs_translation"); // cancel hardware menu LLFloaterHardwareSettings* hardware_settings = LLFloaterReg::getTypedInstance<LLFloaterHardwareSettings>("prefs_hardware_settings"); @@ -1505,6 +1509,11 @@ void LLFloaterPreference::onClickProxySettings() LLFloaterReg::showInstance("prefs_proxy"); } +void LLFloaterPreference::onClickTranslationSettings() +{ + LLFloaterReg::showInstance("prefs_translation"); +} + void LLFloaterPreference::onClickActionChange() { mClickActionDirty = true; diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 5c74e9f60c..7ee3294478 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -156,6 +156,7 @@ public: void onChangeMaturity(); void onClickBlockList(); void onClickProxySettings(); + void onClickTranslationSettings(); void applyUIColor(LLUICtrl* ctrl, const LLSD& param); void getUIColor(LLUICtrl* ctrl, const LLSD& param); diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp index 66f644748e..f527937e8f 100644 --- a/indra/newview/llfloatertoybox.cpp +++ b/indra/newview/llfloatertoybox.cpp @@ -63,6 +63,7 @@ BOOL LLFloaterToybox::postBuild() mToolBar->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); mToolBar->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); mToolBar->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); + mToolBar->setButtonEnterCallback(boost::bind(&LLFloaterToybox::onToolBarButtonEnter,this,_1)); // // Sort commands by localized labels so they will appear alphabetized in all languages @@ -105,8 +106,8 @@ void LLFloaterToybox::draw() { const LLCommandId& id = *it; - const bool commandOnToolbar = gToolBarView->hasCommand(id); - mToolBar->enableCommand(id, !commandOnToolbar); + const bool command_not_present = (gToolBarView->hasCommand(id) == LLToolBarView::TOOLBAR_NONE); + mToolBar->enableCommand(id, command_not_present); } LLFloater::draw(); @@ -140,5 +141,30 @@ BOOL LLFloaterToybox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, return mToolBar->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); } +void LLFloaterToybox::onToolBarButtonEnter(LLView* button) +{ + std::string suffix = ""; + + LLCommandId commandId(button->getName()); + LLCommand* command = LLCommandManager::instance().getCommand(commandId); + + if (command) + { + S32 command_loc = gToolBarView->hasCommand(commandId); + + switch(command_loc) + { + case LLToolBarView::TOOLBAR_BOTTOM: suffix = LLTrans::getString("Toolbar_Bottom_Tooltip"); break; + case LLToolBarView::TOOLBAR_LEFT: suffix = LLTrans::getString("Toolbar_Left_Tooltip"); break; + case LLToolBarView::TOOLBAR_RIGHT: suffix = LLTrans::getString("Toolbar_Right_Tooltip"); break; + + default: + break; + } + } + + mToolBar->setTooltipButtonSuffix(suffix); +} + // eof diff --git a/indra/newview/llfloatertoybox.h b/indra/newview/llfloatertoybox.h index 62bf68680d..6f0275b8fe 100644 --- a/indra/newview/llfloatertoybox.h +++ b/indra/newview/llfloatertoybox.h @@ -52,6 +52,8 @@ public: protected: void onBtnRestoreDefaults(); + void onToolBarButtonEnter(LLView* button); + public: LLToolBar * mToolBar; }; diff --git a/indra/newview/llfloatertranslationsettings.cpp b/indra/newview/llfloatertranslationsettings.cpp new file mode 100644 index 0000000000..959edff713 --- /dev/null +++ b/indra/newview/llfloatertranslationsettings.cpp @@ -0,0 +1,296 @@ +/** + * @file llfloatertranslationsettings.cpp + * @brief Machine translation settings for chat + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloatertranslationsettings.h" + +// Viewer includes +#include "lltranslate.h" +#include "llviewercontrol.h" // for gSavedSettings + +// Linden library includes +#include "llbutton.h" +#include "llcheckboxctrl.h" +#include "llcombobox.h" +#include "llfloaterreg.h" +#include "lllineeditor.h" +#include "llnotificationsutil.h" +#include "llradiogroup.h" + +class EnteredKeyVerifier : public LLTranslate::KeyVerificationReceiver +{ +public: + EnteredKeyVerifier(LLTranslate::EService service, bool alert) + : LLTranslate::KeyVerificationReceiver(service) + , mAlert(alert) + { + } + +private: + /*virtual*/ void setVerificationStatus(bool ok) + { + LLFloaterTranslationSettings* floater = + LLFloaterReg::getTypedInstance<LLFloaterTranslationSettings>("prefs_translation"); + + if (!floater) + { + llwarns << "Cannot find translation settings floater" << llendl; + return; + } + + switch (getService()) + { + case LLTranslate::SERVICE_BING: + floater->setBingVerified(ok, mAlert); + break; + case LLTranslate::SERVICE_GOOGLE: + floater->setGoogleVerified(ok, mAlert); + break; + } + } + + bool mAlert; +}; + +LLFloaterTranslationSettings::LLFloaterTranslationSettings(const LLSD& key) +: LLFloater(key) +, mMachineTranslationCB(NULL) +, mLanguageCombo(NULL) +, mTranslationServiceRadioGroup(NULL) +, mBingAPIKeyEditor(NULL) +, mGoogleAPIKeyEditor(NULL) +, mBingVerifyBtn(NULL) +, mGoogleVerifyBtn(NULL) +, mOKBtn(NULL) +, mBingKeyVerified(false) +, mGoogleKeyVerified(false) +{ +} + +// virtual +BOOL LLFloaterTranslationSettings::postBuild() +{ + mMachineTranslationCB = getChild<LLCheckBoxCtrl>("translate_chat_checkbox"); + mLanguageCombo = getChild<LLComboBox>("translate_language_combo"); + mTranslationServiceRadioGroup = getChild<LLRadioGroup>("translation_service_rg"); + mBingAPIKeyEditor = getChild<LLLineEditor>("bing_api_key"); + mGoogleAPIKeyEditor = getChild<LLLineEditor>("google_api_key"); + mBingVerifyBtn = getChild<LLButton>("verify_bing_api_key_btn"); + mGoogleVerifyBtn = getChild<LLButton>("verify_google_api_key_btn"); + mOKBtn = getChild<LLButton>("ok_btn"); + + mMachineTranslationCB->setCommitCallback(boost::bind(&LLFloaterTranslationSettings::updateControlsEnabledState, this)); + mTranslationServiceRadioGroup->setCommitCallback(boost::bind(&LLFloaterTranslationSettings::updateControlsEnabledState, this)); + mOKBtn->setClickedCallback(boost::bind(&LLFloaterTranslationSettings::onBtnOK, this)); + getChild<LLButton>("cancel_btn")->setClickedCallback(boost::bind(&LLFloater::closeFloater, this, false)); + mBingVerifyBtn->setClickedCallback(boost::bind(&LLFloaterTranslationSettings::onBtnBingVerify, this)); + mGoogleVerifyBtn->setClickedCallback(boost::bind(&LLFloaterTranslationSettings::onBtnGoogleVerify, this)); + + mBingAPIKeyEditor->setFocusReceivedCallback(boost::bind(&LLFloaterTranslationSettings::onEditorFocused, this, _1)); + mBingAPIKeyEditor->setKeystrokeCallback(boost::bind(&LLFloaterTranslationSettings::onBingKeyEdited, this), NULL); + mGoogleAPIKeyEditor->setFocusReceivedCallback(boost::bind(&LLFloaterTranslationSettings::onEditorFocused, this, _1)); + mGoogleAPIKeyEditor->setKeystrokeCallback(boost::bind(&LLFloaterTranslationSettings::onGoogleKeyEdited, this), NULL); + + center(); + return TRUE; +} + +// virtual +void LLFloaterTranslationSettings::onOpen(const LLSD& key) +{ + mMachineTranslationCB->setValue(gSavedSettings.getBOOL("TranslateChat")); + mLanguageCombo->setSelectedByValue(gSavedSettings.getString("TranslateLanguage"), TRUE); + mTranslationServiceRadioGroup->setSelectedByValue(gSavedSettings.getString("TranslationService"), TRUE); + + std::string bing_key = gSavedSettings.getString("BingTranslateAPIKey"); + if (!bing_key.empty()) + { + mBingAPIKeyEditor->setText(bing_key); + mBingAPIKeyEditor->setTentative(FALSE); + verifyKey(LLTranslate::SERVICE_BING, bing_key, false); + } + else + { + mBingAPIKeyEditor->setTentative(TRUE); + mBingKeyVerified = FALSE; + } + + std::string google_key = gSavedSettings.getString("GoogleTranslateAPIKey"); + if (!google_key.empty()) + { + mGoogleAPIKeyEditor->setText(google_key); + mGoogleAPIKeyEditor->setTentative(FALSE); + verifyKey(LLTranslate::SERVICE_GOOGLE, google_key, false); + } + else + { + mGoogleAPIKeyEditor->setTentative(TRUE); + mGoogleKeyVerified = FALSE; + } + + updateControlsEnabledState(); +} + +void LLFloaterTranslationSettings::setBingVerified(bool ok, bool alert) +{ + if (alert) + { + showAlert(ok ? "bing_api_key_verified" : "bing_api_key_not_verified"); + } + + mBingKeyVerified = ok; + updateControlsEnabledState(); +} + +void LLFloaterTranslationSettings::setGoogleVerified(bool ok, bool alert) +{ + if (alert) + { + showAlert(ok ? "google_api_key_verified" : "google_api_key_not_verified"); + } + + mGoogleKeyVerified = ok; + updateControlsEnabledState(); +} + +std::string LLFloaterTranslationSettings::getSelectedService() const +{ + return mTranslationServiceRadioGroup->getSelectedValue().asString(); +} + +std::string LLFloaterTranslationSettings::getEnteredBingKey() const +{ + return mBingAPIKeyEditor->getTentative() ? LLStringUtil::null : mBingAPIKeyEditor->getText(); +} + +std::string LLFloaterTranslationSettings::getEnteredGoogleKey() const +{ + return mGoogleAPIKeyEditor->getTentative() ? LLStringUtil::null : mGoogleAPIKeyEditor->getText(); +} + +void LLFloaterTranslationSettings::showAlert(const std::string& msg_name) const +{ + LLSD args; + args["MESSAGE"] = getString(msg_name); + LLNotificationsUtil::add("GenericAlert", args); +} + +void LLFloaterTranslationSettings::updateControlsEnabledState() +{ + // Enable/disable controls based on the checkbox value. + bool on = mMachineTranslationCB->getValue().asBoolean(); + std::string service = getSelectedService(); + bool bing_selected = service == "bing"; + bool google_selected = service == "google"; + + mTranslationServiceRadioGroup->setEnabled(on); + mLanguageCombo->setEnabled(on); + + getChild<LLTextBox>("bing_api_key_label")->setEnabled(on); + mBingAPIKeyEditor->setEnabled(on); + + getChild<LLTextBox>("google_api_key_label")->setEnabled(on); + mGoogleAPIKeyEditor->setEnabled(on); + + mBingAPIKeyEditor->setEnabled(on && bing_selected); + mGoogleAPIKeyEditor->setEnabled(on && google_selected); + + mBingVerifyBtn->setEnabled(on && bing_selected && + !mBingKeyVerified && !getEnteredBingKey().empty()); + mGoogleVerifyBtn->setEnabled(on && google_selected && + !mGoogleKeyVerified && !getEnteredGoogleKey().empty()); + + mOKBtn->setEnabled( + !on || ( + (bing_selected && mBingKeyVerified) || + (google_selected && mGoogleKeyVerified) + )); +} + +void LLFloaterTranslationSettings::verifyKey(int service, const std::string& key, bool alert) +{ + LLTranslate::KeyVerificationReceiverPtr receiver = + new EnteredKeyVerifier((LLTranslate::EService) service, alert); + LLTranslate::verifyKey(receiver, key); +} + +void LLFloaterTranslationSettings::onEditorFocused(LLFocusableElement* control) +{ + LLLineEditor* editor = dynamic_cast<LLLineEditor*>(control); + if (editor && editor->hasTabStop()) // if enabled. getEnabled() doesn't work + { + if (editor->getTentative()) + { + editor->setText(LLStringUtil::null); + editor->setTentative(FALSE); + } + } +} + +void LLFloaterTranslationSettings::onBingKeyEdited() +{ + if (mBingAPIKeyEditor->isDirty()) + { + setBingVerified(false, false); + } +} + +void LLFloaterTranslationSettings::onGoogleKeyEdited() +{ + if (mGoogleAPIKeyEditor->isDirty()) + { + setGoogleVerified(false, false); + } +} + +void LLFloaterTranslationSettings::onBtnBingVerify() +{ + std::string key = getEnteredBingKey(); + if (!key.empty()) + { + verifyKey(LLTranslate::SERVICE_BING, key); + } +} + +void LLFloaterTranslationSettings::onBtnGoogleVerify() +{ + std::string key = getEnteredGoogleKey(); + if (!key.empty()) + { + verifyKey(LLTranslate::SERVICE_GOOGLE, key); + } +} + +void LLFloaterTranslationSettings::onBtnOK() +{ + gSavedSettings.setBOOL("TranslateChat", mMachineTranslationCB->getValue().asBoolean()); + gSavedSettings.setString("TranslateLanguage", mLanguageCombo->getSelectedValue().asString()); + gSavedSettings.setString("TranslationService", getSelectedService()); + gSavedSettings.setString("BingTranslateAPIKey", getEnteredBingKey()); + gSavedSettings.setString("GoogleTranslateAPIKey", getEnteredGoogleKey()); + closeFloater(false); +} diff --git a/indra/newview/llfloatertranslationsettings.h b/indra/newview/llfloatertranslationsettings.h new file mode 100644 index 0000000000..9b47ad72ed --- /dev/null +++ b/indra/newview/llfloatertranslationsettings.h @@ -0,0 +1,76 @@ +/** + * @file llfloatertranslationsettings.h + * @brief Machine translation settings for chat + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERTRANSLATIONSETTINGS_H +#define LL_LLFLOATERTRANSLATIONSETTINGS_H + +#include "llfloater.h" + +class LLButton; +class LLCheckBoxCtrl; +class LLComboBox; +class LLLineEditor; +class LLRadioGroup; + +class LLFloaterTranslationSettings : public LLFloater +{ +public: + LLFloaterTranslationSettings(const LLSD& key); + /*virtual*/ BOOL postBuild(); + /*virtual*/ void onOpen(const LLSD& key); + + void setBingVerified(bool ok, bool alert); + void setGoogleVerified(bool ok, bool alert); + +private: + std::string getSelectedService() const; + std::string getEnteredBingKey() const; + std::string getEnteredGoogleKey() const; + void showAlert(const std::string& msg_name) const; + void updateControlsEnabledState(); + void verifyKey(int service, const std::string& key, bool alert = true); + + void onEditorFocused(LLFocusableElement* control); + void onBingKeyEdited(); + void onGoogleKeyEdited(); + void onBtnBingVerify(); + void onBtnGoogleVerify(); + void onBtnOK(); + + LLCheckBoxCtrl* mMachineTranslationCB; + LLComboBox* mLanguageCombo; + LLLineEditor* mBingAPIKeyEditor; + LLLineEditor* mGoogleAPIKeyEditor; + LLRadioGroup* mTranslationServiceRadioGroup; + LLButton* mBingVerifyBtn; + LLButton* mGoogleVerifyBtn; + LLButton* mOKBtn; + + bool mBingKeyVerified; + bool mGoogleKeyVerified; +}; + +#endif // LL_LLFLOATERTRANSLATIONSETTINGS_H diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index fa3f546157..2b9c113a72 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -240,7 +240,7 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask) gViewerWindow->setup3DRender(); } -const F32 WIND_ALTITUDE = 180.f; +const F32 WIND_RELATIVE_ALTITUDE = 25.f; void LLWind::renderVectors() { @@ -254,13 +254,13 @@ void LLWind::renderVectors() gGL.pushMatrix(); LLVector3 origin_agent; origin_agent = gAgent.getPosAgentFromGlobal(mOriginGlobal); - gGL.translatef(origin_agent.mV[VX], origin_agent.mV[VY], WIND_ALTITUDE); + gGL.translatef(origin_agent.mV[VX], origin_agent.mV[VY], gAgent.getPositionAgent().mV[VZ] + WIND_RELATIVE_ALTITUDE); for (j = 0; j < mSize; j++) { for (i = 0; i < mSize; i++) { - x = mCloudVelX[i + j*mSize] * WIND_SCALE_HACK; - y = mCloudVelY[i + j*mSize] * WIND_SCALE_HACK; + x = mVelX[i + j*mSize] * WIND_SCALE_HACK; + y = mVelY[i + j*mSize] * WIND_SCALE_HACK; gGL.pushMatrix(); gGL.translatef((F32)i * region_width_meters/mSize, (F32)j * region_width_meters/mSize, 0.0); gGL.color3f(0,1,0); diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 33cb3a54a7..c8e48b0d42 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -47,12 +47,13 @@ LLIMFloaterContainer::LLIMFloaterContainer(const LLSD& seed) LLIMFloaterContainer::~LLIMFloaterContainer() { + mNewMessageConnection.disconnect(); LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::IM, this); } BOOL LLIMFloaterContainer::postBuild() { - LLIMModel::instance().mNewMsgSignal.connect(boost::bind(&LLIMFloaterContainer::onNewMessageReceived, this, _1)); + mNewMessageConnection = LLIMModel::instance().mNewMsgSignal.connect(boost::bind(&LLIMFloaterContainer::onNewMessageReceived, this, _1)); // Do not call base postBuild to not connect to mCloseSignal to not close all floaters via Close button // mTabContainer will be initialized in LLMultiFloater::addChild() return TRUE; diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h index 53dfcd78ff..892ecef48d 100644 --- a/indra/newview/llimfloatercontainer.h +++ b/indra/newview/llimfloatercontainer.h @@ -62,7 +62,7 @@ public: private: typedef std::map<LLUUID,LLFloater*> avatarID_panel_map_t; avatarID_panel_map_t mSessions; - + boost::signals2::connection mNewMessageConnection; void onNewMessageReceived(const LLSD& data); }; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 6e9baed5f2..ed4bb727cd 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1679,13 +1679,44 @@ BOOL LLCallDialog::postBuild() { if (!LLDockableFloater::postBuild() || !gToolBarView) return FALSE; + + dockToToolbarButton("speak"); + + return TRUE; +} + +void LLCallDialog::dockToToolbarButton(const std::string& toolbarButtonName) +{ + LLDockControl::DocAt dock_pos = getDockControlPos(toolbarButtonName); + LLView *anchor_panel = gToolBarView->findChildView(toolbarButtonName); - LLView *anchor_panel = gToolBarView->findChildView("speak"); - setDockControl(new LLDockControl(anchor_panel, this, getDockTongue(), LLDockControl::TOP)); + setUseTongue(anchor_panel); - return TRUE; + setDockControl(new LLDockControl(anchor_panel, this, getDockTongue(dock_pos), dock_pos)); } +LLDockControl::DocAt LLCallDialog::getDockControlPos(const std::string& toolbarButtonName) +{ + LLCommandId command_id(toolbarButtonName); + S32 toolbar_loc = gToolBarView->hasCommand(command_id); + + LLDockControl::DocAt doc_at = LLDockControl::TOP; + + switch (toolbar_loc) + { + case LLToolBarView::TOOLBAR_LEFT: + doc_at = LLDockControl::RIGHT; + break; + + case LLToolBarView::TOOLBAR_RIGHT: + doc_at = LLDockControl::LEFT; + break; + } + + return doc_at; +} + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLOutgoingCallDialog //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 93b604d36a..b1be26a169 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -491,14 +491,16 @@ class LLCallDialog : public LLDockableFloater { public: LLCallDialog(const LLSD& payload); - ~LLCallDialog(); + virtual ~LLCallDialog(); virtual BOOL postBuild(); + void dockToToolbarButton(const std::string& toolbarButtonName); + // check timer state /*virtual*/ void draw(); /*virtual*/ void onOpen(const LLSD& key); - + protected: // lifetime timer for a notification LLTimer mLifetimeTimer; @@ -519,6 +521,9 @@ protected: void setIcon(const LLSD& session_id, const LLSD& participant_id); LLSD mPayload; + +private: + LLDockControl::DocAt getDockControlPos(const std::string& toolbarButtonName); }; class LLIncomingCallDialog : public LLCallDialog diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index e86c427ae2..fb02fe0ff7 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -2879,40 +2879,62 @@ BOOL LLInventoryModel::getIsFirstTimeInViewer2() return sFirstTimeInViewer2; } -static LLInventoryModel::item_array_t::iterator find_item_iter_by_uuid(LLInventoryModel::item_array_t& items, const LLUUID& id) +LLInventoryModel::item_array_t::iterator LLInventoryModel::findItemIterByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id) { - LLInventoryModel::item_array_t::iterator result = items.end(); + LLInventoryModel::item_array_t::iterator curr_item = items.begin(); - for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) + while (curr_item != items.end()) { - if ((*i)->getUUID() == id) + if ((*curr_item)->getUUID() == id) { - result = i; break; } + ++curr_item; } - return result; + return curr_item; } // static // * @param[in, out] items - vector with items to be updated. It should be sorted in a right way // * before calling this method. // * @param src_item_id - LLUUID of inventory item to be moved in new position -// * @param dest_item_id - LLUUID of inventory item before which source item should be placed. -void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& src_item_id, const LLUUID& dest_item_id) +// * @param dest_item_id - LLUUID of inventory item before (or after) which source item should +// * be placed. +// * @param insert_before - bool indicating if src_item_id should be placed before or after +// * dest_item_id. Default is true. +void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& src_item_id, const LLUUID& dest_item_id, bool insert_before) { - LLInventoryModel::item_array_t::iterator it_src = find_item_iter_by_uuid(items, src_item_id); - LLInventoryModel::item_array_t::iterator it_dest = find_item_iter_by_uuid(items, dest_item_id); + LLInventoryModel::item_array_t::iterator it_src = findItemIterByUUID(items, src_item_id); + LLInventoryModel::item_array_t::iterator it_dest = findItemIterByUUID(items, dest_item_id); - if (it_src == items.end() || it_dest == items.end()) return; + // If one of the passed UUID is not in the item list, bail out + if ((it_src == items.end()) || (it_dest == items.end())) + return; + // Erase the source element from the list, keep a copy before erasing. LLViewerInventoryItem* src_item = *it_src; items.erase(it_src); - // target iterator can not be valid because the container was changed, so update it. - it_dest = find_item_iter_by_uuid(items, dest_item_id); - items.insert(it_dest, src_item); + // Note: Target iterator is not valid anymore because the container was changed, so update it. + it_dest = findItemIterByUUID(items, dest_item_id); + + // Go to the next element if one wishes to insert after the dest element + if (!insert_before) + { + ++it_dest; + } + + // Reinsert the source item in the right place + if (it_dest != items.end()) + { + items.insert(it_dest, src_item); + } + else + { + // Append to the list if it_dest reached the end + items.push_back(src_item); + } } //* @param[in] items vector of items in order to be saved. diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index e0e81f1006..a0fd455cf3 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -332,11 +332,16 @@ protected: //-------------------------------------------------------------------- public: // Changes items order by insertion of the item identified by src_item_id - // before the item identified by dest_item_id. Both items must exist in items array. - // Sorting is stored after method is finished. Only src_item_id is moved before dest_item_id. + // before (or after) the item identified by dest_item_id. Both items must exist in items array. + // Sorting is stored after method is finished. Only src_item_id is moved before (or after) dest_item_id. + // The parameter "insert_before" controls on which side of dest_item_id src_item_id gets rensinserted. static void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& src_item_id, - const LLUUID& dest_item_id); + const LLUUID& dest_item_id, + bool insert_before = true); + // Gets an iterator on an item vector knowing only the item UUID. + // Returns end() of the vector if not found. + static LLInventoryModel::item_array_t::iterator findItemIterByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id); // Saves current order of the passed items using inventory item sort field. // Resets 'items' sort fields and saves them on server. diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index a811332261..4674c85324 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -147,12 +147,12 @@ LLNearbyChatBar* LLNearbyChatBar::getInstance() void LLNearbyChatBar::showHistory() { + openFloater(); + if (!getChildView("nearby_chat")->getVisible()) { onToggleNearbyChatPanel(); } - - openFloater(); } void LLNearbyChatBar::draw() @@ -379,7 +379,10 @@ void LLNearbyChatBar::onToggleNearbyChatPanel() if (nearby_chat->getVisible()) { - mExpandedHeight = getRect().getHeight(); + if (!isMinimized()) + { + mExpandedHeight = getRect().getHeight(); + } setResizeLimits(getMinWidth(), COLLAPSED_HEIGHT); nearby_chat->setVisible(FALSE); reshape(getRect().getWidth(), COLLAPSED_HEIGHT); @@ -396,6 +399,15 @@ void LLNearbyChatBar::onToggleNearbyChatPanel() } } +void LLNearbyChatBar::setMinimized(BOOL b) +{ + if (b != LLFloater::isMinimized()) + { + LLFloater::setMinimized(b); + getChildView("nearby_chat")->setVisible(!b); + } +} + void LLNearbyChatBar::onChatBoxCommit() { if (mChatBox->getText().length() > 0) diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index bc00c1b9fc..e9734899b3 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -60,6 +60,7 @@ public: static void sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate); void showHistory(); + /*virtual*/void setMinimized(BOOL b); protected: static BOOL matchChatTypeTrigger(const std::string& in_str, std::string* out_str); diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 330a21ef65..c43c95a366 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -568,7 +568,8 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, // WARNING - not sChatWatcher->post(notification); - if( chat_bar->getVisible() && nearby_chat->getVisible() + if( !chat_bar->isMinimized() + && nearby_chat->isInVisibleChain() || ( chat_msg.mSourceType == CHAT_SOURCE_AGENT && gSavedSettings.getBOOL("UseChatBubbles") ) || !mChannel->getShowToasts() ) // to prevent toasts in Busy mode diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index d6c407d548..9944b51902 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -111,7 +111,7 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p) mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH)); mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND)); mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2)); - mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this)); + //mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this)); mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this)); mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this)); mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2)); diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index ffe864e220..3aa6a3b7e5 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -203,10 +203,9 @@ void LLSysWellWindow::reshapeWindow() { new_window_height = MAX_WINDOW_HEIGHT; } - S32 newY = curRect.mTop + new_window_height - curRect.getHeight(); - S32 newWidth = curRect.getWidth() < MIN_WINDOW_WIDTH ? MIN_WINDOW_WIDTH - : curRect.getWidth(); - curRect.setLeftTopAndSize(curRect.mLeft, newY, newWidth, new_window_height); + S32 newWidth = curRect.getWidth() < MIN_WINDOW_WIDTH ? MIN_WINDOW_WIDTH : curRect.getWidth(); + + curRect.setLeftTopAndSize(curRect.mLeft, curRect.mTop, newWidth, new_window_height); reshape(curRect.getWidth(), curRect.getHeight(), TRUE); setRect(curRect); } diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 5d2cebe031..ed1dfbb8cd 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -30,12 +30,16 @@ #include "lltoolbarview.h" #include "llappviewer.h" +#include "llbutton.h" +#include "llclipboard.h" #include "lldir.h" -#include "llxmlnode.h" +#include "lldockablefloater.h" +#include "lldockcontrol.h" +#include "llimview.h" +#include "lltransientfloatermgr.h" #include "lltoolbar.h" -#include "llbutton.h" #include "lltooldraganddrop.h" -#include "llclipboard.h" +#include "llxmlnode.h" #include "llagent.h" // HACK for destinations guide on startup #include "llfloaterreg.h" // HACK for destinations guide on startup @@ -68,13 +72,14 @@ LLToolBarView::ToolbarSet::ToolbarSet() LLToolBarView::LLToolBarView(const LLToolBarView::Params& p) : LLUICtrl(p), - mToolbarLeft(NULL), - mToolbarRight(NULL), - mToolbarBottom(NULL), mDragStarted(false), mDragToolbarButton(NULL), mToolbarsLoaded(false) { + for (S32 i = 0; i < TOOLBAR_COUNT; i++) + { + mToolbars[i] = NULL; + } } void LLToolBarView::initFromParams(const LLToolBarView::Params& p) @@ -90,46 +95,100 @@ LLToolBarView::~LLToolBarView() BOOL LLToolBarView::postBuild() { - mToolbarLeft = getChild<LLToolBar>("toolbar_left"); - mToolbarRight = getChild<LLToolBar>("toolbar_right"); - mToolbarBottom = getChild<LLToolBar>("toolbar_bottom"); + mToolbars[TOOLBAR_LEFT] = getChild<LLToolBar>("toolbar_left"); + mToolbars[TOOLBAR_RIGHT] = getChild<LLToolBar>("toolbar_right"); + mToolbars[TOOLBAR_BOTTOM] = getChild<LLToolBar>("toolbar_bottom"); - mToolbarLeft->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); - mToolbarLeft->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); - mToolbarLeft->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); - - mToolbarRight->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); - mToolbarRight->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); - mToolbarRight->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); - - mToolbarBottom->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); - mToolbarBottom->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); - mToolbarBottom->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); + for (int i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + { + mToolbars[i]->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); + mToolbars[i]->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); + mToolbars[i]->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); + mToolbars[i]->setButtonAddCallback(boost::bind(LLToolBarView::onToolBarButtonAdded,_1)); + mToolbars[i]->setButtonRemoveCallback(boost::bind(LLToolBarView::onToolBarButtonRemoved,_1)); + } LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&handleLoginToolbarSetup)); return TRUE; } -bool LLToolBarView::hasCommand(const LLCommandId& commandId) const +S32 LLToolBarView::hasCommand(const LLCommandId& commandId) const +{ + S32 command_location = TOOLBAR_NONE; + + for (S32 loc = TOOLBAR_FIRST; loc <= TOOLBAR_LAST; loc++) + { + if (mToolbars[loc]->hasCommand(commandId)) + { + command_location = loc; + break; + } + } + + return command_location; +} + +S32 LLToolBarView::addCommand(const LLCommandId& commandId, EToolBarLocation toolbar, int rank) +{ + int old_rank; + removeCommand(commandId, old_rank); + + S32 command_location = mToolbars[toolbar]->addCommand(commandId, rank); + + return command_location; +} + +S32 LLToolBarView::removeCommand(const LLCommandId& commandId, int& rank) { - bool has_command = false; - if (mToolbarLeft && !has_command) + S32 command_location = hasCommand(commandId); + rank = LLToolBar::RANK_NONE; + + if (command_location != TOOLBAR_NONE) { - has_command = mToolbarLeft->hasCommand(commandId); + rank = mToolbars[command_location]->removeCommand(commandId); } - if (mToolbarRight && !has_command) + + return command_location; +} + +S32 LLToolBarView::enableCommand(const LLCommandId& commandId, bool enabled) +{ + S32 command_location = hasCommand(commandId); + + if (command_location != TOOLBAR_NONE) + { + mToolbars[command_location]->enableCommand(commandId, enabled); + } + + return command_location; +} + +S32 LLToolBarView::stopCommandInProgress(const LLCommandId& commandId) +{ + S32 command_location = hasCommand(commandId); + + if (command_location != TOOLBAR_NONE) { - has_command = mToolbarRight->hasCommand(commandId); + mToolbars[command_location]->stopCommandInProgress(commandId); } - if (mToolbarBottom && !has_command) + + return command_location; +} + +S32 LLToolBarView::flashCommand(const LLCommandId& commandId, bool flash) +{ + S32 command_location = hasCommand(commandId); + + if (command_location != TOOLBAR_NONE) { - has_command = mToolbarBottom->hasCommand(commandId); + mToolbars[command_location]->flashCommand(commandId, flash); } - return has_command; + + return command_location; } -bool LLToolBarView::addCommand(const LLCommandId& command, LLToolBar* toolbar) +bool LLToolBarView::addCommandInternal(const LLCommandId& command, LLToolBar* toolbar) { LLCommandManager& mgr = LLCommandManager::instance(); if (mgr.getCommand(command)) @@ -147,6 +206,7 @@ bool LLToolBarView::addCommand(const LLCommandId& command, LLToolBar* toolbar) bool LLToolBarView::loadToolbars(bool force_default) { LLToolBarView::ToolbarSet toolbar_set; + bool err = false; // Load the toolbars.xml file std::string toolbar_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "toolbars.xml"); @@ -164,80 +224,90 @@ bool LLToolBarView::loadToolbars(bool force_default) if(!LLXMLNode::parseFile(toolbar_file, root, NULL)) { llwarns << "Unable to load toolbars from file: " << toolbar_file << llendl; - return false; + err = true; } - if(!root->hasName("toolbars")) + + if (!err && !root->hasName("toolbars")) { llwarns << toolbar_file << " is not a valid toolbars definition file" << llendl; - return false; + err = true; } // Parse the toolbar settings LLXUIParser parser; + if (!err) + { parser.readXUI(root, toolbar_set, toolbar_file); - if (!toolbar_set.validateBlock()) + } + if (!err && !toolbar_set.validateBlock()) { - llerrs << "Unable to validate toolbars from file: " << toolbar_file << llendl; - return false; + llwarns << "Unable to validate toolbars from file: " << toolbar_file << llendl; + err = true; } - // Clear the toolbars now before adding the loaded commands and settings - if (mToolbarLeft) + if (err) { - mToolbarLeft->clearCommandsList(); + if (force_default) + { + llerrs << "Unable to load toolbars from default file : " << toolbar_file << llendl; + return false; } - if (mToolbarRight) - { - mToolbarRight->clearCommandsList(); + // Try to load the default toolbars + return loadToolbars(true); } - if (mToolbarBottom) + + // Clear the toolbars now before adding the loaded commands and settings + for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) { - mToolbarBottom->clearCommandsList(); + if (mToolbars[i]) + { + mToolbars[i]->clearCommandsList(); + } } // Add commands to each toolbar - if (toolbar_set.left_toolbar.isProvided() && mToolbarLeft) + if (toolbar_set.left_toolbar.isProvided() && mToolbars[TOOLBAR_LEFT]) { if (toolbar_set.left_toolbar.button_display_mode.isProvided()) { LLToolBarEnums::ButtonType button_type = toolbar_set.left_toolbar.button_display_mode; - mToolbarLeft->setButtonType(button_type); + mToolbars[TOOLBAR_LEFT]->setButtonType(button_type); } - BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.left_toolbar.commands) + BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.left_toolbar.commands) { - if (addCommand(LLCommandId(command_name_param), mToolbarLeft) == false) + if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_LEFT])) { - llwarns << "Error adding command '" << command_name_param.name() << "' to left toolbar." << llendl; + llwarns << "Error adding command '" << command_params.name() << "' to left toolbar." << llendl; } } } - if (toolbar_set.right_toolbar.isProvided() && mToolbarRight) + if (toolbar_set.right_toolbar.isProvided() && mToolbars[TOOLBAR_RIGHT]) { if (toolbar_set.right_toolbar.button_display_mode.isProvided()) { LLToolBarEnums::ButtonType button_type = toolbar_set.right_toolbar.button_display_mode; - mToolbarRight->setButtonType(button_type); + mToolbars[TOOLBAR_RIGHT]->setButtonType(button_type); } - BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.right_toolbar.commands) + BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.right_toolbar.commands) { - if (addCommand(LLCommandId(command_name_param), mToolbarRight) == false) + if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_RIGHT])) { - llwarns << "Error adding command '" << command_name_param.name() << "' to right toolbar." << llendl; + llwarns << "Error adding command '" << command_params.name() << "' to right toolbar." << llendl; } } } - if (toolbar_set.bottom_toolbar.isProvided() && mToolbarBottom) + if (toolbar_set.bottom_toolbar.isProvided() && mToolbars[TOOLBAR_BOTTOM]) { if (toolbar_set.bottom_toolbar.button_display_mode.isProvided()) { LLToolBarEnums::ButtonType button_type = toolbar_set.bottom_toolbar.button_display_mode; - mToolbarBottom->setButtonType(button_type); + mToolbars[TOOLBAR_BOTTOM]->setButtonType(button_type); } - BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.bottom_toolbar.commands) + BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.bottom_toolbar.commands) { - if (addCommand(LLCommandId(command_name_param), mToolbarBottom) == false) + if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_BOTTOM])) { - llwarns << "Error adding command '" << command_name_param.name() << "' to bottom toolbar." << llendl; + llwarns << "Error adding command '" << command_params.name() << "' to bottom toolbar." << llendl; } } } @@ -269,20 +339,20 @@ void LLToolBarView::saveToolbars() const // Build the parameter tree from the toolbar data LLToolBarView::ToolbarSet toolbar_set; - if (mToolbarLeft) + if (mToolbars[TOOLBAR_LEFT]) { - toolbar_set.left_toolbar.button_display_mode = mToolbarLeft->getButtonType(); - addToToolset(mToolbarLeft->getCommandsList(),toolbar_set.left_toolbar); + toolbar_set.left_toolbar.button_display_mode = mToolbars[TOOLBAR_LEFT]->getButtonType(); + addToToolset(mToolbars[TOOLBAR_LEFT]->getCommandsList(), toolbar_set.left_toolbar); } - if (mToolbarRight) + if (mToolbars[TOOLBAR_RIGHT]) { - toolbar_set.right_toolbar.button_display_mode = mToolbarRight->getButtonType(); - addToToolset(mToolbarRight->getCommandsList(),toolbar_set.right_toolbar); + toolbar_set.right_toolbar.button_display_mode = mToolbars[TOOLBAR_RIGHT]->getButtonType(); + addToToolset(mToolbars[TOOLBAR_RIGHT]->getCommandsList(), toolbar_set.right_toolbar); } - if (mToolbarBottom) + if (mToolbars[TOOLBAR_BOTTOM]) { - toolbar_set.bottom_toolbar.button_display_mode = mToolbarBottom->getButtonType(); - addToToolset(mToolbarBottom->getCommandsList(),toolbar_set.bottom_toolbar); + toolbar_set.bottom_toolbar.button_display_mode = mToolbars[TOOLBAR_BOTTOM]->getButtonType(); + addToToolset(mToolbars[TOOLBAR_BOTTOM]->getCommandsList(), toolbar_set.bottom_toolbar); } // Serialize the parameter tree @@ -323,35 +393,122 @@ void LLToolBarView::addToToolset(command_id_list_t& command_list, Toolbar& toolb } } -void LLToolBarView::draw() +void LLToolBarView::onToolBarButtonAdded(LLView* button) { - //LLPanel* sizer_left = getChild<LLPanel>("sizer_left"); + llassert(button); - LLRect bottom_rect, left_rect, right_rect; + if (button->getName() == "speak") + { + // Add the "Speak" button as a control view in LLTransientFloaterMgr + // to prevent hiding the transient IM floater upon pressing "Speak". + LLTransientFloaterMgr::getInstance()->addControlView(button); + + // Redock incoming and/or outgoing call windows, if applicable + + LLFloater* incoming_floater = LLFloaterReg::getLastFloaterInGroup("incoming_call"); + LLFloater* outgoing_floater = LLFloaterReg::getLastFloaterInGroup("outgoing_call"); + + if (incoming_floater && incoming_floater->isShown()) + { + LLCallDialog* incoming = dynamic_cast<LLCallDialog *>(incoming_floater); + llassert(incoming); + + LLDockControl* dock_control = incoming->getDockControl(); + if (dock_control->getDock() == NULL) + { + incoming->dockToToolbarButton("speak"); + } + } + + if (outgoing_floater && outgoing_floater->isShown()) + { + LLCallDialog* outgoing = dynamic_cast<LLCallDialog *>(outgoing_floater); + llassert(outgoing); + + LLDockControl* dock_control = outgoing->getDockControl(); + if (dock_control->getDock() == NULL) + { + outgoing->dockToToolbarButton("speak"); + } + } + } + else if (button->getName() == "voice") + { + // Add the "Voice controls" button as a control view in LLTransientFloaterMgr + // to prevent hiding the transient IM floater upon pressing "Voice controls". + LLTransientFloaterMgr::getInstance()->addControlView(button); + } +} - if (mToolbarBottom) +void LLToolBarView::onToolBarButtonRemoved(LLView* button) +{ + llassert(button); + + if (button->getName() == "speak") { - mToolbarBottom->getParent()->reshape(mToolbarBottom->getParent()->getRect().getWidth(), mToolbarBottom->getRect().getHeight()); - mToolbarBottom->localRectToOtherView(mToolbarBottom->getLocalRect(), &bottom_rect, this); + LLTransientFloaterMgr::getInstance()->removeControlView(button); + + // Undock incoming and/or outgoing call windows + + LLFloater* incoming_floater = LLFloaterReg::getLastFloaterInGroup("incoming_call"); + LLFloater* outgoing_floater = LLFloaterReg::getLastFloaterInGroup("outgoing_call"); + + if (incoming_floater && incoming_floater->isShown()) + { + LLDockableFloater* incoming = dynamic_cast<LLDockableFloater *>(incoming_floater); + llassert(incoming); + + LLDockControl* dock_control = incoming->getDockControl(); + dock_control->setDock(NULL); + } + + if (outgoing_floater && outgoing_floater->isShown()) + { + LLDockableFloater* outgoing = dynamic_cast<LLDockableFloater *>(outgoing_floater); + llassert(outgoing); + + LLDockControl* dock_control = outgoing->getDockControl(); + dock_control->setDock(NULL); + } } - if (mToolbarLeft) + else if (button->getName() == "voice") { - mToolbarLeft->getParent()->reshape(mToolbarLeft->getRect().getWidth(), mToolbarLeft->getParent()->getRect().getHeight()); - mToolbarLeft->localRectToOtherView(mToolbarLeft->getLocalRect(), &left_rect, this); + LLTransientFloaterMgr::getInstance()->removeControlView(button); } - if (mToolbarRight) +} + +void LLToolBarView::draw() +{ + LLRect toolbar_rects[TOOLBAR_COUNT]; + + for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) { - mToolbarRight->getParent()->reshape(mToolbarRight->getRect().getWidth(), mToolbarRight->getParent()->getRect().getHeight()); - mToolbarRight->localRectToOtherView(mToolbarRight->getLocalRect(), &right_rect, this); + if (mToolbars[i]) + { + LLLayoutStack::ELayoutOrientation orientation = LLToolBarEnums::getOrientation(mToolbars[i]->getSideType()); + + if (orientation == LLLayoutStack::HORIZONTAL) + { + mToolbars[i]->getParent()->reshape(mToolbars[i]->getParent()->getRect().getWidth(), mToolbars[i]->getRect().getHeight()); + } + else + { + mToolbars[i]->getParent()->reshape(mToolbars[i]->getRect().getWidth(), mToolbars[i]->getParent()->getRect().getHeight()); + } + + mToolbars[i]->localRectToOtherView(mToolbars[i]->getLocalRect(), &toolbar_rects[i], this); + } } // Draw drop zones if drop of a tool is active if (isToolDragged()) { LLColor4 drop_color = LLUIColorTable::instance().getColor( "ToolbarDropZoneColor" ); - gl_rect_2d(bottom_rect, drop_color, TRUE); - gl_rect_2d(left_rect, drop_color, TRUE); - gl_rect_2d(right_rect, drop_color, TRUE); + + for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + { + gl_rect_2d(toolbar_rects[i], drop_color, TRUE); + } } LLUICtrl::draw(); @@ -363,9 +520,9 @@ void LLToolBarView::draw() // ---------------------------------------- -void LLToolBarView::startDragTool(S32 x, S32 y, LLToolBarButton* button) +void LLToolBarView::startDragTool(S32 x, S32 y, LLToolBarButton* toolbarButton) { - resetDragTool(button); + resetDragTool(toolbarButton); // Flag the tool dragging but don't start it yet LLToolDragAndDrop::getInstance()->setDragStart( x, y ); @@ -391,9 +548,7 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp // Second, stop the command if it is in progress and requires stopping! LLCommandId command_id = LLCommandId(uuid); - gToolBarView->mToolbarLeft->stopCommandInProgress(command_id); - gToolBarView->mToolbarRight->stopCommandInProgress(command_id); - gToolBarView->mToolbarBottom->stopCommandInProgress(command_id); + gToolBarView->stopCommandInProgress(command_id); gToolBarView->mDragStarted = true; return TRUE; @@ -424,10 +579,10 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t { // Suppress the command from the toolbars (including the one it's dropped in, // this will handle move position). - bool command_present = gToolBarView->hasCommand(command_id); + S32 old_toolbar_loc = gToolBarView->hasCommand(command_id); LLToolBar* old_toolbar = NULL; - if (command_present) + if (old_toolbar_loc != TOOLBAR_NONE) { llassert(gToolBarView->mDragToolbarButton); old_toolbar = gToolBarView->mDragToolbarButton->getParentByType<LLToolBar>(); @@ -437,9 +592,8 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t } else { - gToolBarView->mToolbarBottom->removeCommand(command_id); - gToolBarView->mToolbarLeft->removeCommand(command_id); - gToolBarView->mToolbarRight->removeCommand(command_id); + int old_rank = LLToolBar::RANK_NONE; + gToolBarView->removeCommand(command_id, old_rank); } } @@ -463,27 +617,29 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t return handled; } -void LLToolBarView::resetDragTool(LLToolBarButton* button) +void LLToolBarView::resetDragTool(LLToolBarButton* toolbarButton) { // Clear the saved command, toolbar and rank gToolBarView->mDragStarted = false; - gToolBarView->mDragToolbarButton = button; + gToolBarView->mDragToolbarButton = toolbarButton; } void LLToolBarView::setToolBarsVisible(bool visible) { - mToolbarBottom->getParent()->setVisible(visible); - mToolbarLeft->getParent()->setVisible(visible); - mToolbarRight->getParent()->setVisible(visible); + for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + { + mToolbars[i]->getParent()->setVisible(visible); + } } bool LLToolBarView::isModified() const { bool modified = false; - modified |= mToolbarBottom->isModified(); - modified |= mToolbarLeft->isModified(); - modified |= mToolbarRight->isModified(); + for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + { + modified |= mToolbars[i]->isModified(); + } return modified; } @@ -496,9 +652,11 @@ bool LLToolBarView::isModified() const void handleLoginToolbarSetup() { // Open the destinations guide by default on first login, per Rhett - if (gSavedSettings.getBOOL("FirstLoginThisInstall") || gAgent.isFirstLogin()) + if (gSavedPerAccountSettings.getBOOL("DisplayDestinationsOnInitialRun") || gAgent.isFirstLogin()) { LLFloaterReg::showInstance("destinations"); + + gSavedPerAccountSettings.setBOOL("DisplayDestinationsOnInitialRun", FALSE); } } diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h index 2b26db3802..4307d10258 100644 --- a/indra/newview/lltoolbarview.h +++ b/indra/newview/lltoolbarview.h @@ -39,6 +39,19 @@ class LLUICtrlFactory; class LLToolBarView : public LLUICtrl { public: + typedef enum + { + TOOLBAR_NONE = 0, + TOOLBAR_LEFT, + TOOLBAR_RIGHT, + TOOLBAR_BOTTOM, + + TOOLBAR_COUNT, + + TOOLBAR_FIRST = TOOLBAR_LEFT, + TOOLBAR_LAST = TOOLBAR_BOTTOM, + } EToolBarLocation; + // Xui structure of the toolbar panel struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> {}; @@ -52,6 +65,7 @@ public: { Mandatory<LLToolBarEnums::ButtonType> button_display_mode; Multiple<LLCommandId::Params> commands; + Toolbar(); }; struct ToolbarSet : public LLInitParam::Block<ToolbarSet> @@ -59,6 +73,7 @@ public: Optional<Toolbar> left_toolbar, right_toolbar, bottom_toolbar; + ToolbarSet(); }; @@ -66,9 +81,16 @@ public: virtual ~LLToolBarView(); virtual BOOL postBuild(); virtual void draw(); + // Toolbar view interface with the rest of the world - // Checks if the commandId is being used somewhere in one of the toolbars - bool hasCommand(const LLCommandId& commandId) const; + // Checks if the commandId is being used somewhere in one of the toolbars, returns EToolBarLocation + S32 hasCommand(const LLCommandId& commandId) const; + S32 addCommand(const LLCommandId& commandId, EToolBarLocation toolbar, int rank = LLToolBar::RANK_NONE); + S32 removeCommand(const LLCommandId& commandId, int& rank); // Sets the rank the removed command was at, RANK_NONE if not found + S32 enableCommand(const LLCommandId& commandId, bool enabled); + S32 stopCommandInProgress(const LLCommandId& commandId); + S32 flashCommand(const LLCommandId& commandId, bool flash); + // Loads the toolbars from the existing user or default settings bool loadToolbars(bool force_default = false); // return false if load fails @@ -76,10 +98,10 @@ public: static bool loadDefaultToolbars(); - static void startDragTool(S32 x, S32 y, LLToolBarButton* button); + static void startDragTool(S32 x, S32 y, LLToolBarButton* toolbarButton); static BOOL handleDragTool(S32 x, S32 y, const LLUUID& uuid, LLAssetType::EType type); static BOOL handleDropTool(void* cargo_data, S32 x, S32 y, LLToolBar* toolbar); - static void resetDragTool(LLToolBarButton* button); + static void resetDragTool(LLToolBarButton* toolbarButton); bool isModified() const; @@ -91,13 +113,14 @@ protected: private: void saveToolbars() const; - bool addCommand(const LLCommandId& commandId, LLToolBar* toolbar); + bool addCommandInternal(const LLCommandId& commandId, LLToolBar* toolbar); void addToToolset(command_id_list_t& command_list, Toolbar& toolbar) const; + static void onToolBarButtonAdded(LLView* button); + static void onToolBarButtonRemoved(LLView* button); + // Pointers to the toolbars handled by the toolbar view - LLToolBar* mToolbarLeft; - LLToolBar* mToolbarRight; - LLToolBar* mToolbarBottom; + LLToolBar* mToolbars[TOOLBAR_COUNT]; bool mToolbarsLoaded; bool mDragStarted; diff --git a/indra/newview/lltransientfloatermgr.cpp b/indra/newview/lltransientfloatermgr.cpp index c648a6a28a..3d68c10489 100644 --- a/indra/newview/lltransientfloatermgr.cpp +++ b/indra/newview/lltransientfloatermgr.cpp @@ -42,9 +42,9 @@ LLTransientFloaterMgr::LLTransientFloaterMgr() &LLTransientFloaterMgr::leftMouseClickCallback, this, _2, _3, _4)); } - mGroupControls.insert(std::pair<ETransientGroup, std::set<LLView*> >(GLOBAL, std::set<LLView*>())); - mGroupControls.insert(std::pair<ETransientGroup, std::set<LLView*> >(DOCKED, std::set<LLView*>())); - mGroupControls.insert(std::pair<ETransientGroup, std::set<LLView*> >(IM, std::set<LLView*>())); + mGroupControls.insert(std::pair<ETransientGroup, controls_set_t >(GLOBAL, controls_set_t())); + mGroupControls.insert(std::pair<ETransientGroup, controls_set_t >(DOCKED, controls_set_t())); + mGroupControls.insert(std::pair<ETransientGroup, controls_set_t >(IM, controls_set_t())); } void LLTransientFloaterMgr::registerTransientFloater(LLTransientFloater* floater) @@ -59,12 +59,16 @@ void LLTransientFloaterMgr::unregisterTransientFloater(LLTransientFloater* float void LLTransientFloaterMgr::addControlView(ETransientGroup group, LLView* view) { - mGroupControls.find(group)->second.insert(view); + if (!view) return; + + mGroupControls.find(group)->second.insert(view->getHandle()); } void LLTransientFloaterMgr::removeControlView(ETransientGroup group, LLView* view) { - mGroupControls.find(group)->second.erase(view); + if (!view) return; + + mGroupControls.find(group)->second.erase(view->getHandle()); } void LLTransientFloaterMgr::addControlView(LLView* view) @@ -89,7 +93,7 @@ void LLTransientFloaterMgr::hideTransientFloaters(S32 x, S32 y) { ETransientGroup group = floater->getGroup(); - bool hide = isControlClicked(mGroupControls.find(group)->second, x, y); + bool hide = isControlClicked(group, mGroupControls.find(group)->second, x, y); if (hide) { floater->setTransientVisible(FALSE); @@ -98,13 +102,25 @@ void LLTransientFloaterMgr::hideTransientFloaters(S32 x, S32 y) } } -bool LLTransientFloaterMgr::isControlClicked(std::set<LLView*>& set, S32 x, S32 y) +bool LLTransientFloaterMgr::isControlClicked(ETransientGroup group, controls_set_t& set, S32 x, S32 y) { + std::list< LLHandle<LLView> > dead_handles; + bool res = true; for (controls_set_t::iterator it = set.begin(); it != set.end(); it++) { - LLView* control_view = *it; + LLView* control_view = NULL; + + LLHandle<LLView> handle = *it; + if (handle.isDead()) + { + dead_handles.push_back(handle); + continue; + } + + control_view = handle.get(); + if (!control_view->getVisible()) { continue; @@ -118,6 +134,13 @@ bool LLTransientFloaterMgr::isControlClicked(std::set<LLView*>& set, S32 x, S32 break; } } + + for (std::list< LLHandle<LLView> >::iterator it = dead_handles.begin(); it != dead_handles.end(); ++it) + { + LLHandle<LLView> handle = *it; + mGroupControls.find(group)->second.erase(handle); + } + return res; } @@ -130,8 +153,8 @@ void LLTransientFloaterMgr::leftMouseClickCallback(S32 x, S32 y, return; } - bool hide = isControlClicked(mGroupControls.find(DOCKED)->second, x, y) - && isControlClicked(mGroupControls.find(GLOBAL)->second, x, y); + bool hide = isControlClicked(DOCKED, mGroupControls.find(DOCKED)->second, x, y) + && isControlClicked(GLOBAL, mGroupControls.find(GLOBAL)->second, x, y); if (hide) { hideTransientFloaters(x, y); diff --git a/indra/newview/lltransientfloatermgr.h b/indra/newview/lltransientfloatermgr.h index 2919244121..b4611c8c87 100644 --- a/indra/newview/lltransientfloatermgr.h +++ b/indra/newview/lltransientfloatermgr.h @@ -56,14 +56,15 @@ public: void removeControlView(LLView* view); private: + typedef std::set<LLHandle<LLView> > controls_set_t; + typedef std::map<ETransientGroup, controls_set_t > group_controls_t; + void hideTransientFloaters(S32 x, S32 y); void leftMouseClickCallback(S32 x, S32 y, MASK mask); - bool isControlClicked(std::set<LLView*>& set, S32 x, S32 y); -private: + bool isControlClicked(ETransientGroup group, controls_set_t& set, S32 x, S32 y); + std::set<LLTransientFloater*> mTransSet; - typedef std::set<LLView*> controls_set_t; - typedef std::map<ETransientGroup, std::set<LLView*> > group_controls_t; group_controls_t mGroupControls; }; diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index 2f60b6b90b..7eb54271f4 100644 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -31,82 +31,294 @@ #include <curl/curl.h> #include "llbufferstream.h" +#include "lltrans.h" #include "llui.h" #include "llversioninfo.h" #include "llviewercontrol.h" #include "reader.h" -// These two are concatenated with the language specifiers to form a complete Google Translate URL -const char* LLTranslate::m_GoogleURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q="; -const char* LLTranslate::m_GoogleLangSpec = "&langpair="; -float LLTranslate::m_GoogleTimeout = 5; +// virtual +void LLGoogleTranslationHandler::getTranslateURL( + std::string &url, + const std::string &from_lang, + const std::string &to_lang, + const std::string &text) const +{ + url = std::string("https://www.googleapis.com/language/translate/v2?key=") + + getAPIKey() + "&q=" + LLURI::escape(text) + "&target=" + to_lang; + if (!from_lang.empty()) + { + url += "&source=" + from_lang; + } +} -LLSD LLTranslate::m_Header; -// These constants are for the GET header. -const char* LLTranslate::m_AcceptHeader = "Accept"; -const char* LLTranslate::m_AcceptType = "text/plain"; -const char* LLTranslate::m_AgentHeader = "User-Agent"; +// virtual +void LLGoogleTranslationHandler::getKeyVerificationURL( + std::string& url, + const std::string& key) const +{ + url = std::string("https://www.googleapis.com/language/translate/v2/languages?key=") + + key + "&target=en"; +} -// These constants are in the JSON returned from Google -const char* LLTranslate::m_GoogleData = "responseData"; -const char* LLTranslate::m_GoogleTranslation = "translatedText"; -const char* LLTranslate::m_GoogleLanguage = "detectedSourceLanguage"; +// virtual +bool LLGoogleTranslationHandler::parseResponse( + int& status, + const std::string& body, + std::string& translation, + std::string& detected_lang, + std::string& err_msg) const +{ + Json::Value root; + Json::Reader reader; -//static -void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std::string &from_lang, const std::string &to_lang, const std::string &mesg) + if (!reader.parse(body, root)) + { + err_msg = reader.getFormatedErrorMessages(); + return false; + } + + if (!root.isObject()) // empty response? should not happen + { + return false; + } + + if (status != STATUS_OK) + { + // Request failed. Extract error message from the response. + parseErrorResponse(root, status, err_msg); + return false; + } + + // Request succeeded, extract translation from the response. + return parseTranslation(root, translation, detected_lang); +} + +// static +void LLGoogleTranslationHandler::parseErrorResponse( + const Json::Value& root, + int& status, + std::string& err_msg) { - std::string url; - getTranslateUrl(url, from_lang, to_lang, mesg); + const Json::Value& error = root.get("error", 0); + if (!error.isObject() || !error.isMember("message") || !error.isMember("code")) + { + return; + } - std::string user_agent = llformat("%s %d.%d.%d (%d)", - LLVersionInfo::getChannel().c_str(), - LLVersionInfo::getMajor(), - LLVersionInfo::getMinor(), - LLVersionInfo::getPatch(), - LLVersionInfo::getBuild()); + err_msg = error["message"].asString(); + status = error["code"].asInt(); +} - if (!m_Header.size()) +// static +bool LLGoogleTranslationHandler::parseTranslation( + const Json::Value& root, + std::string& translation, + std::string& detected_lang) +{ + // JsonCpp is prone to aborting the program on failed assertions, + // so be super-careful and verify the response format. + const Json::Value& data = root.get("data", 0); + if (!data.isObject() || !data.isMember("translations")) { - m_Header.insert(m_AcceptHeader, LLSD(m_AcceptType)); - m_Header.insert(m_AgentHeader, LLSD(user_agent)); + return false; + } + + const Json::Value& translations = data["translations"]; + if (!translations.isArray() || translations.size() == 0) + { + return false; + } + + const Json::Value& first = translations[0U]; + if (!first.isObject() || !first.isMember("translatedText")) + { + return false; } - LLHTTPClient::get(url, result, m_Header, m_GoogleTimeout); + translation = first["translatedText"].asString(); + detected_lang = first.get("detectedSourceLanguage", "").asString(); + return true; } -//static -void LLTranslate::getTranslateUrl(std::string &translate_url, const std::string &from_lang, const std::string &to_lang, const std::string &mesg) +// static +std::string LLGoogleTranslationHandler::getAPIKey() +{ + return gSavedSettings.getString("GoogleTranslateAPIKey"); +} + +// virtual +void LLBingTranslationHandler::getTranslateURL( + std::string &url, + const std::string &from_lang, + const std::string &to_lang, + const std::string &text) const { - char * curl_str = curl_escape(mesg.c_str(), mesg.size()); - std::string const escaped_mesg(curl_str); - curl_free(curl_str); + url = std::string("http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=") + + getAPIKey() + "&text=" + LLURI::escape(text) + "&to=" + to_lang; + if (!from_lang.empty()) + { + url += "&from=" + from_lang; + } +} - translate_url = m_GoogleURL - + escaped_mesg + m_GoogleLangSpec - + from_lang // 'from' language; empty string for auto - + "%7C" // | - + to_lang; // 'to' language +// virtual +void LLBingTranslationHandler::getKeyVerificationURL( + std::string& url, + const std::string& key) const +{ + url = std::string("http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForTranslate?appId=") + + key; } -//static -bool LLTranslate::parseGoogleTranslate(const std::string& body, std::string &translation, std::string &detected_language) +// virtual +bool LLBingTranslationHandler::parseResponse( + int& status, + const std::string& body, + std::string& translation, + std::string& detected_lang, + std::string& err_msg) const { - Json::Value root; - Json::Reader reader; - - bool success = reader.parse(body, root); - if (!success) + if (status != STATUS_OK) { - LL_WARNS("Translate") << "Non valid response from Google Translate API: '" << reader.getFormatedErrorMessages() << "'" << LL_ENDL; + static const std::string MSG_BEGIN_MARKER = "Message: "; + size_t begin = body.find(MSG_BEGIN_MARKER); + if (begin != std::string::npos) + { + begin += MSG_BEGIN_MARKER.size(); + } + else + { + begin = 0; + err_msg.clear(); + } + size_t end = body.find("</p>", begin); + err_msg = body.substr(begin, end-begin); + LLStringUtil::replaceString(err_msg, "
", ""); // strip CR return false; } - - translation = root[m_GoogleData].get(m_GoogleTranslation, "").asString(); - detected_language = root[m_GoogleData].get(m_GoogleLanguage, "").asString(); + + // Sample response: <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Hola</string> + size_t begin = body.find(">"); + if (begin == std::string::npos || begin >= (body.size() - 1)) + { + begin = 0; + } + else + { + ++begin; + } + + size_t end = body.find("</string>", begin); + + detected_lang = ""; // unsupported by this API + translation = body.substr(begin, end-begin); + LLStringUtil::replaceString(translation, "
", ""); // strip CR return true; } +// static +std::string LLBingTranslationHandler::getAPIKey() +{ + return gSavedSettings.getString("BingTranslateAPIKey"); +} + +LLTranslate::TranslationReceiver::TranslationReceiver(const std::string& from_lang, const std::string& to_lang) +: mFromLang(from_lang) +, mToLang(to_lang) +, mHandler(LLTranslate::getPreferredHandler()) +{ +} + +// virtual +void LLTranslate::TranslationReceiver::completedRaw( + U32 http_status, + const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) +{ + LLBufferStream istr(channels, buffer.get()); + std::stringstream strstrm; + strstrm << istr.rdbuf(); + + const std::string body = strstrm.str(); + std::string translation, detected_lang, err_msg; + int status = http_status; + LL_DEBUGS("Translate") << "HTTP status: " << status << " " << reason << LL_ENDL; + LL_DEBUGS("Translate") << "Response body: " << body << LL_ENDL; + if (mHandler.parseResponse(status, body, translation, detected_lang, err_msg)) + { + // Fix up the response + LLStringUtil::replaceString(translation, "<", "<"); + LLStringUtil::replaceString(translation, ">",">"); + LLStringUtil::replaceString(translation, ""","\""); + LLStringUtil::replaceString(translation, "'","'"); + LLStringUtil::replaceString(translation, "&","&"); + LLStringUtil::replaceString(translation, "'","'"); + + handleResponse(translation, detected_lang); + } + else + { + if (err_msg.empty()) + { + err_msg = LLTrans::getString("TranslationResponseParseError"); + } + + llwarns << "Translation request failed: " << err_msg << llendl; + handleFailure(status, err_msg); + } +} + +LLTranslate::KeyVerificationReceiver::KeyVerificationReceiver(EService service) +: mService(service) +{ +} + +LLTranslate::EService LLTranslate::KeyVerificationReceiver::getService() const +{ + return mService; +} + +// virtual +void LLTranslate::KeyVerificationReceiver::completedRaw( + U32 http_status, + const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) +{ + bool ok = (http_status == 200); + setVerificationStatus(ok); +} + +//static +void LLTranslate::translateMessage( + TranslationReceiverPtr &receiver, + const std::string &from_lang, + const std::string &to_lang, + const std::string &mesg) +{ + std::string url; + receiver->mHandler.getTranslateURL(url, from_lang, to_lang, mesg); + + LL_DEBUGS("Translate") << "Sending translation request: " << url << LL_ENDL; + sendRequest(url, receiver); +} + +// static +void LLTranslate::verifyKey( + KeyVerificationReceiverPtr& receiver, + const std::string& key) +{ + std::string url; + const LLTranslationAPIHandler& handler = getHandler(receiver->getService()); + handler.getKeyVerificationURL(url, key); + + LL_DEBUGS("Translate") << "Sending key verification request: " << url << LL_ENDL; + sendRequest(url, receiver); +} + //static std::string LLTranslate::getTranslateLanguage() { @@ -119,3 +331,52 @@ std::string LLTranslate::getTranslateLanguage() return language; } +// static +const LLTranslationAPIHandler& LLTranslate::getPreferredHandler() +{ + EService service = SERVICE_BING; + + std::string service_str = gSavedSettings.getString("TranslationService"); + if (service_str == "google") + { + service = SERVICE_GOOGLE; + } + + return getHandler(service); +} + +// static +const LLTranslationAPIHandler& LLTranslate::getHandler(EService service) +{ + static LLGoogleTranslationHandler google; + static LLBingTranslationHandler bing; + + if (service == SERVICE_GOOGLE) + { + return google; + } + + return bing; +} + +// static +void LLTranslate::sendRequest(const std::string& url, LLHTTPClient::ResponderPtr responder) +{ + static const float REQUEST_TIMEOUT = 5; + static LLSD sHeader; + + if (!sHeader.size()) + { + std::string user_agent = llformat("%s %d.%d.%d (%d)", + LLVersionInfo::getChannel().c_str(), + LLVersionInfo::getMajor(), + LLVersionInfo::getMinor(), + LLVersionInfo::getPatch(), + LLVersionInfo::getBuild()); + + sHeader.insert("Accept", "text/plain"); + sHeader.insert("User-Agent", user_agent); + } + + LLHTTPClient::get(url, responder, sHeader, REQUEST_TIMEOUT); +} diff --git a/indra/newview/lltranslate.h b/indra/newview/lltranslate.h index e85a42e878..c2330daa81 100644 --- a/indra/newview/lltranslate.h +++ b/indra/newview/lltranslate.h @@ -30,89 +30,257 @@ #include "llhttpclient.h" #include "llbufferstream.h" +namespace Json +{ + class Value; +} + +/** + * Handler of an HTTP machine translation service. + * + * Derived classes know the service URL + * and how to parse the translation result. + */ +class LLTranslationAPIHandler +{ +public: + /** + * Get URL for translation of the given string. + * + * Sending HTTP GET request to the URL will initiate translation. + * + * @param[out] url Place holder for the result. + * @param from_lang Source language. Leave empty for auto-detection. + * @param to_lang Target language. + * @param text Text to translate. + */ + virtual void getTranslateURL( + std::string &url, + const std::string &from_lang, + const std::string &to_lang, + const std::string &text) const = 0; + + /** + * Get URL to verify the given API key. + * + * Sending request to the URL verifies the key. + * Positive HTTP response (code 200) means that the key is valid. + * + * @param[out] url Place holder for the URL. + * @param[in] key Key to verify. + */ + virtual void getKeyVerificationURL( + std::string &url, + const std::string &key) const = 0; + + /** + * Parse translation response. + * + * @param[in,out] status HTTP status. May be modified while parsing. + * @param body Response text. + * @param[out] translation Translated text. + * @param[out] detected_lang Detected source language. May be empty. + * @param[out] err_msg Error message (in case of error). + */ + virtual bool parseResponse( + int& status, + const std::string& body, + std::string& translation, + std::string& detected_lang, + std::string& err_msg) const = 0; + + virtual ~LLTranslationAPIHandler() {} + +protected: + static const int STATUS_OK = 200; +}; + +/// Google Translate v2 API handler. +class LLGoogleTranslationHandler : public LLTranslationAPIHandler +{ + LOG_CLASS(LLGoogleTranslationHandler); + +public: + /*virtual*/ void getTranslateURL( + std::string &url, + const std::string &from_lang, + const std::string &to_lang, + const std::string &text) const; + /*virtual*/ void getKeyVerificationURL( + std::string &url, + const std::string &key) const; + /*virtual*/ bool parseResponse( + int& status, + const std::string& body, + std::string& translation, + std::string& detected_lang, + std::string& err_msg) const; + +private: + static void parseErrorResponse( + const Json::Value& root, + int& status, + std::string& err_msg); + static bool parseTranslation( + const Json::Value& root, + std::string& translation, + std::string& detected_lang); + static std::string getAPIKey(); +}; + +/// Microsoft Translator v2 API handler. +class LLBingTranslationHandler : public LLTranslationAPIHandler +{ + LOG_CLASS(LLBingTranslationHandler); + +public: + /*virtual*/ void getTranslateURL( + std::string &url, + const std::string &from_lang, + const std::string &to_lang, + const std::string &text) const; + /*virtual*/ void getKeyVerificationURL( + std::string &url, + const std::string &key) const; + /*virtual*/ bool parseResponse( + int& status, + const std::string& body, + std::string& translation, + std::string& detected_lang, + std::string& err_msg) const; +private: + static std::string getAPIKey(); +}; + +/** + * Entry point for machine translation services. + * + * Basically, to translate a string, we need to know the URL + * of a translation service, have a valid API for the service + * and be given the target language. + * + * Callers specify the string to translate and the target language, + * LLTranslate takes care of the rest. + * + * API keys for translation are taken from saved settings. + */ class LLTranslate { LOG_CLASS(LLTranslate); + public : + + typedef enum e_service { + SERVICE_BING, + SERVICE_GOOGLE, + } EService; + + /** + * Subclasses are supposed to handle translation results (e.g. show them in chat) + */ class TranslationReceiver: public LLHTTPClient::Responder { + public: + + /** + * Using mHandler, parse incoming response. + * + * Calls either handleResponse() or handleFailure() + * depending on the HTTP status code and parsing success. + * + * @see handleResponse() + * @see handleFailure() + * @see mHandler + */ + /*virtual*/ void completedRaw( + U32 http_status, + const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer); + protected: - TranslationReceiver(const std::string &from_lang, const std::string &to_lang) - : m_fromLang(from_lang), - m_toLang(to_lang) - { - } + friend class LLTranslate; - virtual void handleResponse(const std::string &translation, const std::string &recognized_lang) {}; - virtual void handleFailure() {}; + /// Remember source and target languages for subclasses to be able to filter inappropriate results. + TranslationReceiver(const std::string& from_lang, const std::string& to_lang); + /// Override point to handle successful translation. + virtual void handleResponse(const std::string &translation, const std::string &recognized_lang) = 0; + + /// Override point to handle unsuccessful translation. + virtual void handleFailure(int status, const std::string& err_msg) = 0; + + std::string mFromLang; + std::string mToLang; + const LLTranslationAPIHandler& mHandler; + }; + + /** + * Subclasses are supposed to handle API key verification result. + */ + class KeyVerificationReceiver: public LLHTTPClient::Responder + { public: - ~TranslationReceiver() - { - } - - virtual void completedRaw( U32 status, - const std::string& reason, - const LLChannelDescriptors& channels, - const LLIOPipe::buffer_ptr_t& buffer) - { - if (200 <= status && status < 300) - { - LLBufferStream istr(channels, buffer.get()); - std::stringstream strstrm; - strstrm << istr.rdbuf(); - - const std::string result = strstrm.str(); - std::string translation; - std::string detected_language; - - if (!parseGoogleTranslate(result, translation, detected_language)) - { - handleFailure(); - return; - } - - // Fix up the response - LLStringUtil::replaceString(translation, "<", "<"); - LLStringUtil::replaceString(translation, ">",">"); - LLStringUtil::replaceString(translation, ""","\""); - LLStringUtil::replaceString(translation, "'","'"); - LLStringUtil::replaceString(translation, "&","&"); - LLStringUtil::replaceString(translation, "'","'"); - - handleResponse(translation, detected_language); - } - else - { - LL_WARNS("Translate") << "HTTP request for Google Translate failed with status " << status << ", reason: " << reason << LL_ENDL; - handleFailure(); - } - } + EService getService() const; protected: - const std::string m_toLang; - const std::string m_fromLang; + /** + * Save the translation service the key belongs to. + * + * Subclasses need to know it. + * + * @see getService() + */ + KeyVerificationReceiver(EService service); + + /** + * Parse verification response. + * + * Calls setVerificationStatus() with the verification status, + * which is true if HTTP status code is 200. + * + * @see setVerificationStatus() + */ + /*virtual*/ void completedRaw( + U32 http_status, + const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer); + + /** + * Override point for subclasses to handle key verification status. + */ + virtual void setVerificationStatus(bool ok) = 0; + + EService mService; }; - static void translateMessage(LLHTTPClient::ResponderPtr &result, const std::string &from_lang, const std::string &to_lang, const std::string &mesg); - static float m_GoogleTimeout; + typedef boost::intrusive_ptr<TranslationReceiver> TranslationReceiverPtr; + typedef boost::intrusive_ptr<KeyVerificationReceiver> KeyVerificationReceiverPtr; + + /** + * Translate given text. + * + * @param receiver Object to pass translation result to. + * @param from_lang Source language. Leave empty for auto-detection. + * @param to_lang Target language. + * @param mesg Text to translate. + */ + static void translateMessage(TranslationReceiverPtr &receiver, const std::string &from_lang, const std::string &to_lang, const std::string &mesg); + + /** + * Verify given API key of a translation service. + * + * @param receiver Object to pass verification result to. + * @param key Key to verify. + */ + static void verifyKey(KeyVerificationReceiverPtr& receiver, const std::string& key); static std::string getTranslateLanguage(); private: - static void getTranslateUrl(std::string &translate_url, const std::string &from_lang, const std::string &to_lang, const std::string &text); - static bool parseGoogleTranslate(const std::string& body, std::string &translation, std::string &detected_language); - - static LLSD m_Header; - static const char* m_GoogleURL; - static const char* m_GoogleLangSpec; - static const char* m_AcceptHeader; - static const char* m_AcceptType; - static const char* m_AgentHeader; - static const char* m_UserAgent; - - static const char* m_GoogleData; - static const char* m_GoogleTranslation; - static const char* m_GoogleLanguage; + static const LLTranslationAPIHandler& getPreferredHandler(); + static const LLTranslationAPIHandler& getHandler(EService service); + static void sendRequest(const std::string& url, LLHTTPClient::ResponderPtr responder); }; #endif diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index ba53540374..c761969fcf 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -107,6 +107,7 @@ #include "llfloatertos.h" #include "llfloatertopobjects.h" #include "llfloatertoybox.h" +#include "llfloatertranslationsettings.h" #include "llfloateruipreview.h" #include "llfloatervoiceeffect.h" #include "llfloaterwhitelistentry.h" @@ -248,6 +249,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>); LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>); LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>); + LLFloaterReg::add("prefs_translation", "floater_translation_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTranslationSettings>); LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>); LLFloaterReg::add("picks", "floater_picks.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>); LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 2345fbfd6a..22d95563d8 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -968,6 +968,10 @@ U32 info_display_from_string(std::string info_display) { return LLPipeline::RENDER_DEBUG_SCULPTED; } + else if ("wind vectors" == info_display) + { + return LLPipeline::RENDER_DEBUG_WIND_VECTORS; + } else { return 0; @@ -980,6 +984,8 @@ class LLAdvancedToggleInfoDisplay : public view_listener_t { U32 info_display = info_display_from_string( userdata.asString() ); + LL_INFOS("ViewerMenu") << "toggle " << userdata.asString() << LL_ENDL; + if ( info_display != 0 ) { LLPipeline::toggleRenderDebug( (void*)info_display ); @@ -997,6 +1003,8 @@ class LLAdvancedCheckInfoDisplay : public view_listener_t U32 info_display = info_display_from_string( userdata.asString() ); bool new_value = false; + LL_INFOS("ViewerMenu") << "check " << userdata.asString() << LL_ENDL; + if ( info_display != 0 ) { new_value = LLPipeline::toggleRenderDebugControl( (void*)info_display ); @@ -7962,6 +7970,9 @@ void initialize_menus() view_listener_t::addEnable(new LLUploadCostCalculator(), "Upload.CalculateCosts"); + + commit.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::showAgentInventory)); + // Agent commit.add("Agent.toggleFlying", boost::bind(&LLAgent::toggleFlying)); enable.add("Agent.enableFlying", boost::bind(&LLAgent::enableFlying)); @@ -8337,6 +8348,8 @@ void initialize_menus() view_listener_t::addMenu(new LLGoToObject(), "GoToObject"); commit.add("PayObject", boost::bind(&handle_give_money_dialog)); + commit.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::showAgentInventory)); + enable.add("EnablePayObject", boost::bind(&enable_pay_object)); enable.add("EnablePayAvatar", boost::bind(&enable_pay_avatar)); enable.add("EnableEdit", boost::bind(&enable_object_edit)); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index f0d53668d4..a9ca70fd26 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3121,7 +3121,7 @@ protected: { // filter out non-interesting responeses if ( !translation.empty() - && (m_toLang != detected_language) + && (mToLang != detected_language) && (LLStringUtil::compareInsensitive(translation, m_origMesg) != 0) ) { m_chat.mText += " (" + translation + ")"; @@ -3130,10 +3130,13 @@ protected: LLNotificationsUI::LLNotificationManager::instance().onChat(m_chat, m_toastArgs); } - void handleFailure() + void handleFailure(int status, const std::string& err_msg) { - LLTranslate::TranslationReceiver::handleFailure(); - m_chat.mText += " (?)"; + llwarns << "Translation failed for mesg " << m_origMesg << " toLang " << mToLang << " fromLang " << mFromLang << llendl; + + std::string msg = LLTrans::getString("TranslationFailed", LLSD().with("[REASON]", err_msg)); + LLStringUtil::replaceString(msg, "\n", " "); // we want one-line error messages + m_chat.mText += " (" + msg + ")"; LLNotificationsUI::LLNotificationManager::instance().onChat(m_chat, m_toastArgs); } @@ -3371,7 +3374,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) const std::string from_lang = ""; // leave empty to trigger autodetect const std::string to_lang = LLTranslate::getTranslateLanguage(); - LLHTTPClient::ResponderPtr result = ChatTranslationReceiver::build(from_lang, to_lang, mesg, chat, args); + LLTranslate::TranslationReceiverPtr result = ChatTranslationReceiver::build(from_lang, to_lang, mesg, chat, args); LLTranslate::translateMessage(result, from_lang, to_lang, mesg); } else diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index d81e67bfe2..d81e67bfe2 100644..100755 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 380d63c77b..380d63c77b 100644..100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp diff --git a/indra/newview/llwind.cpp b/indra/newview/llwind.cpp index 69d3090442..4c39fb5b74 100644 --- a/indra/newview/llwind.cpp +++ b/indra/newview/llwind.cpp @@ -46,16 +46,12 @@ #include "llworld.h" -const F32 CLOUD_DIVERGENCE_COEF = 0.5f; - - ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// LLWind::LLWind() -: mSize(16), - mCloudDensityp(NULL) +: mSize(16) { init(); } @@ -65,8 +61,6 @@ LLWind::~LLWind() { delete [] mVelX; delete [] mVelY; - delete [] mCloudVelX; - delete [] mCloudVelY; } @@ -77,31 +71,23 @@ LLWind::~LLWind() void LLWind::init() { + LL_DEBUGS("Wind") << "initializing wind size: "<< mSize << LL_ENDL; + // Initialize vector data mVelX = new F32[mSize*mSize]; mVelY = new F32[mSize*mSize]; - mCloudVelX = new F32[mSize*mSize]; - mCloudVelY = new F32[mSize*mSize]; - S32 i; for (i = 0; i < mSize*mSize; i++) { mVelX[i] = 0.5f; mVelY[i] = 0.5f; - mCloudVelX[i] = 0.0f; - mCloudVelY[i] = 0.0f; } } void LLWind::decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp) { - if (!mCloudDensityp) - { - return; - } - LLPatchHeader patch_header; S32 buffer[16*16]; @@ -122,22 +108,15 @@ void LLWind::decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp) decode_patch(bitpack, buffer); decompress_patch(mVelY, buffer, &patch_header); - - S32 i, j, k; - // HACK -- mCloudVelXY is the same as mVelXY, except we add a divergence - // that is proportional to the gradient of the cloud density - // ==> this helps to clump clouds together - // NOTE ASSUMPTION: cloud density has the same dimensions as the wind field - // This needs to be fixed... causes discrepency at region boundaries for (j=1; j<mSize-1; j++) { for (i=1; i<mSize-1; i++) { k = i + j * mSize; - *(mCloudVelX + k) = *(mVelX + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k + 1) - *(mCloudDensityp + k - 1)); - *(mCloudVelY + k) = *(mVelY + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k + mSize) - *(mCloudDensityp + k - mSize)); + *(mVelX + k) = *(mVelX + k); + *(mVelY + k) = *(mVelY + k); } } @@ -145,29 +124,29 @@ void LLWind::decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp) for (j=1; j<mSize-1; j++) { k = i + j * mSize; - *(mCloudVelX + k) = *(mVelX + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k) - *(mCloudDensityp + k - 2)); - *(mCloudVelY + k) = *(mVelY + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k + mSize) - *(mCloudDensityp + k - mSize)); + *(mVelX + k) = *(mVelX + k); + *(mVelY + k) = *(mVelY + k); } i = 0; for (j=1; j<mSize-1; j++) { k = i + j * mSize; - *(mCloudVelX + k) = *(mVelX + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k + 2) - *(mCloudDensityp + k)); - *(mCloudVelY + k) = *(mVelY + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k + mSize) - *(mCloudDensityp + k + mSize)); + *(mVelX + k) = *(mVelX + k); + *(mVelY + k) = *(mVelY + k); } j = mSize - 1; for (i=1; i<mSize-1; i++) { k = i + j * mSize; - *(mCloudVelX + k) = *(mVelX + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k + 1) - *(mCloudDensityp + k - 1)); - *(mCloudVelY + k) = *(mVelY + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k) - *(mCloudDensityp + k - 2*mSize)); + *(mVelX + k) = *(mVelX + k); + *(mVelY + k) = *(mVelY + k); } j = 0; for (i=1; i<mSize-1; i++) { k = i + j * mSize; - *(mCloudVelX + k) = *(mVelX + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k + 1) - *(mCloudDensityp + k -1)); - *(mCloudVelY + k) = *(mVelY + k) + CLOUD_DIVERGENCE_COEF * (*(mCloudDensityp + k + 2*mSize) - *(mCloudDensityp + k)); + *(mVelX + k) = *(mVelX + k); + *(mVelY + k) = *(mVelY + k); } } @@ -280,74 +259,6 @@ LLVector3 LLWind::getVelocity(const LLVector3 &pos_region) return r_val * WIND_SCALE_HACK; } - -LLVector3 LLWind::getCloudVelocity(const LLVector3 &pos_region) -{ - llassert(mSize == 16); - // Resolves value of wind at a location relative to SW corner of region - // - // Returns wind magnitude in X,Y components of vector3 - LLVector3 r_val; - F32 dx,dy; - S32 k; - - LLVector3 pos_clamped_region(pos_region); - - F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters(); - - if (pos_clamped_region.mV[VX] < 0.f) - { - pos_clamped_region.mV[VX] = 0.f; - } - else if (pos_clamped_region.mV[VX] >= region_width_meters) - { - pos_clamped_region.mV[VX] = (F32) fmod(pos_clamped_region.mV[VX], region_width_meters); - } - - if (pos_clamped_region.mV[VY] < 0.f) - { - pos_clamped_region.mV[VY] = 0.f; - } - else if (pos_clamped_region.mV[VY] >= region_width_meters) - { - pos_clamped_region.mV[VY] = (F32) fmod(pos_clamped_region.mV[VY], region_width_meters); - } - - - S32 i = llfloor(pos_clamped_region.mV[VX] * mSize / region_width_meters); - S32 j = llfloor(pos_clamped_region.mV[VY] * mSize / region_width_meters); - k = i + j*mSize; - dx = ((pos_clamped_region.mV[VX] * mSize / region_width_meters) - (F32) i); - dy = ((pos_clamped_region.mV[VY] * mSize / region_width_meters) - (F32) j); - - if ((i < mSize-1) && (j < mSize-1)) - { - // Interior points, no edges - r_val.mV[VX] = mCloudVelX[k]*(1.0f - dx)*(1.0f - dy) + - mCloudVelX[k + 1]*dx*(1.0f - dy) + - mCloudVelX[k + mSize]*dy*(1.0f - dx) + - mCloudVelX[k + mSize + 1]*dx*dy; - r_val.mV[VY] = mCloudVelY[k]*(1.0f - dx)*(1.0f - dy) + - mCloudVelY[k + 1]*dx*(1.0f - dy) + - mCloudVelY[k + mSize]*dy*(1.0f - dx) + - mCloudVelY[k + mSize + 1]*dx*dy; - } - else - { - r_val.mV[VX] = mCloudVelX[k]; - r_val.mV[VY] = mCloudVelY[k]; - } - - r_val.mV[VZ] = 0.f; - return r_val * WIND_SCALE_HACK; -} - - -void LLWind::setCloudDensityPointer(F32 *densityp) -{ - mCloudDensityp = densityp; -} - void LLWind::setOriginGlobal(const LLVector3d &origin_global) { mOriginGlobal = origin_global; diff --git a/indra/newview/llwind.h b/indra/newview/llwind.h index 925cb6d642..3b57f07124 100644 --- a/indra/newview/llwind.h +++ b/indra/newview/llwind.h @@ -27,7 +27,6 @@ #ifndef LL_LLWIND_H #define LL_LLWIND_H -//#include "vmath.h" #include "llmath.h" #include "v3math.h" #include "v3dmath.h" @@ -44,25 +43,21 @@ public: ~LLWind(); void renderVectors(); LLVector3 getVelocity(const LLVector3 &location); // "location" is region-local - LLVector3 getCloudVelocity(const LLVector3 &location); // "location" is region-local LLVector3 getVelocityNoisy(const LLVector3 &location, const F32 dim); // "location" is region-local void decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp); LLVector3 getAverage(); - void setCloudDensityPointer(F32 *densityp); void setOriginGlobal(const LLVector3d &origin_global); private: S32 mSize; F32 * mVelX; F32 * mVelY; - F32 * mCloudVelX; - F32 * mCloudVelY; - F32 * mCloudDensityp; LLVector3d mOriginGlobal; void init(); + LOG_CLASS(LLWind); }; #endif diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index a50f66f282..93354e6579 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -4383,6 +4383,11 @@ void LLPipeline::renderDebug() } } + if (mRenderDebugMask & RENDER_DEBUG_WIND_VECTORS) + { + gAgent.getRegion()->mWind.renderVectors(); + } + if (mRenderDebugMask & RENDER_DEBUG_COMPOSITION) { // Debug composition layers diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 27ee2745b5..0661de8cec 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -438,7 +438,7 @@ public: RENDER_DEBUG_VERIFY = 0x0000002, RENDER_DEBUG_BBOXES = 0x0000004, RENDER_DEBUG_OCTREE = 0x0000008, - RENDER_DEBUG_PICKING = 0x0000010, + RENDER_DEBUG_WIND_VECTORS = 0x0000010, RENDER_DEBUG_OCCLUSION = 0x0000020, RENDER_DEBUG_POINTS = 0x0000040, RENDER_DEBUG_TEXTURE_PRIORITY = 0x0000080, diff --git a/indra/newview/skins/default/textures/windows/Flyout_Left.png b/indra/newview/skins/default/textures/windows/Flyout_Left.png Binary files differnew file mode 100644 index 0000000000..6ac9fe2efd --- /dev/null +++ b/indra/newview/skins/default/textures/windows/Flyout_Left.png diff --git a/indra/newview/skins/default/textures/windows/Flyout_Right.png b/indra/newview/skins/default/textures/windows/Flyout_Right.png Binary files differnew file mode 100644 index 0000000000..aa1f0625aa --- /dev/null +++ b/indra/newview/skins/default/textures/windows/Flyout_Right.png diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml index 0ccaab73ba..fc8bc33096 100644 --- a/indra/newview/skins/default/xui/da/floater_about.xml +++ b/indra/newview/skins/default/xui/da/floater_about.xml @@ -10,7 +10,7 @@ <floater.string name="AboutPosition"> Du er ved [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] i regionen [REGION] lokaliseret ved <nolink>[HOSTNAME]</nolink> ([HOSTIP]) [SERVER_VERSION] -[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] +[SERVER_RELEASE_NOTES_URL] </floater.string> <floater.string name="AboutSystem"> CPU: [CPU] diff --git a/indra/newview/skins/default/xui/de/inspect_group.xml b/indra/newview/skins/default/xui/de/inspect_group.xml index d85ca7ce4d..60fa8ff0d8 100644 --- a/indra/newview/skins/default/xui/de/inspect_group.xml +++ b/indra/newview/skins/default/xui/de/inspect_group.xml @@ -26,7 +26,7 @@ Hoch solln sie leben! Elche forever! Und auch Mungos! <text name="group_cost"> Mitgliedschaft: 123 L$ </text> - <button label="Zusammen" name="join_btn"/> + <button label="Beitreten" name="join_btn"/> <button label="Verlassen" name="leave_btn"/> <button label="Profil anzeigen" name="view_profile_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml index 5c8b8302c8..979ccba48d 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml @@ -16,7 +16,7 @@ <combo_box.item label="Русский (Russisch) – Beta" name="Russian"/> <combo_box.item label="Türkçe (Türkisch) – Beta" name="Turkish"/> <combo_box.item label="日本語 (Japanisch) - Beta" name="(Japanese)"/> - <combo_box.item label="正體 (Traditionelles Chinesisch) – Beta" name="Traditional Chinese"/> + <combo_box.item label="正體中文 (Traditionelles Chinesisch) – Beta" name="Traditional Chinese"/> </combo_box> <text name="language_textbox2"> (Erfordert Neustart) diff --git a/indra/newview/skins/default/xui/en/floater_chat_bar.xml b/indra/newview/skins/default/xui/en/floater_chat_bar.xml index 989b4a0580..87606c1a2a 100644 --- a/indra/newview/skins/default/xui/en/floater_chat_bar.xml +++ b/indra/newview/skins/default/xui/en/floater_chat_bar.xml @@ -15,6 +15,7 @@ min_height="60" min_width="150" can_resize="true" + default_tab_group="1" name="chat_bar" width="380"> <panel @@ -26,50 +27,56 @@ visible="false" filename="panel_nearby_chat.xml" name="nearby_chat" /> - <panel width="380" height="31" left="0" bottom="-1" follows="left|right|bottom"> - <line_editor - border_style="line" - border_thickness="1" - follows="left|right" - height="23" - label="Click here to chat." - layout="topleft" - left_delta="7" - left="0" - max_length_bytes="1023" - name="chat_box" - text_pad_left="5" - text_pad_right="25" - tool_tip="Press Enter to say, Ctrl+Enter to shout" - top="2" - width="335" /> - <output_monitor - auto_update="true" - follows="right" - draw_border="false" - height="16" - layout="topleft" - left_pad="-24" - mouse_opaque="true" - name="chat_zone_indicator" - top="6" - visible="true" - width="20" /> - <button - follows="right" - is_toggle="true" - width="20" - top="2" - layout="topleft" - left_pad="12" - image_disabled="ComboButton_UpOff" - image_unselected="ComboButton_UpOff" - image_selected="ComboButton_On" - image_pressed="ComboButton_UpSelected" - image_pressed_selected="ComboButton_Selected" - height="23" - name="show_nearby_chat" - tool_tip="Shows/hides nearby chat log"> - </button> + <panel width="380" + height="31" + left="0" + bottom="-1" + follows="left|right|bottom" + tab_group="1"> + <line_editor + border_style="line" + border_thickness="1" + follows="left|right" + height="23" + label="Click here to chat." + layout="topleft" + left_delta="7" + left="0" + max_length_bytes="1023" + name="chat_box" + text_pad_left="5" + text_pad_right="25" + tool_tip="Press Enter to say, Ctrl+Enter to shout" + top="2" + width="335" /> + <output_monitor + auto_update="true" + follows="right" + draw_border="false" + height="16" + layout="topleft" + left_pad="-24" + mouse_opaque="true" + name="chat_zone_indicator" + top="6" + visible="true" + width="20" /> + <button + follows="right" + is_toggle="true" + width="20" + top="2" + layout="topleft" + left_pad="12" + image_disabled="ComboButton_UpOff" + image_unselected="ComboButton_UpOff" + image_selected="ComboButton_On" + image_pressed="ComboButton_UpSelected" + image_pressed_selected="ComboButton_Selected" + height="23" + chrome="true" + name="show_nearby_chat" + tool_tip="Shows/hides nearby chat log"> + </button> </panel> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index fbaf4f0a8a..fbaf4f0a8a 100644..100755 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml diff --git a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml index 9db6568ee3..ffbb6aa28b 100644 --- a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml +++ b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml @@ -8,6 +8,7 @@ layout="topleft" name="outgoing call" help_topic="outgoing_call" + save_dock_state="true" title="CALLING" width="410"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml index c7e09bf45e..ef3951a1cd 100644 --- a/indra/newview/skins/default/xui/en/floater_toybox.xml +++ b/indra/newview/skins/default/xui/en/floater_toybox.xml @@ -13,7 +13,7 @@ open_positioning="centered" save_rect="true" single_instance="true" - title="CUSTOMIZE TOOLBARS" + title="TOOLBAR BUTTONS" width="650"> <text follows="left|top" diff --git a/indra/newview/skins/default/xui/en/floater_translation_settings.xml b/indra/newview/skins/default/xui/en/floater_translation_settings.xml new file mode 100644 index 0000000000..c03f751265 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_translation_settings.xml @@ -0,0 +1,244 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + height="310" + layout="topleft" + name="floater_translation_settings" + help_topic="environment_editor_floater" + save_rect="true" + title="CHAT TRANSLATION SETTINGS" + width="485"> + + <string name="bing_api_key_not_verified">Bing appID not verified. Please try again.</string> + <string name="google_api_key_not_verified">Google API key not verified. Please try again.</string> + + <string name="bing_api_key_verified">Bing appID verified.</string> + <string name="google_api_key_verified">Google API key verified.</string> + + <check_box + height="16" + label="Enable machine translation while chatting" + layout="topleft" + left="10" + name="translate_chat_checkbox" + top="30" + width="20" /> + <text + height="20" + follows="left|top" + layout="topleft" + left="40" + name="translate_language_label" + top_pad="20" + width="130"> + Translate chat into: + </text> + <combo_box + allow_text_entry="true" + follows="left|top" + height="23" + left_pad="10" + max_chars="135" + mouse_opaque="true" + name="translate_language_combo" + top_delta="-5" + width="190"> + <combo_box.item + label="System Default" + name="System Default Language" + value="default" /> + <combo_box.item + label="English" + name="English" + value="en" /> + <!-- After "System Default" and "English", please keep the rest of these combo_box.items in alphabetical order by the first character in the string. --> + <combo_box.item + label="Dansk (Danish)" + name="Danish" + value="da" /> + <combo_box.item + label="Deutsch (German)" + name="German" + value="de" /> + <combo_box.item + label="Español (Spanish)" + name="Spanish" + value="es" /> + <combo_box.item + label="Français (French)" + name="French" + value="fr" /> + <combo_box.item + label="Italiano (Italian)" + name="Italian" + value="it" /> + <combo_box.item + label="Magyar (Hungarian)" + name="Hungarian" + value="hu" /> + <combo_box.item + label="Nederlands (Dutch)" + name="Dutch" + value="nl" /> + <combo_box.item + label="Polski (Polish)" + name="Polish" + value="pl" /> + <combo_box.item + label="Português (Portuguese)" + name="Portugese" + value="pt" /> + <combo_box.item + label="Русский (Russian)" + name="Russian" + value="ru" /> + <combo_box.item + label="Türkçe (Turkish)" + name="Turkish" + value="tr" /> + <combo_box.item + label="Українська (Ukrainian)" + name="Ukrainian" + value="uk" /> + <combo_box.item + label="中文 (正體) (Chinese)" + name="Chinese" + value="zh" /> + <combo_box.item + label="日本語 (Japanese)" + name="Japanese" + value="ja" /> + <combo_box.item + label="한국어 (Korean)" + name="Korean" + value="ko" /> + </combo_box> + + <text + follows="top|left|right" + height="15" + layout="topleft" + left="40" + name="tip" + top_pad="20" + width="330" + wrap="true"> + Choose translation service: + </text> + + <radio_group + follows="top|left" + height="80" + layout="topleft" + left_delta="10" + name="translation_service_rg" + top_pad="20" + width="320"> + <radio_item + initial_value="bing" + label="Bing Translator" + layout="topleft" + name="bing" /> + <radio_item + initial_value="google" + label="Google Translate" + layout="topleft" + name="google" + top_pad="55" /> + </radio_group> + + <text + type="string" + length="1" + follows="top|right" + height="20" + layout="topleft" + left="70" + name="bing_api_key_label" + top_pad="-55" + width="85"> + Bing [http://www.bing.com/developers/createapp.aspx AppID]: + </text> + <line_editor + default_text="Enter Bing AppID and click "Verify"" + follows="top|left" + height="20" + layout="topleft" + left_pad="10" + max_length_chars="50" + top_delta="-4" + name="bing_api_key" + width="210" /> + <button + follows="left|top" + height="23" + label="Verify" + layout="topleft" + left_pad="10" + name="verify_bing_api_key_btn" + top_delta="-2" + width="90" /> + + <text + follows="top|right" + height="20" + layout="topleft" + left="70" + length="1" + name="google_api_key_label" + top_pad="50" + type="string" + width="85"> + Google [http://code.google.com/apis/language/translate/v2/getting_started.html#auth API key]: + </text> + <line_editor + default_text="Enter Google API key and click "Verify"" + follows="top|left" + height="20" + layout="topleft" + left_pad="10" + max_length_chars="50" + top_delta="-4" + name="google_api_key" + width="210" /> + <button + follows="left|top" + height="23" + label="Verify" + layout="topleft" + left_pad="10" + name="verify_google_api_key_btn" + top_delta="-2" + width="90" /> + + <text + follows="top|right" + height="20" + layout="topleft" + left="185" + length="1" + name="google_links_text" + top_delta="-23" + type="string" + width="100"> + [http://code.google.com/apis/language/translate/v2/pricing.html Pricing] | [https://code.google.com/apis/console Stats] + </text> + + <button + follows="left|top" + height="23" + label="OK" + layout="topleft" + right="-120" + name="ok_btn" + top="-30" + width="100" /> + <button + follows="left|top" + height="23" + label="Cancel" + layout="topleft" + left_pad="10" + name="cancel_btn" + width="100" /> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml index 93a04050b6..6807b01fa3 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -89,7 +89,7 @@ visible="true" width="20" /> </layout_panel> - <layout_panel name="leave_call_panel" height="26" auto_resize="false"> + <layout_panel name="leave_call_panel" height="26" min_height="26" user_resize="false" auto_resize="false"> <layout_stack clip="true" follows="left|top|right" diff --git a/indra/newview/skins/default/xui/en/inspect_remote_object.xml b/indra/newview/skins/default/xui/en/inspect_remote_object.xml index ef3dd844cd..e83257d2a0 100644 --- a/indra/newview/skins/default/xui/en/inspect_remote_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_remote_object.xml @@ -36,7 +36,7 @@ height="16" left="8" name="object_owner_label" - width="55" + width="65" top_pad="12"> Owner: </text> diff --git a/indra/newview/skins/default/xui/en/menu_toolbars.xml b/indra/newview/skins/default/xui/en/menu_toolbars.xml index 59912b5503..7384114d7d 100644 --- a/indra/newview/skins/default/xui/en/menu_toolbars.xml +++ b/indra/newview/skins/default/xui/en/menu_toolbars.xml @@ -3,7 +3,7 @@ layout="topleft" name="Toolbars Popup" visible="false"> - <menu_item_call label="Choose buttons..." + <menu_item_call label="Toolbar buttons..." layout="topleft" name="Chose Buttons"> <menu_item_call.on_click function="Floater.Show" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 63e50b0b9f..9c44d90a6e 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -43,6 +43,15 @@ function="Floater.Toggle" parameter="inventory" /> </menu_item_check> + <menu_item_call + label="New Inventory Window" + name="NewInventoryWindow" + shortcut="control|shift|I" + visible="false"> + <menu_item_call.on_click + function="Inventory.NewWindow" + parameter="" /> + </menu_item_call> <menu_item_check label="Gestures..." name="Gestures" @@ -166,7 +175,7 @@ parameter="preferences" /> </menu_item_call> <menu_item_call - label="Toolbars..." + label="Toolbar buttons..." name="Toolbars" shortcut="control|T"> <menu_item_call.on_click @@ -2437,6 +2446,16 @@ parameter="raycast" /> </menu_item_check> <menu_item_check + label="Wind Vectors" + name="Wind Vectors"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="wind vectors" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="wind vectors" /> + </menu_item_check> + <menu_item_check label="Render Complexity" name="rendercomplexity"> <menu_item_check.on_check diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index 52be805260..caf7fc85f5 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -204,119 +204,16 @@ name="nearby_toasts_fadingtime" top_pad="3" width="325" /> - - <check_box - control_name="TranslateChat" - enabled="true" - height="16" - layout="topleft" - left="30" - name="translate_chat_checkbox" - top_pad="5" - width="400" /> - <!-- *HACK - After storm-1109 will be fixed: instead of using this text_box, word_wrap should be applied for "translate_chat_checkbox" check_box's label.--> - <text - follows="top|left" - height="15" - layout="topleft" - left="50" - name="translate_chb_label" - top_delta="1" - width="450" - wrap="true"> - Use machine translation while chatting (powered by Google) - </text> - <text - top_pad="20" - name="translate_language_text" - follows="left|top" - layout="topleft" - left_delta="20" - height="20" - width="110"> - Translate chat into: - </text> - <combo_box - allow_text_entry="true" - bottom_delta="3" - control_name="TranslateLanguage" - enabled="true" - follows="left|top" - height="23" - left_delta="110" - max_chars="135" - mouse_opaque="true" - name="translate_language_combobox" - width="146"> - <combo_box.item - label="System Default" - name="System Default Language" - value="default" /> - <combo_box.item - label="English" - name="English" - value="en" /> - <!-- After "System Default" and "English", please keep the rest of these combo_box.items in alphabetical order by the first character in the string. --> - <combo_box.item - label="Dansk (Danish)" - name="Danish" - value="da" /> - <combo_box.item - label="Deutsch (German)" - name="German" - value="de" /> - <combo_box.item - label="Español (Spanish)" - name="Spanish" - value="es" /> - <combo_box.item - label="Français (French)" - name="French" - value="fr" /> - <combo_box.item - label="Italiano (Italian)" - name="Italian" - value="it" /> - <combo_box.item - label="Magyar (Hungarian)" - name="Hungarian" - value="hu" /> - <combo_box.item - label="Nederlands (Dutch)" - name="Dutch" - value="nl" /> - <combo_box.item - label="Polski (Polish)" - name="Polish" - value="pl" /> - <combo_box.item - label="Português (Portuguese)" - name="Portugese" - value="pt" /> - <combo_box.item - label="Русский (Russian)" - name="Russian" - value="ru" /> - <combo_box.item - label="Türkçe (Turkish)" - name="Turkish" - value="tr" /> - <combo_box.item - label="Українська (Ukrainian)" - name="Ukrainian" - value="uk" /> - <combo_box.item - label="中文 (正體) (Chinese)" - name="Chinese" - value="zh" /> - <combo_box.item - label="日本語 (Japanese)" - name="Japanese" - value="ja" /> - <combo_box.item - label="한국어 (Korean)" - name="Korean" - value="ko" /> - </combo_box> + <button + follows="left|top" + height="23" + label="Chat Translation Settings" + layout="topleft" + left="30" + name="ok_btn" + top="-40" + width="170"> + <button.commit_callback + function="Pref.TranslationSettings" /> + </button> </panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index 0a1c0872e9..4079a80924 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -92,7 +92,7 @@ value="ja" /> <combo_box.item enabled="true" - label="正體 (Traditional Chinese) - Beta" + label="正體中文 (Traditional Chinese) - Beta" name="Traditional Chinese" value="zh" /> </combo_box> diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 422bbada7f..3239c4e531 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -2,7 +2,7 @@ <panel background_opaque="true" background_visible="true" - bg_opaque_color="MouseGray" + bg_opaque_color="DkGray" chrome="true" follows="top|right" height="19" @@ -39,10 +39,7 @@ width="160" top="1" follows="right|top" - name="balance_bg" - bg_visible="true" - background_opaque="true" - bg_opaque_image="bevel_background"> + name="balance_bg"> <text halign="center" font="SansSerifSmall" diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml index 79f29777ce..fc527f5f9d 100644 --- a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml @@ -4,7 +4,7 @@ background_opaque="false" bg_opaque_color="Black_50" bg_alpha_color="Black_50" - follows="left|top|right" + follows="left|top" height="19" layout="topleft" name="topinfo_bar" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index c4031de0f8..ec230773cc 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2183,6 +2183,8 @@ Returns a string with the requested data about the region <string name="Stomach">Stomach</string> <string name="Left Pec">Left Pec</string> <string name="Right Pec">Right Pec</string> + <string name="Neck">Neck</string> + <string name="Avatar Center">Avatar Center</string> <string name="Invalid Attachment">Invalid Attachment Point</string> <!-- Avatar age computation, see LLDateUtil::ageFromDate --> @@ -2269,7 +2271,7 @@ Returns a string with the requested data about the region <string name="NextStipendDay" value="The next stipend day is " /> <string name="GroupPlanningDate">[mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]</string> <string name="GroupIndividualShare" value=" Group Individual Share" /> - <string name="GroupColumn" value=" Group" /> + <string name="GroupColumn" value=" Group" /> <string name="Balance">Balance</string> <string name="Credits">Credits</string> <string name="Debits">Debits</string> @@ -3529,6 +3531,10 @@ Try enclosing path to the editor with double quotes. <string name="ExternalEditorCommandParseError">Error parsing the external editor command.</string> <string name="ExternalEditorFailedToRun">External editor failed to run.</string> + <!-- Machine translation of chat messahes --> + <string name="TranslationFailed">Translation failed: [REASON]</string> + <string name="TranslationResponseParseError">Error parsing translation response.</string> + <!-- Key names begin --> <string name="Esc">Esc</string> <string name="Space">Space</string> @@ -3705,6 +3711,10 @@ Try enclosing path to the editor with double quotes. <string name="Command_View_Tooltip">Changing camera angle</string> <string name="Command_Voice_Tooltip">Volume controls for calls and people near you in world</string> + <string name="Toolbar_Bottom_Tooltip">currently in your bottom toolbar</string> + <string name="Toolbar_Left_Tooltip" >currently in your left toolbar</string> + <string name="Toolbar_Right_Tooltip" >currently in your right toolbar</string> + <!-- Mesh UI terms --> <string name="Retain%">Retain%</string> <string name="Detail">Detail</string> diff --git a/indra/newview/skins/default/xui/en/widgets/toolbar.xml b/indra/newview/skins/default/xui/en/widgets/toolbar.xml index 7e7a9c61cf..0aa478ace9 100644 --- a/indra/newview/skins/default/xui/en/widgets/toolbar.xml +++ b/indra/newview/skins/default/xui/en/widgets/toolbar.xml @@ -30,6 +30,8 @@ image_overlay_alignment="left" use_ellipses="true" auto_resize="true" + button_flash_count="99999" + button_flash_rate="1.0" flash_color="EmphasisColor"/> <button_icon pad_left="10" pad_right="10" @@ -49,5 +51,7 @@ chrome="true" use_ellipses="true" auto_resize="true" + button_flash_count="99999" + button_flash_rate="1.0" flash_color="EmphasisColor"/> </toolbar> diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml index 93bb8444b4..b7c9cc27ac 100644 --- a/indra/newview/skins/default/xui/es/floater_about.xml +++ b/indra/newview/skins/default/xui/es/floater_about.xml @@ -10,7 +10,7 @@ <floater.string name="AboutPosition"> Estás en la posición [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1], de [REGION], alojada en <nolink>[HOSTNAME]</nolink> ([HOSTIP]) [SERVER_VERSION] -[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] +[SERVER_RELEASE_NOTES_URL] </floater.string> <floater.string name="AboutSystem"> CPU: [CPU] @@ -37,6 +37,9 @@ Versión del servidor de voz: [VOICE_VERSION] <floater.string name="AboutTraffic"> Paquetes perdidos: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) </floater.string> + <floater.string name="ErrorFetchingServerReleaseNotesURL"> + Error al obtener la URL de las notas de la versión del servidor. + </floater.string> <tab_container name="about_tab"> <panel label="Información" name="support_panel"> <button label="Copiar al portapapeles" name="copy_btn" width="165"/> diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml index 83749fc535..b6391e28a0 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -213,19 +213,19 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s Plus de objetos en la región: [BONUS] </text> <text name="Simulator primitive usage:"> - Uso de primitivas: + Capacidad de la región: </text> <text name="objects_available"> [COUNT] de un máx. de [MAX] ([AVAILABLE] disponibles) </text> <text name="Primitives parcel supports:"> - Prims que admite la parcela: + Capacidad del terreno de la parcela: </text> <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> - Prims en la parcela: + Impacto en el terreno de la parcela: </text> <text name="total_objects_text"> [COUNT] diff --git a/indra/newview/skins/default/xui/es/floater_avatar.xml b/indra/newview/skins/default/xui/es/floater_avatar.xml new file mode 100644 index 0000000000..7c87fbe01c --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_avatar.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Avatar" title="SELECTOR DE AVATAR"/> diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml index 04f743b659..cdcb9a146b 100644 --- a/indra/newview/skins/default/xui/es/floater_camera.xml +++ b/indra/newview/skins/default/xui/es/floater_camera.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="camera_floater" title=""> +<floater name="camera_floater" title="VER"> <floater.string name="rotate_tooltip"> Girar la cámara alrededor de lo enfocado </floater.string> diff --git a/indra/newview/skins/default/xui/es/floater_chat_bar.xml b/indra/newview/skins/default/xui/es/floater_chat_bar.xml new file mode 100644 index 0000000000..5e5ef616b8 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_chat_bar.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="chat_bar" title="CHAT"> + <panel> + <line_editor label="Pulsa aquí para chatear." name="chat_box" tool_tip="Pulsa Enter para decirlo o Ctrl+Enter para gritarlo"/> + <button name="show_nearby_chat" tool_tip="Muestra o esconde el registro del chat"/> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_destinations.xml b/indra/newview/skins/default/xui/es/floater_destinations.xml new file mode 100644 index 0000000000..df18698d2f --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_destinations.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Destinations" title="DESTINOS"/> diff --git a/indra/newview/skins/default/xui/es/floater_fast_timers.xml b/indra/newview/skins/default/xui/es/floater_fast_timers.xml new file mode 100644 index 0000000000..eeb39583ef --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_fast_timers.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="fast_timers"> + <string name="pause"> + Pausa + </string> + <string name="run"> + Correr + </string> + <button label="Pausa" name="pause_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_how_to.xml b/indra/newview/skins/default/xui/es/floater_how_to.xml new file mode 100644 index 0000000000..4a57dc3643 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_how_to.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_how_to" title="CÓMO"/> diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml index 370b7f5053..69f638418e 100644 --- a/indra/newview/skins/default/xui/es/floater_map.xml +++ b/indra/newview/skins/default/xui/es/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map" title=""> +<floater name="Map" title="MINIMAPA"> <floater.string name="ToolTipMsg"> [REGIÓN](Haz doble clic para abrir el mapa y pulsa la tecla Mayús y arrastra para obtener una vista panorámica) </floater.string> @@ -7,7 +7,7 @@ [REGION](Pulsa dos veces para teleportarte, pulsa mayús y arrastra para obtener una panorámica) </floater.string> <floater.string name="mini_map_caption"> - MINIMAPA + Minimapa </floater.string> <text label="N" name="floater_map_north" text="N"> N diff --git a/indra/newview/skins/default/xui/es/floater_model_preview.xml b/indra/newview/skins/default/xui/es/floater_model_preview.xml index 36f988b25f..3e77453612 100644 --- a/indra/newview/skins/default/xui/es/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/es/floater_model_preview.xml @@ -1,10 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Model Preview" title="Cargar modelo"> - <string name="status_idle"> - Inactivo - </string> +<floater name="Model Preview" title="SUBIR MODELO"> + <string name="status_idle"/> <string name="status_parse_error"> - Problema de análisis de DAE - consulta los datos en el registro. + Error: Problema de análisis de DAE - consulta los datos en el registro. </string> <string name="status_reading_file"> Cargando... @@ -51,6 +49,9 @@ <string name="mesh_status_missing_lod"> Falta un nivel de detalle requerido. </string> + <string name="mesh_status_invalid_material_list"> + Los materiales con niveles de detalle no son un subconjunto del modelo de referencia. + </string> <string name="layer_all"> Todo </string> @@ -63,188 +64,211 @@ <string name="tbd"> TBD </string> - <text name="name_label"> - Nombre: - </text> - <text name="lod_label"> - Vista previa: - </text> - <combo_box name="preview_lod_combo" tool_tip="Nivel de detalle disponible en la vista previa"> - <combo_item name="high"> - Nivel de detalle: Alto - </combo_item> - <combo_item name="medium"> - Nivel de detalle: Media - </combo_item> - <combo_item name="low"> - Nivel de detalle: Bajo - </combo_item> - <combo_item name="lowest"> - Nivel de detalle: Mínimo - </combo_item> - </combo_box> - <text name="warning_title"> - ATENCIÓN: - </text> - <text name="warning_message"> - No podrás terminar de subir este modelo a los servidores de Second Life. [[VURL] Averigua cómo] puedes obtener autorización para subir modelos de malla. - </text> - <text name="weights_text"> - Descargar: -Física: -Servidor: - -Equiv. en prims: - </text> - <text name="weights"> - [ST] -[PH] -[SIM] - -[EQ] - </text> - <tab_container name="import_tab"> - <panel label="Nivel de detalle" name="lod_panel"> - <text name="lod_table_header"> - Seleccionar nivel de detalle: - </text> - <text name="high_label" value="Alto"/> - <text name="high_triangles" value="0"/> - <text name="high_vertices" value="0"/> - <text name="medium_label" value="Media"/> - <text name="medium_triangles" value="0"/> - <text name="medium_vertices" value="0"/> - <text name="low_label" value="Bajo"/> - <text name="low_triangles" value="0"/> - <text name="low_vertices" value="0"/> - <text name="lowest_label" value="Mínimo"/> - <text name="lowest_triangles" value="0"/> - <text name="lowest_vertices" value="0"/> - <text name="lod_table_footer"> - Nivel de detalle: [DETALLE] - </text> - <radio_group name="lod_file_or_limit" value="lod_from_file"> - <radio_item label="Cargar desde el archivo" name="lod_from_file"/> - <radio_item label="Generar automáticamente" name="lod_auto_generate"/> - <radio_item label="Ninguno" name="lod_none"/> - </radio_group> - <button label="Examinar..." name="lod_browse"/> - <combo_box name="lod_mode"> - <combo_item name="triangle_limit"> - Límite de triángulo - </combo_item> - <combo_item name="error_threshold"> - Margen de error - </combo_item> - </combo_box> - <text name="build_operator_text"> - Crear operador: + <panel name="left_panel"> + <panel name="model_name_representation_panel"> + <text name="name_label"> + Nombre del modelo: </text> - <text name="queue_mode_text"> - Modo de cola: + <text name="model_category_label"> + Este modelo representa... </text> - <combo_box name="build_operator"> - <combo_item name="edge_collapse"> - Cerrar bordes - </combo_item> - <combo_item name="half_edge_collapse"> - Cerrar la mitad de los bordes - </combo_item> - </combo_box> - <combo_box name="queue_mode"> - <combo_item name="greedy"> - Egoísta - </combo_item> - <combo_item name="lazy"> - Vago - </combo_item> - <combo_item name="independent"> - Independiente - </combo_item> + <combo_box name="model_category_combo"> + <combo_item label="Elegir uno..." name="Choose one"/> + <combo_item label="Forma del avatar" name="Avatar shape"/> + <combo_item label="Anexo del avatar" name="Avatar attachment"/> + <combo_item label="Objeto en movimiento (vehículo, animal)" name="Moving object (vehicle, animal)"/> + <combo_item label="Componente de construcción" name="Building Component"/> + <combo_item label="Grande, sin movimiento, etc." name="Large, non moving etc"/> + <combo_item label="Más pequeño, sin movimiento, etc." name="Smaller, non-moving etc"/> + <combo_item label="No es exactamente ninguno de estos" name="Not really any of these"/> </combo_box> - <text name="border_mode_text"> - Modo de borde: - </text> - <text name="share_tolderance_text"> - Tolerancia de uso compartido: - </text> - <combo_box name="border_mode"> - <combo_item name="border_unlock"> - Desbloquear - </combo_item> - <combo_item name="border_lock"> - Lock - </combo_item> - </combo_box> - <text name="crease_label"> - Ángulo de marca: - </text> - <spinner name="crease_angle" value="75"/> </panel> - <panel label="Física" name="physics_panel"> - <panel name="physics geometry"> - <radio_group name="physics_load_radio" value="physics_load_from_file"> - <radio_item label="Archivo:" name="physics_load_from_file"/> - <radio_item label="Utilizar nivel de detalle:" name="physics_use_lod"/> - </radio_group> - <combo_box name="physics_lod_combo" tool_tip="Nivel de detalle para forma física"> - <combo_item name="physics_lowest"> - Mínimo - </combo_item> - <combo_item name="physics_low"> - Bajo - </combo_item> - <combo_item name="physics_medium"> - Media - </combo_item> - <combo_item name="physics_high"> - Alto - </combo_item> - </combo_box> - <button label="Examinar..." name="physics_browse"/> + <tab_container name="import_tab"> + <panel label="Nivel de detalle" name="lod_panel" title="Nivel de detalle"> + <text initial_value="Origen" name="source" value="Origen"/> + <text initial_value="Triángulos" name="triangles" value="Triángulos"/> + <text initial_value="Vértices" name="vertices" value="Vértices"/> + <text initial_value="Alto" name="high_label" value="Alto"/> + <button label="Buscar..." name="lod_browse_high"/> + <text initial_value="0" name="high_triangles" value="0"/> + <text initial_value="0" name="high_vertices" value="0"/> + <text initial_value="Medio" name="medium_label" value="Medio"/> + <button label="Buscar..." name="lod_browse_medium"/> + <text initial_value="0" name="medium_triangles" value="0"/> + <text initial_value="0" name="medium_vertices" value="0"/> + <text initial_value="Bajo" name="low_label" value="Bajo"/> + <button label="Buscar..." name="lod_browse_low"/> + <text initial_value="0" name="low_triangles" value="0"/> + <text initial_value="0" name="low_vertices" value="0"/> + <text initial_value="Mínimo" name="lowest_label" value="Mínimo"/> + <button label="Buscar..." name="lod_browse_lowest"/> + <text initial_value="0" name="lowest_triangles" value="0"/> + <text initial_value="0" name="lowest_vertices" value="0"/> + <check_box label="Generar normales" name="gen_normals"/> + <text initial_value="Ángulo de pliegue:" name="crease_label" value="Ángulo de pliegue:"/> + <spinner name="crease_angle" value="75"/> </panel> - <panel name="physics analysis"> - <slider label="Leve:" name="Smooth"/> - <check_box label="Cerrar agujeros (lento)" name="Close Holes (Slow)"/> - <button label="Analizar" name="Decompose"/> - <button label="Cancelar" name="decompose_cancel"/> + <panel label="Física" name="physics_panel"> + <panel name="physics geometry"> + <text name="first_step_name"> + Paso 1: Nivel de detalle + </text> + <combo_box name="physics_lod_combo" tool_tip="Niveles de detalle para utilizar con la forma física"> + <combo_item name="choose_one"> + Elegir uno... + </combo_item> + <combo_item name="physics_high"> + Alto + </combo_item> + <combo_item name="physics_medium"> + Medio + </combo_item> + <combo_item name="physics_low"> + Bajo + </combo_item> + <combo_item name="physics_lowest"> + Mínimo + </combo_item> + <combo_item name="load_from_file"> + De archivo + </combo_item> + </combo_box> + <button label="Buscar..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <text name="method_label"> + Paso 2: Analizar + </text> + <text name="analysis_method_label"> + Método: + </text> + <text name="quality_label"> + Calidad: + </text> + <text name="smooth_method_label"> + Leve: + </text> + <check_box label="Cerrar agujeros" name="Close Holes (Slow)"/> + <button label="Analizar" name="Decompose"/> + <button label="Cancelar" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <text name="second_step_label"> + Paso 3: Simplificar + </text> + <text name="simp_method_header"> + Método: + </text> + <text name="pass_method_header"> + Pases: + </text> + <text name="Detail Scale label"> + Escala de detalle: + </text> + <text name="Retain%_label"> + Retención: + </text> + <combo_box name="Combine Quality" value="1"/> + <button label="Simplificar" name="Simplify"/> + <button label="Cancelar" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <text name="results_text"> + Resultados: + </text> + <text name="physics_triangles"> + Triángulos: [TRIANGLES], + </text> + <text name="physics_points"> + Vértices: [POINTS], + </text> + <text name="physics_hulls"> + Apariencias: [HULLS] + </text> + </panel> </panel> - <panel name="physics simplification"> - <slider label="Pases:" name="Combine Quality"/> - <slider label="Escala de detalle:" name="Detail Scale"/> - <slider label="Retener:" name="Retain%"/> - <button label="Simplificar" name="Simplify"/> - <button label="Cancelar" name="simplify_cancel"/> - </panel> - <panel name="physics info"> - <slider label="Ampliación de vista previa:" name="physics_explode"/> - <text name="physics_triangles"> - Triángulos: [TRIÁNGULOS] + <panel label="Opciones de subida" name="modifiers_panel"> + <text name="scale_label"> + Escala (1=sin ajuste de escala): + </text> + <spinner name="import_scale" value="1.0"/> + <text name="dimensions_label"> + Dimensiones: </text> - <text name="physics_points"> - Intersecciones: [PUNTOS] + <text name="import_dimensions"> + [X] X [Y] X [Z] </text> - <text name="physics_hulls"> - Aspecto exterior: [ASPECTO EXTERIOR] + <check_box label="Incluir texturas" name="upload_textures"/> + <text name="include_label"> + Solo para modelos de avatar: </text> + <check_box label="Incluir el peso de la piel" name="upload_skin"/> + <check_box label="Incluir posturas de las articulaciones" name="upload_joints"/> + <text name="pelvis_offset_label"> + Desplazamiento Z (subir o bajar el avatar): + </text> + <spinner name="pelvis_offset" value="0.0"/> </panel> - </panel> - <panel label="Modificadores" name="modifiers_panel"> - <spinner name="import_scale" value="1.0"/> - <text name="import_dimensions"> - [X] x [Y] x [Z] m + </tab_container> + <panel name="weights_and_warning_panel"> + <button label="Calcular pesos y precio" name="calculate_btn" tool_tip="Calcular pesos y precio"/> + <button label="Cancelar" name="cancel_btn"/> + <button label="subir" name="ok_btn" tool_tip="Subir al simulador"/> + <button label="Limpiar la configuración y reiniciar el formulario" name="reset_btn"/> + <text name="upload_fee"> + Precio de subida: L$ [FEE] + </text> + <text name="prim_weight"> + Impacto en el terreno: [EQ] + </text> + <text name="download_weight"> + Descargar: [ST] + </text> + <text name="physics_weight"> + Física: [PH] + </text> + <text name="server_weight"> + Servidor: [SIM] + </text> + <text name="warning_title"> + NOTA: + </text> + <text name="warning_message"> + No tienes derechos para subir modelos de malla. [[VURL] Averigua cómo] puedes obtener la autorización. + </text> + <text name="status"> + [STATUS] </text> - <check_box label="Texturas" name="upload_textures"/> - <check_box label="Peso de la piel" name="upload_skin"/> - <check_box label="Posturas de las articulaciones" name="upload_joints"/> - <spinner name="pelvis_offset" value="0.0"/> </panel> - </tab_container> - <text name="upload_fee"> - Precio de subida: L$ [FEE] + </panel> + <text name="lod_label"> + Vista previa: </text> - <button label="Establecer en valores predeterminados" name="reset_btn" tool_tip="Establecer en valores predeterminados"/> - <button label="Calcular pesos y precio" name="calculate_btn" tool_tip="Calcular pesos y precio"/> - <button label="Subir" name="ok_btn" tool_tip="Cargar al simulador"/> - <button label="Cancelar" name="cancel_btn"/> + <panel name="right_panel"> + <combo_box name="preview_lod_combo" tool_tip="LOD para ver en renderizado de prueba"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Media + </combo_item> + <combo_item name="low"> + Bajo + </combo_item> + <combo_item name="lowest"> + Mínimo + </combo_item> + </combo_box> + <text name="label_display"> + Mostrar... + </text> + <check_box label="Bordes" name="show_edges"/> + <check_box label="Física" name="show_physics"/> + <check_box label="Texturas" name="show_textures"/> + <check_box label="Pesos de la piel" name="show_skin_weight"/> + <check_box label="Articulaciones" name="show_joint_positions"/> + <text name="physics_explode_label"> + Ampliación de vista previa: + </text> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_model_wizard.xml b/indra/newview/skins/default/xui/es/floater_model_wizard.xml index 86de557ed9..c4eb5e955a 100644 --- a/indra/newview/skins/default/xui/es/floater_model_wizard.xml +++ b/indra/newview/skins/default/xui/es/floater_model_wizard.xml @@ -6,26 +6,20 @@ <button label="2. Optimizar" name="optimize_btn"/> <button label="1. Seleccionar archivo" name="choose_file_btn"/> <panel name="choose_file_panel"> - <panel name="choose_file_header_panel"> - <text name="choose_file_header_text"> + <panel name="header_panel"> + <text name="header_text"> Elige el archivo de modelo </text> </panel> - <panel name="choose_file_content_panel"> + <panel name="content"> <text name="advanced_users_text"> Usuarios avanzados: si tienes experiencia con las herramientas de creación de contenidos 3D, quizá te interese utilizar la función de subida avanzada. </text> <button label="Cambiar al modo Avanzado" name="switch_to_advanced"/> - <text name="choose_model_file_label"> + <text name="Cache location"> Elige el archivo de modelo que deseas subir </text> <button label="Buscar..." label_selected="Buscar..." name="browse"/> - <text name="support_collada_text"> - Second Life admite los archivos COLLADA (.dae) - </text> - <text name="dimensions_label"> - Dimensiones (metros): - </text> <text name="dimensions"> X Y Z </text> @@ -38,18 +32,15 @@ </panel> </panel> <panel name="optimize_panel"> - <panel name="optimize_header_panel"> - <text name="optimize_header_text"> + <panel name="header_panel"> + <text name="header_text"> Optimizar el modelo </text> </panel> - <text name="optimize_hint"> + <text name="description"> Hemos optimizado el rendimiento del modelo, pero puedes ajustarlo más si lo deseas. </text> - <panel name="optimize_content_panel"> - <text name="generating_lod_label"> - Generando el nivel de detalle - </text> + <panel name="content"> <text name="high_detail_text"> Generar el nivel de detalle: Alto </text> @@ -64,123 +55,64 @@ </text> </panel> <panel name="content2"> - <text name="optimize_performance_text"> - Rendimiento - </text> - <text name="optimize_faster_rendering_text"> - Renderizado más rápido -Menos detalles -Menos peso de prim - </text> - <text name="optimize_accuracy_text"> - Precisión - </text> - <text name="optimize_slower_rendering_text"> - Renderizado más lento -Más detalles -Más peso de prim - </text> - <text name="accuracy_slider_mark1"> - ' - </text> - <text name="accuracy_slider_mark2"> - ' - </text> - <text name="accuracy_slider_mark3"> - ' - </text> <button label="Recalcular la geometría" name="recalculate_geometry_btn"/> - <text name="geometry_preview_label"> + <text name="lod_label"> Vista previa de geometría </text> <combo_box name="preview_lod_combo" tool_tip="LOD para ver en renderizado de prueba"> - <combo_item name="preview_lod_high"> + <combo_item name="high"> Detalle alto </combo_item> - <combo_item name="preview_lod_medium"> + <combo_item name="medium"> Detalles medios </combo_item> - <combo_item name="preview_lod_low"> + <combo_item name="low"> Detalle bajo </combo_item> - <combo_item name="preview_lod_lowest"> + <combo_item name="lowest"> Detalles mínimos </combo_item> </combo_box> </panel> </panel> <panel name="physics_panel"> - <panel name="physics_header_panel"> - <text name="physics_header_text"> + <panel name="header_panel"> + <text name="header_text"> Ajustar la física </text> </panel> - <text name="physics_hint"> + <text name="description"> Crearemos una forma para la apariencia exterior del modelo. Ajusta el nivel de detalle de la forma según se necesite para el propósito proyectado del modelo. </text> - <panel name="physics_content_panel"> - <text name="physics_performance_text"> - Rendimiento - </text> - <text name="physics_faster_rendering_text"> - Renderizado más rápido -Menos detalles -Menos peso de prim - </text> - <text name="physics_accuracy_text"> - Precisión - </text> - <text name="physics_slower_dendering_text"> - Renderizado más lento -Más detalles -Más peso de prim - </text> - <text name="physics_example_1"> - Ejemplos: -Objetos en movimiento -Objetos voladores -Vehículos - </text> - <text name="physics_example_2"> - Ejemplos: -Objetos estáticos pequeños -Objetos con menos detalles -Muebles sencillos - </text> - <text name="physics_example_3"> - Ejemplos: -Objetos estáticos -Objetos con detalles -Edificios - </text> + <panel name="content"> <button label="Recalcular física" name="recalculate_physics_btn"/> <button label="Recalculando..." name="recalculating_physics_btn"/> - <text name="physics_preview_label"> + <text name="lod_label"> Prueba de física </text> <combo_box name="preview_lod_combo2" tool_tip="LOD para ver en renderizado de prueba"> - <combo_item name="preview_lod2_high"> + <combo_item name="high"> Detalle alto </combo_item> - <combo_item name="preview_lod2_medium"> + <combo_item name="medium"> Detalles medios </combo_item> - <combo_item name="preview_lod2_low"> + <combo_item name="low"> Detalle bajo </combo_item> - <combo_item name="preview_lod2_lowest"> + <combo_item name="lowest"> Detalles mínimos </combo_item> </combo_box> </panel> </panel> <panel name="review_panel"> - <panel name="review_header_panel"> - <text name="review_header_text"> + <panel name="header_panel"> + <text name="header_text"> Revisar </text> </panel> - <panel name="review_content_panel"> + <panel name="content"> <text name="review_prim_equiv"> Impacto en la parcela/región: [EQUIV] equivalentes en prim </text> @@ -193,8 +125,8 @@ Edificios </panel> </panel> <panel name="upload_panel"> - <panel name="upload_header_panel"> - <text name="upload_header_text"> + <panel name="header_panel"> + <text name="header_text"> Subida finalizada </text> </panel> diff --git a/indra/newview/skins/default/xui/es/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml index 258f84c361..b29fe04848 100644 --- a/indra/newview/skins/default/xui/es/floater_moveview.xml +++ b/indra/newview/skins/default/xui/es/floater_moveview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move_floater"> +<floater name="move_floater" title="MOVERME"> <string name="walk_forward_tooltip"> Caminar hacia adelante (cursor arriba o W) </string> @@ -58,14 +58,14 @@ Volar </string> <panel name="panel_actions"> - <button label="" label_selected="" name="move up btn" tool_tip="Volar (pulsa E para subir)"/> <button label="" label_selected="" name="turn left btn" tool_tip="Girar a la izq. (cursor izq. o A)"/> <joystick_slide name="move left btn" tool_tip="Caminar a la izq. (pulsa Mayúsculas + cursor izq. o A)"/> - <button label="" label_selected="" name="move down btn" tool_tip="Volar (pulsa C para descender)"/> <button label="" label_selected="" name="turn right btn" tool_tip="Girar a la der. (cursor der. o D)"/> <joystick_slide name="move right btn" tool_tip="Caminar a la der. (pulsa Mayúsculas + cursor der. o D)"/> <joystick_turn name="forward btn" tool_tip="Caminar hacia adelante (cursor arriba o W)"/> <joystick_turn name="backward btn" tool_tip="Caminar de espaldas (cursor abajo o S)"/> + <button label="" label_selected="" name="move up btn" tool_tip="Volar (pulsa E para subir)"/> + <button label="" label_selected="" name="move down btn" tool_tip="Volar (pulsa C para descender)"/> </panel> <panel name="panel_modes"> <button label="" name="mode_walk_btn" tool_tip="Modo de caminar"/> diff --git a/indra/newview/skins/default/xui/es/floater_my_appearance.xml b/indra/newview/skins/default/xui/es/floater_my_appearance.xml new file mode 100644 index 0000000000..774babf04e --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_my_appearance.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_my_appearance" title="APARIENCIA"> + <panel label="Modificar la apariencia" name="main_panel"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_my_inventory.xml b/indra/newview/skins/default/xui/es/floater_my_inventory.xml new file mode 100644 index 0000000000..0efd9f1c6d --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_my_inventory.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_my_inventory" title="INVENTARIO"/> diff --git a/indra/newview/skins/default/xui/es/floater_object_weights.xml b/indra/newview/skins/default/xui/es/floater_object_weights.xml new file mode 100644 index 0000000000..50c4f0518d --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_object_weights.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="object_weights" title="AVANZADAS"> + <floater.string name="nothing_selected" value="--"/> + <text name="selected_text" value="SELECCIONADOS"/> + <text name="objects" value="--"/> + <text name="objects_label" value="Objetos"/> + <text name="prims" value="--"/> + <text name="prims_label" value="Primitivas"/> + <text name="weights_of_selected_text" value="PESOS DE SELECCIONADOS"/> + <text name="download" value="--"/> + <text name="download_label" value="Descargar"/> + <text name="physics" value="--"/> + <text name="physics_label" value="Física"/> + <text name="server" value="--"/> + <text name="server_label" value="Servidor"/> + <text name="display" value="--"/> + <text name="display_label" value="Mostrar"/> + <text name="land_impacts_text" value="IMPACTOS EN EL TERRENO"/> + <text name="selected" value="--"/> + <text name="selected_label" value="Seleccionados"/> + <text name="rezzed_on_land" value="--"/> + <text name="rezzed_on_land_label" value="Colocados en el terreno"/> + <text name="remaining_capacity" value="--"/> + <text name="remaining_capacity_label" value="Capacidad restante"/> + <text name="total_capacity" value="--"/> + <text name="total_capacity_label" value="Capacidad total"/> + <text name="help_SLURL" value="[secondlife:///app/help/object_weights ¿Qué es todo esto?...]"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml new file mode 100644 index 0000000000..f48d0d2d0c --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="modal container" title="GUARDAR EL VESTUARIO"/> diff --git a/indra/newview/skins/default/xui/es/floater_people.xml b/indra/newview/skins/default/xui/es/floater_people.xml new file mode 100644 index 0000000000..f5a3eab008 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_people.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_people" title="GENTE"> + <panel_container name="main_panel"> + <panel label="Perfil del grupo" name="panel_group_info_sidetray"/> + <panel label="Residentes y objetos ignorados" name="panel_block_list_sidetray"/> + </panel_container> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_picks.xml b/indra/newview/skins/default/xui/es/floater_picks.xml new file mode 100644 index 0000000000..255aa5dcdc --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_picks.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_picks" title="Destacados"/> diff --git a/indra/newview/skins/default/xui/es/floater_places.xml b/indra/newview/skins/default/xui/es/floater_places.xml new file mode 100644 index 0000000000..12c6548205 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_places.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_places" title="LUGARES"> + <panel label="Lugares" name="main_panel"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_sound_devices.xml b/indra/newview/skins/default/xui/es/floater_sound_devices.xml index a5ffbd517a..0291f9e796 100644 --- a/indra/newview/skins/default/xui/es/floater_sound_devices.xml +++ b/indra/newview/skins/default/xui/es/floater_sound_devices.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_sound_devices" title="Dispositivos de sonido"> +<floater name="floater_sound_devices" title="DISPOSITIVOS DE SONIDO"> <text name="voice_label"> Chat de voz </text> diff --git a/indra/newview/skins/default/xui/es/floater_stats.xml b/indra/newview/skins/default/xui/es/floater_stats.xml index 5f4fabf375..ba4af2e866 100644 --- a/indra/newview/skins/default/xui/es/floater_stats.xml +++ b/indra/newview/skins/default/xui/es/floater_stats.xml @@ -10,8 +10,8 @@ </stat_view> <stat_view label="Avanzado" name="advanced"> <stat_view label="Renderización" name="render"> - <stat_bar label="KTris generados" name="ktrisframe"/> - <stat_bar label="KTris generados" name="ktrissec"/> + <stat_bar label="KTris generados por fotograma" name="ktrisframe"/> + <stat_bar label="KTris generados por segundo" name="ktrissec"/> <stat_bar label="Objetos en total" name="objs"/> <stat_bar label="Objetos nuevos" name="newobjs"/> </stat_view> @@ -43,18 +43,6 @@ <stat_bar label="Pin de objetos" name="physicspinnedtasks"/> <stat_bar label="Objetos con bajo nivel de detalle" name="physicslodtasks"/> <stat_bar label="Memoria asignada" name="physicsmemoryallocated"/> - <stat_bar label="Agentes: actual./seg." name="simagentups"/> - <stat_bar label="Agentes del grid principal" name="simmainagents"/> - <stat_bar label="Agentes secundarios" name="simchildagents"/> - <stat_bar label="Objetos" name="simobjects"/> - <stat_bar label="Objetos activos" name="simactiveobjects"/> - <stat_bar label="Scripts activos" name="simactivescripts"/> - <stat_bar label="Eventos de scripts" name="simscripteps"/> - <stat_bar label="Paquetes salientes" name="siminpps"/> - <stat_bar label="Paquetes entrantes" name="simoutpps"/> - <stat_bar label="Descargas pendientes" name="simpendingdownloads"/> - <stat_bar label="Subidas pendientes" name="simpendinguploads"/> - <stat_bar label="Total de bytes no reconocidos" name="simtotalunackedbytes"/> </stat_view> <stat_view label="Tiempo (ms)" name="simperf"> <stat_bar label="Tiempo total de los frames" name="simframemsec"/> @@ -64,6 +52,14 @@ <stat_bar label="Tiempo de los agentes" name="simagentmsec"/> <stat_bar label="Tiempo de las imágenes" name="simimagesmsec"/> <stat_bar label="Tiempo de los scripts" name="simscriptmsec"/> + <stat_bar label="Tiempo libre" name="simsparemsec"/> + <stat_view label="Datos de tiempo (ms)" name="timedetails"> + <stat_bar label="Paso de física" name="simsimphysicsstepmsec"/> + <stat_bar label="Actualizar formas físicas" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Otros (Física)" name="simsimphysicsothermsec"/> + <stat_bar label="Tiempo de suspensión" name="simsleepmsec"/> + <stat_bar label="E/S bombeo" name="simpumpiomsec"/> + </stat_view> </stat_view> </stat_view> </container_view> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index f6e246ebae..650b4b457d 100644 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -25,10 +25,10 @@ Pulsa y arrastra para seleccionar el terreno. </floater.string> <floater.string name="status_selectcount"> - [OBJ_COUNT] objetos ( [PRIM_COUNT] prims[PE_STRING] ) seleccionados + [OBJ_COUNT] objetos seleccionados, impacto en el terreno [LAND_IMPACT] </floater.string> - <floater.string name="status_selectprimequiv"> - , [SEL_WEIGHT] equivalentes en prim + <floater.string name="status_remaining_capacity"> + Capacidad restante [LAND_CAPACITY]. </floater.string> <button label="" label_selected="" name="button focus" tool_tip="Visión"/> <button label="" label_selected="" name="button move" tool_tip="Mover"/> @@ -105,8 +105,8 @@ <text name="selection_empty"> No está seleccionado nada. </text> - <text name="selection_weight"> - Peso de física [PHYS_WEIGHT], Coste de renderizado [DISP_WEIGHT]. + <text name="remaining_capacity"> + [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Más información] </text> <tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288"> <panel label="General" name="General"> @@ -319,7 +319,6 @@ Tipo de unión </text> <combo_box name="sculpt type control"> - <combo_box.item label="(ninguna)" name="None"/> <combo_box.item label="Esfera" name="Sphere"/> <combo_box.item label="Toroide" name="Torus"/> <combo_box.item label="Plano" name="Plane"/> diff --git a/indra/newview/skins/default/xui/es/floater_toybox.xml b/indra/newview/skins/default/xui/es/floater_toybox.xml new file mode 100644 index 0000000000..b36a05a6e4 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_toybox.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Toybox" title="PERSONALIZAR BARRAS DE HERRAMIENTAS"> + <text name="toybox label 1"> + Puedes agregar o quitar botones arrastrándolos a las barras de herramientas o desde ellas. + </text> + <text name="toybox label 2"> + Los botones aparecerán como se muestra o solo como iconos, según la configuración de cada barra de herramientas. + </text> + <button label="Restaurar valores predeterminados" label_selected="Restaurar valores predeterminados" name="btn_restore_defaults"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml index f02855123c..cefec2a7a1 100644 --- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="Controles de Voz"> +<floater name="floater_voice_controls" title="CONTROLES DE LA VOZ"> <string name="title_nearby"> - CHAT DE VOZ + Chat de voz </string> <string name="title_group"> Multiconferencia de voz con [GROUP] diff --git a/indra/newview/skins/default/xui/es/menu_hide_navbar.xml b/indra/newview/skins/default/xui/es/menu_hide_navbar.xml index 22a1873234..9945908c4f 100644 --- a/indra/newview/skins/default/xui/es/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/es/menu_hide_navbar.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_navbar_menu"> - <menu_item_check label="Mostrar la barra de navegación" name="ShowNavbarNavigationPanel"/> + <menu_item_check label="Mostrar la barra de navegación y de favoritos" name="ShowNavbarNavigationPanel"/> <menu_item_check label="Mostrar la barra de favoritos" name="ShowNavbarFavoritesPanel"/> <menu_item_check label="Mostrar mini-barra de ubicación" name="ShowMiniLocationPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml index cabcacaed5..e3abf7ad62 100644 --- a/indra/newview/skins/default/xui/es/menu_login.xml +++ b/indra/newview/skins/default/xui/es/menu_login.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Login Menu"> <menu label="Yo" name="File"> - <menu_item_call label="Preferencias" name="Preferences..."/> + <menu_item_call label="Preferencias..." name="Preferences..."/> <menu_item_call label="Salir de [APP_NAME]" name="Quit"/> </menu> <menu label="Ayuda" name="Help"> diff --git a/indra/newview/skins/default/xui/es/menu_toolbars.xml b/indra/newview/skins/default/xui/es/menu_toolbars.xml new file mode 100644 index 0000000000..f8ed1c54ca --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_toolbars.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Toolbars Popup"> + <menu_item_call label="Elegir botones..." name="Chose Buttons"/> + <menu_item_check label="Iconos y etiquetas" name="icons_with_text"/> + <menu_item_check label="Solo iconos" name="icons_only"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index bc8a5731ab..0714e7f2c6 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -1,29 +1,30 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Main Menu"> <menu label="Yo" name="Me"> - <menu_item_call label="Preferencias" name="Preferences"/> - <menu_item_call label="Mi panel de control" name="Manage My Account"> + <menu_item_call label="Panel de control..." name="Manage My Account"> <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=es"/> </menu_item_call> - <menu_item_call label="Comprar L$" name="Buy and Sell L$"/> - <menu_item_call label="Mi perfil" name="Profile"/> - <menu_item_call label="Mi apariencia" name="ChangeOutfit"/> - <menu_item_check label="Mi Inventario" name="Inventory"/> - <menu_item_check label="Mi Inventario" name="ShowSidetrayInventory"/> - <menu_item_check label="Mis gestos" name="Gestures"/> - <menu_item_check label="Mi voz" name="ShowVoice"/> + <menu_item_call label="Perfil..." name="Profile"/> + <menu_item_call label="Apariencia" name="ChangeOutfit"/> + <menu_item_check label="Inventario..." name="Inventory"/> + <menu_item_check label="Gestos..." name="Gestures"/> + <menu_item_check label="Voz..." name="ShowVoice"/> <menu label="Movimiento" name="Movement"> <menu_item_call label="Sentarte" name="Sit Down Here"/> <menu_item_check label="Volar" name="Fly"/> <menu_item_check label="Correr siempre" name="Always Run"/> <menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/> </menu> - <menu label="Mi estado" name="Status"> + <menu label="Estado" name="Status"> <menu_item_call label="Ausente" name="Set Away"/> <menu_item_call label="Ocupado" name="Set Busy"/> </menu> <menu_item_call label="Solicitar estatus de Administrador" name="Request Admin Options"/> <menu_item_call label="Dejar el estatus de Administrador" name="Leave Admin Options"/> + <menu_item_call label="Comprar L$" name="Buy and Sell L$"/> + <menu_item_call label="Preferencias..." name="Preferences"/> + <menu_item_call label="Barras de herramientas..." name="Toolbars"/> + <menu_item_call label="Ocultar todos los controles" name="Hide UI"/> <menu_item_call label="Salir de [APP_NAME]" name="Quit"/> </menu> <menu label="Comunicarme" name="Communicate"> @@ -145,7 +146,6 @@ </menu> <menu label="Ayuda" name="Help"> <menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/> - <menu_item_check label="Permitir consejos" name="Enable Hints"/> <menu_item_call label="Denunciar una infracción" name="Report Abuse"/> <menu_item_call label="Informar de un fallo" name="Report Bug"/> <menu_item_call label="Acerca de [APP_NAME]" name="About Second Life"/> @@ -161,7 +161,7 @@ <menu label="Herramientas de rendimiento" name="Performance Tools"> <menu_item_call label="Medidor de lag" name="Lag Meter"/> <menu_item_check label="Estadísticas" name="Statistics Bar"/> - <menu_item_check label="Mostrar cuánto cuesta renderizar el avatar" name="Avatar Rendering Cost"/> + <menu_item_check label="Mostrar el peso del dibujo de los avatares" name="Avatar Rendering Cost"/> </menu> <menu label="Realzado y Visibilidad" name="Highlighting and Visibility"> <menu_item_check label="Baliza con destellos" name="Cheesy Beacon"/> @@ -271,6 +271,7 @@ <menu_item_check label="Actualizar el tipo" name="Update Type"/> <menu_item_check label="Información sobre el nivel de detalle" name="LOD Info"/> <menu_item_check label="Crear cola" name="Build Queue"/> + <menu_item_check label="Complejidad del renderizado" name="rendercomplexity"/> <menu_item_check label="Esculpir" name="Sculpt"/> </menu> <menu label="Rendering" name="Rendering"> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 4fb29b9427..3fe0072a20 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -1919,6 +1919,12 @@ Dado que estos objetos tienen scripts, moverlos a tu inventario puede provocar u ¿Estás seguro de que quieres salir? <usetemplate ignoretext="Confirmar antes de salir" name="okcancelignore" notext="No salir" yestext="Salir"/> </notification> + <notification name="ConfirmRestoreToybox"> + ¿Estás seguro de que quieres restaurar los botones y barras de herramientas predeterminados? + +Esta acción no se puede deshacer. + <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> + </notification> <notification name="DeleteItems"> [QUESTION] <usetemplate ignoretext="Confirmar antes de eliminar elementos" name="okcancelignore" notext="Cancelar" yestext="OK"/> @@ -2999,10 +3005,6 @@ Al ocultar el botón Hablar se desactiva la función de voz. <button name="cancel" text="Cancelar"/> </form> </notification> - <notification label="" name="ModeChange"> - Para cambiar de modo tienes que salir y reiniciar. - <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> - </notification> <notification label="" name="NoClassifieds"> La creación y edición de clasificados sólo está disponible en el modo Avanzado. ¿Quieres salir y cambiar de modo? El selector de modo se encuentra en la pantalla de inicio de sesión. <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> @@ -3047,6 +3049,10 @@ Al ocultar el botón Hablar se desactiva la función de voz. Las búsquedas solo están disponibles en el modo Avanzado. ¿Quieres cerrar sesión y cambiar de modo? <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> </notification> + <notification label="" name="ConfirmHideUI"> + Esta acción ocultará todos los botones y elementos de menú. Para restaurarlos, pulsa otra vez en [SHORTCUT]. + <usetemplate ignoretext="Confirmar antes de ocultar la IU" name="okcancelignore" notext="Cancelar" yestext="OK"/> + </notification> <global name="UnsupportedGLRequirements"> Parece que no tienes el hardware apropiado para [APP_NAME]. [APP_NAME] requiere una tarjeta gráfica OpenGL que admita texturas múltiples ('multitexture support'). Si la tienes, comprueba que tienes los últimos 'drivers' para tu tarjeta gráfica, así como los últimos parches y 'service packs' para tu sistema operativo. diff --git a/indra/newview/skins/default/xui/es/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/es/panel_chiclet_bar.xml new file mode 100644 index 0000000000..eaaa5dbe78 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_chiclet_bar.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="chiclet_bar"> + <layout_stack name="toolbar_stack"> + <layout_panel name="im_well_panel"> + <chiclet_im_well name="im_well"> + <button name="Unread IM messages" tool_tip="Conversaciones"/> + </chiclet_im_well> + </layout_panel> + <layout_panel name="notification_well_panel"> + <chiclet_notification name="notification_well"> + <button name="Unread" tool_tip="Notificaciones"/> + </chiclet_notification> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_me.xml b/indra/newview/skins/default/xui/es/panel_me.xml index ed253904aa..850cd6ec71 100644 --- a/indra/newview/skins/default/xui/es/panel_me.xml +++ b/indra/newview/skins/default/xui/es/panel_me.xml @@ -1,7 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Mi perfil" name="panel_me"> - <tab_container name="tabs"> - <panel label="MI PERFIL" name="panel_profile"/> - <panel label="MIS DESTACADOS" name="panel_picks"/> - </tab_container> + <panel label="MIS DESTACADOS" name="panel_picks"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_navigation_bar.xml b/indra/newview/skins/default/xui/es/panel_navigation_bar.xml index 293c9ef1d9..1b7f5d5a9f 100644 --- a/indra/newview/skins/default/xui/es/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/es/panel_navigation_bar.xml @@ -1,18 +1,23 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="navigation_bar"> - <panel name="navigation_panel"> - <pull_button name="back_btn" tool_tip="Volver a la localización anterior"/> - <pull_button name="forward_btn" tool_tip="Ir una localización adelante"/> - <button name="home_btn" tool_tip="Teleportar a mi Base"/> - <location_input label="Localización" name="location_combo"/> - <search_combo_box label="Buscar" name="search_combo_box" tool_tip="Buscar"> - <combo_editor label="Buscar en [SECOND_LIFE]" name="search_combo_editor"/> - </search_combo_box> - </panel> - <favorites_bar name="favorite" tool_tip="¡Accede rápidamente a tus lugares favoritos de Second Life arrastrando hitos hasta aquí!"> - <label name="favorites_bar_label" tool_tip="¡Accede rápidamente a tus lugares favoritos de Second Life arrastrando hitos hasta aquí!"> - Barra de Favoritos - </label> - <chevron_button name=">>" tool_tip="Ver más de Mis favoritos"/> - </favorites_bar> + <layout_stack name="nvp_stack"> + <layout_panel name="navigation_layout_panel"> + <panel name="navigation_panel"> + <pull_button name="back_btn" tool_tip="Volver a lo localización anterior"/> + <pull_button name="forward_btn" tool_tip="Ir una localización adelante"/> + <button name="home_btn" tool_tip="Teleportar a mi Base"/> + <location_input label="Lugar" name="location_combo"/> + </panel> + </layout_panel> + <layout_panel name="favorites_layout_panel"> + <favorites_bar name="favorite" tool_tip="¡Accede rápidamente a tus lugares favoritos de Second Life arrastrando hitos hasta aquí!"> + <label name="favorites_bar_label" tool_tip="¡Accede rápidamente a tus lugares favoritos de Second Life arrastrando hitos hasta aquí!"> + Barra de Favoritos + </label> + <more_button name=">>" tool_tip="Ver más de Mis favoritos"> + Más ▼ + </more_button> + </favorites_bar> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml new file mode 100644 index 0000000000..95ce14c9a7 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="nearby_chat"> + <check_box label="Traducir chat (mediante Google)" name="translate_chat_checkbox"/> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml index a15c8deaf9..4625075aa5 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml @@ -51,7 +51,7 @@ <combo_box.item label="Русский (ruso)" name="Russian"/> <combo_box.item label="Türkçe (turco)" name="Turkish"/> <combo_box.item label="Українська (ucraniano)" name="Ukrainian"/> - <combo_box.item label="中文 (正體) (chino)" name="Chinese"/> + <combo_box.item label="中文 (正體) (Chino)" name="Chinese"/> <combo_box.item label="日本語 (japonés)" name="Japanese"/> <combo_box.item label="한국어 (coreano)" name="Korean"/> </combo_box> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml index c762e6b7fe..4fc163f5b6 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml @@ -13,7 +13,10 @@ <combo_box.item label="Italiano - Beta" name="Italian"/> <combo_box.item label="Polski (Polaco) - Beta" name="Polish"/> <combo_box.item label="Português (portugués) - Beta" name="Portugese"/> + <combo_box.item label="Русский (Ruso) - Beta" name="Russian"/> + <combo_box.item label="Türkçe (Turco) - Beta" name="Turkish"/> <combo_box.item label="日本語 (Japonés) - Beta" name="(Japanese)"/> + <combo_box.item label="正體中文 (Chino tradicional) - Beta" name="Traditional Chinese"/> </combo_box> <text name="language_textbox2"> (requiere reiniciar) @@ -48,7 +51,6 @@ <check_box label="Títulos de grupos" name="show_all_title_checkbox1" tool_tip="Mostrar títulos de grupos, como Jefe o Miembro"/> <check_box label="Realzar amigos" name="show_friends" tool_tip="Realzar las etiquetas de los nombres de tus amigos"/> <check_box label="Ver nombres mostrados" name="display_names_check" tool_tip="Comprobar para utilizar nombres mostrados en chat, MI, etiquetas de nombres, etc."/> - <check_box label="Permitir los consejos de la IU del visor" name="viewer_hints_check"/> <text name="inworld_typing_rg_label"> Si pulsas las teclas de letras: </text> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_move.xml b/indra/newview/skins/default/xui/es/panel_preferences_move.xml index d95e167361..b2ff6b61c2 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_move.xml @@ -7,18 +7,33 @@ </text> <check_box label="Construir/Editar" name="edit_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara al entrar en o salir del modo de edición"/> <check_box label="Apariencia" name="appearance_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara mientras se está editando"/> - <check_box initial_value="verdadero" label="Barra lateral" name="appearance_sidebar_positioning" tool_tip="Usar el posicionamiento automático de la cámara para la barra lateral"/> + <text name="keyboard_lbl"> + Teclado: + </text> + <check_box label="Las teclas del cursor siempre para moverme" name="arrow_keys_move_avatar_check"/> + <check_box label="Correr siempre: atajo de teclado" name="tap_tap_hold_to_run"/> + <text name="mouse_lbl"> + Ratón: + </text> <check_box label="Verme en vista subjetiva" name="first_person_avatar_visible"/> <text name=" Mouse Sensitivity"> Sensibilidad del ratón en la Vista subjetiva: </text> <check_box label="Invertir" name="invert_mouse"/> - <check_box label="Las teclas del cursor siempre para moverme" name="arrow_keys_move_avatar_check"/> - <check_box label="Correr siempre: atajo de teclado" name="tap_tap_hold_to_run"/> - <check_box label="Haz doble clic para:" name="double_click_chkbox"/> - <radio_group name="double_click_action"> - <radio_item label="Teleportarte" name="radio_teleport"/> - <radio_item label="Piloto automático" name="radio_autopilot"/> - </radio_group> + <text name="single_click_action_lbl"> + Un clic en el terreno: + </text> + <combo_box name="single_click_action_combo"> + <combo_box.item label="Ninguna acción" name="0"/> + <combo_box.item label="Ir al punto seleccionado" name="1"/> + </combo_box> + <text name="double_click_action_lbl"> + Doble clic en el terreno: + </text> + <combo_box name="double_click_action_combo"> + <combo_box.item label="Ninguna acción" name="0"/> + <combo_box.item label="Ir al punto seleccionado" name="1"/> + <combo_box.item label="Teleportarte al punto seleccionado" name="2"/> + </combo_box> <button label="Otros dispositivos" name="joystick_setup_button"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_status_bar.xml b/indra/newview/skins/default/xui/es/panel_status_bar.xml index 0391258b75..d43790c8c6 100644 --- a/indra/newview/skins/default/xui/es/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/es/panel_status_bar.xml @@ -17,12 +17,9 @@ </panel.string> <panel name="balance_bg"> <text name="balance" tool_tip="Haz clic para actualizar tu saldo en L$" value="20 L$"/> - <button label="COMPRAR L$" name="buyL" tool_tip="Pulsa para comprar más L$"/> + <button label="Comprar L$" name="buyL" tool_tip="Pulsa para comprar más L$"/> + <button label="Comprar" name="goShop" tool_tip="Abrir el mercado de Second Life"/> </panel> - <combo_box name="mode_combo" tool_tip="Selecciona el modo. Elige Básico para una exploración rápida y fácil y para chatear. Elige Avanzado para tener acceso a más funciones."> - <combo_box.item label="Modo Básico" name="Basic"/> - <combo_box.item label="Modo Avanzado" name="Advanced"/> - </combo_box> <text name="TimeText" tool_tip="Hora actual (Pacífico)"> 24:00 AM PST </text> diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml index aae9bfc113..79d0cb84e8 100644 --- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml @@ -14,7 +14,7 @@ </string> <button label="Objetos recibidos" name="inbox_btn"/> <text name="inbox_fresh_new_count"> - [NUM] Nuevos + [NUM] nuevos </text> <panel tool_tip="Drag and drop items to your inventory to manage and use them"> <text name="inbox_inventory_placeholder"> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index cc044ba416..83747b85c0 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -34,6 +34,9 @@ <string name="ProgressChangingResolution"> Cambiando la resolución... </string> + <string name="Fullbright"> + Brillo al máximo (antiguo) + </string> <string name="LoginInProgress"> Iniciando la sesión. [APP_NAME] debe de aparecer congelado. Por favor, espere. </string> @@ -116,7 +119,7 @@ No se pudo verificar la firma del certificado devuelta por el servidor de la cuadrícula. Ponte en contacto con el administrador de la cuadrícula. </string> <string name="LoginFailedNoNetwork"> - Error de red: no se ha podido conectar; por favor, revisa tu conexión a Internet. + Error de red: no se ha podido conectar; por favor, revisa tu conexión a internet. </string> <string name="LoginFailed"> Error en el inicio de sesión. @@ -1255,6 +1258,9 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="Marketplace Error Internal Import"> Error: Este objeto tiene un problema. Vuelve a intentarlo más tarde. </string> + <string name="Open landmarks"> + Abrir hitos + </string> <string name="no_transfer" value="(no transferible)"/> <string name="no_modify" value="(no modificable)"/> <string name="no_copy" value="(no copiable)"/> @@ -4158,8 +4164,8 @@ Denuncia de infracción <string name="Female - Wow"> Mujer - Admiración </string> - <string name="/bow1"> - /reverencia1 + <string name="/bow"> + /reverencia </string> <string name="/clap"> /aplaudir @@ -4671,4 +4677,172 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="ParticleHiding"> Ocultando las partículas </string> + <string name="Command_AboutLand_Label"> + Acerca del terreno + </string> + <string name="Command_Appearance_Label"> + Apariencia + </string> + <string name="Command_Avatar_Label"> + Avatar + </string> + <string name="Command_Build_Label"> + Construir + </string> + <string name="Command_Chat_Label"> + Chat + </string> + <string name="Command_Compass_Label"> + Brújula + </string> + <string name="Command_Destinations_Label"> + Destinos + </string> + <string name="Command_Gestures_Label"> + Gestos + </string> + <string name="Command_HowTo_Label"> + Cómo + </string> + <string name="Command_Inventory_Label"> + Inventario + </string> + <string name="Command_Map_Label"> + Mapa + </string> + <string name="Command_Marketplace_Label"> + Mercado + </string> + <string name="Command_MiniMap_Label"> + Minimapa + </string> + <string name="Command_Move_Label"> + Moverme + </string> + <string name="Command_People_Label"> + Gente + </string> + <string name="Command_Picks_Label"> + Destacados + </string> + <string name="Command_Places_Label"> + Lugares + </string> + <string name="Command_Preferences_Label"> + Preferencias + </string> + <string name="Command_Profile_Label"> + Perfil + </string> + <string name="Command_Search_Label"> + Buscar + </string> + <string name="Command_Snapshot_Label"> + Foto + </string> + <string name="Command_Speak_Label"> + Hablar + </string> + <string name="Command_View_Label"> + Visión + </string> + <string name="Command_Voice_Label"> + Chat de voz + </string> + <string name="Command_AboutLand_Tooltip"> + Información sobre el terreno que vas a visitar + </string> + <string name="Command_Appearance_Tooltip"> + Cambiar tu avatar + </string> + <string name="Command_Avatar_Tooltip"> + Elegir un avatar completo + </string> + <string name="Command_Build_Tooltip"> + Construir objetos y modificar la forma del terreno + </string> + <string name="Command_Chat_Tooltip"> + Habla por chat de texto con las personas próximas + </string> + <string name="Command_Compass_Tooltip"> + Brújula + </string> + <string name="Command_Destinations_Tooltip"> + Destinos de interés + </string> + <string name="Command_Gestures_Tooltip"> + Gestos para tu avatar + </string> + <string name="Command_HowTo_Tooltip"> + Cómo hacer las tareas habituales + </string> + <string name="Command_Inventory_Tooltip"> + Ver y usar tus pertenencias + </string> + <string name="Command_Map_Tooltip"> + Mapa del mundo + </string> + <string name="Command_Marketplace_Tooltip"> + Ir de compras + </string> + <string name="Command_MiniMap_Tooltip"> + Mostrar la gente que está cerca + </string> + <string name="Command_Move_Tooltip"> + Desplazando el avatar + </string> + <string name="Command_People_Tooltip"> + Amigos, grupos y personas próximas + </string> + <string name="Command_Picks_Tooltip"> + Lugares que se mostrarán como favoritos en tu perfil + </string> + <string name="Command_Places_Tooltip"> + Lugares que has guardado + </string> + <string name="Command_Preferences_Tooltip"> + Preferencias + </string> + <string name="Command_Profile_Tooltip"> + Consulta o edita tu perfil + </string> + <string name="Command_Search_Tooltip"> + Buscar lugares, eventos y personas + </string> + <string name="Command_Snapshot_Tooltip"> + Tomar una fotografía + </string> + <string name="Command_Speak_Tooltip"> + Utiliza el micrófono para hablar con las personas próximas + </string> + <string name="Command_View_Tooltip"> + Cambiando el ángulo de la cámara + </string> + <string name="Command_Voice_Tooltip"> + Personas próximas con capacidad de voz + </string> + <string name="Retain%"> + % retención + </string> + <string name="Detail"> + Detalle + </string> + <string name="Better Detail"> + Mejor detalle + </string> + <string name="Surface"> + Superficie + </string> + <string name="Solid"> + Sólido + </string> + <string name="Wrap"> + Envoltura + </string> + <string name="Preview"> + Vista previa + </string> + <string name="Normal"> + Normal + </string> </strings> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml index dd4c1c9f63..66b84af3aa 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml @@ -16,7 +16,7 @@ <combo_box.item label="Русский (Russe) - Bêta" name="Russian"/> <combo_box.item label="Türkçe (Turc) - Bêta" name="Turkish"/> <combo_box.item label="日本語 (Japonais) - Bêta" name="(Japanese)"/> - <combo_box.item label="正體 (Chinois traditionnel) - Bêta" name="Traditional Chinese"/> + <combo_box.item label="正體中文 (Chinois traditionnel) - Bêta" name="Traditional Chinese"/> </combo_box> <text name="language_textbox2"> (redémarrage requis) diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml index 4f52105404..90a833471c 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml @@ -16,7 +16,7 @@ <combo_box.item label="Русский (Russo) - Beta" name="Russian"/> <combo_box.item label="Türkçe (Turco) - Beta" name="Turkish"/> <combo_box.item label="日本語 (Giapponese) - Beta" name="(Japanese)"/> - <combo_box.item label="正體 (Cinese tradizionale) - Beta" name="Traditional Chinese"/> + <combo_box.item label="正體中文 (Cinese tradizionale) - Beta" name="Traditional Chinese"/> </combo_box> <text name="language_textbox2"> (Richiede il riavvio) diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml index 47bb2455cf..c628ade43e 100644 --- a/indra/newview/skins/default/xui/ja/floater_about.xml +++ b/indra/newview/skins/default/xui/ja/floater_about.xml @@ -10,7 +10,7 @@ <floater.string name="AboutPosition"> あなたの現在地は、[POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] の [REGION] です。位置は <nolink>[HOSTNAME]</nolink> です。([HOSTIP]) [SERVER_VERSION] -[[SERVER_RELEASE_NOTES_URL] [リリースノート]] +[SERVER_RELEASE_NOTES_URL] </floater.string> <floater.string name="AboutSystem"> CPU: [CPU] @@ -37,6 +37,9 @@ Qt Webkit バージョン: [QT_WEBKIT_VERSION] <floater.string name="AboutTraffic"> パケットロス: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) </floater.string> + <floater.string name="ErrorFetchingServerReleaseNotesURL"> + サーバーのリリースノートの URL を取得中にエラーが発生しました。 + </floater.string> <tab_container name="about_tab"> <panel label="情報" name="support_panel"> <button label="クリップボードにコピー" name="copy_btn"/> diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml index e870a8ace9..3c88c902f8 100644 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -214,19 +214,19 @@ オブジェクトボーナス: [BONUS] </text> <text name="Simulator primitive usage:"> - プリム使用状況: + リージョン(地域)の許容数: </text> <text name="objects_available"> [MAX] の内 [COUNT] ([AVAILABLE] 利用可能) </text> <text name="Primitives parcel supports:"> - 区画でサポートされるプリム数: + 区画の許容数: </text> <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> - 区画上のプリム数: + 区画の負荷: </text> <text name="total_objects_text"> [COUNT] diff --git a/indra/newview/skins/default/xui/ja/floater_avatar.xml b/indra/newview/skins/default/xui/ja/floater_avatar.xml new file mode 100644 index 0000000000..c4455282d2 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_avatar.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Avatar" title="アバターピッカー"/> diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml index 71a20c8e18..5d3a048975 100644 --- a/indra/newview/skins/default/xui/ja/floater_camera.xml +++ b/indra/newview/skins/default/xui/ja/floater_camera.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="camera_floater"> +<floater name="camera_floater" title="表示"> <floater.string name="rotate_tooltip"> フォーカスを中心にカメラを回転 </floater.string> diff --git a/indra/newview/skins/default/xui/ja/floater_chat_bar.xml b/indra/newview/skins/default/xui/ja/floater_chat_bar.xml new file mode 100644 index 0000000000..9735afb101 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_chat_bar.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="chat_bar" title="近くのチャット"> + <panel> + <line_editor label="ここをクリックしてチャットを開始します。" name="chat_box" tool_tip="Enter キーを押して話し、Ctrl + Enter キーで叫びます。"/> + <button name="show_nearby_chat" tool_tip="近くのチャットログを表示・非表示"/> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_destinations.xml b/indra/newview/skins/default/xui/ja/floater_destinations.xml new file mode 100644 index 0000000000..b7f6ad4d4e --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_destinations.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Destinations" title="行き先"/> diff --git a/indra/newview/skins/default/xui/ja/floater_fast_timers.xml b/indra/newview/skins/default/xui/ja/floater_fast_timers.xml new file mode 100644 index 0000000000..5f538ecdb0 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_fast_timers.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="fast_timers"> + <string name="pause"> + 一時停止 + </string> + <string name="run"> + 走る + </string> + <button label="一時停止" name="pause_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_how_to.xml b/indra/newview/skins/default/xui/ja/floater_how_to.xml new file mode 100644 index 0000000000..4cebe27226 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_how_to.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_how_to" title="ハウツー"/> diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml index ff5a25fd7b..1122203446 100644 --- a/indra/newview/skins/default/xui/ja/floater_map.xml +++ b/indra/newview/skins/default/xui/ja/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map" title=""> +<floater name="Map" title="ミニマップ"> <floater.string name="ToolTipMsg"> [REGION](ダブルクリックで地図を開く。Shift‐ドラッグで水平・垂直移動) </floater.string> diff --git a/indra/newview/skins/default/xui/ja/floater_model_preview.xml b/indra/newview/skins/default/xui/ja/floater_model_preview.xml index 07667bb697..157c68a570 100644 --- a/indra/newview/skins/default/xui/ja/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_model_preview.xml @@ -1,10 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Model Preview" title="モデルをアップロード"> - <string name="status_idle"> - 待機状態 - </string> +<floater name="Model Preview" title="モデルウィザード"> + <string name="status_idle"/> <string name="status_parse_error"> - Dae に問題が見つかりました - 詳細についてはログをご参照ください。 + エラー:Dae に問題が見つかりました - 詳細についてはログをご参照ください。 </string> <string name="status_reading_file"> ローディング... @@ -51,6 +49,9 @@ <string name="mesh_status_missing_lod"> 必要な描画詳細度が見つかりません。 </string> + <string name="mesh_status_invalid_material_list"> + LOD 付きの材料は参考モデルのサブセットではありません。 + </string> <string name="layer_all"> 全て </string> @@ -63,188 +64,211 @@ <string name="tbd"> 未定 </string> - <text name="name_label"> - 名前: - </text> - <text name="lod_label"> - プレビュー: - </text> - <combo_box name="preview_lod_combo" tool_tip="プレビュー表示のLOD設定"> - <combo_item name="high"> - 描画詳細度:高 - </combo_item> - <combo_item name="medium"> - 描画詳細度:中 - </combo_item> - <combo_item name="low"> - 描画詳細度:低 - </combo_item> - <combo_item name="lowest"> - 描画詳細度:最低 - </combo_item> - </combo_box> - <text name="warning_title"> - 警告: - </text> - <text name="warning_message"> - このモデルを Second Life サーバーにアップロードすることはできません。メッシュモデルのアップロード手順については [[VURL] こちらを参照してください]。 - </text> - <text name="weights_text"> - ダウンロード: -物理演算: -サーバー負荷: - -プリム換算: - </text> - <text name="weights"> - [ST] -[PH] -[SIM] - -[EQ] - </text> - <tab_container name="import_tab"> - <panel label="描画詳細度" name="lod_panel"> - <text name="lod_table_header"> - 描画詳細度を選択: - </text> - <text name="high_label" value="高"/> - <text name="high_triangles" value="0"/> - <text name="high_vertices" value="0"/> - <text name="medium_label" value="中"/> - <text name="medium_triangles" value="0"/> - <text name="medium_vertices" value="0"/> - <text name="low_label" value="低"/> - <text name="low_triangles" value="0"/> - <text name="low_vertices" value="0"/> - <text name="lowest_label" value="最低"/> - <text name="lowest_triangles" value="0"/> - <text name="lowest_vertices" value="0"/> - <text name="lod_table_footer"> - 描画詳細度: [DETAIL] - </text> - <radio_group name="lod_file_or_limit" value="lod_from_file"> - <radio_item label="ファイルからロード" name="lod_from_file"/> - <radio_item label="自動作成" name="lod_auto_generate"/> - <radio_item label="なし" name="lod_none"/> - </radio_group> - <button label="参照" name="lod_browse"/> - <combo_box name="lod_mode"> - <combo_item name="triangle_limit"> - 三角形の限度数 - </combo_item> - <combo_item name="error_threshold"> - エラーしきい値 - </combo_item> - </combo_box> - <text name="build_operator_text"> - 制作演算子: + <panel name="left_panel"> + <panel name="model_name_representation_panel"> + <text name="name_label"> + モデル名: </text> - <text name="queue_mode_text"> - キューモード: + <text name="model_category_label"> + このモデルは... </text> - <combo_box name="build_operator"> - <combo_item name="edge_collapse"> - 稜の完全複合 - </combo_item> - <combo_item name="half_edge_collapse"> - 稜の半複合 - </combo_item> - </combo_box> - <combo_box name="queue_mode"> - <combo_item name="greedy"> - グリーディ - </combo_item> - <combo_item name="lazy"> - レイジー - </combo_item> - <combo_item name="independent"> - インディペンデント - </combo_item> + <combo_box name="model_category_combo"> + <combo_item label="1つを選択..." name="Choose one"/> + <combo_item label="アバターの形" name="Avatar shape"/> + <combo_item label="アバターのアタッチメント" name="Avatar attachment"/> + <combo_item label="動くオブジェクト(車、動物)" name="Moving object (vehicle, animal)"/> + <combo_item label="制作用コンポーネント" name="Building Component"/> + <combo_item label="大型、不動、等" name="Large, non moving etc"/> + <combo_item label="やや小型、不動、等" name="Smaller, non-moving etc"/> + <combo_item label="いずれにも該当しない" name="Not really any of these"/> </combo_box> - <text name="border_mode_text"> - 境界線モード: - </text> - <text name="share_tolderance_text"> - 共有誤差: - </text> - <combo_box name="border_mode"> - <combo_item name="border_unlock"> - ロック解除 - </combo_item> - <combo_item name="border_lock"> - ロック - </combo_item> - </combo_box> - <text name="crease_label"> - 折れ角度: - </text> - <spinner name="crease_angle" value="75"/> </panel> - <panel label="物理効果" name="physics_panel"> - <panel name="physics geometry"> - <radio_group name="physics_load_radio" value="physics_load_from_file"> - <radio_item label="ファイル:" name="physics_load_from_file"/> - <radio_item label="次の描画詳細度を使用:" name="physics_use_lod"/> - </radio_group> - <combo_box name="physics_lod_combo" tool_tip="実像に適用するLOD"> - <combo_item name="physics_lowest"> - 最低 - </combo_item> - <combo_item name="physics_low"> - 低 - </combo_item> - <combo_item name="physics_medium"> - 中 - </combo_item> - <combo_item name="physics_high"> - 高 - </combo_item> - </combo_box> - <button label="参照" name="physics_browse"/> + <tab_container name="import_tab"> + <panel label="描画詳細度" name="lod_panel" title="描画詳細度"> + <text initial_value="データ源" name="source" value="データ源"/> + <text initial_value="三角形" name="triangles" value="三角形"/> + <text initial_value="頂点" name="vertices" value="頂点"/> + <text initial_value="高" name="high_label" value="高"/> + <button label="参照" name="lod_browse_high"/> + <text initial_value="0" name="high_triangles" value="0"/> + <text initial_value="0" name="high_vertices" value="0"/> + <text initial_value="中" name="medium_label" value="中"/> + <button label="参照" name="lod_browse_medium"/> + <text initial_value="0" name="medium_triangles" value="0"/> + <text initial_value="0" name="medium_vertices" value="0"/> + <text initial_value="低" name="low_label" value="低"/> + <button label="参照" name="lod_browse_low"/> + <text initial_value="0" name="low_triangles" value="0"/> + <text initial_value="0" name="low_vertices" value="0"/> + <text initial_value="最低" name="lowest_label" value="最低"/> + <button label="参照" name="lod_browse_lowest"/> + <text initial_value="0" name="lowest_triangles" value="0"/> + <text initial_value="0" name="lowest_vertices" value="0"/> + <check_box label="ノーマルの作成" name="gen_normals"/> + <text initial_value="折れ角度:" name="crease_label" value="折れ角度:"/> + <spinner name="crease_angle" value="75"/> </panel> - <panel name="physics analysis"> - <slider label="滑らかさ:" name="Smooth"/> - <check_box label="穴を閉じる(スロー)" name="Close Holes (Slow)"/> - <button label="分析" name="Decompose"/> - <button label="取り消し" name="decompose_cancel"/> + <panel label="物理効果" name="physics_panel"> + <panel name="physics geometry"> + <text name="first_step_name"> + 手順1:描画詳細度 + </text> + <combo_box name="physics_lod_combo" tool_tip="実像に適用するLOD"> + <combo_item name="choose_one"> + 1つを選択... + </combo_item> + <combo_item name="physics_high"> + 高 + </combo_item> + <combo_item name="physics_medium"> + 中 + </combo_item> + <combo_item name="physics_low"> + 低 + </combo_item> + <combo_item name="physics_lowest"> + 最低 + </combo_item> + <combo_item name="load_from_file"> + ファイルから + </combo_item> + </combo_box> + <button label="参照" name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <text name="method_label"> + 手順2:分析 + </text> + <text name="analysis_method_label"> + 方法: + </text> + <text name="quality_label"> + 品質: + </text> + <text name="smooth_method_label"> + 滑らかさ: + </text> + <check_box label="穴を閉じる" name="Close Holes (Slow)"/> + <button label="分析" name="Decompose"/> + <button label="取り消し" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <text name="second_step_label"> + 手順3:単純化 + </text> + <text name="simp_method_header"> + 方法: + </text> + <text name="pass_method_header"> + パス: + </text> + <text name="Detail Scale label"> + 詳細度: + </text> + <text name="Retain%_label"> + 維持率: + </text> + <combo_box name="Combine Quality" value="1"/> + <button label="単純化" name="Simplify"/> + <button label="取り消し" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <text name="results_text"> + 結果: + </text> + <text name="physics_triangles"> + 三角形:[TRIANGLES], + </text> + <text name="physics_points"> + 頂点:[POINTS], + </text> + <text name="physics_hulls"> + 外殻構造:[HULLS] + </text> + </panel> </panel> - <panel name="physics simplification"> - <slider label="パス:" name="Combine Quality"/> - <slider label="詳細度:" name="Detail Scale"/> - <slider label="維持率:" name="Retain%"/> - <button label="単純化" name="Simplify"/> - <button label="取り消し" name="simplify_cancel"/> - </panel> - <panel name="physics info"> - <slider label="プレビュースプレッド:" name="physics_explode"/> - <text name="physics_triangles"> - 三角形: [TRIANGLES] + <panel label="アップロードのオプション" name="modifiers_panel"> + <text name="scale_label"> + スケール(1=増減なし): + </text> + <spinner name="import_scale" value="1.0"/> + <text name="dimensions_label"> + サイズ: </text> - <text name="physics_points"> - 頂点: [POINTS] + <text name="import_dimensions"> + [X] X [Y] X [Z] </text> - <text name="physics_hulls"> - 外殻構造: [HULLS] + <check_box label="テクスチャを含む" name="upload_textures"/> + <text name="include_label"> + アバターモデル専用: </text> + <check_box label="スキンの重さを含む" name="upload_skin"/> + <check_box label="ジョイントポジションを含む" name="upload_joints"/> + <text name="pelvis_offset_label"> + Z オフセット(アバターを上下調整): + </text> + <spinner name="pelvis_offset" value="0.0"/> </panel> - </panel> - <panel label="修飾子" name="modifiers_panel"> - <spinner name="import_scale" value="1.0"/> - <text name="import_dimensions"> - [X] x [Y] x [Z] m + </tab_container> + <panel name="weights_and_warning_panel"> + <button label="ウェイトと料金の計算" name="calculate_btn" tool_tip="ウェイトと料金の計算"/> + <button label="取り消し" name="cancel_btn"/> + <button label="アップロード" name="ok_btn" tool_tip="シミュレーターにアップロード"/> + <button label="設定をクリアしてフォームをリセット" name="reset_btn"/> + <text name="upload_fee"> + アップロード料金:L$ [FEE] + </text> + <text name="prim_weight"> + 土地の負荷:[EQ] + </text> + <text name="download_weight"> + ダウンロード:[ST] + </text> + <text name="physics_weight"> + 物理演算:[PH] + </text> + <text name="server_weight"> + サーバー負荷:[SIM] + </text> + <text name="warning_title"> + ご注意: + </text> + <text name="warning_message"> + メッシュモデルをアップロードする権利がありません。権利の取得方法については [[VURL]] こちらを参照してください。 + </text> + <text name="status"> + [STATUS] </text> - <check_box label="テクスチャ" name="upload_textures"/> - <check_box label="スキンの重さ" name="upload_skin"/> - <check_box label="ジョイントポジション" name="upload_joints"/> - <spinner name="pelvis_offset" value="0.0"/> </panel> - </tab_container> - <text name="upload_fee"> - アップロード料金:L$ [FEE] + </panel> + <text name="lod_label"> + プレビュー: </text> - <button label="デフォルトに設定" name="reset_btn" tool_tip="デフォルトに設定"/> - <button label="ウェイトと料金の計算" name="calculate_btn" tool_tip="ウェイトと料金の計算"/> - <button label="アップロード" name="ok_btn" tool_tip="シミュレーターにアップロード"/> - <button label="取り消し" name="cancel_btn"/> + <panel name="right_panel"> + <combo_box name="preview_lod_combo" tool_tip="プレビュー表示の LOD 設定"> + <combo_item name="high"> + 高 + </combo_item> + <combo_item name="medium"> + 中 + </combo_item> + <combo_item name="low"> + 低 + </combo_item> + <combo_item name="lowest"> + 最低 + </combo_item> + </combo_box> + <text name="label_display"> + ディスプレイ... + </text> + <check_box label="稜" name="show_edges"/> + <check_box label="物理効果" name="show_physics"/> + <check_box label="テクスチャ" name="show_textures"/> + <check_box label="スキンの重さ" name="show_skin_weight"/> + <check_box label="ジョイント" name="show_joint_positions"/> + <text name="physics_explode_label"> + プレビュースプレッド: + </text> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml index 2f336fcbde..915b37557f 100644 --- a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml +++ b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml @@ -6,26 +6,20 @@ <button label="2. 最適化" name="optimize_btn"/> <button label="1. ファイルを選択" name="choose_file_btn"/> <panel name="choose_file_panel"> - <panel name="choose_file_header_panel"> - <text name="choose_file_header_text"> + <panel name="header_panel"> + <text name="header_text"> モデルファイルを選択 </text> </panel> - <panel name="choose_file_content_panel"> + <panel name="content"> <text name="advanced_users_text"> 上級ユーザーの場合:3D コンテンツの制作ツールを使い慣れた方は、高度なアップローダーもお試しください。 </text> <button label="アドバンスモードに切り替える" name="switch_to_advanced"/> - <text name="choose_model_file_label"> + <text name="Cache location"> アップロードするモデルファイルの選択 </text> <button label="参照" label_selected="参照" name="browse"/> - <text name="support_collada_text"> - Second Life は COLLADA (.dae) ファイルをサポートします。 - </text> - <text name="dimensions_label"> - サイズ(メートル): - </text> <text name="dimensions"> X Y Z </text> @@ -38,18 +32,15 @@ </panel> </panel> <panel name="optimize_panel"> - <panel name="optimize_header_panel"> - <text name="optimize_header_text"> + <panel name="header_panel"> + <text name="header_text"> モデルを最適化 </text> </panel> - <text name="optimize_hint"> + <text name="description"> パフォーマンスを重視してモデルを最適化しました。必要に応じて調整してください。 </text> - <panel name="optimize_content_panel"> - <text name="generating_lod_label"> - 次の描画詳細度を作成 - </text> + <panel name="content"> <text name="high_detail_text"> 次の描画詳細度を作成:高 </text> @@ -64,123 +55,64 @@ </text> </panel> <panel name="content2"> - <text name="optimize_performance_text"> - パフォーマンス - </text> - <text name="optimize_faster_rendering_text"> - レンダリング速度の向上 -詳細度の低下 -プリム換算ウェイトの軽減 - </text> - <text name="optimize_accuracy_text"> - 正確さ - </text> - <text name="optimize_slower_rendering_text"> - レンダリング速度の低下 -詳細化 -プリム換算ウェイトの増加 - </text> - <text name="accuracy_slider_mark1"> - ' - </text> - <text name="accuracy_slider_mark2"> - ' - </text> - <text name="accuracy_slider_mark3"> - ' - </text> <button label="ジオメトリを再計算" name="recalculate_geometry_btn"/> - <text name="geometry_preview_label"> + <text name="lod_label"> ジオメトリのプレビュー </text> <combo_box name="preview_lod_combo" tool_tip="プレビュー表示の LOD 設定"> - <combo_item name="preview_lod_high"> + <combo_item name="high"> 高い詳細度 </combo_item> - <combo_item name="preview_lod_medium"> + <combo_item name="medium"> 中の詳細度 </combo_item> - <combo_item name="preview_lod_low"> + <combo_item name="low"> 低い詳細度 </combo_item> - <combo_item name="preview_lod_lowest"> + <combo_item name="lowest"> 最低の詳細度 </combo_item> </combo_box> </panel> </panel> <panel name="physics_panel"> - <panel name="physics_header_panel"> - <text name="physics_header_text"> + <panel name="header_panel"> + <text name="header_text"> 物理作用の調整 </text> </panel> - <text name="physics_hint"> + <text name="description"> モデルの外殻構造のシェイプは弊社が作成します。モデルの目的に応じてシェイプの詳細度を調整してください。 </text> - <panel name="physics_content_panel"> - <text name="physics_performance_text"> - パフォーマンス - </text> - <text name="physics_faster_rendering_text"> - レンダリング速度の向上 -詳細度の低下 -プリム換算ウェイトの軽減 - </text> - <text name="physics_accuracy_text"> - 正確 - </text> - <text name="physics_slower_dendering_text"> - レンダリング速度の低下 -詳細化 -プリム換算ウェイトの増加 - </text> - <text name="physics_example_1"> - 例: -動くオブジェクト -飛行オブジェクト -車 - </text> - <text name="physics_example_2"> - 例: -小さな静止オブジェクト -比較的詳細度の低いオブジェクト -シンプルな家具 - </text> - <text name="physics_example_3"> - 例: -静止オブジェクト -詳細なオブジェクト -建物 - </text> + <panel name="content"> <button label="物理演算ウェイトを再計算" name="recalculate_physics_btn"/> <button label="再計算中..." name="recalculating_physics_btn"/> - <text name="physics_preview_label"> + <text name="lod_label"> 物理作用のプレビュー </text> <combo_box name="preview_lod_combo2" tool_tip="プレビュー表示の LOD 設定"> - <combo_item name="preview_lod2_high"> + <combo_item name="high"> 高い詳細度 </combo_item> - <combo_item name="preview_lod2_medium"> + <combo_item name="medium"> 中の詳細度 </combo_item> - <combo_item name="preview_lod2_low"> + <combo_item name="low"> 低い詳細度 </combo_item> - <combo_item name="preview_lod2_lowest"> + <combo_item name="lowest"> 最低の詳細度 </combo_item> </combo_box> </panel> </panel> <panel name="review_panel"> - <panel name="review_header_panel"> - <text name="review_header_text"> + <panel name="header_panel"> + <text name="header_text"> 確認 </text> </panel> - <panel name="review_content_panel"> + <panel name="content"> <text name="review_prim_equiv"> 区画/リージョンへの負荷:[EQUIV] プリム換算値 </text> @@ -193,8 +125,8 @@ </panel> </panel> <panel name="upload_panel"> - <panel name="upload_header_panel"> - <text name="upload_header_text"> + <panel name="header_panel"> + <text name="header_text"> アップロード完了 </text> </panel> diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml index 57ab32f486..88c1905b8a 100644 --- a/indra/newview/skins/default/xui/ja/floater_moveview.xml +++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move_floater"> +<floater name="move_floater" title="移動"> <string name="walk_forward_tooltip"> 前に進む(上矢印か W を押す) </string> @@ -58,14 +58,14 @@ 飛ぶ </string> <panel name="panel_actions"> - <button label="" label_selected="" name="move up btn" tool_tip="上に移動(E を押す)"/> <button label="" label_selected="" name="turn left btn" tool_tip="左を向く(左矢印か A を押す)"/> <joystick_slide name="move left btn" tool_tip="左に歩く(Shift + 左矢印か A を押す)"/> - <button label="" label_selected="" name="move down btn" tool_tip="下に移動(C を押す)"/> <button label="" label_selected="" name="turn right btn" tool_tip="右を向く(右矢印か D を押す)"/> <joystick_slide name="move right btn" tool_tip="右に歩く(Shift + 右矢印か D を押す)"/> <joystick_turn name="forward btn" tool_tip="前に進む(上矢印か W を押す)"/> <joystick_turn name="backward btn" tool_tip="後ろに歩く(下矢印か S を押す)"/> + <button label="" label_selected="" name="move up btn" tool_tip="上に移動(E を押す)"/> + <button label="" label_selected="" name="move down btn" tool_tip="下に移動(C を押す)"/> </panel> <panel name="panel_modes"> <button label="" name="mode_walk_btn" tool_tip="歩行モード"/> diff --git a/indra/newview/skins/default/xui/ja/floater_my_appearance.xml b/indra/newview/skins/default/xui/ja/floater_my_appearance.xml new file mode 100644 index 0000000000..c9a0ecefd7 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_my_appearance.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_my_appearance" title="容姿"> + <panel label="容姿の編集" name="main_panel"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_my_inventory.xml b/indra/newview/skins/default/xui/ja/floater_my_inventory.xml new file mode 100644 index 0000000000..c6a789b63b --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_my_inventory.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_my_inventory" title="持ち物"/> diff --git a/indra/newview/skins/default/xui/ja/floater_object_weights.xml b/indra/newview/skins/default/xui/ja/floater_object_weights.xml new file mode 100644 index 0000000000..3bd9b6b069 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_object_weights.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="object_weights" title="詳しい設定"> + <floater.string name="nothing_selected" value="--"/> + <text name="selected_text" value="選択済"/> + <text name="objects" value="--"/> + <text name="objects_label" value="オブジェクト"/> + <text name="prims" value="--"/> + <text name="prims_label" value="プリム"/> + <text name="weights_of_selected_text" value="選択済み項目のウエイト"/> + <text name="download" value="--"/> + <text name="download_label" value="ダウンロード"/> + <text name="physics" value="--"/> + <text name="physics_label" value="物理効果"/> + <text name="server" value="--"/> + <text name="server_label" value="サーバー"/> + <text name="display" value="--"/> + <text name="display_label" value="ディスプレイ"/> + <text name="land_impacts_text" value="土地の負荷"/> + <text name="selected" value="--"/> + <text name="selected_label" value="選択済"/> + <text name="rezzed_on_land" value="--"/> + <text name="rezzed_on_land_label" value="土地に Rez 済み"/> + <text name="remaining_capacity" value="--"/> + <text name="remaining_capacity_label" value="残りの許容数"/> + <text name="total_capacity" value="--"/> + <text name="total_capacity_label" value="許容合計"/> + <text name="help_SLURL" value="[secondlife:///app/help/object_weights オブジェクトのウェイトとは?]"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_people.xml b/indra/newview/skins/default/xui/ja/floater_people.xml new file mode 100644 index 0000000000..08bee88103 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_people.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_people" title="人"> + <panel_container name="main_panel"> + <panel label="グループ情報" name="panel_group_info_sidetray"/> + <panel label="ブロックされた住人とオブジェクト" name="panel_block_list_sidetray"/> + </panel_container> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_picks.xml b/indra/newview/skins/default/xui/ja/floater_picks.xml new file mode 100644 index 0000000000..359585eb86 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_picks.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_picks" title="ピック"/> diff --git a/indra/newview/skins/default/xui/ja/floater_places.xml b/indra/newview/skins/default/xui/ja/floater_places.xml new file mode 100644 index 0000000000..0d167444db --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_places.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_places" title="場所"> + <panel label="場所" name="main_panel"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml index 97927776c7..6a1f34cfd8 100644 --- a/indra/newview/skins/default/xui/ja/floater_stats.xml +++ b/indra/newview/skins/default/xui/ja/floater_stats.xml @@ -10,8 +10,8 @@ </stat_view> <stat_view label="アドバンス" name="advanced"> <stat_view label="描画" name="render"> - <stat_bar label="KTris 描画" name="ktrisframe"/> - <stat_bar label="KTris 描画" name="ktrissec"/> + <stat_bar label="フレームごとの KTris 描画" name="ktrisframe"/> + <stat_bar label="秒ごとの KTris 描画" name="ktrissec"/> <stat_bar label="オブジェクト合計" name="objs"/> <stat_bar label="新規オブジェクト" name="newobjs"/> </stat_view> @@ -64,6 +64,14 @@ <stat_bar label="エージェント時間" name="simagentmsec"/> <stat_bar label="イメージ時間" name="simimagesmsec"/> <stat_bar label="スクリプト時間" name="simscriptmsec"/> + <stat_bar label="余暇" name="simsparemsec"/> + <stat_view label="時間の詳細(ms)" name="timedetails"> + <stat_bar label="物理効果の単位" name="simsimphysicsstepmsec"/> + <stat_bar label="物理形状を更新" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="他の物理効果" name="simsimphysicsothermsec"/> + <stat_bar label="スリープ時間" name="simsleepmsec"/> + <stat_bar label="ポンプ I/O" name="simpumpiomsec"/> + </stat_view> </stat_view> </stat_view> </container_view> diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml index a8b5febd54..8eddf55a44 100644 --- a/indra/newview/skins/default/xui/ja/floater_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_tools.xml @@ -25,10 +25,10 @@ 土地をクリックし、ドラッグして選択 </floater.string> <floater.string name="status_selectcount"> - [OBJ_COUNT] 個のオブジェクト([PRIM_COUNT] 個のプリム [PE_STRING])が選択されています + 選択されているオブジェクトは [OBJ_COUNT] 個、土地の負荷は [LAND_IMPACT] </floater.string> - <floater.string name="status_selectprimequiv"> - , [SEL_WEIGHT] プリム換算値 + <floater.string name="status_remaining_capacity"> + 残りの許容数 [LAND_CAPACITY]。 </floater.string> <button label="" label_selected="" name="button focus" tool_tip="フォーカス"/> <button label="" label_selected="" name="button move" tool_tip="動かす"/> @@ -105,8 +105,8 @@ <text name="selection_empty"> 何も選択されていません。 </text> - <text name="selection_weight"> - 物理演算ウェイト [PHYS_WEIGHT]、レンダリングコスト [DISP_WEIGHT]。 + <text name="remaining_capacity"> + [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights 詳細] </text> <tab_container name="Object Info Tabs"> <panel label="一般" name="General"> @@ -325,7 +325,6 @@ 縫い目のタイプ </text> <combo_box name="sculpt type control"> - <combo_box.item label="(なし)" name="None"/> <combo_box.item label="球体" name="Sphere"/> <combo_box.item label="トーラス" name="Torus"/> <combo_box.item label="平面" name="Plane"/> diff --git a/indra/newview/skins/default/xui/ja/floater_toybox.xml b/indra/newview/skins/default/xui/ja/floater_toybox.xml new file mode 100644 index 0000000000..d7056f806c --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_toybox.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Toybox" title="ツールバーをカスタマイズ"> + <text name="toybox label 1"> + ボタンをツールバーに追加または削除するにはボタンをドラッグします。 + </text> + <text name="toybox label 2"> + 各ツールバーの設定に応じて、ボタンは以下のように表示されたり、アイコンのみで表示されます。 + </text> + <button label="デフォルト設定を復元" label_selected="デフォルト設定を復元" name="btn_restore_defaults"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml index 3a1ae49700..2e633ae1b2 100644 --- a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_navbar_menu"> - <menu_item_check label="ナビゲーションバーを表示" name="ShowNavbarNavigationPanel"/> + <menu_item_check label="ナビゲーションバーとお気に入りバーを表示" name="ShowNavbarNavigationPanel"/> <menu_item_check label="お気に入りバーを表示" name="ShowNavbarFavoritesPanel"/> <menu_item_check label="「場所」のミニフィールドを表示" name="ShowMiniLocationPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml index dca872e9b8..4c88f17f3d 100644 --- a/indra/newview/skins/default/xui/ja/menu_login.xml +++ b/indra/newview/skins/default/xui/ja/menu_login.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Login Menu"> <menu label="ミー" name="File"> - <menu_item_call label="環境設定" name="Preferences..."/> + <menu_item_call label="環境設定..." name="Preferences..."/> <menu_item_call label="[APP_NAME] を終了" name="Quit"/> </menu> <menu label="ヘルプ" name="Help"> diff --git a/indra/newview/skins/default/xui/ja/menu_toolbars.xml b/indra/newview/skins/default/xui/ja/menu_toolbars.xml new file mode 100644 index 0000000000..e911ca4a13 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_toolbars.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Toolbars Popup"> + <menu_item_call label="ボタンを選択..." name="Chose Buttons"/> + <menu_item_check label="アイコンとラベル" name="icons_with_text"/> + <menu_item_check label="アイコンのみ" name="icons_only"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index edce5c50fc..b9dbb81c0a 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -1,29 +1,30 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Main Menu"> <menu label="ミー" name="Me"> - <menu_item_call label="環境設定" name="Preferences"/> - <menu_item_call label="マイアカウント" name="Manage My Account"> + <menu_item_call label="マイアカウント..." name="Manage My Account"> <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=ja"/> </menu_item_call> - <menu_item_call label="L$ の購入" name="Buy and Sell L$"/> - <menu_item_call label="プロフィール" name="Profile"/> - <menu_item_call label="容姿" name="ChangeOutfit"/> - <menu_item_check label="持ち物" name="Inventory"/> - <menu_item_check label="持ち物" name="ShowSidetrayInventory"/> - <menu_item_check label="ジェスチャー" name="Gestures"/> - <menu_item_check label="マイボイス" name="ShowVoice"/> + <menu_item_call label="プロフィール..." name="Profile"/> + <menu_item_call label="容姿..." name="ChangeOutfit"/> + <menu_item_check label="持ち物..." name="Inventory"/> + <menu_item_check label="ジェスチャー..." name="Gestures"/> + <menu_item_check label="ボイス..." name="ShowVoice"/> <menu label="ムーブメント" name="Movement"> <menu_item_call label="座る" name="Sit Down Here"/> <menu_item_check label="飛ぶ" name="Fly"/> <menu_item_check label="常に走る" name="Always Run"/> <menu_item_call label="私のアニメーションを停止する" name="Stop Animating My Avatar"/> </menu> - <menu label="ログイン状態" name="Status"> + <menu label="ログイン" name="Status"> <menu_item_call label="一時退席中" name="Set Away"/> <menu_item_call label="取り込み中" name="Set Busy"/> </menu> <menu_item_call label="管理者権限のリクエスト" name="Request Admin Options"/> <menu_item_call label="管理者ステータス解除" name="Leave Admin Options"/> + <menu_item_call label="L$ の購入" name="Buy and Sell L$"/> + <menu_item_call label="環境設定..." name="Preferences"/> + <menu_item_call label="ツールバー..." name="Toolbars"/> + <menu_item_call label="全てのコントロールを非表示にする" name="Hide UI"/> <menu_item_call label="[APP_NAME] を終了" name="Quit"/> </menu> <menu label="コミュニケーション" name="Communicate"> @@ -145,7 +146,6 @@ </menu> <menu label="ヘルプ" name="Help"> <menu_item_call label="[SECOND_LIFE] ヘルプ" name="Second Life Help"/> - <menu_item_check label="ヒントを有効にする" name="Enable Hints"/> <menu_item_call label="嫌がらせを報告する" name="Report Abuse"/> <menu_item_call label="バグを報告する" name="Report Bug"/> <menu_item_call label="[APP_NAME] について" name="About Second Life"/> @@ -161,7 +161,7 @@ <menu label="パフォーマンスツール" name="Performance Tools"> <menu_item_call label="ラグ計測器" name="Lag Meter"/> <menu_item_check label="統計バー" name="Statistics Bar"/> - <menu_item_check label="アバターのレンダリングコストを表示する" name="Avatar Rendering Cost"/> + <menu_item_check label="アバターの描画ウェイトを表示" name="Avatar Rendering Cost"/> </menu> <menu label="ハイライトと目に見えるもの" name="Highlighting and Visibility"> <menu_item_check label="チージービーコン" name="Cheesy Beacon"/> @@ -289,6 +289,7 @@ <menu_item_check label="光" name="Lights"/> <menu_item_check label="骨組みの衝突判定" name="Collision Skeleton"/> <menu_item_check label="レイキャスト" name="Raycast"/> + <menu_item_check label="描画の詳細度" name="rendercomplexity"/> <menu_item_check label="スカルプト" name="Sculpt"/> </menu> <menu label="レンダリング" name="Rendering"> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index c138aeb383..85f09b4500 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -1953,6 +1953,12 @@ Adult 専用リージョンに入るには、住人のアカウントが年齢 終了しようとしています。続けますか? <usetemplate ignoretext="終了時の確認" name="okcancelignore" notext="終了しない" yestext="終了"/> </notification> + <notification name="ConfirmRestoreToybox"> + デフォルトのボタンとツールバーを復元しますか? + +この操作は元に戻せません。 + <usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/> + </notification> <notification name="DeleteItems"> [QUESTION] <usetemplate ignoretext="アイテムを削除する前の確認" name="okcancelignore" notext="取り消し" yestext="OK"/> @@ -3041,10 +3047,6 @@ M キーを押して変更します。 <button name="cancel" text="取り消し"/> </form> </notification> - <notification label="" name="ModeChange"> - モードを変更するには終了して再起動する必要があります。 - <usetemplate name="okcancelbuttons" notext="終了しない" yestext="終了"/> - </notification> <notification label="" name="NoClassifieds"> クラシファイド広告の作成と編集はアドバンスモードでのみ利用できます。終了してモードを変更しますか?モードはログイン画面で選択できます。 <usetemplate name="okcancelbuttons" notext="終了しない" yestext="終了"/> @@ -3089,6 +3091,10 @@ M キーを押して変更します。 検索はアドバンスモードでのみ利用できます。ログアウトしてモードを変更しますか? <usetemplate name="okcancelbuttons" notext="終了しない" yestext="終了"/> </notification> + <notification label="" name="ConfirmHideUI"> + この操作により、全てのメニュー項目とボタンが非表示になります。再び表示するには [SHORTCUT] をもう一度クリックしてください。 + <usetemplate ignoretext="UI を非表示にする前に確認" name="okcancelignore" notext="取り消し" yestext="OK"/> + </notification> <global name="UnsupportedGLRequirements"> [APP_NAME] に必要なハードウェアがないようです。 [APP_NAME] にはマルチテクスチャをサポートする OpenGL グラフィックカードが必要です。 お使いのグラフィックカードの最新ドライバがインストールされているかどうか、オペレーティングシステムのサービスパックとパッチが入っているかをご確認ください。 diff --git a/indra/newview/skins/default/xui/ja/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/ja/panel_chiclet_bar.xml new file mode 100644 index 0000000000..6717ba9ba3 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_chiclet_bar.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="chiclet_bar"> + <layout_stack name="toolbar_stack"> + <layout_panel name="im_well_panel"> + <chiclet_im_well name="im_well"> + <button name="Unread IM messages" tool_tip="会話"/> + </chiclet_im_well> + </layout_panel> + <layout_panel name="notification_well_panel"> + <chiclet_notification name="notification_well"> + <button name="Unread" tool_tip="通知"/> + </chiclet_notification> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_me.xml b/indra/newview/skins/default/xui/ja/panel_me.xml index dda5bc0009..896bbff0ee 100644 --- a/indra/newview/skins/default/xui/ja/panel_me.xml +++ b/indra/newview/skins/default/xui/ja/panel_me.xml @@ -1,7 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="マイ プロフィール" name="panel_me"> - <tab_container name="tabs"> - <panel label="マイ プロフィール" name="panel_profile"/> - <panel label="マイ ピック" name="panel_picks"/> - </tab_container> + <panel label="マイ ピック" name="panel_picks"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml b/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml index 0426c4fe9a..51402b2e00 100644 --- a/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml @@ -1,18 +1,23 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="navigation_bar"> - <panel name="navigation_panel"> - <pull_button name="back_btn" tool_tip="前の場所へ戻ります"/> - <pull_button name="forward_btn" tool_tip="次の場所へ進みます"/> - <button name="home_btn" tool_tip="「ホーム」にテレポート"/> - <location_input label="場所" name="location_combo"/> - <search_combo_box label="検索" name="search_combo_box" tool_tip="検索"> - <combo_editor label="[SECOND_LIFE] を検索:" name="search_combo_editor"/> - </search_combo_box> - </panel> - <favorites_bar name="favorite" tool_tip="ランドマークをここにドラッグして、Second Lifeのお気に入りの場所に素早くアクセス!"> - <label name="favorites_bar_label" tool_tip="ランドマークをここにドラッグして、Second Lifeのお気に入りの場所に素早くアクセス!"> - お気に入りバー - </label> - <chevron_button name=">>" tool_tip="お気に入りをもっと表示"/> - </favorites_bar> + <layout_stack name="nvp_stack"> + <layout_panel name="navigation_layout_panel"> + <panel name="navigation_panel"> + <pull_button name="back_btn" tool_tip="前の場所"/> + <pull_button name="forward_btn" tool_tip="次の場所"/> + <button name="home_btn" tool_tip="「ホーム」にテレポートします"/> + <location_input label="所在地" name="location_combo"/> + </panel> + </layout_panel> + <layout_panel name="favorites_layout_panel"> + <favorites_bar name="favorite" tool_tip="ランドマークをここにドラッグして、Second Lifeのお気に入りの場所に素早くアクセス!"> + <label name="favorites_bar_label" tool_tip="ランドマークをここにドラッグして、Second Lifeのお気に入りの場所に素早くアクセス!"> + お気に入りバー + </label> + <more_button name=">>" tool_tip="お気に入りをもっと表示"> + 詳細 ▼ + </more_button> + </favorites_bar> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml new file mode 100644 index 0000000000..4334659557 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="nearby_chat"> + <check_box label="チャットを翻訳(Google翻訳)" name="translate_chat_checkbox"/> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml index 20e17de5f1..c8584ccaae 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -51,7 +51,7 @@ <combo_box.item label="Русский(ロシア語)" name="Russian"/> <combo_box.item label="Türkçe(トルコ語)" name="Turkish"/> <combo_box.item label="Українська(ウクライナ語)" name="Ukrainian"/> - <combo_box.item label="中文 (正體)(中国語)" name="Chinese"/> + <combo_box.item label="中文 (正體) (Chinese)" name="Chinese"/> <combo_box.item label="日本語" name="Japanese"/> <combo_box.item label="한국어(韓国語)" name="Korean"/> </combo_box> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml index 4356f3d47f..1bafa52fbe 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml @@ -13,7 +13,10 @@ <combo_box.item label="Italiano (イタリア語) - ベータ" name="Italian"/> <combo_box.item label="Polski (ポーランド語) - ベータ" name="Polish"/> <combo_box.item label="Português(ポルトガル語) - ベータ" name="Portugese"/> + <combo_box.item label="Русский (ロシア語) - ベータ" name="Russian"/> + <combo_box.item label="Türkçe (トルコ語) - ベータ" name="Turkish"/> <combo_box.item label="日本語 – ベータ" name="(Japanese)"/> + <combo_box.item label="正體中文 (中国語 - 繁体字) - ベータ" name="Traditional Chinese"/> </combo_box> <text name="language_textbox2"> (再起動後に反映) @@ -48,7 +51,6 @@ <check_box label="グループタイトル" name="show_all_title_checkbox1" tool_tip="オフィサーまたはメンバーなど、グループタイトルを表示"/> <check_box label="フレンドをハイライト表示" name="show_friends" tool_tip="フレンドの名前をハイライト表示"/> <check_box label="表示名を表示" name="display_names_check" tool_tip="これを選択すると、チャット、IM などで表示名が表示されます。"/> - <check_box label="ビューワの UI ヒントを有効にする" name="viewer_hints_check"/> <text name="inworld_typing_rg_label"> 文字キーを押して次の操作: </text> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_move.xml b/indra/newview/skins/default/xui/ja/panel_preferences_move.xml index 806bcfc14a..121bebfd52 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_move.xml @@ -7,18 +7,33 @@ </text> <check_box label="制作・編集" name="edit_camera_movement" tool_tip="編集モードのオン・オフの切り替えに、自動カメラポジションを使います"/> <check_box label="容姿" name="appearance_camera_movement" tool_tip="編集モードに入ったときに、自動カメラポジションを使います"/> - <check_box initial_value="true" label="サイドバー" name="appearance_sidebar_positioning" tool_tip="サイドバーに自動カメラポジションを使います"/> + <text name="keyboard_lbl"> + キーボード: + </text> + <check_box label="常にキー操作で動くようにする" name="arrow_keys_move_avatar_check"/> + <check_box label="上矢印キー2度押し+長押しで走る" name="tap_tap_hold_to_run"/> + <text name="mouse_lbl"> + マウス: + </text> <check_box label="一人称視点で表示する" name="first_person_avatar_visible"/> <text name=" Mouse Sensitivity"> 一人称視点のマウスの感度: </text> <check_box label="切り替え" name="invert_mouse"/> - <check_box label="常にキー操作で動くようにする" name="arrow_keys_move_avatar_check"/> - <check_box label="上矢印キー2度押し+長押しで走る" name="tap_tap_hold_to_run"/> - <check_box label="ダブルクリックで次の操作:" name="double_click_chkbox"/> - <radio_group name="double_click_action"> - <radio_item label="テレポート" name="radio_teleport"/> - <radio_item label="自動追跡" name="radio_autopilot"/> - </radio_group> + <text name="single_click_action_lbl"> + 土地をシングルクリック: + </text> + <combo_box name="single_click_action_combo"> + <combo_box.item label="動作なし" name="0"/> + <combo_box.item label="クリックされた地点に移動" name="1"/> + </combo_box> + <text name="double_click_action_lbl"> + 土地をダブルクリック: + </text> + <combo_box name="double_click_action_combo"> + <combo_box.item label="動作なし" name="0"/> + <combo_box.item label="クリックされた地点に移動" name="1"/> + <combo_box.item label="クリックされた地点にテレポート" name="2"/> + </combo_box> <button label="その他のディバイス" name="joystick_setup_button"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml index 35c1148cc1..93689b81af 100644 --- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml @@ -18,11 +18,8 @@ <panel name="balance_bg"> <text name="balance" tool_tip="クリックして L$ 残高を更新" value="L$20"/> <button label="L$ の購入" name="buyL" tool_tip="クリックして L$ を購入します"/> + <button label="店" name="goShop" tool_tip="Second Life マーケットプレイスを開く"/> </panel> - <combo_box name="mode_combo" tool_tip="モードを選択します。ベーシックモードでは探索やチャットをすばやく簡単に実行でき、アドバンスモードでは、より多くの機能が利用できます。"> - <combo_box.item label="ベーシックモード" name="Basic"/> - <combo_box.item label="アドバンスモード" name="Advanced"/> - </combo_box> <text name="TimeText" tool_tip="現在時刻(太平洋)"> 24:00 AM PST </text> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 41dc098ba2..f611b96502 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -77,10 +77,10 @@ キャッシュファイルを検証しています(所要時間は 60 ~ 90 秒)... </string> <string name="LoginProcessingResponse"> - 応答を処理しています... + 対応を処理中です... </string> <string name="LoginInitializingWorld"> - ワールドを初期化しています... + ワールドを初期化中です... </string> <string name="LoginDecodingImages"> 画像をデコードしています... @@ -128,7 +128,7 @@ グリッドサーバーが返した証明書の署名を認証できませんでした。グリッドの管理者にお問い合わせください。 </string> <string name="LoginFailedNoNetwork"> - ネットワークエラー: 接続を確立できませんでした。お使いのネットワーク接続をご確認ください。 + ネットワークエラー:接続を確立できませんでした。お使いのネットワーク接続をご確認ください。 </string> <string name="LoginFailed"> ログインに失敗しました。 @@ -1276,6 +1276,9 @@ support@secondlife.com にお問い合わせください。 <string name="Marketplace Error Internal Import"> エラー:この商品に関して問題が発生しました。しばらくしてからお試しください。 </string> + <string name="Open landmarks"> + ランドマークを開く + </string> <string name="no_transfer" value=" (再販・プレゼント不可)"/> <string name="no_modify" value=" (編集不可)"/> <string name="no_copy" value=" (コピー不可)"/> @@ -4254,8 +4257,8 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Female - Wow"> 女性 - Wow </string> - <string name="/bow1"> - /bow1 + <string name="/bow"> + /おじぎする </string> <string name="/clap"> /拍手 @@ -4767,4 +4770,172 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="ParticleHiding"> パーティクルを非表示 </string> + <string name="Command_AboutLand_Label"> + 土地情報 + </string> + <string name="Command_Appearance_Label"> + 容姿 + </string> + <string name="Command_Avatar_Label"> + アバター + </string> + <string name="Command_Build_Label"> + 制作 + </string> + <string name="Command_Chat_Label"> + チャット + </string> + <string name="Command_Compass_Label"> + コンパス + </string> + <string name="Command_Destinations_Label"> + 行き先 + </string> + <string name="Command_Gestures_Label"> + ジェスチャー + </string> + <string name="Command_HowTo_Label"> + ハウツー + </string> + <string name="Command_Inventory_Label"> + 持ち物 + </string> + <string name="Command_Map_Label"> + 地図 + </string> + <string name="Command_Marketplace_Label"> + マーケットプレイス + </string> + <string name="Command_MiniMap_Label"> + ミニマップ + </string> + <string name="Command_Move_Label"> + 移動 + </string> + <string name="Command_People_Label"> + 人 + </string> + <string name="Command_Picks_Label"> + ピック + </string> + <string name="Command_Places_Label"> + 場所 + </string> + <string name="Command_Preferences_Label"> + 環境設定 + </string> + <string name="Command_Profile_Label"> + プロフィール + </string> + <string name="Command_Search_Label"> + 検索 + </string> + <string name="Command_Snapshot_Label"> + スナップショット + </string> + <string name="Command_Speak_Label"> + 話す + </string> + <string name="Command_View_Label"> + 視界 + </string> + <string name="Command_Voice_Label"> + 近くのボイス + </string> + <string name="Command_AboutLand_Tooltip"> + 訪問先に関する情報 + </string> + <string name="Command_Appearance_Tooltip"> + アバターを変更 + </string> + <string name="Command_Avatar_Tooltip"> + アバター一式を選択 + </string> + <string name="Command_Build_Tooltip"> + オブジェクトの制作と地形の変形 + </string> + <string name="Command_Chat_Tooltip"> + 近くの人と文字チャットする + </string> + <string name="Command_Compass_Tooltip"> + コンパス + </string> + <string name="Command_Destinations_Tooltip"> + 行ってみたい場所 + </string> + <string name="Command_Gestures_Tooltip"> + アバターのジェスチャー + </string> + <string name="Command_HowTo_Tooltip"> + 一般的タスクの実行方法 + </string> + <string name="Command_Inventory_Tooltip"> + 持ち物を表示・使用 + </string> + <string name="Command_Map_Tooltip"> + 世界地図 + </string> + <string name="Command_Marketplace_Tooltip"> + ショッピングに出掛ける + </string> + <string name="Command_MiniMap_Tooltip"> + 近くの人を表示する + </string> + <string name="Command_Move_Tooltip"> + アバターの移動 + </string> + <string name="Command_People_Tooltip"> + フレンド、グループ、近くの人 + </string> + <string name="Command_Picks_Tooltip"> + プロフィールで紹介するお気に入りの場所 + </string> + <string name="Command_Places_Tooltip"> + 保存済みの場所 + </string> + <string name="Command_Preferences_Tooltip"> + 環境設定 + </string> + <string name="Command_Profile_Tooltip"> + プロフィールを編集・表示 + </string> + <string name="Command_Search_Tooltip"> + 場所、イベント、人を検索 + </string> + <string name="Command_Snapshot_Tooltip"> + ピクチャを撮る + </string> + <string name="Command_Speak_Tooltip"> + マイクを使って近くの人と話す + </string> + <string name="Command_View_Tooltip"> + カメラの角度を変更 + </string> + <string name="Command_Voice_Tooltip"> + ボイスチャット機能を持つ近くの人 + </string> + <string name="Retain%"> + 維持率 + </string> + <string name="Detail"> + 詳細 + </string> + <string name="Better Detail"> + もっと詳しく + </string> + <string name="Surface"> + 表面 + </string> + <string name="Solid"> + ソリッド + </string> + <string name="Wrap"> + ラップ + </string> + <string name="Preview"> + プレビュー + </string> + <string name="Normal"> + 普通 + </string> </strings> diff --git a/indra/newview/skins/default/xui/pl/floater_about.xml b/indra/newview/skins/default/xui/pl/floater_about.xml index 637325ddd0..409429ffaa 100644 --- a/indra/newview/skins/default/xui/pl/floater_about.xml +++ b/indra/newview/skins/default/xui/pl/floater_about.xml @@ -10,7 +10,7 @@ <floater.string name="AboutPosition"> Położenie [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] w [REGION] zlokalizowanym w <nolink>[HOSTNAME]</nolink> ([HOSTIP]) [SERVER_VERSION] -[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] +[SERVER_RELEASE_NOTES_URL] </floater.string> <floater.string name="AboutSystem"> Procesor: [CPU] diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml index 1c19a55de6..c53aa7d5f7 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml @@ -16,7 +16,7 @@ <combo_box.item label="Русский (Russo) - Beta" name="Russian"/> <combo_box.item label="Türkçe (Turco) - Beta" name="Turkish"/> <combo_box.item label="日本語 (Japonês) - Beta" name="(Japanese)"/> - <combo_box.item label="正體 (Chinês tradicional) - Beta" name="Traditional Chinese"/> + <combo_box.item label="正體中文 (Chinês tradicional) - Beta" name="Traditional Chinese"/> </combo_box> <text name="language_textbox2"> (Reinicie para trocar de idioma) diff --git a/indra/newview/skins/default/xui/ru/floater_about.xml b/indra/newview/skins/default/xui/ru/floater_about.xml index 6bc550c3fe..deb6be319c 100644 --- a/indra/newview/skins/default/xui/ru/floater_about.xml +++ b/indra/newview/skins/default/xui/ru/floater_about.xml @@ -10,7 +10,7 @@ <floater.string name="AboutPosition"> Вы в точке [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] в регионе «[REGION]», расположенном на <nolink>[HOSTNAME]</nolink> ([HOSTIP]) [SERVER_VERSION] -[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] +[SERVER_RELEASE_NOTES_URL] </floater.string> <floater.string name="AboutSystem"> ЦП: [CPU] @@ -36,6 +36,9 @@ <floater.string name="AboutTraffic"> Потеряно пакетов: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) </floater.string> + <floater.string name="ErrorFetchingServerReleaseNotesURL"> + Ошибка при получении URL-адреса заметок о выпуске сервера. + </floater.string> <tab_container name="about_tab"> <panel label="Данные" name="support_panel"> <button label="Копировать в буфер обмена" name="copy_btn"/> diff --git a/indra/newview/skins/default/xui/ru/floater_about_land.xml b/indra/newview/skins/default/xui/ru/floater_about_land.xml index cf43f41107..488d2cda17 100644 --- a/indra/newview/skins/default/xui/ru/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ru/floater_about_land.xml @@ -212,19 +212,19 @@ Бонусный множитель для объектов: [BONUS] </text> <text name="Simulator primitive usage:"> - Примитивов используется: + Емкость региона: </text> <text name="objects_available"> [COUNT] из [MAX] ([AVAILABLE] доступно) </text> <text name="Primitives parcel supports:"> - Разрешено для размещения: + Емкость участка: </text> <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> - Примитивов на участке: + Воздействие участка: </text> <text name="total_objects_text"> [COUNT] diff --git a/indra/newview/skins/default/xui/ru/floater_avatar.xml b/indra/newview/skins/default/xui/ru/floater_avatar.xml new file mode 100644 index 0000000000..6bdf819880 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_avatar.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Avatar" title="ВЫБОР АВАТАРА"/> diff --git a/indra/newview/skins/default/xui/ru/floater_camera.xml b/indra/newview/skins/default/xui/ru/floater_camera.xml index 495c5d55fc..7a1f530668 100644 --- a/indra/newview/skins/default/xui/ru/floater_camera.xml +++ b/indra/newview/skins/default/xui/ru/floater_camera.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="camera_floater"> +<floater name="camera_floater" title="КАМЕРА"> <floater.string name="rotate_tooltip"> Повернуть камеру вокруг точки фокусировки </floater.string> diff --git a/indra/newview/skins/default/xui/ru/floater_chat_bar.xml b/indra/newview/skins/default/xui/ru/floater_chat_bar.xml new file mode 100644 index 0000000000..eceab1775a --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_chat_bar.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="chat_bar" title="ЛОКАЛЬНЫЙ ЧАТ"> + <panel> + <line_editor label="Щелкните здесь для общения." name="chat_box" tool_tip="Нажмите Enter, чтобы сказать, Ctrl+Enter, чтобы прокричать"/> + <button name="show_nearby_chat" tool_tip="Показать/скрыть лог локального чата"/> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_destinations.xml b/indra/newview/skins/default/xui/ru/floater_destinations.xml new file mode 100644 index 0000000000..e769812beb --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_destinations.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Destinations" title="МЕСТА"/> diff --git a/indra/newview/skins/default/xui/ru/floater_fast_timers.xml b/indra/newview/skins/default/xui/ru/floater_fast_timers.xml new file mode 100644 index 0000000000..20936b8494 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_fast_timers.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="fast_timers"> + <string name="pause"> + Пауза + </string> + <string name="run"> + Бег + </string> + <button label="Пауза" name="pause_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_how_to.xml b/indra/newview/skins/default/xui/ru/floater_how_to.xml new file mode 100644 index 0000000000..52525e5d33 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_how_to.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_how_to" title="ПОМОЩЬ"/> diff --git a/indra/newview/skins/default/xui/ru/floater_map.xml b/indra/newview/skins/default/xui/ru/floater_map.xml index 169bac5bd2..59ceb0a773 100644 --- a/indra/newview/skins/default/xui/ru/floater_map.xml +++ b/indra/newview/skins/default/xui/ru/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map" title=""> +<floater name="Map" title="МИНИКАРТА"> <floater.string name="ToolTipMsg"> [REGION](Двойной щелчок открывает карту, shift+перетягивание – обзор) </floater.string> @@ -7,7 +7,7 @@ [REGION](Двойной щелчок – телепортация, shift+перетягивание – обзор) </floater.string> <floater.string name="mini_map_caption"> - МИНИКАРТА + Миникарта </floater.string> <text label="С" name="floater_map_north"> С diff --git a/indra/newview/skins/default/xui/ru/floater_model_preview.xml b/indra/newview/skins/default/xui/ru/floater_model_preview.xml index 53ef685f9e..31517e722d 100644 --- a/indra/newview/skins/default/xui/ru/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/ru/floater_model_preview.xml @@ -1,10 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Model Preview" title="Передать модель"> - <string name="status_idle"> - Неактивно - </string> +<floater name="Model Preview" title="ПЕРЕДАЧА МОДЕЛИ"> + <string name="status_idle"/> <string name="status_parse_error"> - Проблема при анализе файла DAE – см. подробности в журнале. + Ошибка. Проблема при анализе файла DAE – см. подробности в журнале. </string> <string name="status_reading_file"> Загрузка... @@ -51,6 +49,9 @@ <string name="mesh_status_missing_lod"> Отсутствует необходимый уровень детализации. </string> + <string name="mesh_status_invalid_material_list"> + Материалы уровня детализации не входят в эталонную модель. + </string> <string name="layer_all"> Все </string> @@ -63,186 +64,211 @@ <string name="tbd"> Позже </string> - <text name="name_label"> - Название: - </text> - <text name="lod_label"> - Просмотр: - </text> - <combo_box name="preview_lod_combo" tool_tip="Уровень детализации при предварительном просмотре"> - <combo_item name="high"> - Уровень детализации: высокий - </combo_item> - <combo_item name="medium"> - Уровень детализации: средний - </combo_item> - <combo_item name="low"> - Уровень детализации: низкий - </combo_item> - <combo_item name="lowest"> - Уровень детализации: самый низкий - </combo_item> - </combo_box> - <text name="warning_title"> - ВНИМАНИЕ! - </text> - <text name="warning_message"> - Вы не сможете завершить передачу этой модели на серверы Second Life. [[VURL] Узнайте, как] получить право на передачу сеточных моделей. - </text> - <text name="weights_text"> - Загрузка: -Физические данные: -Сервер: -Эквивалент в примитивах: - </text> - <text name="weights"> - [ST] -[PH] -[SIM] -[EQ] - </text> - <tab_container name="import_tab"> - <panel label="Уровень детализации" name="lod_panel"> - <text name="lod_table_header"> - Выберите уровень детализации: - </text> - <text name="high_label" value="высокий"/> - <text name="high_triangles" value="0"/> - <text name="high_vertices" value="0"/> - <text name="medium_label" value="средний"/> - <text name="medium_triangles" value="0"/> - <text name="medium_vertices" value="0"/> - <text name="low_label" value="низкий"/> - <text name="low_triangles" value="0"/> - <text name="low_vertices" value="0"/> - <text name="lowest_label" value="самый низкий"/> - <text name="lowest_triangles" value="0"/> - <text name="lowest_vertices" value="0"/> - <text name="lod_table_footer"> - Уровень детализации: [DETAIL] - </text> - <radio_group name="lod_file_or_limit" value="lod_from_file"> - <radio_item label="Загрузка из файла" name="lod_from_file"/> - <radio_item label="Автосоздание" name="lod_auto_generate"/> - <radio_item label="Нет" name="lod_none"/> - </radio_group> - <button label="Обзор..." name="lod_browse"/> - <combo_box name="lod_mode"> - <combo_item name="triangle_limit"> - Предельное число треугольников - </combo_item> - <combo_item name="error_threshold"> - Порог ошибки - </combo_item> - </combo_box> - <text name="build_operator_text"> - Оператор построения: + <panel name="left_panel"> + <panel name="model_name_representation_panel"> + <text name="name_label"> + Имя модели: </text> - <text name="queue_mode_text"> - Режим очереди: + <text name="model_category_label"> + Эта модель представляет... </text> - <combo_box name="build_operator"> - <combo_item name="edge_collapse"> - Слияние ребер - </combo_item> - <combo_item name="half_edge_collapse"> - Слияние ребер к одной вершине - </combo_item> - </combo_box> - <combo_box name="queue_mode"> - <combo_item name="greedy"> - интенсивный - </combo_item> - <combo_item name="lazy"> - медленный - </combo_item> - <combo_item name="independent"> - независимый - </combo_item> + <combo_box name="model_category_combo"> + <combo_item label="Выберите вариант..." name="Choose one"/> + <combo_item label="Форма аватара" name="Avatar shape"/> + <combo_item label="Присоединение аватара" name="Avatar attachment"/> + <combo_item label="Подвижный объект (машина, животное)" name="Moving object (vehicle, animal)"/> + <combo_item label="Строительный компонент" name="Building Component"/> + <combo_item label="Большая, неподвижная и т.д." name="Large, non moving etc"/> + <combo_item label="Малая, неподвижная и т.д." name="Smaller, non-moving etc"/> + <combo_item label="Ни один из них" name="Not really any of these"/> </combo_box> - <text name="border_mode_text"> - Границы: - </text> - <text name="share_tolderance_text"> - Допуск на совпадение: - </text> - <combo_box name="border_mode"> - <combo_item name="border_unlock"> - нефиксированные - </combo_item> - <combo_item name="border_lock"> - фиксированные - </combo_item> - </combo_box> - <text name="crease_label"> - Угол сгиба: - </text> - <spinner name="crease_angle" value="75"/> </panel> - <panel label="Физика" name="physics_panel"> - <panel name="physics geometry"> - <radio_group name="physics_load_radio" value="physics_load_from_file"> - <radio_item label="Файл:" name="physics_load_from_file"/> - <radio_item label="Использовать уровни детализации:" name="physics_use_lod"/> - </radio_group> - <combo_box name="physics_lod_combo" tool_tip="Уровень детализации для физической формы"> - <combo_item name="physics_lowest"> - самый низкий - </combo_item> - <combo_item name="physics_low"> - низкий - </combo_item> - <combo_item name="physics_medium"> - средний - </combo_item> - <combo_item name="physics_high"> - высокий - </combo_item> - </combo_box> - <button label="Обзор..." name="physics_browse"/> + <tab_container name="import_tab"> + <panel label="Уровень детализации" name="lod_panel" title="Уровень детализации"> + <text initial_value="Источник" name="source" value="Источник"/> + <text initial_value="Треугольники" name="triangles" value="Треугольники"/> + <text initial_value="Вершины" name="vertices" value="Вершины"/> + <text initial_value="Высокий" name="high_label" value="Высокий"/> + <button label="Обзор..." name="lod_browse_high"/> + <text initial_value="0" name="high_triangles" value="0"/> + <text initial_value="0" name="high_vertices" value="0"/> + <text initial_value="Средний" name="medium_label" value="Средний"/> + <button label="Обзор..." name="lod_browse_medium"/> + <text initial_value="0" name="medium_triangles" value="0"/> + <text initial_value="0" name="medium_vertices" value="0"/> + <text initial_value="Низкий" name="low_label" value="Низкий"/> + <button label="Обзор..." name="lod_browse_low"/> + <text initial_value="0" name="low_triangles" value="0"/> + <text initial_value="0" name="low_vertices" value="0"/> + <text initial_value="Самый низкий" name="lowest_label" value="Самый низкий"/> + <button label="Обзор..." name="lod_browse_lowest"/> + <text initial_value="0" name="lowest_triangles" value="0"/> + <text initial_value="0" name="lowest_vertices" value="0"/> + <check_box label="Генерировать нормали" name="gen_normals"/> + <text initial_value="Угол сгиба:" name="crease_label" value="Угол сгиба:"/> + <spinner name="crease_angle" value="75"/> </panel> - <panel name="physics analysis"> - <slider label="Гладкость:" name="Smooth"/> - <check_box label="Закрыть отверстия (медленно)" name="Close Holes (Slow)"/> - <button label="Анализ" name="Decompose"/> - <button label="Отмена" name="decompose_cancel"/> + <panel label="Физика" name="physics_panel"> + <panel name="physics geometry"> + <text name="first_step_name"> + Шаг 1. Уровень детализации + </text> + <combo_box name="physics_lod_combo" tool_tip="Уровень детализации для физической формы"> + <combo_item name="choose_one"> + Выберите вариант... + </combo_item> + <combo_item name="physics_high"> + Высокое + </combo_item> + <combo_item name="physics_medium"> + Средний + </combo_item> + <combo_item name="physics_low"> + Низкий + </combo_item> + <combo_item name="physics_lowest"> + Самый низкий + </combo_item> + <combo_item name="load_from_file"> + Из файла + </combo_item> + </combo_box> + <button label="Обзор..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <text name="method_label"> + Шаг 2. Анализ + </text> + <text name="analysis_method_label"> + Метод: + </text> + <text name="quality_label"> + Качество: + </text> + <text name="smooth_method_label"> + Гладкость: + </text> + <check_box label="Закрыть отверстия" name="Close Holes (Slow)"/> + <button label="Анализ" name="Decompose"/> + <button label="Отмена" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <text name="second_step_label"> + Шаг 3. Упрощение + </text> + <text name="simp_method_header"> + Метод: + </text> + <text name="pass_method_header"> + Проходов: + </text> + <text name="Detail Scale label"> + Масштаб деталей: + </text> + <text name="Retain%_label"> + Сохранять: + </text> + <combo_box name="Combine Quality" value="1"/> + <button label="Упрощение" name="Simplify"/> + <button label="Отмена" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <text name="results_text"> + Результаты: + </text> + <text name="physics_triangles"> + Треугольников: [TRIANGLES], + </text> + <text name="physics_points"> + Вершин: [POINTS], + </text> + <text name="physics_hulls"> + Оболочек: [HULLS] + </text> + </panel> </panel> - <panel name="physics simplification"> - <slider label="Проходов:" name="Combine Quality"/> - <slider label="Масштаб деталей:" name="Detail Scale"/> - <slider label="Сохранять:" name="Retain%"/> - <button label="Упрощение" name="Simplify"/> - <button label="Отмена" name="simplify_cancel"/> - </panel> - <panel name="physics info"> - <slider label="Просмотр разложения:" name="physics_explode"/> - <text name="physics_triangles"> - Треугольников: [TRIANGLES] + <panel label="Параметры передачи" name="modifiers_panel"> + <text name="scale_label"> + Масштаб (1=не масштабировать): + </text> + <spinner name="import_scale" value="1.0"/> + <text name="dimensions_label"> + Размеры: </text> - <text name="physics_points"> - Вершин: [POINTS] + <text name="import_dimensions"> + [X] X [Y] X [Z] </text> - <text name="physics_hulls"> - Оболочек: [HULLS] + <check_box label="Включить текстуры" name="upload_textures"/> + <text name="include_label"> + Только для моделей аватаров: </text> + <check_box label="Включить вес кожи" name="upload_skin"/> + <check_box label="Включить положения суставов" name="upload_joints"/> + <text name="pelvis_offset_label"> + Смещение по Z (поднять или опустить аватар): + </text> + <spinner name="pelvis_offset" value="0.0"/> </panel> - </panel> - <panel label="Модификаторы" name="modifiers_panel"> - <spinner name="import_scale" value="1.0"/> - <text name="import_dimensions"> - [X] x [Y] x [Z] м + </tab_container> + <panel name="weights_and_warning_panel"> + <button label="Рассчитать вес и плату" name="calculate_btn" tool_tip="Рассчитать вес и плату"/> + <button label="Отмена" name="cancel_btn"/> + <button label="Передать" name="ok_btn" tool_tip="Передать в симулятор"/> + <button label="Очистить настройки и сбросить форму" name="reset_btn"/> + <text name="upload_fee"> + Плата за передачу: L$ [FEE] + </text> + <text name="prim_weight"> + Влияние земли: [EQ] + </text> + <text name="download_weight"> + Загрузка: [ST] + </text> + <text name="physics_weight"> + Физика: [PH] + </text> + <text name="server_weight"> + Сервер: [SIM] + </text> + <text name="warning_title"> + ПРИМЕЧАНИЕ. + </text> + <text name="warning_message"> + У вас нет прав на передачу сеточных моделей. [[VURL] Узнайте, как] получить их. + </text> + <text name="status"> + [STATUS] </text> - <check_box label="Текстуры" name="upload_textures"/> - <check_box label="Вес кожи" name="upload_skin"/> - <check_box label="Положение сочленений" name="upload_joints"/> - <spinner name="pelvis_offset" value="0.0"/> </panel> - </tab_container> - <text name="upload_fee"> - Плата за передачу: L$ [FEE] + </panel> + <text name="lod_label"> + Просмотр: </text> - <button label="По умолчанию" name="reset_btn" tool_tip="По умолчанию"/> - <button label="Рассчитать вес и плату" name="calculate_btn" tool_tip="Рассчитать вес и плату"/> - <button label="Передача" name="ok_btn" tool_tip="Передать в симулятор"/> - <button label="Отмена" name="cancel_btn"/> + <panel name="right_panel"> + <combo_box name="preview_lod_combo" tool_tip="Уровень детализации при предварительном просмотре"> + <combo_item name="high"> + Высокий + </combo_item> + <combo_item name="medium"> + Среднее + </combo_item> + <combo_item name="low"> + Низкий + </combo_item> + <combo_item name="lowest"> + Самый низкий + </combo_item> + </combo_box> + <text name="label_display"> + Показать... + </text> + <check_box label="Ребра" name="show_edges"/> + <check_box label="Физика" name="show_physics"/> + <check_box label="Текстуры" name="show_textures"/> + <check_box label="Вес кожи" name="show_skin_weight"/> + <check_box label="Суставы" name="show_joint_positions"/> + <text name="physics_explode_label"> + Просмотр разложения: + </text> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_model_wizard.xml b/indra/newview/skins/default/xui/ru/floater_model_wizard.xml index 9b2924a3db..204f752cd9 100644 --- a/indra/newview/skins/default/xui/ru/floater_model_wizard.xml +++ b/indra/newview/skins/default/xui/ru/floater_model_wizard.xml @@ -6,26 +6,20 @@ <button label="2. Оптимизировать" name="optimize_btn"/> <button label="1. Выбрать файл" name="choose_file_btn"/> <panel name="choose_file_panel"> - <panel name="choose_file_header_panel"> - <text name="choose_file_header_text"> - Выберите файл + <panel name="header_panel"> + <text name="header_text"> + Выберите файл модели </text> </panel> - <panel name="choose_file_content_panel"> + <panel name="content"> <text name="advanced_users_text"> Пользователям, работающим в расширенном режиме: если вы умеете создавать трехмерные графические объекты, то, возможно, захотите воспользоваться средством Advanced Uploader, которое предоставляет расширенные возможности передачи объектов. </text> <button label="Перейти в расширенный режим" name="switch_to_advanced"/> - <text name="choose_model_file_label"> + <text name="Cache location"> Выберите файл модели для передачи </text> <button label="Обзор..." label_selected="Обзор..." name="browse"/> - <text name="support_collada_text"> - В Second Life поддерживаются файлы COLLADA (DAE) - </text> - <text name="dimensions_label"> - Размеры (в метрах): - </text> <text name="dimensions"> X Y Z </text> @@ -38,18 +32,15 @@ </panel> </panel> <panel name="optimize_panel"> - <panel name="optimize_header_panel"> - <text name="optimize_header_text"> + <panel name="header_panel"> + <text name="header_text"> Оптимизировать модель </text> </panel> - <text name="optimize_hint"> + <text name="description"> Мы оптимизировали модель для повышения быстродействия. По желанию можно выполнить дополнительную настройку. </text> - <panel name="optimize_content_panel"> - <text name="generating_lod_label"> - Создается уровень детализации - </text> + <panel name="content"> <text name="high_detail_text"> Создать уровень детализации: высокий </text> @@ -64,123 +55,64 @@ </text> </panel> <panel name="content2"> - <text name="optimize_performance_text"> - Быстродействие - </text> - <text name="optimize_faster_rendering_text"> - Ускорить прорисовку -Меньше деталей -Уменьшить вес примитива - </text> - <text name="optimize_accuracy_text"> - Точность - </text> - <text name="optimize_slower_rendering_text"> - Замедлить прорисовку -Больше деталей -Повысить вес примитива - </text> - <text name="accuracy_slider_mark1"> - ' - </text> - <text name="accuracy_slider_mark2"> - ' - </text> - <text name="accuracy_slider_mark3"> - ' - </text> <button label="Пересчитать геометрию" name="recalculate_geometry_btn"/> - <text name="geometry_preview_label"> + <text name="lod_label"> Просмотр геометрии </text> <combo_box name="preview_lod_combo" tool_tip="Детализация при предварительном просмотре"> - <combo_item name="preview_lod_high"> + <combo_item name="high"> Детально </combo_item> - <combo_item name="preview_lod_medium"> + <combo_item name="medium"> Средняя детализация </combo_item> - <combo_item name="preview_lod_low"> + <combo_item name="low"> Мало деталей </combo_item> - <combo_item name="preview_lod_lowest"> + <combo_item name="lowest"> Минимум деталей </combo_item> </combo_box> </panel> </panel> <panel name="physics_panel"> - <panel name="physics_header_panel"> - <text name="physics_header_text"> + <panel name="header_panel"> + <text name="header_text"> Настроить физические параметры </text> </panel> - <text name="physics_hint"> + <text name="description"> Мы создадим форму для внешнего каркаса модели. Настройте уровень детализации формы в соответствии с целями, для которых предназначена модель. </text> - <panel name="physics_content_panel"> - <text name="physics_performance_text"> - Быстродействие - </text> - <text name="physics_faster_rendering_text"> - Ускорить прорисовку -Меньше деталей -Уменьшить вес примитива - </text> - <text name="physics_accuracy_text"> - Точность - </text> - <text name="physics_slower_dendering_text"> - Замедлить прорисовку -Больше деталей -Повысить вес примитива - </text> - <text name="physics_example_1"> - Примеры: -подвижные объекты; -летающие объекты; -транспорт. - </text> - <text name="physics_example_2"> - Примеры: -небольшие неподвижные объекты; -простые объекты; -простая мебель. - </text> - <text name="physics_example_3"> - Примеры: -неподвижные объекты; -сложные объекты; -здания. - </text> + <panel name="content"> <button label="Пересчитать физические данные" name="recalculate_physics_btn"/> <button label="Пересчет..." name="recalculating_physics_btn"/> - <text name="physics_preview_label"> + <text name="lod_label"> Просмотр физических данных </text> - <combo_box name="preview_lod_combo2" tool_tip="Детализация при предварительном просмотре"> - <combo_item name="preview_lod2_high"> + <combo_box name="preview_lod_combo2" tool_tip="Уровень детализации при предварительном просмотре"> + <combo_item name="high"> Детально </combo_item> - <combo_item name="preview_lod2_medium"> + <combo_item name="medium"> Средняя детализация </combo_item> - <combo_item name="preview_lod2_low"> + <combo_item name="low"> Мало деталей </combo_item> - <combo_item name="preview_lod2_lowest"> + <combo_item name="lowest"> Минимум деталей </combo_item> </combo_box> </panel> </panel> <panel name="review_panel"> - <panel name="review_header_panel"> - <text name="review_header_text"> - Пересмотреть + <panel name="header_panel"> + <text name="header_text"> + Просмотр </text> </panel> - <panel name="review_content_panel"> + <panel name="content"> <text name="review_prim_equiv"> Воздействие на участок/регион: эквивалент в примитивах: [EQUIV] </text> @@ -193,8 +125,8 @@ </panel> </panel> <panel name="upload_panel"> - <panel name="upload_header_panel"> - <text name="upload_header_text"> + <panel name="header_panel"> + <text name="header_text"> Передача завершена </text> </panel> diff --git a/indra/newview/skins/default/xui/ru/floater_moveview.xml b/indra/newview/skins/default/xui/ru/floater_moveview.xml index c6ef4a06b3..6e01f997e1 100644 --- a/indra/newview/skins/default/xui/ru/floater_moveview.xml +++ b/indra/newview/skins/default/xui/ru/floater_moveview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move_floater"> +<floater name="move_floater" title="ПЕРЕМЕЩЕНИЕ"> <string name="walk_forward_tooltip"> Идти вперед (нажмите стрелку вверх или клавишу W) </string> diff --git a/indra/newview/skins/default/xui/ru/floater_my_appearance.xml b/indra/newview/skins/default/xui/ru/floater_my_appearance.xml new file mode 100644 index 0000000000..b90d80f3fd --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_my_appearance.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_my_appearance" title="ВНЕШНОСТЬ"> + <panel label="Изменить внешний вид" name="main_panel"/> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_my_inventory.xml b/indra/newview/skins/default/xui/ru/floater_my_inventory.xml new file mode 100644 index 0000000000..534d2a5774 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_my_inventory.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_my_inventory" title="ИНВЕНТАРЬ"/> diff --git a/indra/newview/skins/default/xui/ru/floater_object_weights.xml b/indra/newview/skins/default/xui/ru/floater_object_weights.xml new file mode 100644 index 0000000000..41e0118732 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_object_weights.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="object_weights" title="ДОПОЛНИТЕЛЬНО"> + <floater.string name="nothing_selected" value="--"/> + <text name="selected_text" value="ВЫБРАНО"/> + <text name="objects" value="--"/> + <text name="objects_label" value="Объекты"/> + <text name="prims" value="--"/> + <text name="prims_label" value="Примитивы"/> + <text name="weights_of_selected_text" value="ВЕС ВЫБРАННОГО"/> + <text name="download" value="--"/> + <text name="download_label" value="Загрузить"/> + <text name="physics" value="--"/> + <text name="physics_label" value="Физика"/> + <text name="server" value="--"/> + <text name="server_label" value="Сервер"/> + <text name="display" value="--"/> + <text name="display_label" value="Показать"/> + <text name="land_impacts_text" value="ВОЗДЕЙСТВИЕ НА ЗЕМЛЮ"/> + <text name="selected" value="--"/> + <text name="selected_label" value="Выбрано"/> + <text name="rezzed_on_land" value="--"/> + <text name="rezzed_on_land_label" value="Выложено на землю"/> + <text name="remaining_capacity" value="--"/> + <text name="remaining_capacity_label" value="Остаток емкости"/> + <text name="total_capacity" value="--"/> + <text name="total_capacity_label" value="Общая емкость"/> + <text name="help_SLURL" value="[secondlife:///app/help/object_weights Что это такое?...]"/> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/ru/floater_outfit_save_as.xml index 781ee8c771..301206e473 100644 --- a/indra/newview/skins/default/xui/ru/floater_outfit_save_as.xml +++ b/indra/newview/skins/default/xui/ru/floater_outfit_save_as.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Сохранение костюма"> +<floater name="modal container" title="СОХРАНИТЬ КОСТЮМ"> <button label="Сохранить" label_selected="Сохранить" name="Save"/> <button label="Отмена" label_selected="Отмена" name="Cancel"/> <text name="Save item as:"> diff --git a/indra/newview/skins/default/xui/ru/floater_people.xml b/indra/newview/skins/default/xui/ru/floater_people.xml new file mode 100644 index 0000000000..7abc34986a --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_people.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_people" title="ЛЮДИ"> + <panel_container name="main_panel"> + <panel label="Профиль группы" name="panel_group_info_sidetray"/> + <panel label="Черный список жителей и объектов" name="panel_block_list_sidetray"/> + </panel_container> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_picks.xml b/indra/newview/skins/default/xui/ru/floater_picks.xml new file mode 100644 index 0000000000..e0ae8d6f03 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_picks.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_picks" title="Подборка"/> diff --git a/indra/newview/skins/default/xui/ru/floater_places.xml b/indra/newview/skins/default/xui/ru/floater_places.xml new file mode 100644 index 0000000000..2a22a855ef --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_places.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_places" title="МЕСТА"> + <panel label="Места" name="main_panel"/> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_sound_devices.xml b/indra/newview/skins/default/xui/ru/floater_sound_devices.xml index 809cea5aa1..fc8de858cd 100644 --- a/indra/newview/skins/default/xui/ru/floater_sound_devices.xml +++ b/indra/newview/skins/default/xui/ru/floater_sound_devices.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_sound_devices" title="Звуковые устройства"> +<floater name="floater_sound_devices" title="ЗВУКОВЫЕ УСТРОЙСТВА"> <text name="voice_label"> Голосовой чат </text> diff --git a/indra/newview/skins/default/xui/ru/floater_stats.xml b/indra/newview/skins/default/xui/ru/floater_stats.xml index c5cccd4091..b1f60c8029 100644 --- a/indra/newview/skins/default/xui/ru/floater_stats.xml +++ b/indra/newview/skins/default/xui/ru/floater_stats.xml @@ -10,8 +10,8 @@ </stat_view> <stat_view label="Дополнительно" name="advanced"> <stat_view label="Отрисовка" name="render"> - <stat_bar label="Треугольников за секунду" name="ktrisframe"/> - <stat_bar label="Треугольников за секунду" name="ktrissec"/> + <stat_bar label="Треугольников на кадр" name="ktrisframe"/> + <stat_bar label="Треугольников в секунду" name="ktrissec"/> <stat_bar label="Всего объектов" name="objs"/> <stat_bar label="Новых объектов" name="newobjs"/> </stat_view> @@ -32,7 +32,7 @@ <stat_bar label="Слои" name="layerskbitstat"/> <stat_bar label="Действительный ввод" name="actualinkbitstat"/> <stat_bar label="Действительный вывод" name="actualoutkbitstat"/> - <stat_bar label="Ожидающие оп-ции VFS" name="vfspendingoperations"/> + <stat_bar label="Ожидающие операции VFS" name="vfspendingoperations"/> </stat_view> </stat_view> <stat_view label="Симулятор" name="sim"> @@ -64,6 +64,14 @@ <stat_bar label="Время на клиент" name="simagentmsec"/> <stat_bar label="Время на изображения" name="simimagesmsec"/> <stat_bar label="Время на скрипт" name="simscriptmsec"/> + <stat_bar label="Резервное время" name="simsparemsec"/> + <stat_view label="Данные времени (мс)" name="timedetails"> + <stat_bar label="Шаг физики" name="simsimphysicsstepmsec"/> + <stat_bar label="Обновить физ. формы" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Физика - прочее" name="simsimphysicsothermsec"/> + <stat_bar label="Время сна" name="simsleepmsec"/> + <stat_bar label="Ввод/вывод" name="simpumpiomsec"/> + </stat_view> </stat_view> </stat_view> </container_view> diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml index 7200ec80fa..660eca51c6 100644 --- a/indra/newview/skins/default/xui/ru/floater_tools.xml +++ b/indra/newview/skins/default/xui/ru/floater_tools.xml @@ -25,10 +25,10 @@ Щелкните и переместите для выделения земли </floater.string> <floater.string name="status_selectcount"> - Выбрано объектов: [OBJ_COUNT] (примитивов: [PRIM_COUNT] [PE_STRING]) + Выбрано объектов: [OBJ_COUNT], влияние на землю [LAND_IMPACT] </floater.string> - <floater.string name="status_selectprimequiv"> - , в примитивах: [SEL_WEIGHT] + <floater.string name="status_remaining_capacity"> + Остаток емкости [LAND_CAPACITY]. </floater.string> <button name="button focus" tool_tip="Отчетливость"/> <button name="button move" tool_tip="Переместить"/> @@ -107,8 +107,8 @@ <text name="selection_empty"> Ничего не выбрано. </text> - <text name="selection_weight"> - Вес физических параметров [PHYS_WEIGHT], стоимость прорисовки [DISP_WEIGHT]. + <text name="remaining_capacity"> + [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Дополнительная информация] </text> <tab_container name="Object Info Tabs"> <panel label="Общие" name="General"> @@ -321,7 +321,6 @@ Тип стыковки </text> <combo_box name="sculpt type control"> - <combo_box.item label="(нет)" name="None"/> <combo_box.item label="По сфере" name="Sphere"/> <combo_box.item label="По тору" name="Torus"/> <combo_box.item label="По плоскости" name="Plane"/> diff --git a/indra/newview/skins/default/xui/ru/floater_toybox.xml b/indra/newview/skins/default/xui/ru/floater_toybox.xml new file mode 100644 index 0000000000..eb03e8c8bf --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_toybox.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Toybox" title="НАСТРОИТЬ ПАНЕЛИ ИНСТРУМЕНТОВ"> + <text name="toybox label 1"> + Добавьте или удалите кнопки, перетягивая их на панели инструментов или с них. + </text> + <text name="toybox label 2"> + Кнопки будут отображены в исходном виде или в виде значков, в зависимости от настроек каждой панели инструментов. + </text> + <button label="Восстановить умолчания" label_selected="Восстановить умолчания" name="btn_restore_defaults"/> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml index 9fd6518984..6520a4342c 100644 --- a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="Управление голосом"> +<floater name="floater_voice_controls" title="УПРАВЛЕНИЕ ГОЛОСОМ"> <string name="title_nearby"> - ЛОКАЛЬНЫЙ ГОЛОСОВОЙ ЧАТ + Голоса собеседников </string> <string name="title_group"> Звонок группе [GROUP] diff --git a/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml index f77896677d..34e5f4c0e4 100644 --- a/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_navbar_menu"> - <menu_item_check label="Показать панель навигации" name="ShowNavbarNavigationPanel"/> + <menu_item_check label="Показать панель навигации и избранного" name="ShowNavbarNavigationPanel"/> <menu_item_check label="Показать панель избранного" name="ShowNavbarFavoritesPanel"/> <menu_item_check label="Показать мини-панель местоположения" name="ShowMiniLocationPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/ru/menu_login.xml b/indra/newview/skins/default/xui/ru/menu_login.xml index 3b545bf593..aa3570f176 100644 --- a/indra/newview/skins/default/xui/ru/menu_login.xml +++ b/indra/newview/skins/default/xui/ru/menu_login.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Login Menu"> <menu label="Я" name="File"> - <menu_item_call label="Настройки" name="Preferences..."/> + <menu_item_call label="Настройки..." name="Preferences..."/> <menu_item_call label="Выход из [APP_NAME]" name="Quit"/> </menu> <menu label="Справка" name="Help"> diff --git a/indra/newview/skins/default/xui/ru/menu_toolbars.xml b/indra/newview/skins/default/xui/ru/menu_toolbars.xml new file mode 100644 index 0000000000..e04a9ee57d --- /dev/null +++ b/indra/newview/skins/default/xui/ru/menu_toolbars.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Toolbars Popup"> + <menu_item_call label="Выбор кнопок..." name="Chose Buttons"/> + <menu_item_check label="Значки и подписи" name="icons_with_text"/> + <menu_item_check label="Только значки" name="icons_only"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml index c4e553f918..322a27003f 100644 --- a/indra/newview/skins/default/xui/ru/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml @@ -1,27 +1,28 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Main Menu"> <menu label="Я" name="Me"> - <menu_item_call label="Настройки" name="Preferences"/> - <menu_item_call label="Моя информационная панель" name="Manage My Account"/> - <menu_item_call label="Купить L$" name="Buy and Sell L$"/> - <menu_item_call label="Мой профиль" name="Profile"/> - <menu_item_call label="Мой внешний вид" name="ChangeOutfit"/> - <menu_item_check label="Мой инвентарь" name="Inventory"/> - <menu_item_check label="Мой инвентарь" name="ShowSidetrayInventory"/> - <menu_item_check label="Мои жесты" name="Gestures"/> - <menu_item_check label="Мой голос" name="ShowVoice"/> + <menu_item_call label="Информационная панель..." name="Manage My Account"/> + <menu_item_call label="Профиль…" name="Profile"/> + <menu_item_call label="Внешность..." name="ChangeOutfit"/> + <menu_item_check label="Инвентарь..." name="Inventory"/> + <menu_item_check label="Жесты..." name="Gestures"/> + <menu_item_check label="Голос..." name="ShowVoice"/> <menu label="Движение" name="Movement"> <menu_item_call label="Сесть" name="Sit Down Here"/> <menu_item_check label="Полет" name="Fly"/> <menu_item_check label="Всегда бегать" name="Always Run"/> <menu_item_call label="Остановить анимацию" name="Stop Animating My Avatar"/> </menu> - <menu label="Мой статус" name="Status"> + <menu label="Статус" name="Status"> <menu_item_call label="Нет на месте" name="Set Away"/> <menu_item_call label="Не беспокоить" name="Set Busy"/> </menu> <menu_item_call label="Запрос статуса администратора" name="Request Admin Options"/> <menu_item_call label="Выход из статуса администратора" name="Leave Admin Options"/> + <menu_item_call label="Купить L$" name="Buy and Sell L$"/> + <menu_item_call label="Настройки..." name="Preferences"/> + <menu_item_call label="Панели инструментов..." name="Toolbars"/> + <menu_item_call label="Скрыть все элементы управления" name="Hide UI"/> <menu_item_call label="Выход из [APP_NAME]" name="Quit"/> </menu> <menu label="Общение" name="Communicate"> @@ -32,7 +33,7 @@ <menu_item_check label="Голоса собеседников" name="Nearby Voice"/> </menu> <menu label="Мир" name="World"> - <menu_item_check label="Мини-карта" name="Mini-Map"/> + <menu_item_check label="Миникарта" name="Mini-Map"/> <menu_item_check label="Карта мира" name="World Map"/> <menu_item_check label="Поиск" name="Search"/> <menu_item_call label="Снимок" name="Take Snapshot"/> @@ -144,7 +145,6 @@ </menu> <menu label="Справка" name="Help"> <menu_item_call label="Справка по [SECOND_LIFE]" name="Second Life Help"/> - <menu_item_check label="Включить подсказки" name="Enable Hints"/> <menu_item_call label="Жалоба" name="Report Abuse"/> <menu_item_call label="Сообщить об ошибке" name="Report Bug"/> <menu_item_call label="О [APP_NAME]" name="About Second Life"/> @@ -160,7 +160,7 @@ <menu label="Производительность" name="Performance Tools"> <menu_item_call label="Запаздывание" name="Lag Meter"/> <menu_item_check label="Статистика" name="Statistics Bar"/> - <menu_item_check label="Стоимость отрисовки аватара" name="Avatar Rendering Cost"/> + <menu_item_check label="Показать вес отрисовки для аватаров" name="Avatar Rendering Cost"/> </menu> <menu label="Подсветка и видимость" name="Highlighting and Visibility"> <menu_item_check label="Мигающий маяк" name="Cheesy Beacon"/> @@ -288,6 +288,7 @@ <menu_item_check label="Освещение" name="Lights"/> <menu_item_check label="Каркас столкновений" name="Collision Skeleton"/> <menu_item_check label="Лучи" name="Raycast"/> + <menu_item_check label="Сложность визуализации" name="rendercomplexity"/> <menu_item_check label="Лепка" name="Sculpt"/> </menu> <menu label="Визуализация" name="Rendering"> diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index 91c8dbf761..87ae9d06dd 100644 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -1909,6 +1909,12 @@ http://secondlife.com/download. Выйти из программы? <usetemplate ignoretext="Подтверждать перед выходом" name="okcancelignore" notext="Не выходить" yestext="Выйти"/> </notification> + <notification name="ConfirmRestoreToybox"> + Вы действительно хотите восстановить принятые по умолчанию кнопки и панели инструментов? + +Это действие нельзя отменить. + <usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/> + </notification> <notification name="DeleteItems"> [QUESTION] <usetemplate ignoretext="Подтверждать перед удалением предметов" name="okcancelignore" notext="Отмена" yestext="OK"/> @@ -2995,10 +3001,6 @@ http://secondlife.com/download. <button name="cancel" text="Отмена"/> </form> </notification> - <notification label="" name="ModeChange"> - Для смены режима требуется выйти из программы и перезапустить ее. - <usetemplate name="okcancelbuttons" notext="Не выходить" yestext="Выйти"/> - </notification> <notification label="" name="NoClassifieds"> Создание и редактирование рекламы доступно только в расширенном режиме. Выйти из программы и сменить режим? Меню смены режима находится на экране входа. <usetemplate name="okcancelbuttons" notext="Не выходить" yestext="Выйти"/> @@ -3043,6 +3045,10 @@ http://secondlife.com/download. Поиск доступен только в расширенном режиме. Выйти из программы и сменить режим? <usetemplate name="okcancelbuttons" notext="Не выходить" yestext="Выход"/> </notification> + <notification label="" name="ConfirmHideUI"> + Это действие приведет к скрытию всех меню и кнопок. Чтобы вернуть их, щелкните [SHORTCUT] снова. + <usetemplate ignoretext="Подтверждать перед скрытием интерфейса" name="okcancelignore" notext="Отмена" yestext="OK"/> + </notification> <global name="UnsupportedGLRequirements"> По-видимому, ваше оборудование не удовлетворяет требованиям [APP_NAME]. Для работы [APP_NAME] необходима графическая карта OpenGL с поддержкой мультитекстур. Если у вас есть такая карта, убедитесь, что установлены новейшие версии драйверов для нее и пакеты обновлений и исправления для операционной системы. diff --git a/indra/newview/skins/default/xui/ru/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/ru/panel_chiclet_bar.xml new file mode 100644 index 0000000000..f203ecde4b --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_chiclet_bar.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="chiclet_bar"> + <layout_stack name="toolbar_stack"> + <layout_panel name="im_well_panel"> + <chiclet_im_well name="im_well"> + <button name="Unread IM messages" tool_tip="Разговоры"/> + </chiclet_im_well> + </layout_panel> + <layout_panel name="notification_well_panel"> + <chiclet_notification name="notification_well"> + <button name="Unread" tool_tip="Уведомления"/> + </chiclet_notification> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_me.xml b/indra/newview/skins/default/xui/ru/panel_me.xml index b37627b4d9..21a125af87 100644 --- a/indra/newview/skins/default/xui/ru/panel_me.xml +++ b/indra/newview/skins/default/xui/ru/panel_me.xml @@ -1,7 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Мой профиль" name="panel_me"> - <tab_container name="tabs"> - <panel label="МОЙ ПРОФИЛЬ" name="panel_profile"/> - <panel label="МОЯ ПОДБОРКА" name="panel_picks"/> - </tab_container> + <panel label="МОЯ ПОДБОРКА" name="panel_picks"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml b/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml index 3bda315261..d9890acff2 100644 --- a/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml @@ -1,18 +1,23 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="navigation_bar"> - <panel name="navigation_panel"> - <pull_button name="back_btn" tool_tip="Вернуться в предыдущее место"/> - <pull_button name="forward_btn" tool_tip="Перейти в следующее место"/> - <button name="home_btn" tool_tip="Телепортироваться домой"/> - <location_input label="Место" name="location_combo"/> - <search_combo_box label="Поиск" name="search_combo_box" tool_tip="Поиск"> - <combo_editor label="Поиск [SECOND_LIFE]" name="search_combo_editor"/> - </search_combo_box> - </panel> - <favorites_bar name="favorite" tool_tip="Перетаскивайте сюда закладки, чтобы было удобнее переходить в любимые места в Second Life!"> - <label name="favorites_bar_label" tool_tip="Перетаскивайте сюда закладки, чтобы было удобнее переходить в любимые места в Second Life!"> - Панель «Избранное» - </label> - <chevron_button name=">>" tool_tip="Показать больше избранного"/> - </favorites_bar> + <layout_stack name="nvp_stack"> + <layout_panel name="navigation_layout_panel"> + <panel name="navigation_panel"> + <pull_button name="back_btn" tool_tip="Вернуться в предыдущее место"/> + <pull_button name="forward_btn" tool_tip="Перейти в следующее место"/> + <button name="home_btn" tool_tip="Телепортация домой"/> + <location_input label="Место" name="location_combo"/> + </panel> + </layout_panel> + <layout_panel name="favorites_layout_panel"> + <favorites_bar name="favorite" tool_tip="Перетаскивайте сюда закладки, чтобы было удобнее переходить в любимые места в Second Life!"> + <label name="favorites_bar_label" tool_tip="Перетаскивайте сюда закладки, чтобы было удобнее переходить в любимые места в Second Life!"> + Панель «Избранное» + </label> + <more_button name=">>" tool_tip="Показать больше избранного"> + Больше ▼ + </more_button> + </favorites_bar> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml new file mode 100644 index 0000000000..a371040b74 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="nearby_chat"> + <check_box label="Перевод чата (технология Google)" name="translate_chat_checkbox"/> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml index bc9e9a24ba..5e4130667f 100644 --- a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml @@ -50,7 +50,7 @@ <combo_box.item label="Русский" name="Russian"/> <combo_box.item label="Türkçe" name="Turkish"/> <combo_box.item label="Українська" name="Ukrainian"/> - <combo_box.item label="中文 (简体) (Chinese)" name="Chinese"/> + <combo_box.item label="中文 (简体) (китайский)" name="Chinese"/> <combo_box.item label="日本語 (Japanese)" name="Japanese"/> <combo_box.item label="한국어 (Korean)" name="Korean"/> </combo_box> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml index 28d08d7702..770c47b3d4 100644 --- a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml @@ -5,16 +5,18 @@ </text> <combo_box name="language_combobox"> <combo_box.item label="Стандартная настройка системы" name="System Default Language"/> - <combo_box.item label="Английский" name="English"/> + <combo_box.item label="English - Английский" name="English"/> <combo_box.item label="Dansk – датский (бета-версия)" name="Danish"/> <combo_box.item label="Deutsch – немецкий (бета-версия)" name="Deutsch(German)"/> <combo_box.item label="Español – испанский (бета-версия)" name="Spanish"/> <combo_box.item label="Français – французский (бета-версия)" name="French"/> <combo_box.item label="Italiano – итальянский (бета-версия)" name="Italian"/> - <combo_box.item label="Nederlands – нидерландский (бета-версия)" name="Dutch"/> <combo_box.item label="Polski – польский (бета-версия)" name="Polish"/> <combo_box.item label="Português – португальский (бета-версия)" name="Portugese"/> + <combo_box.item label="Русский (бета-версия)" name="Russian"/> + <combo_box.item label="Türkçe - турецкий (бета-версия)" name="Turkish"/> <combo_box.item label="日本語 – японский (бета-версия)" name="(Japanese)"/> + <combo_box.item label="正體中文 - китайский, традиционное письмо (бета-версия)" name="Traditional Chinese"/> </combo_box> <text name="language_textbox2"> (Требуется перезапуск) diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_move.xml b/indra/newview/skins/default/xui/ru/panel_preferences_move.xml index 331776902f..8b3542a6d2 100644 --- a/indra/newview/skins/default/xui/ru/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_move.xml @@ -7,18 +7,33 @@ </text> <check_box label="Создания/редактирование" name="edit_camera_movement" tool_tip="Производить автоматическое позиционирование камеры при входе в режим редактирования и выходе из него"/> <check_box label="Внешность" name="appearance_camera_movement" tool_tip="Производить автоматическое позиционирование камеры в режиме изменения внешности"/> - <check_box initial_value="истина" label="Боковая панель" name="appearance_sidebar_positioning" tool_tip="Производить автоматическое позиционирование камеры для боковой панели"/> + <text name="keyboard_lbl"> + Клавиатура: + </text> + <check_box label="Клавиши стрелок всегда перемещают меня" name="arrow_keys_move_avatar_check"/> + <check_box label="Бег после двойного нажатия клавиши" name="tap_tap_hold_to_run"/> + <text name="mouse_lbl"> + Мышь: + </text> <check_box label="Показывать меня при обзоре мышью" name="first_person_avatar_visible"/> <text name=" Mouse Sensitivity"> Чувствительность мыши: </text> <check_box label="Инвертировать" name="invert_mouse"/> - <check_box label="Клавиши стрелок всегда перемещают меня" name="arrow_keys_move_avatar_check"/> - <check_box label="Бег после двойного нажатия клавиши" name="tap_tap_hold_to_run"/> - <check_box label="Двойной щелчок для:" name="double_click_chkbox"/> - <radio_group name="double_click_action"> - <radio_item label="Телепорт" name="radio_teleport"/> - <radio_item label="Автопилот" name="radio_autopilot"/> - </radio_group> + <text name="single_click_action_lbl"> + Один щелчок на земле: + </text> + <combo_box name="single_click_action_combo"> + <combo_box.item label="Без действия" name="0"/> + <combo_box.item label="Перемещение в точку щелчка" name="1"/> + </combo_box> + <text name="double_click_action_lbl"> + Двойной щелчок на земле: + </text> + <combo_box name="double_click_action_combo"> + <combo_box.item label="Без действия" name="0"/> + <combo_box.item label="Перемещение в точку щелчка" name="1"/> + <combo_box.item label="Телепортация в точку щелчка" name="2"/> + </combo_box> <button label="Другие устройства" name="joystick_setup_button"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_status_bar.xml b/indra/newview/skins/default/xui/ru/panel_status_bar.xml index ddf63d69c2..6822244196 100644 --- a/indra/newview/skins/default/xui/ru/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/ru/panel_status_bar.xml @@ -17,12 +17,9 @@ </panel.string> <panel name="balance_bg"> <text name="balance" tool_tip="Щелкните для обновления вашего баланса L$" value="L$20"/> - <button label="КУПИТЬ L$" name="buyL" tool_tip="Щелкните для покупки L$"/> + <button label="Купить L$" name="buyL" tool_tip="Щелкните для покупки L$"/> + <button label="Торговый центр" name="goShop" tool_tip="Открыть торговый центр Second Life"/> </panel> - <combo_box name="mode_combo" tool_tip="Выберите режим. Основной – для быстрого и простого ознакомления с игрой, а также общения. Расширенный – для доступа к более широким возможностям."> - <combo_box.item label="Основной режим" name="Basic"/> - <combo_box.item label="Расширенный режим" name="Advanced"/> - </combo_box> <text name="TimeText" tool_tip="Текущее время (тихоокеанское)"> 00:00 (тихоокеанское время) </text> diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index 44440ea542..0134298166 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -1273,6 +1273,9 @@ support@secondlife.com. <string name="Marketplace Error Internal Import"> Ошибка. Эта вещь создает проблему. Повторите попытку позже. </string> + <string name="Open landmarks"> + Открыть закладки + </string> <string name="no_transfer" value="(не передается)"/> <string name="no_modify" value="(не изменяется)"/> <string name="no_copy" value="(не копируется)"/> @@ -4248,8 +4251,8 @@ support@secondlife.com. <string name="Female - Wow"> Женщина – ух ты! </string> - <string name="/bow1"> - /поклон1 + <string name="/bow"> + /поклон </string> <string name="/clap"> /хлопнуть @@ -4772,4 +4775,172 @@ support@secondlife.com. <string name="ParticleHiding"> Частицы скрыты </string> + <string name="Command_AboutLand_Label"> + О земле + </string> + <string name="Command_Appearance_Label"> + Внешность + </string> + <string name="Command_Avatar_Label"> + Аватар + </string> + <string name="Command_Build_Label"> + Строительство + </string> + <string name="Command_Chat_Label"> + Чат + </string> + <string name="Command_Compass_Label"> + Компас + </string> + <string name="Command_Destinations_Label"> + Места + </string> + <string name="Command_Gestures_Label"> + Жесты + </string> + <string name="Command_HowTo_Label"> + Инструкции + </string> + <string name="Command_Inventory_Label"> + Инвентарь + </string> + <string name="Command_Map_Label"> + Карта + </string> + <string name="Command_Marketplace_Label"> + Торговый центр + </string> + <string name="Command_MiniMap_Label"> + Миникарта + </string> + <string name="Command_Move_Label"> + Переместить + </string> + <string name="Command_People_Label"> + Люди + </string> + <string name="Command_Picks_Label"> + Подборка + </string> + <string name="Command_Places_Label"> + Места + </string> + <string name="Command_Preferences_Label"> + Настройки + </string> + <string name="Command_Profile_Label"> + Профиль + </string> + <string name="Command_Search_Label"> + Поиск + </string> + <string name="Command_Snapshot_Label"> + Снимок + </string> + <string name="Command_Speak_Label"> + Говорить + </string> + <string name="Command_View_Label"> + Вид + </string> + <string name="Command_Voice_Label"> + Голоса собеседников + </string> + <string name="Command_AboutLand_Tooltip"> + Информация о посещаемой вами земле + </string> + <string name="Command_Appearance_Tooltip"> + Сменить аватар + </string> + <string name="Command_Avatar_Tooltip"> + Выберите весь аватар + </string> + <string name="Command_Build_Tooltip"> + Построение объектов и формирование ландшафта + </string> + <string name="Command_Chat_Tooltip"> + Обменивайтесь текстовыми репликами с людьми вокруг вас + </string> + <string name="Command_Compass_Tooltip"> + Компас + </string> + <string name="Command_Destinations_Tooltip"> + Интересные места + </string> + <string name="Command_Gestures_Tooltip"> + Жесты для аватара + </string> + <string name="Command_HowTo_Tooltip"> + Выполнение типичных задач + </string> + <string name="Command_Inventory_Tooltip"> + Просмотр и использование вашего имущества + </string> + <string name="Command_Map_Tooltip"> + Карта мира + </string> + <string name="Command_Marketplace_Tooltip"> + Покупки + </string> + <string name="Command_MiniMap_Tooltip"> + Показать людей поблизости + </string> + <string name="Command_Move_Tooltip"> + Перемещение аватара + </string> + <string name="Command_People_Tooltip"> + Друзья, группы и люди поблизости + </string> + <string name="Command_Picks_Tooltip"> + Места, которые будут показаны в вашем профиле как избранное + </string> + <string name="Command_Places_Tooltip"> + Сохраненные вами места + </string> + <string name="Command_Preferences_Tooltip"> + Настройки + </string> + <string name="Command_Profile_Tooltip"> + Редактирование или просмотр вашего профиля + </string> + <string name="Command_Search_Tooltip"> + Поиск мест, событий, людей + </string> + <string name="Command_Snapshot_Tooltip"> + Сделать снимок + </string> + <string name="Command_Speak_Tooltip"> + Говорите с людьми вокруг вас с помощью микрофона + </string> + <string name="Command_View_Tooltip"> + Изменение угла камеры + </string> + <string name="Command_Voice_Tooltip"> + Люди около вас с оспособностью говорить + </string> + <string name="Retain%"> + Остаток% + </string> + <string name="Detail"> + Детализация + </string> + <string name="Better Detail"> + Более детально + </string> + <string name="Surface"> + Поверхность + </string> + <string name="Solid"> + Сплошной + </string> + <string name="Wrap"> + Оболочка + </string> + <string name="Preview"> + Предварительный просмотр + </string> + <string name="Normal"> + Нормальный + </string> </strings> diff --git a/indra/newview/skins/default/xui/tr/floater_about.xml b/indra/newview/skins/default/xui/tr/floater_about.xml index 2fdbafdfb4..998890b85c 100644 --- a/indra/newview/skins/default/xui/tr/floater_about.xml +++ b/indra/newview/skins/default/xui/tr/floater_about.xml @@ -10,7 +10,7 @@ <floater.string name="AboutPosition"> <nolink>[HOSTNAME]</nolink> ([HOSTIP]) üzerinde bulunan [REGION] içerisinde [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] konumundasınız [SERVER_VERSION] -[[SERVER_RELEASE_NOTES_URL] [Sürüm Notları]] +[SERVER_RELEASE_NOTES_URL] </floater.string> <floater.string name="AboutSystem"> CPU: [CPU] @@ -37,6 +37,9 @@ Ses Sunucusu Sürümü: [VOICE_VERSION] <floater.string name="AboutTraffic"> Kaybolan Paketler: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) </floater.string> + <floater.string name="ErrorFetchingServerReleaseNotesURL"> + Sunucu sürümü notları URL'si alınırken hata oluştu. + </floater.string> <tab_container name="about_tab"> <panel label="Bilgi" name="support_panel"> <button label="Panoya Kopyala" name="copy_btn"/> diff --git a/indra/newview/skins/default/xui/tr/floater_about_land.xml b/indra/newview/skins/default/xui/tr/floater_about_land.xml index 6256f954b2..c44722f4ba 100644 --- a/indra/newview/skins/default/xui/tr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/tr/floater_about_land.xml @@ -212,19 +212,19 @@ Bölge Nesne Bonusu Faktörü: [BONUS] </text> <text name="Simulator primitive usage:"> - İlkel Kullanım: + Bölge kapasitesi: </text> <text name="objects_available"> [COUNT] / [MAX] ([AVAILABLE]) uygun </text> <text name="Primitives parcel supports:"> - Prim parsel desteği: + Parsel arazi kapasitesi: </text> <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> - Parseldeki prims: + Parsel arazi etkisi: </text> <text name="total_objects_text"> [COUNT] diff --git a/indra/newview/skins/default/xui/tr/floater_avatar.xml b/indra/newview/skins/default/xui/tr/floater_avatar.xml new file mode 100644 index 0000000000..fc9e3c8a9b --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_avatar.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Avatar" title="AVATAR SEÇİCİ"/> diff --git a/indra/newview/skins/default/xui/tr/floater_camera.xml b/indra/newview/skins/default/xui/tr/floater_camera.xml index 066b7cc933..33b4338e21 100644 --- a/indra/newview/skins/default/xui/tr/floater_camera.xml +++ b/indra/newview/skins/default/xui/tr/floater_camera.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="camera_floater"> +<floater name="camera_floater" title="GÖSTER"> <floater.string name="rotate_tooltip"> Odak Etrafında Kamerayı Döndür </floater.string> diff --git a/indra/newview/skins/default/xui/tr/floater_chat_bar.xml b/indra/newview/skins/default/xui/tr/floater_chat_bar.xml new file mode 100644 index 0000000000..d2385e6be3 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_chat_bar.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="chat_bar" title="YAKINDAKİ SOHBET"> + <panel> + <line_editor label="Sohbet etmek için buraya tıklayın." name="chat_box" tool_tip="Söylemek için Enter, bağırmak için Ctrl+Enter yapın"/> + <button name="show_nearby_chat" tool_tip="yakın sohbet günlüğünü gösterir/gizler"/> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_destinations.xml b/indra/newview/skins/default/xui/tr/floater_destinations.xml new file mode 100644 index 0000000000..4504366d63 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_destinations.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Destinations" title="HEDEF KONUMLAR"/> diff --git a/indra/newview/skins/default/xui/tr/floater_fast_timers.xml b/indra/newview/skins/default/xui/tr/floater_fast_timers.xml new file mode 100644 index 0000000000..5736bda45e --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_fast_timers.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="fast_timers"> + <string name="pause"> + Duraklat + </string> + <string name="run"> + Koş + </string> + <button label="Duraklat" name="pause_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_how_to.xml b/indra/newview/skins/default/xui/tr/floater_how_to.xml new file mode 100644 index 0000000000..a42fe0b122 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_how_to.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_how_to" title="NASIL YAPILIR"/> diff --git a/indra/newview/skins/default/xui/tr/floater_map.xml b/indra/newview/skins/default/xui/tr/floater_map.xml index 36ec097cc4..7d6c314f04 100644 --- a/indra/newview/skins/default/xui/tr/floater_map.xml +++ b/indra/newview/skins/default/xui/tr/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map" title=""> +<floater name="Map" title="MİNİ-HARİTA"> <floater.string name="ToolTipMsg"> [REGION](Haritayı açmak için çift tıkla, yatay hareket için shift çek) </floater.string> @@ -7,7 +7,7 @@ [REGION](Işınlamak için çift tıkla, yatay hareket için shift çek) </floater.string> <floater.string name="mini_map_caption"> - MİNİHARİTA + Mini-harita </floater.string> <text label="K" name="floater_map_north"> K diff --git a/indra/newview/skins/default/xui/tr/floater_model_preview.xml b/indra/newview/skins/default/xui/tr/floater_model_preview.xml index 7388d236ed..339545f96e 100644 --- a/indra/newview/skins/default/xui/tr/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/tr/floater_model_preview.xml @@ -1,10 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Model Preview" title="Modeli Karşıya Yükle"> - <string name="status_idle"> - Boşta - </string> +<floater name="Model Preview" title="MODELİ KARŞIYA YÜKLE"> + <string name="status_idle"/> <string name="status_parse_error"> - Dae ayrıştırma sorunu - ayrıntılar için günlüğe bakın. + Hata: Tarih ayrıştırma sorunu - ayrıntılar için günlüğe bakın. </string> <string name="status_reading_file"> Yükleniyor... @@ -51,6 +49,9 @@ <string name="mesh_status_missing_lod"> Gereken ayrıntı seviyesi eksik. </string> + <string name="mesh_status_invalid_material_list"> + Ayrıntı seviyesi malzemeleri, referans modelin bir alt kümesi değil. + </string> <string name="layer_all"> Tümü </string> @@ -63,188 +64,211 @@ <string name="tbd"> ileride belirlenecektir </string> - <text name="name_label"> - Ad: - </text> - <text name="lod_label"> - Önizleme: - </text> - <combo_box name="preview_lod_combo" tool_tip="Önizleme işlemesinde görülecek ayrıntı seviyesi"> - <combo_item name="high"> - Ayrıntı Seviyesi: Yüksek - </combo_item> - <combo_item name="medium"> - Ayrıntı Seviyesi: Orta - </combo_item> - <combo_item name="low"> - Ayrıntı Seviyesi: Düşük - </combo_item> - <combo_item name="lowest"> - Ayrıntı Seviyesi: En Düşük - </combo_item> - </combo_box> - <text name="warning_title"> - UYARI: - </text> - <text name="warning_message"> - Bu modelin Second Life sunucularına nihai karşıya yüklemesini tamamlayamayacaksınız. Örgü modellerinin karşıya yüklenmesi için etkinleştirmenin [[VURL] nasıl yapılacağını öğrenin]. - </text> - <text name="weights_text"> - Karşıdan Yükle: -Fizik: -Sunucu: - -Prim eşdeğerleri: - </text> - <text name="weights"> - [ST] -[PH] -[SIM] - -[EQ] - </text> - <tab_container name="import_tab"> - <panel label="Ayrıntı Seviyesi" name="lod_panel"> - <text name="lod_table_header"> - Ayrıntı Seviyesini Seç: - </text> - <text name="high_label" value="Yüksek"/> - <text name="high_triangles" value="0"/> - <text name="high_vertices" value="0"/> - <text name="medium_label" value="Orta"/> - <text name="medium_triangles" value="0"/> - <text name="medium_vertices" value="0"/> - <text name="low_label" value="Düşük"/> - <text name="low_triangles" value="0"/> - <text name="low_vertices" value="0"/> - <text name="lowest_label" value="En Düşük"/> - <text name="lowest_triangles" value="0"/> - <text name="lowest_vertices" value="0"/> - <text name="lod_table_footer"> - Ayrıntı Seviyesi: [DETAIL] - </text> - <radio_group name="lod_file_or_limit" value="lod_from_file"> - <radio_item label="Dosyadan yükle" name="lod_from_file"/> - <radio_item label="Otomatik oluştur" name="lod_auto_generate"/> - <radio_item label="Hiçbiri" name="lod_none"/> - </radio_group> - <button label="Gözat..." name="lod_browse"/> - <combo_box name="lod_mode"> - <combo_item name="triangle_limit"> - Üçgen Limiti - </combo_item> - <combo_item name="error_threshold"> - Hata Eşiği - </combo_item> - </combo_box> - <text name="build_operator_text"> - İnşa İşleci: + <panel name="left_panel"> + <panel name="model_name_representation_panel"> + <text name="name_label"> + Model adı: </text> - <text name="queue_mode_text"> - Kuyruk Modu: + <text name="model_category_label"> + Bu modelin temsil ettiği... </text> - <combo_box name="build_operator"> - <combo_item name="edge_collapse"> - Kenar Bütünleştirme - </combo_item> - <combo_item name="half_edge_collapse"> - Yarım Kenar Bütünleştirme - </combo_item> - </combo_box> - <combo_box name="queue_mode"> - <combo_item name="greedy"> - Açgözlü - </combo_item> - <combo_item name="lazy"> - Tembel - </combo_item> - <combo_item name="independent"> - Bağımsız - </combo_item> + <combo_box name="model_category_combo"> + <combo_item label="Birini Seçin..." name="Choose one"/> + <combo_item label="Avatar şekli" name="Avatar shape"/> + <combo_item label="Avatar aksesuarı" name="Avatar attachment"/> + <combo_item label="Hareket eden nesne (araç, hayvan)" name="Moving object (vehicle, animal)"/> + <combo_item label="Bina Bileşeni" name="Building Component"/> + <combo_item label="Büyük, hareketsiz, vs." name="Large, non moving etc"/> + <combo_item label="Daha küçük, hareketsiz, vs." name="Smaller, non-moving etc"/> + <combo_item label="Bunlardan herhangi biri değil" name="Not really any of these"/> </combo_box> - <text name="border_mode_text"> - Sınır Modu: - </text> - <text name="share_tolderance_text"> - Paylaşma Toleransı: - </text> - <combo_box name="border_mode"> - <combo_item name="border_unlock"> - Kilidi Kaldır - </combo_item> - <combo_item name="border_lock"> - Kilitle - </combo_item> - </combo_box> - <text name="crease_label"> - Kıvrım Açısı: - </text> - <spinner name="crease_angle" value="75"/> </panel> - <panel label="Fizik" name="physics_panel"> - <panel name="physics geometry"> - <radio_group name="physics_load_radio" value="physics_load_from_file"> - <radio_item label="Dosya:" name="physics_load_from_file"/> - <radio_item label="Ayrıntı Seviyesini Kullan:" name="physics_use_lod"/> - </radio_group> - <combo_box name="physics_lod_combo" tool_tip="Fizik şekli için kullanılacak ayrıntı seviyesi"> - <combo_item name="physics_lowest"> - En Düşük - </combo_item> - <combo_item name="physics_low"> - Düşük - </combo_item> - <combo_item name="physics_medium"> - Orta - </combo_item> - <combo_item name="physics_high"> - Yüksek - </combo_item> - </combo_box> - <button label="Gözat..." name="physics_browse"/> + <tab_container name="import_tab"> + <panel label="Ayrıntı Seviyesi" name="lod_panel" title="Ayrıntı Seviyesi"> + <text initial_value="Kaynak" name="source" value="Kaynak"/> + <text initial_value="Üçgenler" name="triangles" value="Üçgenler"/> + <text initial_value="Köşeler" name="vertices" value="Köşeler"/> + <text initial_value="Yüksek" name="high_label" value="Yüksek"/> + <button label="Gözat..." name="lod_browse_high"/> + <text initial_value="0" name="high_triangles" value="0"/> + <text initial_value="0" name="high_vertices" value="0"/> + <text initial_value="Orta" name="medium_label" value="Orta"/> + <button label="Gözat..." name="lod_browse_medium"/> + <text initial_value="0" name="medium_triangles" value="0"/> + <text initial_value="0" name="medium_vertices" value="0"/> + <text initial_value="Düşük" name="low_label" value="Düşük"/> + <button label="Gözat..." name="lod_browse_low"/> + <text initial_value="0" name="low_triangles" value="0"/> + <text initial_value="0" name="low_vertices" value="0"/> + <text initial_value="En Düşük" name="lowest_label" value="En Düşük"/> + <button label="Gözat..." name="lod_browse_lowest"/> + <text initial_value="0" name="lowest_triangles" value="0"/> + <text initial_value="0" name="lowest_vertices" value="0"/> + <check_box label="Normalleri Oluştur" name="gen_normals"/> + <text initial_value="Kıvrım Açısı:" name="crease_label" value="Kıvrım Açısı:"/> + <spinner name="crease_angle" value="75"/> </panel> - <panel name="physics analysis"> - <slider label="Düzeltme:" name="Smooth"/> - <check_box label="Delikleri Kapa (yavaş)" name="Close Holes (Slow)"/> - <button label="Çözümle" name="Decompose"/> - <button label="İptal" name="decompose_cancel"/> + <panel label="Fizik" name="physics_panel"> + <panel name="physics geometry"> + <text name="first_step_name"> + 1. Adım: Ayrıntı Seviyesi + </text> + <combo_box name="physics_lod_combo" tool_tip="Fizik şekli için kullanılacak ayrıntı"> + <combo_item name="choose_one"> + Birini seçin... + </combo_item> + <combo_item name="physics_high"> + Yüksek + </combo_item> + <combo_item name="physics_medium"> + Orta + </combo_item> + <combo_item name="physics_low"> + Düşük + </combo_item> + <combo_item name="physics_lowest"> + En Düşük + </combo_item> + <combo_item name="load_from_file"> + Dosyadan + </combo_item> + </combo_box> + <button label="Gözat..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <text name="method_label"> + 2. Adım: Çözümle + </text> + <text name="analysis_method_label"> + Yöntem: + </text> + <text name="quality_label"> + Kalite: + </text> + <text name="smooth_method_label"> + Düzeltme: + </text> + <check_box label="Delikleri Kapat" name="Close Holes (Slow)"/> + <button label="Çözümle" name="Decompose"/> + <button label="İptal" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <text name="second_step_label"> + 3. Adım: Basitleştir + </text> + <text name="simp_method_header"> + Yöntem: + </text> + <text name="pass_method_header"> + Geçişler: + </text> + <text name="Detail Scale label"> + Ayrıntı ölçeği: + </text> + <text name="Retain%_label"> + Koru: + </text> + <combo_box name="Combine Quality" value="1"/> + <button label="Basitleştir" name="Simplify"/> + <button label="İptal" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <text name="results_text"> + Sonuçlar: + </text> + <text name="physics_triangles"> + Üçgenler: [TRIANGLES], + </text> + <text name="physics_points"> + Köşeler: [POINTS], + </text> + <text name="physics_hulls"> + Gövdeler: [HULLS] + </text> + </panel> </panel> - <panel name="physics simplification"> - <slider label="Geçişler:" name="Combine Quality"/> - <slider label="Ayrıntı Ölçeği:" name="Detail Scale"/> - <slider label="Koru:" name="Retain%"/> - <button label="Basitleştir" name="Simplify"/> - <button label="İptal" name="simplify_cancel"/> - </panel> - <panel name="physics info"> - <slider label="Önizleme Yayılımı:" name="physics_explode"/> - <text name="physics_triangles"> - Üçgenler: [TRIANGLES] + <panel label="Karşıya yükleme seçenekleri" name="modifiers_panel"> + <text name="scale_label"> + Ölçek (1=ölçekleme yok): + </text> + <spinner name="import_scale" value="1.0"/> + <text name="dimensions_label"> + Boyutlar: </text> - <text name="physics_points"> - Köşeler: [POINTS] + <text name="import_dimensions"> + [X] X [Y] X [Z] </text> - <text name="physics_hulls"> - Gövdeler: [HULLS] + <check_box label="Dokuları dahil et" name="upload_textures"/> + <text name="include_label"> + Sadece avatar modelleri için: </text> + <check_box label="Dış katman ağırlığını dahil et" name="upload_skin"/> + <check_box label="Eklem konumlarını dahil et" name="upload_joints"/> + <text name="pelvis_offset_label"> + Z kayması (avatarı kaldırmak veya indirmek için): + </text> + <spinner name="pelvis_offset" value="0.0"/> </panel> - </panel> - <panel label="Değiştiriciler" name="modifiers_panel"> - <spinner name="import_scale" value="1.0"/> - <text name="import_dimensions"> - [X] x [Y] x [Z] m + </tab_container> + <panel name="weights_and_warning_panel"> + <button label="Ağırlıkları ve ücreti hesapla" name="calculate_btn" tool_tip="Ağırlıkları ve ücreti hesapla"/> + <button label="İptal" name="cancel_btn"/> + <button label="Karşıya Yükle" name="ok_btn" tool_tip="Simülatöre karşıya yükle"/> + <button label="Ayarları temizle ve formu sıfırla" name="reset_btn"/> + <text name="upload_fee"> + Karşıya yükleme ücreti: L$ [FEE] + </text> + <text name="prim_weight"> + Arazi etkisi [EQ] + </text> + <text name="download_weight"> + Karşıdan Yükle: [ST] + </text> + <text name="physics_weight"> + Fizik: [PH] + </text> + <text name="server_weight"> + Sunucu: [SIM] + </text> + <text name="warning_title"> + NOT: + </text> + <text name="warning_message"> + Örgü modellerini karşıya yüklemeye hakkınız yok. Nasıl onaylanacağınızı [[VURL] öğrenin]. + </text> + <text name="status"> + [STATUS] </text> - <check_box label="Dokular" name="upload_textures"/> - <check_box label="Dış katman ağırlığı" name="upload_skin"/> - <check_box label="Eklem konumları" name="upload_joints"/> - <spinner name="pelvis_offset" value="0.0"/> </panel> - </tab_container> - <text name="upload_fee"> - Karşıya yükleme ücreti: L$ [FEE] + </panel> + <text name="lod_label"> + Önizleme: </text> - <button label="Varsayılanlara ayarla" name="reset_btn" tool_tip="Varsayılanlara ayarla"/> - <button label="Ağırlıkları ve ücreti hesapla" name="calculate_btn" tool_tip="Ağırlıkları ve ücreti hesapla"/> - <button label="Karşıya Yükle" name="ok_btn" tool_tip="Simülatöre karşıya yükle"/> - <button label="İptal" name="cancel_btn"/> + <panel name="right_panel"> + <combo_box name="preview_lod_combo" tool_tip="Önizleme işlemesinde görülecek ayrıntı seviyesi"> + <combo_item name="high"> + Yüksek + </combo_item> + <combo_item name="medium"> + Orta + </combo_item> + <combo_item name="low"> + Düşük + </combo_item> + <combo_item name="lowest"> + En Düşük + </combo_item> + </combo_box> + <text name="label_display"> + Ekran... + </text> + <check_box label="Kenarlar" name="show_edges"/> + <check_box label="Fizik" name="show_physics"/> + <check_box label="Dokular" name="show_textures"/> + <check_box label="Dış katman ağırlıkları" name="show_skin_weight"/> + <check_box label="Eklemler" name="show_joint_positions"/> + <text name="physics_explode_label"> + Önizleme Yayılımı: + </text> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/tr/floater_model_wizard.xml b/indra/newview/skins/default/xui/tr/floater_model_wizard.xml index a0a67e2def..108d20cfac 100644 --- a/indra/newview/skins/default/xui/tr/floater_model_wizard.xml +++ b/indra/newview/skins/default/xui/tr/floater_model_wizard.xml @@ -6,26 +6,20 @@ <button label="2. Optimize et" name="optimize_btn"/> <button label="1. Dosya Seç" name="choose_file_btn"/> <panel name="choose_file_panel"> - <panel name="choose_file_header_panel"> - <text name="choose_file_header_text"> + <panel name="header_panel"> + <text name="header_text"> Model dosyasını seçin </text> </panel> - <panel name="choose_file_content_panel"> + <panel name="content"> <text name="advanced_users_text"> Gelişmiş kullanıcılar: Eğer 3B içerik oluşturma araçlarını kullanmayı biliyorsanız, Gelişmiş Karşıya Yükleyiciyi kullanmak isteyebilirsiniz. </text> <button label="Gelişmişe geç" name="switch_to_advanced"/> - <text name="choose_model_file_label"> + <text name="Cache location"> Karşıya yüklenecek model dosyasını seçin </text> <button label="Gözat..." label_selected="Gözat..." name="browse"/> - <text name="support_collada_text"> - Second Life, COLLADA (.dae) dosyalarını destekler - </text> - <text name="dimensions_label"> - Boyutlar (metre): - </text> <text name="dimensions"> X Y Z </text> @@ -38,18 +32,15 @@ </panel> </panel> <panel name="optimize_panel"> - <panel name="optimize_header_panel"> - <text name="optimize_header_text"> + <panel name="header_panel"> + <text name="header_text"> Modeli optimize et </text> </panel> - <text name="optimize_hint"> + <text name="description"> Modeli performans için optimize ettik. İstiyorsanız daha da ayarlayabilirsiniz. </text> - <panel name="optimize_content_panel"> - <text name="generating_lod_label"> - Ayrıntı Seviyesi Oluşturuluyor - </text> + <panel name="content"> <text name="high_detail_text"> Ayrıntı Seviyesi Oluştur: Yüksek </text> @@ -64,123 +55,64 @@ </text> </panel> <panel name="content2"> - <text name="optimize_performance_text"> - Performans - </text> - <text name="optimize_faster_rendering_text"> - Daha hızlı işleme -Daha az ayrıntı -Daha düşük prim ağırlığı - </text> - <text name="optimize_accuracy_text"> - Hassasiyet - </text> - <text name="optimize_slower_rendering_text"> - Daha yavaş işleme -Daha çok ayrıntı -Daha yüksek prim ağırlığı - </text> - <text name="accuracy_slider_mark1"> - ' - </text> - <text name="accuracy_slider_mark2"> - ' - </text> - <text name="accuracy_slider_mark3"> - ' - </text> <button label="Geometri hesaplarını tekrar yap" name="recalculate_geometry_btn"/> - <text name="geometry_preview_label"> + <text name="lod_label"> Geometri önizleme </text> <combo_box name="preview_lod_combo" tool_tip="Önizleme işlemesinde görülecek ayrıntı seviyesi"> - <combo_item name="preview_lod_high"> + <combo_item name="high"> Çok ayrıntı </combo_item> - <combo_item name="preview_lod_medium"> + <combo_item name="medium"> Orta düzey ayrıntı </combo_item> - <combo_item name="preview_lod_low"> + <combo_item name="low"> Az ayrıntı </combo_item> - <combo_item name="preview_lod_lowest"> + <combo_item name="lowest"> En az ayrıntı </combo_item> </combo_box> </panel> </panel> <panel name="physics_panel"> - <panel name="physics_header_panel"> - <text name="physics_header_text"> + <panel name="header_panel"> + <text name="header_text"> Fizik ayarlarını yap </text> </panel> - <text name="physics_hint"> + <text name="description"> Modelin dış gövdesi için bir şekil oluşturacağız. Modelinizin amacına uygun olarak şeklin ayrıntı seviyesini belirleyin. </text> - <panel name="physics_content_panel"> - <text name="physics_performance_text"> - Performans - </text> - <text name="physics_faster_rendering_text"> - Daha hızlı işleme -Daha az ayrıntı -Daha düşük prim ağırlığı - </text> - <text name="physics_accuracy_text"> - Hassasiyet - </text> - <text name="physics_slower_dendering_text"> - Daha yavaş işleme -Daha çok ayrıntı -Daha yüksek prim ağırlığı - </text> - <text name="physics_example_1"> - Örnekler: -Hareketli nesneler -Uçan nesneler -Araçlar - </text> - <text name="physics_example_2"> - Örnekler: -Küçük statik nesneler -Daha az ayrıntılı nesneler -Basit eşyalar - </text> - <text name="physics_example_3"> - Örnekler: -Statik nesneler -Ayrıntılı nesneler -Binalar - </text> + <panel name="content"> <button label="Fizik hesaplarını tekrar yap" name="recalculate_physics_btn"/> <button label="Tekrar hesaplanıyor..." name="recalculating_physics_btn"/> - <text name="physics_preview_label"> + <text name="lod_label"> Fizik önizleme </text> <combo_box name="preview_lod_combo2" tool_tip="Önizleme işlemesinde görülecek ayrıntı seviyesi"> - <combo_item name="preview_lod2_high"> + <combo_item name="high"> Çok ayrıntı </combo_item> - <combo_item name="preview_lod2_medium"> + <combo_item name="medium"> Orta düzey ayrıntı </combo_item> - <combo_item name="preview_lod2_low"> + <combo_item name="low"> Az ayrıntı </combo_item> - <combo_item name="preview_lod2_lowest"> + <combo_item name="lowest"> En az ayrıntı </combo_item> </combo_box> </panel> </panel> <panel name="review_panel"> - <panel name="review_header_panel"> - <text name="review_header_text"> + <panel name="header_panel"> + <text name="header_text"> İncele </text> </panel> - <panel name="review_content_panel"> + <panel name="content"> <text name="review_prim_equiv"> Parsele/bölgeye etkisi: [EQUIV] prim eşdeğerleri </text> @@ -193,8 +125,8 @@ Binalar </panel> </panel> <panel name="upload_panel"> - <panel name="upload_header_panel"> - <text name="upload_header_text"> + <panel name="header_panel"> + <text name="header_text"> Karşıya yükleme bitti </text> </panel> diff --git a/indra/newview/skins/default/xui/tr/floater_moveview.xml b/indra/newview/skins/default/xui/tr/floater_moveview.xml index 0d7c118f1e..74ed613a62 100644 --- a/indra/newview/skins/default/xui/tr/floater_moveview.xml +++ b/indra/newview/skins/default/xui/tr/floater_moveview.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move_floater"> +<floater name="move_floater" title="HAREKET ET"> <string name="walk_forward_tooltip"> İleri Yürü (Yukarı Okuna veya W'ye basın) </string> diff --git a/indra/newview/skins/default/xui/tr/floater_my_appearance.xml b/indra/newview/skins/default/xui/tr/floater_my_appearance.xml new file mode 100644 index 0000000000..4d71187a1f --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_my_appearance.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_my_appearance" title="GÖRÜNÜM"> + <panel label="Görünümü Düzenle" name="main_panel"/> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_my_inventory.xml b/indra/newview/skins/default/xui/tr/floater_my_inventory.xml new file mode 100644 index 0000000000..8c62692a88 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_my_inventory.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_my_inventory" title="ENVANTER"/> diff --git a/indra/newview/skins/default/xui/tr/floater_object_weights.xml b/indra/newview/skins/default/xui/tr/floater_object_weights.xml new file mode 100644 index 0000000000..b57943f666 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_object_weights.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="object_weights" title="GELİŞMİŞ"> + <floater.string name="nothing_selected" value="--"/> + <text name="selected_text" value="SEÇİLİ"/> + <text name="objects" value="--"/> + <text name="objects_label" value="Nesneler"/> + <text name="prims" value="--"/> + <text name="prims_label" value="Primler"/> + <text name="weights_of_selected_text" value="SEÇİLENLERİN AĞIRLIKLARI"/> + <text name="download" value="--"/> + <text name="download_label" value="Karşıdan yükle"/> + <text name="physics" value="--"/> + <text name="physics_label" value="Fizik"/> + <text name="server" value="--"/> + <text name="server_label" value="Sunucu"/> + <text name="display" value="--"/> + <text name="display_label" value="Ekran"/> + <text name="land_impacts_text" value="ARAZİ ETKİLERİ"/> + <text name="selected" value="--"/> + <text name="selected_label" value="Seçili"/> + <text name="rezzed_on_land" value="--"/> + <text name="rezzed_on_land_label" value="Arazide oluşturulmuş"/> + <text name="remaining_capacity" value="--"/> + <text name="remaining_capacity_label" value="Kalan kapasite"/> + <text name="total_capacity" value="--"/> + <text name="total_capacity_label" value="Toplam kapasite"/> + <text name="help_SLURL" value="[secondlife:///app/help/object_weights Bunların tümü ne?...]"/> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/tr/floater_outfit_save_as.xml index 849fdcdbbc..7a9f507c93 100644 --- a/indra/newview/skins/default/xui/tr/floater_outfit_save_as.xml +++ b/indra/newview/skins/default/xui/tr/floater_outfit_save_as.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Dış Görünümü Kaydet"> +<floater name="modal container" title="DIŞ GÖRÜNÜMÜ KAYDET"> <button label="Kaydet" label_selected="Kaydet" name="Save"/> <button label="İptal" label_selected="İptal" name="Cancel"/> <text name="Save item as:"> diff --git a/indra/newview/skins/default/xui/tr/floater_people.xml b/indra/newview/skins/default/xui/tr/floater_people.xml new file mode 100644 index 0000000000..94a27bff57 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_people.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_people" title="KİŞİLER"> + <panel_container name="main_panel"> + <panel label="Grup Profili" name="panel_group_info_sidetray"/> + <panel label="Engellenmiş Sakinler ve Nesneler" name="panel_block_list_sidetray"/> + </panel_container> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_picks.xml b/indra/newview/skins/default/xui/tr/floater_picks.xml new file mode 100644 index 0000000000..06a404447e --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_picks.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_picks" title="Favoriler"/> diff --git a/indra/newview/skins/default/xui/tr/floater_places.xml b/indra/newview/skins/default/xui/tr/floater_places.xml new file mode 100644 index 0000000000..4e09a699f6 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_places.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_places" title="YERLER"> + <panel label="Yerler" name="main_panel"/> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_sound_devices.xml b/indra/newview/skins/default/xui/tr/floater_sound_devices.xml index 99c3bea954..470a222d7e 100644 --- a/indra/newview/skins/default/xui/tr/floater_sound_devices.xml +++ b/indra/newview/skins/default/xui/tr/floater_sound_devices.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_sound_devices" title="Ses Aygıtları"> +<floater name="floater_sound_devices" title="SES CİHAZLARI"> <text name="voice_label"> Sesli Sohbet </text> diff --git a/indra/newview/skins/default/xui/tr/floater_stats.xml b/indra/newview/skins/default/xui/tr/floater_stats.xml index 2218060cc7..17f1166c46 100644 --- a/indra/newview/skins/default/xui/tr/floater_stats.xml +++ b/indra/newview/skins/default/xui/tr/floater_stats.xml @@ -10,8 +10,8 @@ </stat_view> <stat_view label="Gelişmiş" name="advanced"> <stat_view label="İşle" name="render"> - <stat_bar label="Çizilen Üçgenler" name="ktrisframe"/> - <stat_bar label="Çizilen Üçgenler" name="ktrissec"/> + <stat_bar label="Çerçeve Başına Çizilen Üçgenler" name="ktrisframe"/> + <stat_bar label="Saniyede Bir Çizilen Üçgenler" name="ktrissec"/> <stat_bar label="Toplam Nesne" name="objs"/> <stat_bar label="Yeni Nesne" name="newobjs"/> </stat_view> @@ -64,6 +64,14 @@ <stat_bar label="Aracı Süresi" name="simagentmsec"/> <stat_bar label="Görüntü Süresi" name="simimagesmsec"/> <stat_bar label="Komut Dosyası Süresi" name="simscriptmsec"/> + <stat_bar label="Yedek Zaman" name="simsparemsec"/> + <stat_view label="Zaman Ayrıntıları (ms)" name="timedetails"> + <stat_bar label="Fizik Adımı" name="simsimphysicsstepmsec"/> + <stat_bar label="Fizik Şekillerini Güncelle" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Fizik Diğer" name="simsimphysicsothermsec"/> + <stat_bar label="Uyku Zamanı" name="simsleepmsec"/> + <stat_bar label="Pompa Giriş Çıkış" name="simpumpiomsec"/> + </stat_view> </stat_view> </stat_view> </container_view> diff --git a/indra/newview/skins/default/xui/tr/floater_tools.xml b/indra/newview/skins/default/xui/tr/floater_tools.xml index 68c18d65e8..47299059af 100644 --- a/indra/newview/skins/default/xui/tr/floater_tools.xml +++ b/indra/newview/skins/default/xui/tr/floater_tools.xml @@ -25,10 +25,10 @@ Araziyi seçmek için tıklayın ve sürükleyin </floater.string> <floater.string name="status_selectcount"> - [OBJ_COUNT] nesne ( [PRIM_COUNT] prim [PE_STRING] ) seçili + [OBJ_COUNT] nesne seçili, [LAND_IMPACT] arazi etkisi </floater.string> - <floater.string name="status_selectprimequiv"> - , [SEL_WEIGHT] prim eşdeğerleri + <floater.string name="status_remaining_capacity"> + Kalan kapasite [LAND_CAPACITY]. </floater.string> <button name="button focus" tool_tip="Odak"/> <button name="button move" tool_tip="Hareket Et"/> @@ -107,8 +107,8 @@ <text name="selection_empty"> Seçilen bir şey yok. </text> - <text name="selection_weight"> - Fizik ağırlığı [PHYS_WEIGHT], İşleme Maliyeti [DISP_WEIGHT]. + <text name="remaining_capacity"> + [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Ek bilgi] </text> <tab_container name="Object Info Tabs"> <panel label="Genel" name="General"> @@ -321,7 +321,6 @@ Dikiş türü </text> <combo_box name="sculpt type control"> - <combo_box.item label="(hiçbiri)" name="None"/> <combo_box.item label="Küre" name="Sphere"/> <combo_box.item label="Torus" name="Torus"/> <combo_box.item label="Düzlem" name="Plane"/> diff --git a/indra/newview/skins/default/xui/tr/floater_toybox.xml b/indra/newview/skins/default/xui/tr/floater_toybox.xml new file mode 100644 index 0000000000..05d3633df0 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_toybox.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Toybox" title="ARAÇ ÇUBUKLARINI ÖZELLEŞTİR"> + <text name="toybox label 1"> + Düğmeleri araç çubuklarına veya araç çubuklarından sürükleyerek ekleyin ya da kaldırın. + </text> + <text name="toybox label 2"> + Her bir araç çubuğunun ayarına göre düğmeler gösterilir veya sadece simgeleri yer alır. + </text> + <button label="Varsayılanları geri yükle" label_selected="Varsayılanları geri yükle" name="btn_restore_defaults"/> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml b/indra/newview/skins/default/xui/tr/floater_voice_controls.xml index d5d6606e4e..dac05d8327 100644 --- a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/tr/floater_voice_controls.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="Ses Denetimleri"> +<floater name="floater_voice_controls" title="SES DENETİMLERİ"> <string name="title_nearby"> - YAKINDAKİ SES + Yakındaki ses </string> <string name="title_group"> - [GROUP] ile Grup Araması + [GROUP] ile grup araması </string> <string name="title_adhoc"> - Konferans Araması + Konferans araması </string> <string name="title_peer_2_peer"> [NAME] ile arama diff --git a/indra/newview/skins/default/xui/tr/menu_bottomtray.xml b/indra/newview/skins/default/xui/tr/menu_bottomtray.xml index c437669704..f17c0f9971 100644 --- a/indra/newview/skins/default/xui/tr/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/tr/menu_bottomtray.xml @@ -8,7 +8,7 @@ <menu_item_check label="İnşa Et düğmesi" name="ShowBuildButton"/> <menu_item_check label="Arama düğmesi" name="ShowSearchButton"/> <menu_item_check label="Harita düğmesi" name="ShowWorldMapButton"/> - <menu_item_check label="Mini-Harita düğmesi" name="ShowMiniMapButton"/> + <menu_item_check label="Mini-harita düğmesi" name="ShowMiniMapButton"/> <menu_item_call label="Kes" name="NearbyChatBar_Cut"/> <menu_item_call label="Kopyala" name="NearbyChatBar_Copy"/> <menu_item_call label="Yapıştır" name="NearbyChatBar_Paste"/> diff --git a/indra/newview/skins/default/xui/tr/menu_hide_navbar.xml b/indra/newview/skins/default/xui/tr/menu_hide_navbar.xml index d9b99e040b..130c72e04d 100644 --- a/indra/newview/skins/default/xui/tr/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/tr/menu_hide_navbar.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_navbar_menu"> - <menu_item_check label="Gezinme Çubuğunu Göster" name="ShowNavbarNavigationPanel"/> + <menu_item_check label="Gezinme ve Sık Kullanılanlar Çubuğunu Göster" name="ShowNavbarNavigationPanel"/> <menu_item_check label="Sık Kullanılanlar Çubuğunu Göster" name="ShowNavbarFavoritesPanel"/> <menu_item_check label="Mini Konum Çubuğunu Göster" name="ShowMiniLocationPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/tr/menu_login.xml b/indra/newview/skins/default/xui/tr/menu_login.xml index a726925bd3..4c3539b38b 100644 --- a/indra/newview/skins/default/xui/tr/menu_login.xml +++ b/indra/newview/skins/default/xui/tr/menu_login.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Login Menu"> <menu label="Ben" name="File"> - <menu_item_call label="Tercihler" name="Preferences..."/> + <menu_item_call label="Tercihler..." name="Preferences..."/> <menu_item_call label="[APP_NAME]'den Çık" name="Quit"/> </menu> <menu label="Yardım" name="Help"> diff --git a/indra/newview/skins/default/xui/tr/menu_toolbars.xml b/indra/newview/skins/default/xui/tr/menu_toolbars.xml new file mode 100644 index 0000000000..7cb3192ec4 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/menu_toolbars.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Toolbars Popup"> + <menu_item_call label="Düğmeleri seç..." name="Chose Buttons"/> + <menu_item_check label="Simgeler ve etiketler" name="icons_with_text"/> + <menu_item_check label="Sadece simgeler" name="icons_only"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml index fa09e42a14..0877d8881b 100644 --- a/indra/newview/skins/default/xui/tr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml @@ -1,27 +1,28 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Main Menu"> <menu label="Ben" name="Me"> - <menu_item_call label="Tercihler" name="Preferences"/> - <menu_item_call label="Kontrol Panelim" name="Manage My Account"/> - <menu_item_call label="L$ Satın Al" name="Buy and Sell L$"/> - <menu_item_call label="Profilim" name="Profile"/> - <menu_item_call label="Görünümüm" name="ChangeOutfit"/> - <menu_item_check label="Envanterim" name="Inventory"/> - <menu_item_check label="Envanterim" name="ShowSidetrayInventory"/> - <menu_item_check label="Mimiklerim" name="Gestures"/> - <menu_item_check label="Sesim" name="ShowVoice"/> + <menu_item_call label="Kontrol Paneli..." name="Manage My Account"/> + <menu_item_call label="Profil..." name="Profile"/> + <menu_item_call label="Görünüm..." name="ChangeOutfit"/> + <menu_item_check label="Envanter..." name="Inventory"/> + <menu_item_check label="Mimikler..." name="Gestures"/> + <menu_item_check label="Ses..." name="ShowVoice"/> <menu label="Hareket" name="Movement"> <menu_item_call label="Otur" name="Sit Down Here"/> <menu_item_check label="Uç" name="Fly"/> <menu_item_check label="Daima Koş" name="Always Run"/> <menu_item_call label="Beni Anime Etmeyi Durdur" name="Stop Animating My Avatar"/> </menu> - <menu label="Durumum" name="Status"> + <menu label="Durum" name="Status"> <menu_item_call label="Uzakta" name="Set Away"/> <menu_item_call label="Meşgul" name="Set Busy"/> </menu> <menu_item_call label="Yönetici Durumu Talep Et" name="Request Admin Options"/> <menu_item_call label="Yönetici Durumundan Ayrıl" name="Leave Admin Options"/> + <menu_item_call label="L$ Satın Al" name="Buy and Sell L$"/> + <menu_item_call label="Tercihler..." name="Preferences"/> + <menu_item_call label="Araç çubukları..." name="Toolbars"/> + <menu_item_call label="Tüm denetimleri sakla" name="Hide UI"/> <menu_item_call label="[APP_NAME]'den Çık" name="Quit"/> </menu> <menu label="İletişim Kur" name="Communicate"> @@ -32,7 +33,7 @@ <menu_item_check label="Yakındaki Ses" name="Nearby Voice"/> </menu> <menu label="Dünya" name="World"> - <menu_item_check label="Mini-Harita" name="Mini-Map"/> + <menu_item_check label="Mini-harita" name="Mini-Map"/> <menu_item_check label="Dünya Haritası" name="World Map"/> <menu_item_check label="Ara" name="Search"/> <menu_item_call label="Anlık Görüntü" name="Take Snapshot"/> @@ -144,7 +145,6 @@ </menu> <menu label="Yardım" name="Help"> <menu_item_call label="[SECOND_LIFE] Yardımı" name="Second Life Help"/> - <menu_item_check label="İpuçlarını Etkinleştir" name="Enable Hints"/> <menu_item_call label="Kötüye Kullanımı Bildir" name="Report Abuse"/> <menu_item_call label="Hata Bildir" name="Report Bug"/> <menu_item_call label="[APP_NAME] Hakkında" name="About Second Life"/> @@ -160,7 +160,7 @@ <menu label="Performans Araçları" name="Performance Tools"> <menu_item_call label="Gecikme Ölçer" name="Lag Meter"/> <menu_item_check label="İstatistik Çubuğu" name="Statistics Bar"/> - <menu_item_check label="Avatar İşlemi Maaliyetini Göster" name="Avatar Rendering Cost"/> + <menu_item_check label="Avatarlar İçin Çizim Ağırlığını Göster" name="Avatar Rendering Cost"/> </menu> <menu label="Vurgulama ve Görünürlük" name="Highlighting and Visibility"> <menu_item_check label="Yanıp Sönen İşaret" name="Cheesy Beacon"/> @@ -288,6 +288,7 @@ <menu_item_check label="Işıklar" name="Lights"/> <menu_item_check label="Çarpışma İskeleti" name="Collision Skeleton"/> <menu_item_check label="Işın Yayını" name="Raycast"/> + <menu_item_check label="İşleme Karmaşıklığı" name="rendercomplexity"/> <menu_item_check label="Şekillendir" name="Sculpt"/> </menu> <menu label="İşleme" name="Rendering"> diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml index 5eff0cf570..b75307b67b 100644 --- a/indra/newview/skins/default/xui/tr/notifications.xml +++ b/indra/newview/skins/default/xui/tr/notifications.xml @@ -1909,6 +1909,12 @@ Envanter öğesi/öğeleri taşınsın mı? Çıkmak istediğinize emin misiniz? <usetemplate ignoretext="Çıkmadan önce doğrulama iste" name="okcancelignore" notext="Çıkma" yestext="Çık"/> </notification> + <notification name="ConfirmRestoreToybox"> + Varsayılan düğmelerinizi ve araç çubuklarınızı geri yüklemek istediğinize emin misiniz? + +Bu eylemi geri alamazsınız. + <usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/> + </notification> <notification name="DeleteItems"> [QUESTION] <usetemplate ignoretext="Öğeleri silmeden önce doğrulama iste" name="okcancelignore" notext="İptal" yestext="Tamam"/> @@ -2995,10 +3001,6 @@ Görünümünüzü döndürmek için dünya üzerindeki herhangi bir yeri tıkla <button name="cancel" text="İptal Et"/> </form> </notification> - <notification label="" name="ModeChange"> - Mod değiştirme, uygulamadan çıkıp yeniden başlatmanızı gerektiriyor. - <usetemplate name="okcancelbuttons" notext="Çıkma" yestext="Çık"/> - </notification> <notification label="" name="NoClassifieds"> İlan oluşturma ve düzenleme sadece Gelişmiş modda kullanılabilir. Uygulamadan çıkıp, mod değiştirmek ister misiniz? Mod seçici oturum açma ekranında bulunabilir. <usetemplate name="okcancelbuttons" notext="Çıkma" yestext="Çık"/> @@ -3043,6 +3045,10 @@ Görünümünüzü döndürmek için dünya üzerindeki herhangi bir yeri tıkla Arama sadece Gelişmiş modda kullanılabilir. Oturumunuzu kapatıp, mod değiştirmek ister misiniz? <usetemplate name="okcancelbuttons" notext="Çıkma" yestext="Çık"/> </notification> + <notification label="" name="ConfirmHideUI"> + Bu eylem tüm menü öğelerini ve düğmelerini gizler. Bunları geri almak için [SHORTCUT] üzerine tekrar tıklayın. + <usetemplate ignoretext="KA'ni gizlemeden önce onayla" name="okcancelignore" notext="İptal" yestext="Tamam"/> + </notification> <global name="UnsupportedGLRequirements"> [APP_NAME] uygulaması için gerekli donanım gereksinimlerine sahip olmadığınız görünüyor. [APP_NAME] çoklu doku desteği sunan bir OpenGL grafik kartı gerektiriyor. Eğer grafik kartınız bu özellikteyse, grafik kartınızın en son sürücülerine ve işletim sisteminiz için gerekli Service Pack ve yamalara sahip olup olmadığınızı kontrol etmeyi deneyebilirsiniz. diff --git a/indra/newview/skins/default/xui/tr/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/tr/panel_chiclet_bar.xml new file mode 100644 index 0000000000..a1e8190bbc --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_chiclet_bar.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="chiclet_bar"> + <layout_stack name="toolbar_stack"> + <layout_panel name="im_well_panel"> + <chiclet_im_well name="im_well"> + <button name="Unread IM messages" tool_tip="Sohbetler"/> + </chiclet_im_well> + </layout_panel> + <layout_panel name="notification_well_panel"> + <chiclet_notification name="notification_well"> + <button name="Unread" tool_tip="Bildirimler"/> + </chiclet_notification> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_me.xml b/indra/newview/skins/default/xui/tr/panel_me.xml index dcf4f19be2..0441660f3c 100644 --- a/indra/newview/skins/default/xui/tr/panel_me.xml +++ b/indra/newview/skins/default/xui/tr/panel_me.xml @@ -1,7 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Profilim" name="panel_me"> - <tab_container name="tabs"> - <panel label="PROFİLİM" name="panel_profile"/> - <panel label="FAVORİLERİM" name="panel_picks"/> - </tab_container> + <panel label="FAVORİLERİM" name="panel_picks"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_navigation_bar.xml b/indra/newview/skins/default/xui/tr/panel_navigation_bar.xml index b28036228f..b61ba0a12f 100644 --- a/indra/newview/skins/default/xui/tr/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/tr/panel_navigation_bar.xml @@ -1,18 +1,23 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="navigation_bar"> - <panel name="navigation_panel"> - <pull_button name="back_btn" tool_tip="Önceki konuma geri git"/> - <pull_button name="forward_btn" tool_tip="Bir konum ileri git"/> - <button name="home_btn" tool_tip="Ana konumuma ışınla"/> - <location_input label="Konum" name="location_combo"/> - <search_combo_box label="Ara" name="search_combo_box" tool_tip="Ara"> - <combo_editor label="[SECOND_LIFE] içinde arama yap" name="search_combo_editor"/> - </search_combo_box> - </panel> - <favorites_bar name="favorite" tool_tip="Second Life içerisinde sık kullandığınız yerlere hızla erişmek için Yer İmlerini buraya sürükleyin!"> - <label name="favorites_bar_label" tool_tip="Second Life içerisinde sık kullandığınız yerlere hızla erişmek için Yer İmlerini buraya sürükleyin!"> - Sık Kullanılanlar Çubuğu - </label> - <chevron_button name=">>" tool_tip="Sık Kullanılanlarımdan daha çok göster"/> - </favorites_bar> + <layout_stack name="nvp_stack"> + <layout_panel name="navigation_layout_panel"> + <panel name="navigation_panel"> + <pull_button name="back_btn" tool_tip="Önceki konuma geri git"/> + <pull_button name="forward_btn" tool_tip="Bir konum ileri git"/> + <button name="home_btn" tool_tip="Ana konumuma ışınla"/> + <location_input label="Konum" name="location_combo"/> + </panel> + </layout_panel> + <layout_panel name="favorites_layout_panel"> + <favorites_bar name="favorite" tool_tip="Second Life içerisinde sık kullandığınız yerlere hızla erişmek için Yer İmlerini buraya sürükleyin!"> + <label name="favorites_bar_label" tool_tip="Second Life içerisinde sık kullandığınız yerlere hızla erişmek için Yer İmlerini buraya sürükleyin!"> + Sık Kullanılanlar Çubuğu + </label> + <more_button name=">>" tool_tip="Sık Kullanılanlarımdan daha çok göster"> + Daha Fazla ▼ + </more_button> + </favorites_bar> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml new file mode 100644 index 0000000000..73da726cb2 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="nearby_chat"> + <check_box label="Sohbeti çevir (Google tarafından desteklenir)" name="translate_chat_checkbox"/> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml index bb7e6da68c..aeef737420 100644 --- a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml @@ -50,7 +50,7 @@ <combo_box.item label="Русский (Rusça)" name="Russian"/> <combo_box.item label="Türkçe (Türkçe)" name="Turkish"/> <combo_box.item label="Українська (Ukraynaca)" name="Ukrainian"/> - <combo_box.item label="中文 (简体) (Çince)" name="Chinese"/> + <combo_box.item label="中文 (正體) (Çince)" name="Chinese"/> <combo_box.item label="日本語 (Japonca)" name="Japanese"/> <combo_box.item label="한국어 (Korece)" name="Korean"/> </combo_box> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_general.xml b/indra/newview/skins/default/xui/tr/panel_preferences_general.xml index bd651049d0..fbfc07c4b8 100644 --- a/indra/newview/skins/default/xui/tr/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_general.xml @@ -5,16 +5,18 @@ </text> <combo_box name="language_combobox"> <combo_box.item label="Sistem varsayılanı" name="System Default Language"/> - <combo_box.item label="İngilizce" name="English"/> + <combo_box.item label="English (İngilizce)" name="English"/> <combo_box.item label="Dansk (Danca) - Beta" name="Danish"/> <combo_box.item label="Deutsch (Almanca) - Beta" name="Deutsch(German)"/> <combo_box.item label="Español (İspanyolca) - Beta" name="Spanish"/> <combo_box.item label="Français (Fransızca) - Beta" name="French"/> <combo_box.item label="Italiano (İtalyanca) - Beta" name="Italian"/> - <combo_box.item label="Nederlands (Felemekçe) - Beta" name="Dutch"/> <combo_box.item label="Polski (Lehçe) - Beta" name="Polish"/> <combo_box.item label="Português (Portekizce) - Beta" name="Portugese"/> + <combo_box.item label="Русский (Rusça) - Beta" name="Russian"/> + <combo_box.item label="Türkçe - Beta" name="Turkish"/> <combo_box.item label="日本語 (Japonca) - Beta" name="(Japanese)"/> + <combo_box.item label="正體中文 (Geleneksel Çince) - Beta" name="Traditional Chinese"/> </combo_box> <text name="language_textbox2"> (Yeniden başlatma gerekir) diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_move.xml b/indra/newview/skins/default/xui/tr/panel_preferences_move.xml index da102b078c..c35eaec9c3 100644 --- a/indra/newview/skins/default/xui/tr/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_move.xml @@ -7,18 +7,33 @@ </text> <check_box label="İnşa Et/Düzenle" name="edit_camera_movement" tool_tip="Düzenleme moduna girerken ve düzenleme modundan çıkarken otomatik kamera konumunu kullanın"/> <check_box label="Görünüm" name="appearance_camera_movement" tool_tip="Düzenleme modundayken otomatik kamera konumunu kullan"/> - <check_box initial_value="true" label="Kenar çubuğu" name="appearance_sidebar_positioning" tool_tip="Kenar çubuğu için otomatik kamera konumunu kullan"/> + <text name="keyboard_lbl"> + Klavye: + </text> + <check_box label="Ok tuşları beni her zaman hareket ettirir" name="arrow_keys_move_avatar_check"/> + <check_box label="Koşmak için iki kez dokun ve tut" name="tap_tap_hold_to_run"/> + <text name="mouse_lbl"> + Fare: + </text> <check_box label="Fare üzerinden görünümde beni göster" name="first_person_avatar_visible"/> <text name=" Mouse Sensitivity"> Fare üzerinden görünümde fare hassasiyeti </text> <check_box label="Tersine çevir" name="invert_mouse"/> - <check_box label="Ok tuşları beni her zaman hareket ettirir" name="arrow_keys_move_avatar_check"/> - <check_box label="Koşmak için iki kez dokun ve tut" name="tap_tap_hold_to_run"/> - <check_box label="Çift Tıklayınca şunu yap:" name="double_click_chkbox"/> - <radio_group name="double_click_action"> - <radio_item label="Işınla" name="radio_teleport"/> - <radio_item label="Otomatik pilot" name="radio_autopilot"/> - </radio_group> + <text name="single_click_action_lbl"> + Arazi üzerine tek tıklama: + </text> + <combo_box name="single_click_action_combo"> + <combo_box.item label="Eylem yok" name="0"/> + <combo_box.item label="Tıklanan noktaya hareket et" name="1"/> + </combo_box> + <text name="double_click_action_lbl"> + Arazi üzerine çift tıklama: + </text> + <combo_box name="double_click_action_combo"> + <combo_box.item label="Eylem yok" name="0"/> + <combo_box.item label="Tıklanan noktaya hareket et" name="1"/> + <combo_box.item label="Tıklanan noktaya ışınla" name="2"/> + </combo_box> <button label="Diğer Aygıtlar" name="joystick_setup_button"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_status_bar.xml b/indra/newview/skins/default/xui/tr/panel_status_bar.xml index a7491e9c88..63726b94e2 100644 --- a/indra/newview/skins/default/xui/tr/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/tr/panel_status_bar.xml @@ -17,12 +17,9 @@ </panel.string> <panel name="balance_bg"> <text name="balance" tool_tip="L$ bakiyenizi yenilemek için buraya tıklayın" value="L$20"/> - <button label="L$ SATIN AL" name="buyL" tool_tip="Daha fazla L$ satın almak için tıklayın"/> + <button label="L$ Satın Al" name="buyL" tool_tip="Daha fazla L$ satın almak için tıklayın"/> + <button label="Alışveriş yap" name="goShop" tool_tip="Second Life Pazaryeri Aç"/> </panel> - <combo_box name="mode_combo" tool_tip="Modunuzu seçin. Hızlı ve kolay keşif yapmak ile sohbet etmek için Temel seçimini yapın. Daha fazla özelliğe erişmek için Gelişmiş seçimini yapın."> - <combo_box.item label="Temel Mod" name="Basic"/> - <combo_box.item label="Gelişmiş Mod" name="Advanced"/> - </combo_box> <text name="TimeText" tool_tip="Geçerli zaman (Pasifik)"> 24:00 AM PST </text> diff --git a/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml index e02eae1d92..70c449b402 100644 --- a/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml @@ -7,14 +7,14 @@ <layout_panel name="inbox_layout_panel"> <panel label="" name="marketplace_inbox"> <string name="InboxLabelWithArg"> - Alınan Öğeler ([NUM]) + Alınan öğeler ([NUM]) </string> <string name="InboxLabelNoArg"> - Alınan Öğeler + Alınan öğeler </string> - <button label="Alınan Öğeler" name="inbox_btn"/> + <button label="Alınan öğeler" name="inbox_btn"/> <text name="inbox_fresh_new_count"> - [NUM] Yeni + [NUM] yeni </text> <panel tool_tip="Drag and drop items to your inventory to manage and use them"> <text name="inbox_inventory_placeholder"> @@ -26,12 +26,12 @@ <layout_panel name="outbox_layout_panel"> <panel label="" name="marketplace_outbox"> <string name="OutboxLabelWithArg"> - Satıcı Giden Kutusu ([NUM]) + Satıcı giden kutusu ([NUM]) </string> <string name="OutboxLabelNoArg"> - Satıcı Giden Kutusu + Satıcı giden kutusu </string> - <button label="Satıcı Giden Kutusu" name="outbox_btn"/> + <button label="Satıcı giden kutusu" name="outbox_btn"/> <button label="" name="outbox_sync_btn" tool_tip="Pazaryeri Vitrinime Gönder"/> <panel> <panel name="outbox_inventory_placeholder_panel"> diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index 543989804a..e1885413bb 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -29,22 +29,22 @@ Önbellek temizleniyor... </string> <string name="StartupInitializingTextureCache"> - Doku Önbelleği Başlatılıyor... + Doku önbelleği başlatılıyor... </string> <string name="StartupInitializingVFS"> VFS Başlatılıyor... </string> <string name="StartupRequireDriverUpdate"> - Grafik Başlatma Başarılamadı. Lütfen Grafik Sürücünüzü Güncelleştirin! + Grafik başlatma başarılamadı. Lütfen grafik sürücünüzü güncelleştirin! </string> <string name="ProgressRestoring"> Geri yükleniyor... </string> <string name="ProgressChangingResolution"> - Çözünürlük Değiştiriliyor... + Çözünürlük değiştiriliyor... </string> <string name="Fullbright"> - Tam Parlak (Eski) + Tam parlak (eski) </string> <string name="LoginInProgress"> Oturum açılıyor. [APP_NAME] kilitlenmiş görünebilir. Lütfen bekleyin. @@ -77,10 +77,10 @@ Önbellek dosyaları doğrulanıyor (60-90 saniye zaman alabilir)... </string> <string name="LoginProcessingResponse"> - Yanıt İşleniyor... + Yanıt işleniyor... </string> <string name="LoginInitializingWorld"> - Dünya Başlatılıyor... + Dünya başlatılıyor... </string> <string name="LoginDecodingImages"> Görüntülerin kodu çözülüyor... @@ -128,7 +128,7 @@ Ağ sunucusu tarafından döndürülen sertifika imzası doğrulanamadı. Lütfen Ağ yöneticinize başvurun. </string> <string name="LoginFailedNoNetwork"> - Ağ Hatası: Bağlantı kurulamadı, lütfen ağ bağlantınızı kontrol edin. + Ağ hatası: Bağlantı kurulamadı, lütfen ağ bağlantınızı kontrol edin. </string> <string name="LoginFailed"> Oturum açılamadı. @@ -1273,6 +1273,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="Marketplace Error Internal Import"> Hata: Bu öğede bir sorun var. Daha sonra tekrar deneyin. </string> + <string name="Open landmarks"> + Açık yer imleri + </string> <string name="no_transfer" value="(aktarım yok)"/> <string name="no_modify" value="(değiştirme yok)"/> <string name="no_copy" value="(kopya yok)"/> @@ -4251,8 +4254,8 @@ Kötüye Kullanımı Bildirme <string name="Female - Wow"> Kadın - Vay be </string> - <string name="/bow1"> - /selamlama1 + <string name="/bow"> + /selamlama </string> <string name="/clap"> /alkış @@ -4776,4 +4779,172 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="ParticleHiding"> Parçacıklar Gizleniyor </string> + <string name="Command_AboutLand_Label"> + Arazi hakkında + </string> + <string name="Command_Appearance_Label"> + Görünüm + </string> + <string name="Command_Avatar_Label"> + Avatar + </string> + <string name="Command_Build_Label"> + İnşa Et + </string> + <string name="Command_Chat_Label"> + Sohbet + </string> + <string name="Command_Compass_Label"> + Pusula + </string> + <string name="Command_Destinations_Label"> + Hedef Konumlar + </string> + <string name="Command_Gestures_Label"> + Mimikler + </string> + <string name="Command_HowTo_Label"> + Nasıl yapılır + </string> + <string name="Command_Inventory_Label"> + Envanter + </string> + <string name="Command_Map_Label"> + Harita + </string> + <string name="Command_Marketplace_Label"> + Pazaryeri + </string> + <string name="Command_MiniMap_Label"> + Mini-harita + </string> + <string name="Command_Move_Label"> + Hareket Et + </string> + <string name="Command_People_Label"> + Kişiler + </string> + <string name="Command_Picks_Label"> + Favoriler + </string> + <string name="Command_Places_Label"> + Yerler + </string> + <string name="Command_Preferences_Label"> + Tercihler + </string> + <string name="Command_Profile_Label"> + Profil + </string> + <string name="Command_Search_Label"> + Ara + </string> + <string name="Command_Snapshot_Label"> + Anlık görüntü + </string> + <string name="Command_Speak_Label"> + Konuş + </string> + <string name="Command_View_Label"> + Görünüm + </string> + <string name="Command_Voice_Label"> + Yakındaki ses + </string> + <string name="Command_AboutLand_Tooltip"> + Ziyaret ettiğiniz araziyle ilgili bilgi + </string> + <string name="Command_Appearance_Tooltip"> + Avatarınızı değiştirin + </string> + <string name="Command_Avatar_Tooltip"> + Eksiksiz bir avatar seçin + </string> + <string name="Command_Build_Tooltip"> + Nesneler oluşturma ve yüzeyi şekillendirme + </string> + <string name="Command_Chat_Tooltip"> + Metin kullanarak yakındaki kişilerle sohbet etmek + </string> + <string name="Command_Compass_Tooltip"> + Pusula + </string> + <string name="Command_Destinations_Tooltip"> + İlgilendiğiniz hedef konumlar + </string> + <string name="Command_Gestures_Tooltip"> + Avatarınız için mimikler + </string> + <string name="Command_HowTo_Tooltip"> + Genel görevleri nasıl yapacağınız + </string> + <string name="Command_Inventory_Tooltip"> + Eşyalarınızı görüntüleyin ve kullanın + </string> + <string name="Command_Map_Tooltip"> + Dünya haritası + </string> + <string name="Command_Marketplace_Tooltip"> + Alışveriş yap + </string> + <string name="Command_MiniMap_Tooltip"> + Yakındaki kişileri göster + </string> + <string name="Command_Move_Tooltip"> + Avatarınızı hareket ettirmek + </string> + <string name="Command_People_Tooltip"> + Arkadaşlar, gruplar ve yakındaki kişiler + </string> + <string name="Command_Picks_Tooltip"> + Profilinizde sık kullanılan olarak gösterilecek yerler + </string> + <string name="Command_Places_Tooltip"> + Kaydettiğiniz yerler + </string> + <string name="Command_Preferences_Tooltip"> + Tercihler + </string> + <string name="Command_Profile_Tooltip"> + Profilinizi düzenleyin veya görüntüleyin + </string> + <string name="Command_Search_Tooltip"> + Yerler, etkinlikler ve kişiler bulmak + </string> + <string name="Command_Snapshot_Tooltip"> + Resim çekin + </string> + <string name="Command_Speak_Tooltip"> + Mikrofonunuzu kullanarak yakındaki kişilerle konuşun + </string> + <string name="Command_View_Tooltip"> + Kamera açısını değiştirmek + </string> + <string name="Command_Voice_Tooltip"> + Ses imkanına sahip yakındaki kişiler + </string> + <string name="Retain%"> + Koru % + </string> + <string name="Detail"> + Ayrıntı + </string> + <string name="Better Detail"> + Daha İyi Ayrıntı + </string> + <string name="Surface"> + Yüzey + </string> + <string name="Solid"> + Katı + </string> + <string name="Wrap"> + Sar + </string> + <string name="Preview"> + Önizleme + </string> + <string name="Normal"> + Normal + </string> </strings> diff --git a/indra/newview/skins/default/xui/zh/floater_about.xml b/indra/newview/skins/default/xui/zh/floater_about.xml index 0ac85d399e..7e19c124a1 100644 --- a/indra/newview/skins/default/xui/zh/floater_about.xml +++ b/indra/newview/skins/default/xui/zh/floater_about.xml @@ -10,7 +10,7 @@ <floater.string name="AboutPosition"> You are at [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] in [REGION] located at <nolink>[HOSTNAME]</nolink> ([HOSTIP]) [SERVER_VERSION] -[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] +[SERVER_RELEASE_NOTES_URL] </floater.string> <floater.string name="AboutSystem"> CPU:[CPU] diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml index 29f9599c97..6827fab6e6 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml @@ -5,15 +5,15 @@ </text> <combo_box name="language_combobox"> <combo_box.item label="系統預設" name="System Default Language"/> - <combo_box.item label="英語" name="English"/> - <combo_box.item label="Dansk (Danish) - Beta" name="Danish"/> - <combo_box.item label="Deutsch (German) - Beta" name="Deutsch(German)"/> - <combo_box.item label="Español (Spanish) - Beta" name="Spanish"/> - <combo_box.item label="Français (French) - Beta" name="French"/> - <combo_box.item label="Italiano (Italian) - Beta" name="Italian"/> - <combo_box.item label="Polski (Polish) - Beta" name="Polish"/> - <combo_box.item label="Português (Portuguese) - Beta" name="Portugese"/> - <combo_box.item label="日本語 (Japanese) - Beta" name="(Japanese)"/> + <combo_box.item label="English (英語)" name="English"/> + <combo_box.item label="Dansk (丹麥語) - Beta" name="Danish"/> + <combo_box.item label="Deutsch (德語) - Beta" name="Deutsch(German)"/> + <combo_box.item label="Español (西班牙語) - Beta" name="Spanish"/> + <combo_box.item label="Français (法語) - Beta" name="French"/> + <combo_box.item label="Italiano (義大利語) - Beta" name="Italian"/> + <combo_box.item label="Polski (波蘭語) - Beta" name="Polish"/> + <combo_box.item label="Português (葡萄牙語) - Beta" name="Portugese"/> + <combo_box.item label="日本語 (日語) - Beta" name="(Japanese)"/> </combo_box> <text name="language_textbox2"> (須重新啟動) diff --git a/indra/newview/tests/lltranslate_test.cpp b/indra/newview/tests/lltranslate_test.cpp new file mode 100644 index 0000000000..10e37fae97 --- /dev/null +++ b/indra/newview/tests/lltranslate_test.cpp @@ -0,0 +1,345 @@ +/** + * @file lltranslate_test.cpp + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "../test/lltut.h" +#include "../lltranslate.h" +#include "../llversioninfo.h" +#include "../llviewercontrol.h" + +#include "llbufferstream.h" +#include "lltrans.h" +#include "llui.h" + +static const std::string GOOGLE_VALID_RESPONSE1 = +"{\ + \"data\": {\ + \"translations\": [\ + {\ + \"translatedText\": \"привет\",\ + \"detectedSourceLanguage\": \"es\"\ + }\ + ]\ + }\ +}"; + +static const std::string GOOGLE_VALID_RESPONSE2 = +"{\ + \"data\": {\ + \"translations\": [\ + {\ + \"translatedText\": \"привет\"\ + }\ + ]\ + }\ +}\ +"; + +static const std::string GOOGLE_VALID_RESPONSE3 = +"{\ + \"error\": {\ + \"errors\": [\ + {\ + \"domain\": \"global\",\ + \"reason\": \"invalid\",\ + \"message\": \"Invalid Value\"\ + }\ + ],\ + \"code\": 400,\ + \"message\": \"Invalid Value\"\ + }\ +}"; + +static const std::string BING_VALID_RESPONSE1 = +"<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">Привет</string>"; + +static const std::string BING_VALID_RESPONSE2 = +"<html><body><h1>Argument Exception</h1><p>Method: Translate()</p><p>Parameter: </p>\ +<p>Message: 'from' must be a valid language</p><code></code>\ +<p>message id=3743.V2_Rest.Translate.58E8454F</p></body></html>"; + +static const std::string BING_VALID_RESPONSE3 = +"<html><body><h1>Argument Exception</h1><p>Method: Translate()</p>\ +<p>Parameter: appId</p><p>Message: Invalid appId
\nParameter name: appId</p>\ +<code></code><p>message id=3737.V2_Rest.Translate.56016759</p></body></html>"; + +namespace tut +{ + class translate_test + { + protected: + void test_translation( + LLTranslationAPIHandler& handler, + int status, const std::string& resp, + const std::string& exp_trans, const std::string& exp_lang, const std::string& exp_err) + { + std::string translation, detected_lang, err_msg; + bool rc = handler.parseResponse(status, resp, translation, detected_lang, err_msg); + ensure_equals("rc", rc, (status == 200)); + ensure_equals("err_msg", err_msg, exp_err); + ensure_equals("translation", translation, exp_trans); + ensure_equals("detected_lang", detected_lang, exp_lang); + } + + LLGoogleTranslationHandler mGoogle; + LLBingTranslationHandler mBing; + }; + + typedef test_group<translate_test> translate_test_group_t; + typedef translate_test_group_t::object translate_test_object_t; + tut::translate_test_group_t tut_translate("LLTranslate"); + + template<> template<> + void translate_test_object_t::test<1>() + { + test_translation(mGoogle, 200, GOOGLE_VALID_RESPONSE1, "привет", "es", ""); + } + + template<> template<> + void translate_test_object_t::test<2>() + { + test_translation(mGoogle, 200, GOOGLE_VALID_RESPONSE2, "привет", "", ""); + } + + template<> template<> + void translate_test_object_t::test<3>() + { + test_translation(mGoogle, 400, GOOGLE_VALID_RESPONSE3, "", "", "Invalid Value"); + } + + template<> template<> + void translate_test_object_t::test<4>() + { + test_translation(mGoogle, 400, + "", + "", "", "* Line 1, Column 1\n Syntax error: value, object or array expected.\n"); + } + + template<> template<> + void translate_test_object_t::test<5>() + { + test_translation(mGoogle, 400, + "[]", + "", "", ""); + } + + template<> template<> + void translate_test_object_t::test<6>() + { + test_translation(mGoogle, 400, + "{\"oops\": \"invalid\"}", + "", "", ""); + } + + template<> template<> + void translate_test_object_t::test<7>() + { + test_translation(mGoogle, 400, + "{\"data\": {}}", + "", "", ""); + } + + template<> template<> + void translate_test_object_t::test<8>() + { + test_translation(mGoogle, 400, + "{\"data\": { \"translations\": [ {} ] }}", + "", "", ""); + } + + template<> template<> + void translate_test_object_t::test<9>() + { + test_translation(mGoogle, 400, + "{\"data\": { \"translations\": [ { \"translatedTextZZZ\": \"привет\", \"detectedSourceLanguageZZZ\": \"es\" } ] }}", + "", "", ""); + } + + template<> template<> + void translate_test_object_t::test<10>() + { + test_translation(mBing, 200, BING_VALID_RESPONSE1, "Привет", "", ""); + } + + template<> template<> + void translate_test_object_t::test<11>() + { + test_translation(mBing, 400, BING_VALID_RESPONSE2, "", "", "'from' must be a valid language"); + } + + template<> template<> + void translate_test_object_t::test<12>() + { + test_translation(mBing, 400, BING_VALID_RESPONSE3, "", "", "Invalid appId\nParameter name: appId"); + } + + template<> template<> + void translate_test_object_t::test<13>() + { + test_translation(mBing, 200, + "Привет</string>", + "Привет", "", ""); + } + + template<> template<> + void translate_test_object_t::test<14>() + { + test_translation(mBing, 200, + "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">Привет", + "Привет", "", ""); + } + + template<> template<> + void translate_test_object_t::test<15>() + { + test_translation(mBing, 200, + "Привет", + "Привет", "", ""); + } + + template<> template<> + void translate_test_object_t::test<16>() + { + test_translation(mBing, 400, + "Message: some error</p>", + "", "", "some error"); + } + + template<> template<> + void translate_test_object_t::test<17>() + { + test_translation(mBing, 400, + "Message: some error", + "", "", "some error"); + } + + template<> template<> + void translate_test_object_t::test<18>() + { + test_translation(mBing, 400, + "some error</p>", + "", "", "some error"); + } + + template<> template<> + void translate_test_object_t::test<19>() + { + test_translation(mBing, 400, + "some error", + "", "", "some error"); + } + + template<> template<> + void translate_test_object_t::test<20>() + { + std::string url; + mBing.getTranslateURL(url, "en", "es", "hi"); + ensure_equals("bing URL", url, + "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=dummy&text=hi&to=es&from=en"); + } + + template<> template<> + void translate_test_object_t::test<21>() + { + std::string url; + mBing.getTranslateURL(url, "", "es", "hi"); + ensure_equals("bing URL", url, + "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=dummy&text=hi&to=es"); + } + + template<> template<> + void translate_test_object_t::test<22>() + { + std::string url; + mGoogle.getTranslateURL(url, "en", "es", "hi"); + ensure_equals("google URL", url, + "https://www.googleapis.com/language/translate/v2?key=dummy&q=hi&target=es&source=en"); + } + + template<> template<> + void translate_test_object_t::test<23>() + { + std::string url; + mGoogle.getTranslateURL(url, "", "es", "hi"); + ensure_equals("google URL", url, + "https://www.googleapis.com/language/translate/v2?key=dummy&q=hi&target=es"); + } +} + +//== Misc stubs =============================================================== +LLControlGroup gSavedSettings("test"); + +std::string LLUI::getLanguage() { return "en"; } +std::string LLTrans::getString(const std::string &xml_desc, const LLStringUtil::format_map_t& args) { return "dummy"; } + +LLControlGroup::LLControlGroup(const std::string& name) : LLInstanceTracker<LLControlGroup, std::string>(name) {} +std::string LLControlGroup::getString(const std::string& name) { return "dummy"; } +LLControlGroup::~LLControlGroup() {} + +namespace boost { + void intrusive_ptr_add_ref(LLCurl::Responder*) {} + void intrusive_ptr_release(LLCurl::Responder*) {} +} + +LLCurl::Responder::Responder() {} +void LLCurl::Responder::completedHeader(U32, std::string const&, LLSD const&) {} +void LLCurl::Responder::completedRaw(U32, const std::string&, const LLChannelDescriptors&, const LLIOPipe::buffer_ptr_t& buffer) {} +void LLCurl::Responder::completed(U32, std::string const&, LLSD const&) {} +void LLCurl::Responder::error(U32, std::string const&) {} +void LLCurl::Responder::errorWithContent(U32, std::string const&, LLSD const&) {} +void LLCurl::Responder::result(LLSD const&) {} +LLCurl::Responder::~Responder() {} + +void LLHTTPClient::get(const std::string&, const LLSD&, ResponderPtr, const LLSD&, const F32) {} +void LLHTTPClient::get(const std::string&, boost::intrusive_ptr<LLCurl::Responder>, const LLSD&, const F32) {} + +LLBufferStream::LLBufferStream(const LLChannelDescriptors& channels, LLBufferArray* buffer) +: std::iostream(&mStreamBuf), mStreamBuf(channels, buffer) {} +LLBufferStream::~LLBufferStream() {} + +LLBufferStreamBuf::LLBufferStreamBuf(const LLChannelDescriptors&, LLBufferArray*) {} +#if( LL_WINDOWS || __GNUC__ > 2) +LLBufferStreamBuf::pos_type LLBufferStreamBuf::seekoff( + off_type off, + std::ios::seekdir way, + std::ios::openmode which) +#else +streampos LLBufferStreamBuf::seekoff( + streamoff off, + std::ios::seekdir way, + std::ios::openmode which) +#endif +{ return 0; } +int LLBufferStreamBuf::sync() {return 0;} +int LLBufferStreamBuf::underflow() {return 0;} +int LLBufferStreamBuf::overflow(int) {return 0;} +LLBufferStreamBuf::~LLBufferStreamBuf() {} + +S32 LLVersionInfo::getBuild() { return 0; } +const std::string& LLVersionInfo::getChannel() {static std::string dummy; return dummy;} +S32 LLVersionInfo::getMajor() { return 0; } +S32 LLVersionInfo::getMinor() { return 0; } +S32 LLVersionInfo::getPatch() { return 0; } diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp index 170babbb98..36d988ead7 100644..100755 --- a/indra/win_crash_logger/llcrashloggerwindows.cpp +++ b/indra/win_crash_logger/llcrashloggerwindows.cpp @@ -370,5 +370,6 @@ bool LLCrashLoggerWindows::cleanup() sleep_and_pump_messages(3); } PostQuitMessage(0); + commonCleanup(); return true; } |