summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rwxr-xr-xindra/newview/app_settings/settings.xml65
-rwxr-xr-xindra/newview/app_settings/settings_per_account.xml2
-rwxr-xr-xindra/newview/llappcorehttp.cpp255
-rwxr-xr-xindra/newview/llappcorehttp.h65
-rwxr-xr-xindra/newview/llfeaturemanager.cpp67
-rwxr-xr-xindra/newview/llfloaterpreference.cpp13
-rwxr-xr-xindra/newview/llfloaterpreference.h3
-rwxr-xr-xindra/newview/llglsandbox.cpp80
-rwxr-xr-xindra/newview/llinventorymodel.cpp629
-rwxr-xr-xindra/newview/llinventorymodel.h82
-rwxr-xr-xindra/newview/llinventorymodelbackgroundfetch.cpp865
-rwxr-xr-xindra/newview/llinventorymodelbackgroundfetch.h28
-rwxr-xr-xindra/newview/llinventoryobserver.cpp3
-rwxr-xr-xindra/newview/llloginhandler.cpp27
-rwxr-xr-xindra/newview/llmeshrepository.cpp524
-rwxr-xr-xindra/newview/llpanellogin.cpp349
-rwxr-xr-xindra/newview/llpanellogin.h27
-rw-r--r--indra/newview/llsnapshotlivepreview.cpp2
-rwxr-xr-xindra/newview/llstartup.cpp13
-rwxr-xr-xindra/newview/lltexturefetch.cpp193
-rwxr-xr-xindra/newview/lltexturefetch.h16
-rwxr-xr-xindra/newview/llviewerinventory.cpp128
-rwxr-xr-xindra/newview/llviewermenu.cpp6
-rwxr-xr-xindra/newview/skins/default/textures/textures.xml10
-rw-r--r--indra/newview/skins/default/textures/widgets/PushButton_Login.pngbin0 -> 1485 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/PushButton_Login_Over.pngbin0 -> 1568 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.pngbin0 -> 1569 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/first_login_image_left.pngbin0 -> 311306 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/first_login_image_right.pngbin0 -> 329170 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/login_sl_logo.pngbin0 -> 21797 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/login_sl_logo_small.pngbin0 -> 5978 bytes
-rw-r--r--indra/newview/skins/default/xui/de/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/de/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/de/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_report_abuse.xml10
-rw-r--r--indra/newview/skins/default/xui/de/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_snapshot.xml12
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/de/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/de/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/de/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/de/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/de/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/de/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/de/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/de/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/de/panel_flickr_photo.xml41
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_bulk_ban.xml43
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_group_roles.xml24
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/de/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_preferences_privacy.xml4
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_snapshot_options.xml12
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/de/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/de/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/de/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/de/strings.xml102
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_stats.xml4
-rwxr-xr-xindra/newview/skins/default/xui/en/main_view.xml1
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_login.xml457
-rw-r--r--indra/newview/skins/default/xui/en/panel_login_first.xml265
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_general.xml63
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_privacy.xml11
-rwxr-xr-xindra/newview/skins/default/xui/en/widgets/combo_box.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/es/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/es/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/es/floater_report_abuse.xml12
-rw-r--r--indra/newview/skins/default/xui/es/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/es/floater_snapshot.xml8
-rwxr-xr-xindra/newview/skins/default/xui/es/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/es/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/es/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/es/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/es/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/es/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/es/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/es/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/es/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/es/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/es/panel_flickr_photo.xml41
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml43
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_group_roles.xml25
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/es/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_preferences_privacy.xml4
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_snapshot_options.xml9
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/es/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/es/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/es/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/strings.xml102
-rw-r--r--indra/newview/skins/default/xui/fr/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/fr/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/fr/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/fr/floater_report_abuse.xml12
-rw-r--r--indra/newview/skins/default/xui/fr/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/fr/floater_snapshot.xml8
-rwxr-xr-xindra/newview/skins/default/xui/fr/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/fr/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/fr/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/fr/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/fr/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/fr/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/fr/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/fr/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/fr/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/fr/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/fr/panel_flickr_photo.xml41
-rw-r--r--indra/newview/skins/default/xui/fr/panel_group_bulk_ban.xml43
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_group_roles.xml25
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/fr/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_preferences_privacy.xml4
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_snapshot_options.xml9
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/fr/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/fr/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/fr/strings.xml102
-rw-r--r--indra/newview/skins/default/xui/it/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/it/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/it/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/it/floater_report_abuse.xml12
-rw-r--r--indra/newview/skins/default/xui/it/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/it/floater_snapshot.xml8
-rwxr-xr-xindra/newview/skins/default/xui/it/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/it/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/it/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/it/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/it/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/it/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/it/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/it/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/it/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/it/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/it/panel_flickr_photo.xml41
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_bulk_ban.xml43
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_group_roles.xml26
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/it/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_preferences_privacy.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_snapshot_options.xml9
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/it/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/it/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/it/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/it/strings.xml102
-rw-r--r--indra/newview/skins/default/xui/ja/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/ja/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/ja/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/ja/floater_report_abuse.xml12
-rw-r--r--indra/newview/skins/default/xui/ja/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/ja/floater_snapshot.xml8
-rwxr-xr-xindra/newview/skins/default/xui/ja/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/ja/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/ja/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/ja/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/ja/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/ja/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/ja/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/ja/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/ja/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/ja/panel_flickr_photo.xml41
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_bulk_ban.xml41
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_group_roles.xml24
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/ja/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_preferences_privacy.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_snapshot_options.xml11
-rwxr-xr-xindra/newview/skins/default/xui/ja/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/ja/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/ja/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ja/strings.xml102
-rw-r--r--indra/newview/skins/default/xui/pt/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/pt/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/pt/floater_report_abuse.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/pt/floater_snapshot.xml8
-rwxr-xr-xindra/newview/skins/default/xui/pt/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/pt/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/pt/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/pt/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/pt/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/panel_flickr_photo.xml41
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_bulk_ban.xml43
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_group_roles.xml27
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/pt/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_preferences_privacy.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_snapshot_options.xml9
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/pt/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/pt/strings.xml102
-rw-r--r--indra/newview/skins/default/xui/ru/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/ru/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/ru/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/ru/floater_report_abuse.xml12
-rw-r--r--indra/newview/skins/default/xui/ru/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/ru/floater_snapshot.xml8
-rwxr-xr-xindra/newview/skins/default/xui/ru/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/ru/floater_tools.xml81
-rw-r--r--indra/newview/skins/default/xui/ru/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/ru/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/ru/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/ru/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/ru/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/ru/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/ru/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/ru/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/ru/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/ru/panel_flickr_photo.xml40
-rw-r--r--indra/newview/skins/default/xui/ru/panel_group_bulk_ban.xml41
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_group_roles.xml24
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/ru/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_preferences_privacy.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_snapshot_options.xml9
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/ru/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/ru/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/ru/strings.xml102
-rw-r--r--indra/newview/skins/default/xui/tr/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/tr/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/tr/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/tr/floater_report_abuse.xml12
-rw-r--r--indra/newview/skins/default/xui/tr/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/tr/floater_snapshot.xml8
-rwxr-xr-xindra/newview/skins/default/xui/tr/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/tr/floater_tools.xml81
-rw-r--r--indra/newview/skins/default/xui/tr/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/tr/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/tr/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/tr/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/tr/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/tr/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/tr/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/tr/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/tr/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/tr/panel_flickr_photo.xml41
-rw-r--r--indra/newview/skins/default/xui/tr/panel_group_bulk_ban.xml43
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_group_roles.xml22
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/tr/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_preferences_privacy.xml2
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_snapshot_options.xml9
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/tr/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/tr/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/tr/strings.xml102
-rw-r--r--indra/newview/skins/default/xui/zh/floater_big_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_facebook.xml20
-rw-r--r--indra/newview/skins/default/xui/zh/floater_flickr.xml17
-rw-r--r--indra/newview/skins/default/xui/zh/floater_perms_default.xml6
-rwxr-xr-xindra/newview/skins/default/xui/zh/floater_report_abuse.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_script_ed_prefs.xml48
-rwxr-xr-xindra/newview/skins/default/xui/zh/floater_snapshot.xml8
-rwxr-xr-xindra/newview/skins/default/xui/zh/floater_stats.xml3
-rwxr-xr-xindra/newview/skins/default/xui/zh/floater_tools.xml81
-rw-r--r--indra/newview/skins/default/xui/zh/floater_twitter.xml17
-rw-r--r--indra/newview/skins/default/xui/zh/menu_conversation.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_object.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_viewer.xml8
-rwxr-xr-xindra/newview/skins/default/xui/zh/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/zh/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/zh/panel_facebook_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_facebook_photo.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/panel_facebook_place.xml17
-rw-r--r--indra/newview/skins/default/xui/zh/panel_facebook_status.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/panel_flickr_account.xml15
-rw-r--r--indra/newview/skins/default/xui/zh/panel_flickr_photo.xml41
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_bulk_ban.xml43
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_group_invite.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_group_roles.xml27
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_login.xml51
-rw-r--r--indra/newview/skins/default/xui/zh/panel_login_first.xml33
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_preferences_advanced.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_preferences_general.xml10
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_preferences_privacy.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_script_ed.xml5
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_snapshot_options.xml9
-rwxr-xr-xindra/newview/skins/default/xui/zh/panel_teleport_history_item.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/panel_twitter_account.xml15
-rw-r--r--indra/newview/skins/default/xui/zh/panel_twitter_photo.xml32
-rwxr-xr-xindra/newview/skins/default/xui/zh/role_actions.xml1
-rwxr-xr-xindra/newview/skins/default/xui/zh/strings.xml102
-rwxr-xr-xindra/newview/tests/llslurl_test.cpp23
-rwxr-xr-xindra/newview/tests/llviewernetwork_test.cpp23
365 files changed, 8118 insertions, 2288 deletions
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 9a4c4371ee..c6cff55cf7 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.7.17
+3.7.21
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index fbb1637090..f2fb9e854f 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4181,6 +4181,17 @@
<key>Value</key>
<integer>255</integer>
</map>
+ <key>ForceLoginURL</key>
+ <map>
+ <key>Comment</key>
+ <string>Force a specified URL for login page content - used if exists</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string></string>
+ </map>
<key>ForceShowGrid</key>
<map>
<key>Comment</key>
@@ -4456,6 +4467,28 @@
<key>Value</key>
<string />
</map>
+ <key>HttpPipelining</key>
+ <map>
+ <key>Comment</key>
+ <string>If true, viewer will attempt to pipeline HTTP requests.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>HttpRangeRequestsDisable</key>
+ <map>
+ <key>Comment</key>
+ <string>If true, viewer will not issue GET requests with 'Range:' headers for meshes and textures. May resolve problems with certain ISPs and networking gear.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>IMShowTimestamps</key>
<map>
<key>Comment</key>
@@ -5314,6 +5347,18 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>LoginContentVersion</key>
+ <map>
+ <key>Comment</key>
+ <string>Version of login page web based content to display</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>2</string>
+ </map>
+
<key>LoginSRVTimeout</key>
<map>
<key>Comment</key>
@@ -6118,16 +6163,16 @@
<integer>0</integer>
</map>
<key>MemoryLogFrequency</key>
- <map>
- <key>Comment</key>
- <string>Seconds between display of Memory in log (0 for never)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
+ <map>
+ <key>Comment</key>
+ <string>Seconds between display of Memory in log (0 for never)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
<real>30.0</real>
- </map>
+ </map>
<key>MemoryPrivatePoolEnabled</key>
<map>
<key>Comment</key>
@@ -9455,7 +9500,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<key>NameTagShowDisplayNames</key>
<map>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index 500151c935..fc6f1f6395 100755
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -312,7 +312,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<!-- End of back compatibility settings -->
</map>
diff --git a/indra/newview/llappcorehttp.cpp b/indra/newview/llappcorehttp.cpp
index 70dcffefb2..f5f224b83e 100755
--- a/indra/newview/llappcorehttp.cpp
+++ b/indra/newview/llappcorehttp.cpp
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2012-2013, Linden Research, Inc.
+ * Copyright (C) 2012-2014, 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
@@ -40,69 +40,79 @@
// be open at a time.
const F64 LLAppCoreHttp::MAX_THREAD_WAIT_TIME(10.0);
+const long LLAppCoreHttp::PIPELINING_DEPTH(5L);
+
+// Default and dynamic values for classes
static const struct
{
- LLAppCoreHttp::EAppPolicy mPolicy;
U32 mDefault;
U32 mMin;
U32 mMax;
U32 mRate;
+ bool mPipelined;
std::string mKey;
const char * mUsage;
-} init_data[] = // Default and dynamic values for classes
+} init_data[LLAppCoreHttp::AP_COUNT] =
{
- {
- LLAppCoreHttp::AP_DEFAULT, 8, 8, 8, 0,
+ { // AP_DEFAULT
+ 8, 8, 8, 0, false,
"",
"other"
},
- {
- LLAppCoreHttp::AP_TEXTURE, 8, 1, 12, 0,
+ { // AP_TEXTURE
+ 8, 1, 12, 0, true,
"TextureFetchConcurrency",
"texture fetch"
},
- {
- LLAppCoreHttp::AP_MESH1, 32, 1, 128, 100,
+ { // AP_MESH1
+ 32, 1, 128, 0, false,
"MeshMaxConcurrentRequests",
"mesh fetch"
},
- {
- LLAppCoreHttp::AP_MESH2, 8, 1, 32, 100,
+ { // AP_MESH2
+ 8, 1, 32, 0, true,
"Mesh2MaxConcurrentRequests",
"mesh2 fetch"
},
- {
- LLAppCoreHttp::AP_LARGE_MESH, 2, 1, 8, 0,
+ { // AP_LARGE_MESH
+ 2, 1, 8, 0, false,
"",
"large mesh fetch"
},
- {
- LLAppCoreHttp::AP_UPLOADS, 2, 1, 8, 0,
+ { // AP_UPLOADS
+ 2, 1, 8, 0, false,
"",
"asset upload"
},
- {
- LLAppCoreHttp::AP_LONG_POLL, 32, 32, 32, 0,
+ { // AP_LONG_POLL
+ 32, 32, 32, 0, false,
"",
"long poll"
+ },
+ { // AP_INVENTORY
+ 4, 1, 4, 0, false,
+ "",
+ "inventory"
}
};
static void setting_changed();
+LLAppCoreHttp::HttpClass::HttpClass()
+ : mPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID),
+ mConnLimit(0U),
+ mPipelined(false)
+{}
+
+
LLAppCoreHttp::LLAppCoreHttp()
: mRequest(NULL),
mStopHandle(LLCORE_HTTP_HANDLE_INVALID),
mStopRequested(0.0),
- mStopped(false)
-{
- for (int i(0); i < LL_ARRAY_SIZE(mPolicies); ++i)
- {
- mPolicies[i] = LLCore::HttpRequest::DEFAULT_POLICY_ID;
- mSettings[i] = 0U;
- }
-}
+ mStopped(false),
+ mPipelined(true)
+{}
LLAppCoreHttp::~LLAppCoreHttp()
@@ -157,27 +167,28 @@ void LLAppCoreHttp::init()
}
// Setup default policy and constrain if directed to
- mPolicies[AP_DEFAULT] = LLCore::HttpRequest::DEFAULT_POLICY_ID;
+ mHttpClasses[AP_DEFAULT].mPolicy = LLCore::HttpRequest::DEFAULT_POLICY_ID;
// Setup additional policies based on table and some special rules
+ llassert(LL_ARRAY_SIZE(init_data) == AP_COUNT);
for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i)
{
- const EAppPolicy policy(init_data[i].mPolicy);
+ const EAppPolicy app_policy(static_cast<EAppPolicy>(i));
- if (AP_DEFAULT == policy)
+ if (AP_DEFAULT == app_policy)
{
// Pre-created
continue;
}
- mPolicies[policy] = LLCore::HttpRequest::createPolicyClass();
- if (! mPolicies[policy])
+ mHttpClasses[app_policy].mPolicy = LLCore::HttpRequest::createPolicyClass();
+ if (! mHttpClasses[app_policy].mPolicy)
{
// Use default policy (but don't accidentally modify default)
LL_WARNS("Init") << "Failed to create HTTP policy class for " << init_data[i].mUsage
<< ". Using default policy."
<< LL_ENDL;
- mPolicies[policy] = mPolicies[AP_DEFAULT];
+ mHttpClasses[app_policy].mPolicy = mHttpClasses[AP_DEFAULT].mPolicy;
continue;
}
}
@@ -196,9 +207,27 @@ void LLAppCoreHttp::init()
<< LL_ENDL;
}
+ // Signal for global pipelining preference from settings
+ static const std::string http_pipelining("HttpPipelining");
+ if (gSavedSettings.controlExists(http_pipelining))
+ {
+ LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl(http_pipelining);
+ if (cntrl_ptr.isNull())
+ {
+ LL_WARNS("Init") << "Unable to set signal on global setting '" << http_pipelining
+ << "'" << LL_ENDL;
+ }
+ else
+ {
+ mPipelinedSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&setting_changed));
+ }
+ }
+
// Register signals for settings and state changes
for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i)
{
+ const EAppPolicy app_policy(static_cast<EAppPolicy>(i));
+
if (! init_data[i].mKey.empty() && gSavedSettings.controlExists(init_data[i].mKey))
{
LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl(init_data[i].mKey);
@@ -209,7 +238,7 @@ void LLAppCoreHttp::init()
}
else
{
- mSettingsSignal[i] = cntrl_ptr->getCommitSignal()->connect(boost::bind(&setting_changed));
+ mHttpClasses[app_policy].mSettingsSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&setting_changed));
}
}
}
@@ -261,10 +290,11 @@ void LLAppCoreHttp::cleanup()
}
}
- for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i)
+ for (int i(0); i < LL_ARRAY_SIZE(mHttpClasses); ++i)
{
- mSettingsSignal[i].disconnect();
+ mHttpClasses[i].mSettingsSignal.disconnect();
}
+ mPipelinedSignal.disconnect();
delete mRequest;
mRequest = NULL;
@@ -278,30 +308,84 @@ void LLAppCoreHttp::cleanup()
}
}
+
void LLAppCoreHttp::refreshSettings(bool initial)
{
LLCore::HttpStatus status;
+
+ // Global pipelining setting
+ bool pipeline_changed(false);
+ static const std::string http_pipelining("HttpPipelining");
+ if (gSavedSettings.controlExists(http_pipelining))
+ {
+ // Default to true (in ctor) if absent.
+ bool pipelined(gSavedSettings.getBOOL(http_pipelining));
+ if (pipelined != mPipelined)
+ {
+ mPipelined = pipelined;
+ pipeline_changed = true;
+ }
+ }
for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i)
{
- const EAppPolicy policy(init_data[i].mPolicy);
+ const EAppPolicy app_policy(static_cast<EAppPolicy>(i));
- // Set any desired throttle
- if (initial && init_data[i].mRate)
+ if (initial)
{
- // Init-time only, can use the static setters here
- status = LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_THROTTLE_RATE,
- mPolicies[policy],
- init_data[i].mRate,
- NULL);
- if (! status)
+ // Init-time only settings, can use the static setters here
+
+ if (init_data[i].mRate)
{
- LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage
- << " throttle rate. Reason: " << status.toString()
- << LL_ENDL;
+ // Set any desired throttle
+ status = LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_THROTTLE_RATE,
+ mHttpClasses[app_policy].mPolicy,
+ init_data[i].mRate,
+ NULL);
+ if (! status)
+ {
+ LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage
+ << " throttle rate. Reason: " << status.toString()
+ << LL_ENDL;
+ }
}
+
}
+ // Init- or run-time settings. Must use the queued request API.
+
+ // Pipelining changes
+ if (initial || pipeline_changed)
+ {
+ const bool to_pipeline(mPipelined && init_data[i].mPipelined);
+ if (to_pipeline != mHttpClasses[app_policy].mPipelined)
+ {
+ // Pipeline election changing, set dynamic option via request
+
+ LLCore::HttpHandle handle;
+ const long new_depth(to_pipeline ? PIPELINING_DEPTH : 0);
+
+ handle = mRequest->setPolicyOption(LLCore::HttpRequest::PO_PIPELINING_DEPTH,
+ mHttpClasses[app_policy].mPolicy,
+ new_depth,
+ NULL);
+ if (LLCORE_HTTP_HANDLE_INVALID == handle)
+ {
+ status = mRequest->getStatus();
+ LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage
+ << " pipelining. Reason: " << status.toString()
+ << LL_ENDL;
+ }
+ else
+ {
+ LL_DEBUGS("Init") << "Changed " << init_data[i].mUsage
+ << " pipelining. New value: " << new_depth
+ << LL_ENDL;
+ mHttpClasses[app_policy].mPipelined = to_pipeline;
+ }
+ }
+ }
+
// Get target connection concurrency value
U32 setting(init_data[i].mDefault);
if (! init_data[i].mKey.empty() && gSavedSettings.controlExists(init_data[i].mKey))
@@ -314,38 +398,61 @@ void LLAppCoreHttp::refreshSettings(bool initial)
}
}
- if (! initial && setting == mSettings[policy])
+ if (initial || setting != mHttpClasses[app_policy].mConnLimit || pipeline_changed)
{
- // Unchanged, try next setting
- continue;
- }
-
- // Set it and report
- // *TODO: These are intended to be per-host limits when we can
- // support that in llcorehttp/libcurl.
- LLCore::HttpHandle handle;
- handle = mRequest->setPolicyOption(LLCore::HttpRequest::PO_CONNECTION_LIMIT,
- mPolicies[policy],
- setting, NULL);
- if (LLCORE_HTTP_HANDLE_INVALID == handle)
- {
- status = mRequest->getStatus();
- LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage
- << " concurrency. Reason: " << status.toString()
- << LL_ENDL;
- }
- else
- {
- LL_DEBUGS("Init") << "Changed " << init_data[i].mUsage
- << " concurrency. New value: " << setting
- << LL_ENDL;
- mSettings[policy] = setting;
- if (initial && setting != init_data[i].mDefault)
+ // Set it and report. Strategies depend on pipelining:
+ //
+ // No Pipelining. Llcorehttp manages connections itself based
+ // on the PO_CONNECTION_LIMIT setting. Set both limits to the
+ // same value for logical consistency. In the future, may
+ // hand over connection management to libcurl after the
+ // connection cache has been better vetted.
+ //
+ // Pipelining. Libcurl is allowed to manage connections to a
+ // great degree. Steady state will connection limit based on
+ // the per-host setting. Transitions (region crossings, new
+ // avatars, etc.) can request additional outbound connections
+ // to other servers via 2X total connection limit.
+ //
+ LLCore::HttpHandle handle;
+ handle = mRequest->setPolicyOption(LLCore::HttpRequest::PO_CONNECTION_LIMIT,
+ mHttpClasses[app_policy].mPolicy,
+ (mHttpClasses[app_policy].mPipelined ? 2 * setting : setting),
+ NULL);
+ if (LLCORE_HTTP_HANDLE_INVALID == handle)
{
- LL_INFOS("Init") << "Application settings overriding default " << init_data[i].mUsage
- << " concurrency. New value: " << setting
+ status = mRequest->getStatus();
+ LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage
+ << " concurrency. Reason: " << status.toString()
<< LL_ENDL;
}
+ else
+ {
+ handle = mRequest->setPolicyOption(LLCore::HttpRequest::PO_PER_HOST_CONNECTION_LIMIT,
+ mHttpClasses[app_policy].mPolicy,
+ setting,
+ NULL);
+ if (LLCORE_HTTP_HANDLE_INVALID == handle)
+ {
+ status = mRequest->getStatus();
+ LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage
+ << " per-host concurrency. Reason: " << status.toString()
+ << LL_ENDL;
+ }
+ else
+ {
+ LL_DEBUGS("Init") << "Changed " << init_data[i].mUsage
+ << " concurrency. New value: " << setting
+ << LL_ENDL;
+ mHttpClasses[app_policy].mConnLimit = setting;
+ if (initial && setting != init_data[i].mDefault)
+ {
+ LL_INFOS("Init") << "Application settings overriding default " << init_data[i].mUsage
+ << " concurrency. New value: " << setting
+ << LL_ENDL;
+ }
+ }
+ }
}
}
}
diff --git a/indra/newview/llappcorehttp.h b/indra/newview/llappcorehttp.h
index 40e3042b84..37d7a737e7 100755
--- a/indra/newview/llappcorehttp.h
+++ b/indra/newview/llappcorehttp.h
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2012-2013, Linden Research, Inc.
+ * Copyright (C) 2012-2014, 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
@@ -41,6 +41,8 @@
class LLAppCoreHttp : public LLCore::HttpHandler
{
public:
+ static const long PIPELINING_DEPTH;
+
typedef LLCore::HttpRequest::policy_t policy_t;
enum EAppPolicy
@@ -62,15 +64,15 @@ public:
/// Texture fetching policy class. Used to
/// download textures via capability or SSA
/// baking service. Deep queueing of requests.
- /// Do not share.
+ /// Do not share. GET requests only.
///
- /// Destination: simhost:12046 & bake-texture:80
+ /// Destination: simhost:12046 & {bake-texture,cdn}:80
/// Protocol: http:
/// Transfer size: KB-MB
/// Long poll: no
/// Concurrency: high
/// Request rate: high
- /// Pipelined: soon
+ /// Pipelined: yes
AP_TEXTURE,
/// Legacy mesh fetching policy class. Used to
@@ -90,15 +92,16 @@ public:
/// download textures via 'GetMesh2' capability.
/// Used when fetch request (typically one LOD)
/// is 'small', currently defined as 2MB.
- /// Very deeply queued. Do not share.
+ /// Very deeply queued. Do not share. GET
+ /// requests only.
///
- /// Destination: simhost:12046
+ /// Destination: simhost:12046 & cdn:80
/// Protocol: http:
/// Transfer size: KB-MB
/// Long poll: no
/// Concurrency: high
/// Request rate: high
- /// Pipelined: soon
+ /// Pipelined: yes
AP_MESH2,
/// Large mesh fetching policy class. Used to
@@ -110,13 +113,13 @@ public:
/// traffic that can wait for longish stalls
/// (default timeout 600S).
///
- /// Destination: simhost:12046
+ /// Destination: simhost:12046 & cdn:80
/// Protocol: http:
/// Transfer size: MB
/// Long poll: no
/// Concurrency: low
/// Request rate: low
- /// Pipelined: soon
+ /// Pipelined: no
AP_LARGE_MESH,
/// Asset upload policy class. Used to store
@@ -148,6 +151,20 @@ public:
/// Pipelined: no
AP_LONG_POLL,
+ /// Inventory operations (really Capabilities-
+ /// related operations). Mix of high-priority
+ /// and low-priority operations.
+ ///
+ /// Destination: simhost:12043
+ /// Protocol: https:
+ /// Transfer size: KB-MB
+ /// Long poll: no
+ /// Concurrency: high
+ /// Request rate: high
+ /// Pipelined: no
+ AP_INVENTORY,
+ AP_REPORTING = AP_INVENTORY, // Piggy-back on inventory
+
AP_COUNT // Must be last
};
@@ -180,7 +197,13 @@ public:
// application function.
policy_t getPolicy(EAppPolicy policy) const
{
- return mPolicies[policy];
+ return mHttpClasses[policy].mPolicy;
+ }
+
+ // Return whether a policy is using pipelined operations.
+ bool isPipelined(EAppPolicy policy) const
+ {
+ return mHttpClasses[policy].mPipelined;
}
// Apply initial or new settings from the environment.
@@ -190,13 +213,27 @@ private:
static const F64 MAX_THREAD_WAIT_TIME;
private:
- LLCore::HttpRequest * mRequest; // Request queue to issue shutdowns
+
+ // PODish container for per-class settings and state.
+ struct HttpClass
+ {
+ public:
+ HttpClass();
+
+ public:
+ policy_t mPolicy; // Policy class id for the class
+ U32 mConnLimit;
+ bool mPipelined;
+ boost::signals2::connection mSettingsSignal; // Signal to global setting that affect this class (if any)
+ };
+
+ LLCore::HttpRequest * mRequest; // Request queue to issue shutdowns
LLCore::HttpHandle mStopHandle;
F64 mStopRequested;
bool mStopped;
- policy_t mPolicies[AP_COUNT]; // Policy class id for each connection set
- U32 mSettings[AP_COUNT];
- boost::signals2::connection mSettingsSignal[AP_COUNT]; // Signals to global settings that affect us
+ HttpClass mHttpClasses[AP_COUNT];
+ bool mPipelined; // Global setting
+ boost::signals2::connection mPipelinedSignal; // Signal for 'HttpPipelining' setting
};
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index d0555477ea..4db0422634 100755
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -417,13 +417,71 @@ bool LLFeatureManager::parseFeatureTable(std::string filename)
return parse_ok;
}
+F32 gpu_benchmark();
+
bool LLFeatureManager::loadGPUClass()
{
+ //get memory bandwidth from benchmark
+ F32 gbps = gpu_benchmark();
+
+ if (gbps < 0.f)
+ { //couldn't bench, use GLVersion
+#if LL_DARWIN
+ //GLVersion is misleading on OSX, just default to class 3 if we can't bench
+ mGPUClass = GPU_CLASS_3;
+#else
+ if (gGLManager.mGLVersion < 2.f)
+ {
+ mGPUClass = GPU_CLASS_0;
+ }
+ else if (gGLManager.mGLVersion < 3.f)
+ {
+ mGPUClass = GPU_CLASS_1;
+ }
+ else if (gGLManager.mGLVersion < 3.3f)
+ {
+ mGPUClass = GPU_CLASS_2;
+ }
+ else if (gGLManager.mGLVersion < 4.f)
+ {
+ mGPUClass = GPU_CLASS_3;
+ }
+ else
+ {
+ mGPUClass = GPU_CLASS_4;
+ }
+#endif
+ }
+ else if (gbps < 5.f)
+ {
+ mGPUClass = GPU_CLASS_0;
+ }
+ else if (gbps < 10.f)
+ {
+ mGPUClass = GPU_CLASS_1;
+ }
+ else if (gbps < 20.f)
+ {
+ mGPUClass = GPU_CLASS_2;
+ }
+ else if (gbps < 40.f)
+ {
+ mGPUClass = GPU_CLASS_3;
+ }
+ else if (gbps < 80.f)
+ {
+ mGPUClass = GPU_CLASS_4;
+ }
+ else
+ {
+ mGPUClass = GPU_CLASS_5;
+ }
+
// defaults
- mGPUClass = GPU_CLASS_UNKNOWN;
mGPUString = gGLManager.getRawGLString();
- mGPUSupported = FALSE;
+ mGPUSupported = TRUE;
+#if 0
// first table is in the app dir
std::string app_path = gDirUtilp->getAppRODataDir();
app_path += gDirUtilp->getDirDelimiter();
@@ -451,8 +509,8 @@ bool LLFeatureManager::loadGPUClass()
{
parse_ok = parseGPUTable(app_path);
}
-
- return parse_ok; // indicates that the file parsed correctly, not that the gpu was recognized
+#endif
+ return true; // indicates that the file parsed correctly, not that the gpu was recognized
}
@@ -730,6 +788,7 @@ void LLFeatureManager::init()
void LLFeatureManager::applyRecommendedSettings()
{
+ loadGPUClass();
// apply saved settings
// cap the level at 2 (high)
U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5));
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 6e47cbb09f..d3773767d0 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -756,6 +756,16 @@ void LLFloaterPreference::initDoNotDisturbResponse()
}
}
+//static
+void LLFloaterPreference::updateShowFavoritesCheckbox(bool val)
+{
+ LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
+ if (instance)
+ {
+ instance->getChild<LLUICtrl>("favorites_on_login_check")->setValue(val);
+ }
+}
+
void LLFloaterPreference::setHardwareDefaults()
{
LLFeatureManager::getInstance()->applyRecommendedSettings();
@@ -1609,6 +1619,7 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
getChildView("chat_font_size")->setEnabled(TRUE);
}
+
void LLFloaterPreference::refreshUI()
{
refresh();
@@ -1901,6 +1912,8 @@ BOOL LLPanelPreference::postBuild()
if (hasChild("favorites_on_login_check", TRUE))
{
getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setCommitCallback(boost::bind(&showFavoritesOnLoginWarning, _1, _2));
+ bool show_favorites_at_login = LLPanelLogin::getShowFavorites();
+ getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setValue(show_favorites_at_login);
}
//////////////////////PanelAdvanced ///////////////////
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index e287631b1a..7bf6ae7d79 100755
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -84,6 +84,9 @@ public:
// translate user's do not disturb response message according to current locale if message is default, otherwise do nothing
static void initDoNotDisturbResponse();
+ // update Show Favorites checkbox
+ static void updateShowFavoritesCheckbox(bool val);
+
void processProperties( void* pData, EAvatarProcessorType type );
void processProfileProperties(const LLAvatarData* pAvatarData );
void storeAvatarProperties( const LLAvatarData* pAvatarData );
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index c386030329..4b8ac2b3cf 100755
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -879,13 +879,32 @@ void LLViewerObjectList::renderObjectBeacons()
}
-void gpu_benchmark()
+F32 gpu_benchmark()
{
- if (!LLGLSLShader::sNoFixedFunction)
+ if (!gGLManager.mHasShaderObjects)
{ //don't bother benchmarking the fixed function
- return;
+ return -1.f;
}
+
+ if (gBenchmarkProgram.mProgramObject == 0)
+ {
+ LLViewerShaderMgr::instance()->initAttribsAndUniforms();
+
+ gBenchmarkProgram.mName = "Benchmark Shader";
+ gBenchmarkProgram.mFeatures.attachNothing = true;
+ gBenchmarkProgram.mShaderFiles.clear();
+ gBenchmarkProgram.mShaderFiles.push_back(std::make_pair("interface/benchmarkV.glsl", GL_VERTEX_SHADER_ARB));
+ gBenchmarkProgram.mShaderFiles.push_back(std::make_pair("interface/benchmarkF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gBenchmarkProgram.mShaderLevel = 1;
+ if (!gBenchmarkProgram.createShader(NULL, NULL))
+ {
+ return -1.f;
+ }
+ }
+
+ LLGLDisable blend(GL_BLEND);
+
//measure memory bandwidth by:
// - allocating a batch of textures and render targets
// - rendering those textures to those render targets
@@ -909,7 +928,7 @@ void gpu_benchmark()
std::vector<F32> results;
//build a random texture
- U8 pixels[res*res*4];
+ U8* pixels = new U8[res*res*4];
for (U32 i = 0; i < res*res*4; ++i)
{
@@ -931,6 +950,8 @@ void gpu_benchmark()
LLImageGL::setManualImage(GL_TEXTURE_2D, 0, GL_RGBA, res,res,GL_RGBA, GL_UNSIGNED_BYTE, pixels);
}
+ delete [] pixels;
+
//make a dummy triangle to draw with
LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, GL_STATIC_DRAW_ARB);
buff->allocateBuffer(3, 0, true);
@@ -951,6 +972,8 @@ void gpu_benchmark()
//wait for any previoius GL commands to finish
glFinish();
+ bool busted_finish = false;
+
for (S32 c = -1; c < samples; ++c)
{
LLTimer timer;
@@ -965,7 +988,18 @@ void gpu_benchmark()
}
//wait for current batch of copies to finish
- glFinish();
+ if (busted_finish)
+ {
+ //read a pixel off the last target since some drivers seem to ignore glFinish
+ dest[count-1].bindTarget();
+ U32 pixel = 0;
+ glReadPixels(0,0,1,1,GL_RGBA, GL_UNSIGNED_BYTE, &pixel);
+ dest[count-1].flush();
+ }
+ else
+ {
+ glFinish();
+ }
F32 time = timer.getElapsedTimeF32();
@@ -976,13 +1010,20 @@ void gpu_benchmark()
F32 gbps = gb/time;
- results.push_back(gbps);
+ if (!gGLManager.mHasTimerQuery && !busted_finish && gbps > 128.f)
+ { //unrealistically high bandwidth for a card without timer queries, glFinish is probably ignored
+ busted_finish = true;
+ }
+ else
+ {
+ results.push_back(gbps);
+ }
}
}
gBenchmarkProgram.unbind();
- LLGLSLShader::finishProfile();
+ LLGLSLShader::finishProfile(false);
LLImageGL::deleteTextures(count, source);
@@ -992,21 +1033,32 @@ void gpu_benchmark()
F32 gbps = results[results.size()/2];
LL_INFOS() << "Memory bandwidth is " << llformat("%.3f", gbps) << "GB/sec according to CPU timers" << LL_ENDL;
-
- F32 ms = gBenchmarkProgram.mTimeElapsed/1000000.f;
- F32 seconds = ms/1000.f;
-
- F64 samples_drawn = res*res*count*samples;
- F32 samples_sec = (samples_drawn/1000000000.0)/seconds;
- gbps = samples_sec*8;
+
+#if LL_DARWIN
+ if (gbps > 512.f)
+ {
+ LL_INFOS() << "Memory bandwidth is improbably high and likely incorrect." << LL_ENDL;
+ //OSX is probably lying, discard result
+ gbps = -1.f;
+ }
+#endif
if (gGLManager.mHasTimerQuery)
{
+ F32 ms = gBenchmarkProgram.mTimeElapsed/1000000.f;
+ F32 seconds = ms/1000.f;
+
+ F64 samples_drawn = res*res*count*samples;
+ F32 samples_sec = (samples_drawn/1000000000.0)/seconds;
+ gbps = samples_sec*8;
+
LL_INFOS() << "Memory bandwidth is " << llformat("%.3f", gbps) << "GB/sec according to ARB_timer_query" << LL_ENDL;
}
else
{
LL_INFOS() << "ARB_timer_query unavailable." << LL_ENDL;
}
+
+ return gbps;
}
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 14ca0095ae..f92332dea5 100755
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2014, 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
@@ -25,6 +25,9 @@
*/
#include "llviewerprecompiledheaders.h"
+
+#include <typeinfo>
+
#include "llinventorymodel.h"
#include "llaisapi.h"
@@ -50,7 +53,9 @@
#include "llvoavatarself.h"
#include "llgesturemgr.h"
#include "llsdutil.h"
-#include <typeinfo>
+#include "bufferarray.h"
+#include "bufferstream.h"
+#include "llcorehttputil.h"
//#define DIFF_INVENTORY_FILES
#ifdef DIFF_INVENTORY_FILES
@@ -67,7 +72,8 @@ BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE;
///----------------------------------------------------------------------------
//BOOL decompress_file(const char* src_filename, const char* dst_filename);
-const char CACHE_FORMAT_STRING[] = "%s.inv";
+static const char CACHE_FORMAT_STRING[] = "%s.inv";
+static const char * const LOG_INV("Inventory");
struct InventoryIDPtrLess
{
@@ -125,24 +131,32 @@ LLInventoryModel gInventory;
// Default constructor
LLInventoryModel::LLInventoryModel()
-: mModifyMask(LLInventoryObserver::ALL),
- mChangedItemIDs(),
+: // These are now ordered, keep them that way.
mBacklinkMMap(),
+ mIsAgentInvUsable(false),
+ mRootFolderID(),
+ mLibraryRootFolderID(),
+ mLibraryOwnerID(),
mCategoryMap(),
mItemMap(),
- mCategoryLock(),
- mItemLock(),
- mLastItem(NULL),
mParentChildCategoryTree(),
mParentChildItemTree(),
- mObservers(),
- mRootFolderID(),
- mLibraryRootFolderID(),
- mLibraryOwnerID(),
+ mLastItem(NULL),
mIsNotifyObservers(FALSE),
- mIsAgentInvUsable(false)
-{
-}
+ mModifyMask(LLInventoryObserver::ALL),
+ mChangedItemIDs(),
+ mObservers(),
+ mHttpRequestFG(NULL),
+ mHttpRequestBG(NULL),
+ mHttpOptions(NULL),
+ mHttpHeaders(NULL),
+ mHttpPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID),
+ mHttpPriorityFG(0),
+ mHttpPriorityBG(0),
+ mCategoryLock(),
+ mItemLock()
+{}
+
// Destroys the object
LLInventoryModel::~LLInventoryModel()
@@ -162,6 +176,22 @@ void LLInventoryModel::cleanupInventory()
delete observer;
}
mObservers.clear();
+
+ // Run down HTTP transport
+ if (mHttpHeaders)
+ {
+ mHttpHeaders->release();
+ mHttpHeaders = NULL;
+ }
+ if (mHttpOptions)
+ {
+ mHttpOptions->release();
+ mHttpOptions = NULL;
+ }
+ delete mHttpRequestFG;
+ mHttpRequestFG = NULL;
+ delete mHttpRequestBG;
+ mHttpRequestBG = NULL;
}
// This is a convenience function to check if one object has a parent
@@ -253,7 +283,7 @@ bool LLInventoryModel::getObjectTopmostAncestor(const LLUUID& object_id, LLUUID&
LLInventoryObject *parent_object = getObject(object->getParentUUID());
if (!parent_object)
{
- LL_WARNS() << "unable to trace topmost ancestor, missing item for uuid " << object->getParentUUID() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "unable to trace topmost ancestor, missing item for uuid " << object->getParentUUID() << LL_ENDL;
return false;
}
object = parent_object;
@@ -508,7 +538,7 @@ public:
protected:
virtual void httpFailure()
{
- LL_WARNS("InvAPI") << dumpResponse() << LL_ENDL;
+ LL_WARNS(LOG_INV) << dumpResponse() << LL_ENDL;
}
virtual void httpSuccess()
@@ -522,7 +552,7 @@ protected:
}
LLUUID category_id = content["folder_id"].asUUID();
- LL_DEBUGS("Avatar") << ll_pretty_print_sd(content) << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << ll_pretty_print_sd(content) << LL_ENDL;
// Add the category to the internal representation
LLPointer<LLViewerInventoryCategory> cat =
new LLViewerInventoryCategory( category_id,
@@ -560,13 +590,13 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
LLUUID id;
if(!isInventoryUsable())
{
- LL_WARNS() << "Inventory is broken." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Inventory is broken." << LL_ENDL;
return id;
}
if(LLFolderType::lookup(preferred_type) == LLFolderType::badLookup())
{
- LL_DEBUGS() << "Attempt to create undefined category." << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Attempt to create undefined category." << LL_ENDL;
return id;
}
@@ -599,7 +629,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
request["message"] = "CreateInventoryCategory";
request["payload"] = body;
- LL_DEBUGS("Avatar") << "create category request: " << ll_pretty_print_sd(request) << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "create category request: " << ll_pretty_print_sd(request) << LL_ENDL;
// viewer_region->getCapAPI().post(request);
LLHTTPClient::post(
url,
@@ -820,7 +850,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask)
if(!isInventoryUsable())
{
- LL_WARNS() << "Inventory is broken." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Inventory is broken." << LL_ENDL;
return mask;
}
@@ -883,7 +913,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask)
}
else
{
- LL_WARNS() << "Couldn't find parent-child item tree for " << new_item->getName() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Couldn't find parent-child item tree for " << new_item->getName() << LL_ENDL;
}
}
else
@@ -912,8 +942,8 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask)
else
{
// Whoops! No such parent, make one.
- LL_INFOS() << "Lost item: " << new_item->getUUID() << " - "
- << new_item->getName() << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Lost item: " << new_item->getUUID() << " - "
+ << new_item->getName() << LL_ENDL;
parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
new_item->setParent(parent_id);
item_array = get_ptr_in_map(mParentChildItemTree, parent_id);
@@ -926,7 +956,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask)
}
else
{
- LL_WARNS() << "Lost and found Not there!!" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Lost and found Not there!!" << LL_ENDL;
}
}
}
@@ -1000,7 +1030,7 @@ void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat, U32
if(!isInventoryUsable())
{
- LL_WARNS() << "Inventory is broken." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Inventory is broken." << LL_ENDL;
return;
}
@@ -1062,17 +1092,17 @@ void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat, U32
void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id)
{
- LL_DEBUGS() << "LLInventoryModel::moveObject()" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "LLInventoryModel::moveObject()" << LL_ENDL;
if(!isInventoryUsable())
{
- LL_WARNS() << "Inventory is broken." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Inventory is broken." << LL_ENDL;
return;
}
if((object_id == cat_id) || !is_in_map(mCategoryMap, cat_id))
{
- LL_WARNS() << "Could not move inventory object " << object_id << " to "
- << cat_id << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Could not move inventory object " << object_id << " to "
+ << cat_id << LL_ENDL;
return;
}
LLPointer<LLViewerInventoryCategory> cat = getCategory(object_id);
@@ -1108,14 +1138,14 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
{
if (item->getParentUUID() == new_parent_id)
{
- LL_DEBUGS("Inventory") << "'" << item->getName() << "' (" << item->getUUID()
- << ") is already in folder " << new_parent_id << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "'" << item->getName() << "' (" << item->getUUID()
+ << ") is already in folder " << new_parent_id << LL_ENDL;
}
else
{
- LL_INFOS("Inventory") << "Moving '" << item->getName() << "' (" << item->getUUID()
- << ") from " << item->getParentUUID() << " to folder "
- << new_parent_id << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Moving '" << item->getName() << "' (" << item->getUUID()
+ << ") from " << item->getParentUUID() << " to folder "
+ << new_parent_id << LL_ENDL;
LLInventoryModel::update_list_t update;
LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
update.push_back(old_folder);
@@ -1171,7 +1201,7 @@ void LLInventoryModel::onAISUpdateReceived(const std::string& context, const LLS
AISUpdate ais_update(update); // parse update llsd into stuff to do.
ais_update.doUpdate(); // execute the updates in the appropriate order.
- LL_INFOS() << "elapsed: " << timer.getElapsedTimeF32() << LL_ENDL;
+ LL_INFOS(LOG_INV) << "elapsed: " << timer.getElapsedTimeF32() << LL_ENDL;
}
// Does not appear to be used currently.
@@ -1180,7 +1210,7 @@ void LLInventoryModel::onItemUpdated(const LLUUID& item_id, const LLSD& updates,
U32 mask = LLInventoryObserver::NONE;
LLPointer<LLViewerInventoryItem> item = gInventory.getItem(item_id);
- LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << (item ? item->getName() : "(NOT FOUND)") << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (item ? item->getName() : "(NOT FOUND)") << LL_ENDL;
if(item)
{
for (LLSD::map_const_iterator it = updates.beginMap();
@@ -1188,19 +1218,19 @@ void LLInventoryModel::onItemUpdated(const LLUUID& item_id, const LLSD& updates,
{
if (it->first == "name")
{
- LL_INFOS() << "Updating name from " << item->getName() << " to " << it->second.asString() << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Updating name from " << item->getName() << " to " << it->second.asString() << LL_ENDL;
item->rename(it->second.asString());
mask |= LLInventoryObserver::LABEL;
}
else if (it->first == "desc")
{
- LL_INFOS() << "Updating description from " << item->getActualDescription()
- << " to " << it->second.asString() << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Updating description from " << item->getActualDescription()
+ << " to " << it->second.asString() << LL_ENDL;
item->setDescription(it->second.asString());
}
else
{
- LL_ERRS() << "unhandled updates for field: " << it->first << LL_ENDL;
+ LL_ERRS(LOG_INV) << "unhandled updates for field: " << it->first << LL_ENDL;
}
}
mask |= LLInventoryObserver::INTERNAL;
@@ -1211,7 +1241,7 @@ void LLInventoryModel::onItemUpdated(const LLUUID& item_id, const LLSD& updates,
LLInventoryModel::LLCategoryUpdate up(item->getParentUUID(), 0);
accountForUpdate(up);
}
- gInventory.notifyObservers(); // do we want to be able to make this optional?
+ notifyObservers(); // do we want to be able to make this optional?
}
}
@@ -1221,7 +1251,7 @@ void LLInventoryModel::onCategoryUpdated(const LLUUID& cat_id, const LLSD& updat
U32 mask = LLInventoryObserver::NONE;
LLPointer<LLViewerInventoryCategory> cat = gInventory.getCategory(cat_id);
- LL_DEBUGS("Inventory") << "cat_id: [" << cat_id << "] name " << (cat ? cat->getName() : "(NOT FOUND)") << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "cat_id: [" << cat_id << "] name " << (cat ? cat->getName() : "(NOT FOUND)") << LL_ENDL;
if(cat)
{
for (LLSD::map_const_iterator it = updates.beginMap();
@@ -1229,18 +1259,18 @@ void LLInventoryModel::onCategoryUpdated(const LLUUID& cat_id, const LLSD& updat
{
if (it->first == "name")
{
- LL_INFOS() << "Updating name from " << cat->getName() << " to " << it->second.asString() << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Updating name from " << cat->getName() << " to " << it->second.asString() << LL_ENDL;
cat->rename(it->second.asString());
mask |= LLInventoryObserver::LABEL;
}
else
{
- LL_ERRS() << "unhandled updates for field: " << it->first << LL_ENDL;
+ LL_ERRS(LOG_INV) << "unhandled updates for field: " << it->first << LL_ENDL;
}
}
mask |= LLInventoryObserver::INTERNAL;
addChangedMask(mask, cat->getUUID());
- gInventory.notifyObservers(); // do we want to be able to make this optional?
+ notifyObservers(); // do we want to be able to make this optional?
}
}
@@ -1317,8 +1347,8 @@ void LLInventoryModel::onDescendentsPurgedFromServer(const LLUUID& object_id, bo
while (deleted_count > 0);
if (total_deleted_count != count)
{
- LL_WARNS() << "Unexpected count of categories deleted, got "
- << total_deleted_count << " expected " << count << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Unexpected count of categories deleted, got "
+ << total_deleted_count << " expected " << count << LL_ENDL;
}
//gInventory.validate();
}
@@ -1355,15 +1385,15 @@ void LLInventoryModel::onObjectDeletedFromServer(const LLUUID& object_id, bool f
// Delete a particular inventory object by ID.
void LLInventoryModel::deleteObject(const LLUUID& id, bool fix_broken_links, bool do_notify_observers)
{
- LL_DEBUGS() << "LLInventoryModel::deleteObject()" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "LLInventoryModel::deleteObject()" << LL_ENDL;
LLPointer<LLInventoryObject> obj = getObject(id);
if (!obj)
{
- LL_WARNS() << "Deleting non-existent object [ id: " << id << " ] " << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Deleting non-existent object [ id: " << id << " ] " << LL_ENDL;
return;
}
- LL_DEBUGS() << "Deleting inventory object " << id << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Deleting inventory object " << id << LL_ENDL;
mLastItem = NULL;
LLUUID parent_id = obj->getParentUUID();
mCategoryMap.erase(id);
@@ -1386,7 +1416,7 @@ void LLInventoryModel::deleteObject(const LLUUID& id, bool fix_broken_links, boo
{
if (item_list->size())
{
- LL_WARNS() << "Deleting cat " << id << " while it still has child items" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Deleting cat " << id << " while it still has child items" << LL_ENDL;
}
delete item_list;
mParentChildItemTree.erase(id);
@@ -1396,7 +1426,7 @@ void LLInventoryModel::deleteObject(const LLUUID& id, bool fix_broken_links, boo
{
if (cat_list->size())
{
- LL_WARNS() << "Deleting cat " << id << " while it still has child cats" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Deleting cat " << id << " while it still has child cats" << LL_ENDL;
}
delete cat_list;
mParentChildCategoryTree.erase(id);
@@ -1431,7 +1461,7 @@ void LLInventoryModel::updateLinkedObjectsFromPurge(const LLUUID &baseobj_id)
// everything else on the changelist will also get rebuilt.
if (item_array.size() > 0)
{
- gInventory.notifyObservers();
+ notifyObservers();
for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin();
iter != item_array.end();
iter++)
@@ -1441,7 +1471,7 @@ void LLInventoryModel::updateLinkedObjectsFromPurge(const LLUUID &baseobj_id)
if (item_id == baseobj_id) continue;
addChangedMask(LLInventoryObserver::REBUILD, item_id);
}
- gInventory.notifyObservers();
+ notifyObservers();
}
}
@@ -1464,6 +1494,9 @@ BOOL LLInventoryModel::containsObserver(LLInventoryObserver* observer) const
void LLInventoryModel::idleNotifyObservers()
{
+ // *FIX: Think I want this conditional or moved elsewhere...
+ handleResponses(true);
+
if (mModifyMask == LLInventoryObserver::NONE && (mChangedItemIDs.size() == 0))
{
return;
@@ -1479,7 +1512,7 @@ void LLInventoryModel::notifyObservers()
// Within notifyObservers, something called notifyObservers
// again. This type of recursion is unsafe because it causes items to be
// processed twice, and this can easily lead to infinite loops.
- LL_WARNS() << "Call was made to notifyObservers within notifyObservers!" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Call was made to notifyObservers within notifyObservers!" << LL_ENDL;
return;
}
@@ -1509,18 +1542,18 @@ void LLInventoryModel::addChangedMask(U32 mask, const LLUUID& referent)
// Something marked an item for change within a call to notifyObservers
// (which is in the process of processing the list of items marked for change).
// This means the change may fail to be processed.
- LL_WARNS() << "Adding changed mask within notify observers! Change will likely be lost." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Adding changed mask within notify observers! Change will likely be lost." << LL_ENDL;
LLViewerInventoryItem *item = getItem(referent);
if (item)
{
- LL_WARNS() << "Item " << item->getName() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Item " << item->getName() << LL_ENDL;
}
else
{
LLViewerInventoryCategory *cat = getCategory(referent);
if (cat)
{
- LL_WARNS() << "Category " << cat->getName() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Category " << cat->getName() << LL_ENDL;
}
}
}
@@ -1544,91 +1577,18 @@ void LLInventoryModel::addChangedMask(U32 mask, const LLUUID& referent)
}
}
-// If we get back a normal response, handle it here
-void LLInventoryModel::fetchInventoryResponder::httpSuccess()
-{
- const LLSD& content = getContent();
- if (!content.isMap())
- {
- failureResult(HTTP_INTERNAL_ERROR, "Malformed response contents", content);
- return;
- }
- start_new_inventory_observer();
-
- /*LLUUID agent_id;
- agent_id = content["agent_id"].asUUID();
- if(agent_id != gAgent.getID())
- {
- LL_WARNS() << "Got a inventory update for the wrong agent: " << agent_id
- << LL_ENDL;
- return;
- }*/
- item_array_t items;
- update_map_t update;
- S32 count = content["items"].size();
- LLUUID folder_id;
- // Does this loop ever execute more than once?
- for(S32 i = 0; i < count; ++i)
- {
- LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
- titem->unpackMessage(content["items"][i]);
-
- LL_DEBUGS() << "LLInventoryModel::fetchInventoryResponder item id: "
- << titem->getUUID() << LL_ENDL;
- items.push_back(titem);
- // examine update for changes.
- LLViewerInventoryItem* itemp = gInventory.getItem(titem->getUUID());
- if(itemp)
- {
- if(titem->getParentUUID() == itemp->getParentUUID())
- {
- update[titem->getParentUUID()];
- }
- else
- {
- ++update[titem->getParentUUID()];
- --update[itemp->getParentUUID()];
- }
- }
- else
- {
- ++update[titem->getParentUUID()];
- }
- if (folder_id.isNull())
- {
- folder_id = titem->getParentUUID();
- }
- }
-
- U32 changes = 0x0;
- //as above, this loop never seems to loop more than once per call
- for (item_array_t::iterator it = items.begin(); it != items.end(); ++it)
- {
- changes |= gInventory.updateItem(*it);
- }
- gInventory.notifyObservers();
- gViewerWindow->getWindow()->decBusyCount();
-}
-
-//If we get back an error (not found, etc...), handle it here
-void LLInventoryModel::fetchInventoryResponder::httpFailure()
-{
- LL_WARNS() << dumpResponse() << LL_ENDL;
- gInventory.notifyObservers();
-}
-
bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) const
{
if(folder_id.isNull())
{
- LL_WARNS() << "Calling fetch descendents on NULL folder id!" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Calling fetch descendents on NULL folder id!" << LL_ENDL;
return false;
}
LLViewerInventoryCategory* cat = getCategory(folder_id);
if(!cat)
{
- LL_WARNS() << "Asked to fetch descendents of non-existent folder: "
- << folder_id << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Asked to fetch descendents of non-existent folder: "
+ << folder_id << LL_ENDL;
return false;
}
//S32 known_descendents = 0;
@@ -1649,8 +1609,8 @@ void LLInventoryModel::cache(
const LLUUID& parent_folder_id,
const LLUUID& agent_id)
{
- LL_DEBUGS() << "Caching " << parent_folder_id << " for " << agent_id
- << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Caching " << parent_folder_id << " for " << agent_id
+ << LL_ENDL;
LLViewerInventoryCategory* root_cat = getCategory(parent_folder_id);
if(!root_cat) return;
cat_array_t categories;
@@ -1675,19 +1635,19 @@ void LLInventoryModel::cache(
gzip_filename.append(".gz");
if(gzip_file(inventory_filename, gzip_filename))
{
- LL_DEBUGS() << "Successfully compressed " << inventory_filename << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Successfully compressed " << inventory_filename << LL_ENDL;
LLFile::remove(inventory_filename);
}
else
{
- LL_WARNS() << "Unable to compress " << inventory_filename << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Unable to compress " << inventory_filename << LL_ENDL;
}
}
void LLInventoryModel::addCategory(LLViewerInventoryCategory* category)
{
- //LL_INFOS() << "LLInventoryModel::addCategory()" << LL_ENDL;
+ //LL_INFOS(LOG_INV) << "LLInventoryModel::addCategory()" << LL_ENDL;
if(category)
{
// We aren't displaying the Meshes folder
@@ -1757,7 +1717,9 @@ void LLInventoryModel::addItem(LLViewerInventoryItem* item)
if ((item->getType() == LLAssetType::AT_NONE)
|| LLAssetType::lookup(item->getType()) == LLAssetType::badLookup())
{
- LL_WARNS() << "Got bad asset type for item [ name: " << item->getName() << " type: " << item->getType() << " inv-type: " << item->getInventoryType() << " ], ignoring." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Got bad asset type for item [ name: " << item->getName()
+ << " type: " << item->getType()
+ << " inv-type: " << item->getInventoryType() << " ], ignoring." << LL_ENDL;
return;
}
@@ -1765,7 +1727,9 @@ void LLInventoryModel::addItem(LLViewerInventoryItem* item)
// The item will show up as a broken link.
if (item->getIsBrokenLink())
{
- LL_INFOS() << "Adding broken link [ name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) parent: " << item->getParentUUID() << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Adding broken link [ name: " << item->getName()
+ << " itemID: " << item->getUUID()
+ << " assetID: " << item->getAssetUUID() << " ) parent: " << item->getParentUUID() << LL_ENDL;
}
if (item->getIsLinkType())
{
@@ -1781,7 +1745,7 @@ void LLInventoryModel::addItem(LLViewerInventoryItem* item)
// Empty the entire contents
void LLInventoryModel::empty()
{
-// LL_INFOS() << "LLInventoryModel::empty()" << LL_ENDL;
+// LL_INFOS(LOG_INV) << "LLInventoryModel::empty()" << LL_ENDL;
std::for_each(
mParentChildCategoryTree.begin(),
mParentChildCategoryTree.end(),
@@ -1814,29 +1778,29 @@ void LLInventoryModel::accountForUpdate(const LLCategoryUpdate& update) const
descendents_actual += update.mDescendentDelta;
cat->setDescendentCount(descendents_actual);
cat->setVersion(++version);
- LL_DEBUGS("Inventory") << "accounted: '" << cat->getName() << "' "
- << version << " with " << descendents_actual
- << " descendents." << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "accounted: '" << cat->getName() << "' "
+ << version << " with " << descendents_actual
+ << " descendents." << LL_ENDL;
}
else
{
// Error condition, this means that the category did not register that
// it got new descendents (perhaps because it is still being loaded)
// which means its descendent count will be wrong.
- LL_WARNS() << "Accounting failed for '" << cat->getName() << "' version:"
- << version << " due to mismatched descendent count: server == "
- << descendents_server << ", viewer == " << descendents_actual << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Accounting failed for '" << cat->getName() << "' version:"
+ << version << " due to mismatched descendent count: server == "
+ << descendents_server << ", viewer == " << descendents_actual << LL_ENDL;
}
}
else
{
- LL_WARNS() << "Accounting failed for '" << cat->getName() << "' version: unknown ("
- << version << ")" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Accounting failed for '" << cat->getName() << "' version: unknown ("
+ << version << ")" << LL_ENDL;
}
}
else
{
- LL_WARNS() << "No category found for update " << update.mCategoryID << LL_ENDL;
+ LL_WARNS(LOG_INV) << "No category found for update " << update.mCategoryID << LL_ENDL;
}
}
@@ -1918,7 +1882,7 @@ bool LLInventoryModel::loadSkeleton(
const LLSD& options,
const LLUUID& owner_id)
{
- LL_DEBUGS() << "importing inventory skeleton for " << owner_id << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "importing inventory skeleton for " << owner_id << LL_ENDL;
typedef std::set<LLPointer<LLViewerInventoryCategory>, InventoryIDPtrLess> cat_set_t;
cat_set_t temp_cats;
@@ -1955,7 +1919,7 @@ bool LLInventoryModel::loadSkeleton(
}
else
{
- LL_WARNS() << "Unable to import near " << name.asString() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Unable to import near " << name.asString() << LL_ENDL;
rv = false;
}
}
@@ -1992,7 +1956,7 @@ bool LLInventoryModel::loadSkeleton(
}
else
{
- LL_INFOS() << "Unable to gunzip " << gzip_filename << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Unable to gunzip " << gzip_filename << LL_ENDL;
}
}
bool is_cache_obsolete = false;
@@ -2073,10 +2037,10 @@ bool LLInventoryModel::loadSkeleton(
if (item->getIsBrokenLink())
{
//bad_link_count++;
- LL_DEBUGS() << "Attempted to add cached link item without baseobj present ( name: "
- << item->getName() << " itemID: " << item->getUUID()
- << " assetID: " << item->getAssetUUID()
- << " ). Ignoring and invalidating " << cat->getName() << " . " << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Attempted to add cached link item without baseobj present ( name: "
+ << item->getName() << " itemID: " << item->getUUID()
+ << " assetID: " << item->getAssetUUID()
+ << " ). Ignoring and invalidating " << cat->getName() << " . " << LL_ENDL;
possible_broken_links.push_back(item);
continue;
}
@@ -2103,7 +2067,7 @@ bool LLInventoryModel::loadSkeleton(
{
bad_link_count++;
invalid_categories.insert(cit->second);
- //LL_INFOS() << "link still broken: " << item->getName() << " in folder " << cat->getName() << LL_ENDL;
+ //LL_INFOS(LOG_INV) << "link still broken: " << item->getName() << " in folder " << cat->getName() << LL_ENDL;
}
else
{
@@ -2115,11 +2079,11 @@ bool LLInventoryModel::loadSkeleton(
}
}
- LL_INFOS() << "Attempted to add " << bad_link_count
- << " cached link items without baseobj present. "
- << good_link_count << " link items were successfully added. "
- << recovered_link_count << " links added in recovery. "
- << "The corresponding categories were invalidated." << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Attempted to add " << bad_link_count
+ << " cached link items without baseobj present. "
+ << good_link_count << " link items were successfully added. "
+ << recovered_link_count << " links added in recovery. "
+ << "The corresponding categories were invalidated." << LL_ENDL;
}
}
@@ -2143,9 +2107,9 @@ bool LLInventoryModel::loadSkeleton(
{
LLViewerInventoryCategory* cat = (*invalid_cat_it).get();
cat->setVersion(NO_VERSION);
- LL_DEBUGS("Inventory") << "Invalidating category name: " << cat->getName() << " UUID: " << cat->getUUID() << " due to invalid descendents cache" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Invalidating category name: " << cat->getName() << " UUID: " << cat->getUUID() << " due to invalid descendents cache" << LL_ENDL;
}
- LL_INFOS("Inventory") << "Invalidated " << invalid_categories.size() << " categories due to invalid descendents cache" << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Invalidated " << invalid_categories.size() << " categories due to invalid descendents cache" << LL_ENDL;
// At this point, we need to set the known descendents for each
// category which successfully cached so that we do not
@@ -2177,15 +2141,15 @@ bool LLInventoryModel::loadSkeleton(
if(is_cache_obsolete)
{
// If out of date, remove the gzipped file too.
- LL_WARNS() << "Inv cache out of date, removing" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Inv cache out of date, removing" << LL_ENDL;
LLFile::remove(gzip_filename);
}
categories.clear(); // will unref and delete entries
}
- LL_INFOS() << "Successfully loaded " << cached_category_count
- << " categories and " << cached_item_count << " items from cache."
- << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Successfully loaded " << cached_category_count
+ << " categories and " << cached_item_count << " items from cache."
+ << LL_ENDL;
return rv;
}
@@ -2195,7 +2159,7 @@ bool LLInventoryModel::loadSkeleton(
// should be sufficient for our needs.
void LLInventoryModel::buildParentChildMap()
{
- LL_INFOS() << "LLInventoryModel::buildParentChildMap()" << LL_ENDL;
+ LL_INFOS(LOG_INV) << "LLInventoryModel::buildParentChildMap()" << LL_ENDL;
// *NOTE: I am skipping the logic around folder version
// synchronization here because it seems if a folder is lost, we
@@ -2264,15 +2228,15 @@ void LLInventoryModel::buildParentChildMap()
// implement it, we would need a set or map of uuid pairs
// which would be (folder_id, new_parent_id) to be sent up
// to the server.
- LL_INFOS() << "Lost category: " << cat->getUUID() << " - "
- << cat->getName() << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Lost category: " << cat->getUUID() << " - "
+ << cat->getName() << LL_ENDL;
++lost;
lost_cats.push_back(cat);
}
}
if(lost)
{
- LL_WARNS() << "Found " << lost << " lost categories." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Found " << lost << " lost categories." << LL_ENDL;
}
// Do moves in a separate pass to make sure we've properly filed
@@ -2307,7 +2271,7 @@ void LLInventoryModel::buildParentChildMap()
}
else
{
- LL_WARNS() << "Lost and found Not there!!" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Lost and found Not there!!" << LL_ENDL;
}
}
@@ -2342,8 +2306,8 @@ void LLInventoryModel::buildParentChildMap()
}
else
{
- LL_INFOS() << "Lost item: " << item->getUUID() << " - "
- << item->getName() << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Lost item: " << item->getUUID() << " - "
+ << item->getName() << LL_ENDL;
++lost;
// plop it into the lost & found.
//
@@ -2359,13 +2323,13 @@ void LLInventoryModel::buildParentChildMap()
}
else
{
- LL_WARNS() << "Lost and found Not there!!" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Lost and found Not there!!" << LL_ENDL;
}
}
}
if(lost)
{
- LL_WARNS() << "Found " << lost << " lost items." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Found " << lost << " lost items." << LL_ENDL;
LLMessageSystem* msg = gMessageSystem;
BOOL start_new_message = TRUE;
const LLUUID lnf = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
@@ -2443,10 +2407,82 @@ void LLInventoryModel::buildParentChildMap()
if (!gInventory.validate())
{
- LL_WARNS() << "model failed validity check!" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "model failed validity check!" << LL_ENDL;
}
}
+// Would normally do this at construction but that's too early
+// in the process for gInventory. Have the first requestPost()
+// call set things up.
+void LLInventoryModel::initHttpRequest()
+{
+ if (! mHttpRequestFG)
+ {
+ // Haven't initialized, get to it
+ LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp());
+
+ mHttpRequestFG = new LLCore::HttpRequest;
+ mHttpRequestBG = new LLCore::HttpRequest;
+ mHttpOptions = new LLCore::HttpOptions;
+ mHttpOptions->setTransferTimeout(300);
+ mHttpOptions->setUseRetryAfter(true);
+ // mHttpOptions->setTrace(2); // Do tracing of requests
+ mHttpHeaders = new LLCore::HttpHeaders;
+ mHttpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML);
+ mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_LLSD_XML);
+ mHttpPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_INVENTORY);
+ }
+}
+
+void LLInventoryModel::handleResponses(bool foreground)
+{
+ if (foreground && mHttpRequestFG)
+ {
+ mHttpRequestFG->update(0);
+ }
+ else if (! foreground && mHttpRequestBG)
+ {
+ mHttpRequestBG->update(50000L);
+ }
+}
+
+LLCore::HttpHandle LLInventoryModel::requestPost(bool foreground,
+ const std::string & url,
+ const LLSD & body,
+ LLCore::HttpHandler * handler,
+ const char * const message)
+{
+ if (! mHttpRequestFG)
+ {
+ // We do the initialization late and lazily as this class is
+ // statically-constructed and not all the bits are ready at
+ // that time.
+ initHttpRequest();
+ }
+
+ LLCore::HttpRequest * request(foreground ? mHttpRequestFG : mHttpRequestBG);
+ LLCore::HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID);
+
+ handle = LLCoreHttpUtil::requestPostWithLLSD(request,
+ mHttpPolicyClass,
+ (foreground ? mHttpPriorityFG : mHttpPriorityBG),
+ url,
+ body,
+ mHttpOptions,
+ mHttpHeaders,
+ handler);
+ if (LLCORE_HTTP_HANDLE_INVALID == handle)
+ {
+ LLCore::HttpStatus status(request->getStatus());
+ LL_WARNS(LOG_INV) << "HTTP POST request failed for " << message
+ << ", Status: " << status.toTerseString()
+ << " Reason: '" << status.toString() << "'"
+ << LL_ENDL;
+ delete handler;
+ }
+ return handle;
+}
+
void LLInventoryModel::createCommonSystemCategories()
{
gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH,true);
@@ -2495,14 +2531,14 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
{
if(filename.empty())
{
- LL_ERRS() << "Filename is Null!" << LL_ENDL;
+ LL_ERRS(LOG_INV) << "Filename is Null!" << LL_ENDL;
return false;
}
- LL_INFOS() << "LLInventoryModel::loadFromFile(" << filename << ")" << LL_ENDL;
+ LL_INFOS(LOG_INV) << "LLInventoryModel::loadFromFile(" << filename << ")" << LL_ENDL;
LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
if(!file)
{
- LL_INFOS() << "unable to load inventory from: " << filename << LL_ENDL;
+ LL_INFOS(LOG_INV) << "unable to load inventory from: " << filename << LL_ENDL;
return false;
}
// *NOTE: This buffer size is hard coded into scanf() below.
@@ -2541,7 +2577,7 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
}
else
{
- LL_WARNS() << "loadInventoryFromFile(). Ignoring invalid inventory category: " << inv_cat->getName() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "loadInventoryFromFile(). Ignoring invalid inventory category: " << inv_cat->getName() << LL_ENDL;
//delete inv_cat; // automatic when inv_cat is reassigned or destroyed
}
}
@@ -2559,8 +2595,8 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
if(inv_item->getUUID().isNull())
{
//delete inv_item; // automatic when inv_cat is reassigned or destroyed
- LL_WARNS() << "Ignoring inventory with null item id: "
- << inv_item->getName() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Ignoring inventory with null item id: "
+ << inv_item->getName() << LL_ENDL;
}
else
@@ -2570,14 +2606,14 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
}
else
{
- LL_WARNS() << "loadInventoryFromFile(). Ignoring invalid inventory item: " << inv_item->getName() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "loadInventoryFromFile(). Ignoring invalid inventory item: " << inv_item->getName() << LL_ENDL;
//delete inv_item; // automatic when inv_cat is reassigned or destroyed
}
}
else
{
- LL_WARNS() << "Unknown token in inventory file '" << keyword << "'"
- << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Unknown token in inventory file '" << keyword << "'"
+ << LL_ENDL;
}
}
fclose(file);
@@ -2593,14 +2629,14 @@ bool LLInventoryModel::saveToFile(const std::string& filename,
{
if(filename.empty())
{
- LL_ERRS() << "Filename is Null!" << LL_ENDL;
+ LL_ERRS(LOG_INV) << "Filename is Null!" << LL_ENDL;
return false;
}
- LL_INFOS() << "LLInventoryModel::saveToFile(" << filename << ")" << LL_ENDL;
+ LL_INFOS(LOG_INV) << "LLInventoryModel::saveToFile(" << filename << ")" << LL_ENDL;
LLFILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
if(!file)
{
- LL_WARNS() << "unable to save inventory to: " << filename << LL_ENDL;
+ LL_WARNS(LOG_INV) << "unable to save inventory to: " << filename << LL_ENDL;
return false;
}
@@ -2705,8 +2741,8 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
if(agent_id != gAgent.getID())
{
- LL_WARNS() << "Got a inventory update for the wrong agent: " << agent_id
- << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Got a inventory update for the wrong agent: " << agent_id
+ << LL_ENDL;
return false;
}
item_array_t items;
@@ -2718,8 +2754,8 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32
{
LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
titem->unpackMessage(msg, _PREHASH_InventoryData, i);
- LL_DEBUGS() << "LLInventoryModel::messageUpdateCore() item id:"
- << titem->getUUID() << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "LLInventoryModel::messageUpdateCore() item id: "
+ << titem->getUUID() << LL_ENDL;
items.push_back(titem);
// examine update for changes.
LLViewerInventoryItem* itemp = gInventory.getItem(titem->getUUID());
@@ -2770,17 +2806,17 @@ void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg
{
LLUUID item_id;
S32 count = msg->getNumberOfBlocksFast(msg_label);
- LL_DEBUGS() << "Message has " << count << " item blocks" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Message has " << count << " item blocks" << LL_ENDL;
uuid_vec_t item_ids;
update_map_t update;
for(S32 i = 0; i < count; ++i)
{
msg->getUUIDFast(msg_label, _PREHASH_ItemID, item_id, i);
- LL_DEBUGS() << "Checking for item-to-be-removed " << item_id << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Checking for item-to-be-removed " << item_id << LL_ENDL;
LLViewerInventoryItem* itemp = gInventory.getItem(item_id);
if(itemp)
{
- LL_DEBUGS() << "Item will be removed " << item_id << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Item will be removed " << item_id << LL_ENDL;
// we only bother with the delete and account if we found
// the item - this is usually a back-up for permissions,
// so frequently the item will already be gone.
@@ -2791,7 +2827,7 @@ void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg
gInventory.accountForUpdate(update);
for(uuid_vec_t::iterator it = item_ids.begin(); it != item_ids.end(); ++it)
{
- LL_DEBUGS() << "Calling deleteObject " << *it << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Calling deleteObject " << *it << LL_ENDL;
gInventory.deleteObject(*it);
}
}
@@ -2799,13 +2835,13 @@ void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg
// static
void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
{
- LL_DEBUGS() << "LLInventoryModel::processRemoveInventoryItem()" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "LLInventoryModel::processRemoveInventoryItem()" << LL_ENDL;
LLUUID agent_id, item_id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
if(agent_id != gAgent.getID())
{
- LL_WARNS() << "Got a RemoveInventoryItem for the wrong agent."
- << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Got a RemoveInventoryItem for the wrong agent."
+ << LL_ENDL;
return;
}
LLInventoryModel::removeInventoryItem(agent_id, msg, _PREHASH_InventoryData);
@@ -2816,14 +2852,14 @@ void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg,
void**)
{
- LL_DEBUGS() << "LLInventoryModel::processUpdateInventoryFolder()" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "LLInventoryModel::processUpdateInventoryFolder()" << LL_ENDL;
LLUUID agent_id, folder_id, parent_id;
//char name[DB_INV_ITEM_NAME_BUF_SIZE];
msg->getUUIDFast(_PREHASH_FolderData, _PREHASH_AgentID, agent_id);
if(agent_id != gAgent.getID())
{
- LL_WARNS() << "Got an UpdateInventoryFolder for the wrong agent."
- << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Got an UpdateInventoryFolder for the wrong agent."
+ << LL_ENDL;
return;
}
LLPointer<LLViewerInventoryCategory> lastfolder; // hack
@@ -3881,7 +3917,7 @@ bool LLInventoryModel::validate() const
///----------------------------------------------------------------------------
-/*
+#if 0
BOOL decompress_file(const char* src_filename, const char* dst_filename)
{
BOOL rv = FALSE;
@@ -3920,4 +3956,177 @@ BOOL decompress_file(const char* src_filename, const char* dst_filename)
if(dst != NULL) fclose(dst);
return rv;
}
-*/
+#endif
+
+
+///----------------------------------------------------------------------------
+/// Class LLInventoryModel::FetchItemHttpHandler
+///----------------------------------------------------------------------------
+
+LLInventoryModel::FetchItemHttpHandler::FetchItemHttpHandler(const LLSD & request_sd)
+ : LLCore::HttpHandler(),
+ mRequestSD(request_sd)
+{}
+
+LLInventoryModel::FetchItemHttpHandler::~FetchItemHttpHandler()
+{}
+
+void LLInventoryModel::FetchItemHttpHandler::onCompleted(LLCore::HttpHandle handle,
+ LLCore::HttpResponse * response)
+{
+ do // Single-pass do-while used for common exit handling
+ {
+ LLCore::HttpStatus status(response->getStatus());
+ // status = LLCore::HttpStatus(404); // Dev tool to force error handling
+ if (! status)
+ {
+ processFailure(status, response);
+ break; // Goto common exit
+ }
+
+ LLCore::BufferArray * body(response->getBody());
+ // body = NULL; // Dev tool to force error handling
+ if (! body || ! body->size())
+ {
+ LL_WARNS(LOG_INV) << "Missing data in inventory item query." << LL_ENDL;
+ processFailure("HTTP response for inventory item query missing body", response);
+ break; // Goto common exit
+ }
+
+ // body->write(0, "Garbage Response", 16); // Dev tool to force error handling
+ LLSD body_llsd;
+ if (! LLCoreHttpUtil::responseToLLSD(response, true, body_llsd))
+ {
+ // INFOS-level logging will occur on the parsed failure
+ processFailure("HTTP response for inventory item query has malformed LLSD", response);
+ break; // Goto common exit
+ }
+
+ // Expect top-level structure to be a map
+ // body_llsd = LLSD::emptyArray(); // Dev tool to force error handling
+ if (! body_llsd.isMap())
+ {
+ processFailure("LLSD response for inventory item not a map", response);
+ break; // Goto common exit
+ }
+
+ // Check for 200-with-error failures
+ //
+ // Original Responder-based serivce model didn't check for these errors.
+ // It may be more robust to ignore this condition. With aggregated requests,
+ // an error in one inventory item might take down the entire request.
+ // So if this instead broke up the aggregated items into single requests,
+ // maybe that would make progress. Or perhaps there's structured information
+ // that can tell us what went wrong. Need to dig into this and firm up
+ // the API.
+ //
+ // body_llsd["error"] = LLSD::emptyMap(); // Dev tool to force error handling
+ // body_llsd["error"]["identifier"] = "Development";
+ // body_llsd["error"]["message"] = "You left development code in the viewer";
+ if (body_llsd.has("error"))
+ {
+ processFailure("Inventory application error (200-with-error)", response);
+ break; // Goto common exit
+ }
+
+ // Okay, process data if possible
+ processData(body_llsd, response);
+ }
+ while (false);
+
+ // Must delete on completion.
+ delete this;
+}
+
+void LLInventoryModel::FetchItemHttpHandler::processData(LLSD & content, LLCore::HttpResponse * response)
+{
+ start_new_inventory_observer();
+
+#if 0
+ LLUUID agent_id;
+ agent_id = content["agent_id"].asUUID();
+ if (agent_id != gAgent.getID())
+ {
+ LL_WARNS(LOG_INV) << "Got a inventory update for the wrong agent: " << agent_id
+ << LL_ENDL;
+ return;
+ }
+#endif
+
+ LLInventoryModel::item_array_t items;
+ LLInventoryModel::update_map_t update;
+ LLUUID folder_id;
+ LLSD content_items(content["items"]);
+ const S32 count(content_items.size());
+
+ // Does this loop ever execute more than once?
+ for (S32 i(0); i < count; ++i)
+ {
+ LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
+ titem->unpackMessage(content_items[i]);
+
+ LL_DEBUGS(LOG_INV) << "ItemHttpHandler::httpSuccess item id: "
+ << titem->getUUID() << LL_ENDL;
+ items.push_back(titem);
+
+ // examine update for changes.
+ LLViewerInventoryItem * itemp(gInventory.getItem(titem->getUUID()));
+
+ if (itemp)
+ {
+ if (titem->getParentUUID() == itemp->getParentUUID())
+ {
+ update[titem->getParentUUID()];
+ }
+ else
+ {
+ ++update[titem->getParentUUID()];
+ --update[itemp->getParentUUID()];
+ }
+ }
+ else
+ {
+ ++update[titem->getParentUUID()];
+ }
+
+ if (folder_id.isNull())
+ {
+ folder_id = titem->getParentUUID();
+ }
+ }
+
+ // as above, this loop never seems to loop more than once per call
+ U32 changes(0U);
+ for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
+ {
+ changes |= gInventory.updateItem(*it);
+ }
+ // *HUH: Have computed 'changes', nothing uses it.
+
+ gInventory.notifyObservers();
+ gViewerWindow->getWindow()->decBusyCount();
+}
+
+
+void LLInventoryModel::FetchItemHttpHandler::processFailure(LLCore::HttpStatus status, LLCore::HttpResponse * response)
+{
+ const std::string & ct(response->getContentType());
+ LL_WARNS(LOG_INV) << "Inventory item fetch failure\n"
+ << "[Status: " << status.toTerseString() << "]\n"
+ << "[Reason: " << status.toString() << "]\n"
+ << "[Content-type: " << ct << "]\n"
+ << "[Content (abridged): "
+ << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL;
+ gInventory.notifyObservers();
+}
+
+void LLInventoryModel::FetchItemHttpHandler::processFailure(const char * const reason, LLCore::HttpResponse * response)
+{
+ LL_WARNS(LOG_INV) << "Inventory item fetch failure\n"
+ << "[Status: internal error]\n"
+ << "[Reason: " << reason << "]\n"
+ << "[Content (abridged): "
+ << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL;
+ gInventory.notifyObservers();
+}
+
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 2e957809be..ac336e347c 100755
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -27,6 +27,11 @@
#ifndef LL_LLINVENTORYMODEL_H
#define LL_LLINVENTORYMODEL_H
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
#include "llassettype.h"
#include "llfoldertype.h"
#include "llframetimer.h"
@@ -36,10 +41,11 @@
#include "llviewerinventory.h"
#include "llstring.h"
#include "llmd5.h"
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
+#include "httpcommon.h"
+#include "httprequest.h"
+#include "httpoptions.h"
+#include "httpheaders.h"
+#include "httphandler.h"
class LLInventoryObserver;
class LLInventoryObject;
@@ -60,9 +66,8 @@ class LLInventoryCollectFunctor;
class LLInventoryModel
{
LOG_CLASS(LLInventoryModel);
-public:
- friend class LLInventoryModelFetchDescendentsResponder;
+public:
enum EHasChildren
{
CHILDREN_NO,
@@ -74,14 +79,31 @@ public:
typedef std::vector<LLPointer<LLViewerInventoryItem> > item_array_t;
typedef std::set<LLUUID> changed_items_t;
- class fetchInventoryResponder : public LLCurl::Responder
+ // HTTP handler for individual item requests (inventory or library).
+ // Background item requests are derived from this in the background
+ // inventory system. All folder requests are also located there
+ // but have their own handler derived from HttpHandler.
+ class FetchItemHttpHandler : public LLCore::HttpHandler
{
- LOG_CLASS(fetchInventoryResponder);
public:
- fetchInventoryResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
+ LOG_CLASS(FetchItemHttpHandler);
+
+ FetchItemHttpHandler(const LLSD & request_sd);
+ virtual ~FetchItemHttpHandler();
+
protected:
- virtual void httpSuccess();
- virtual void httpFailure();
+ FetchItemHttpHandler(const FetchItemHttpHandler &); // Not defined
+ void operator=(const FetchItemHttpHandler &); // Not defined
+
+ public:
+ virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response);
+
+ private:
+ void processData(LLSD & body, LLCore::HttpResponse * response);
+ void processFailure(LLCore::HttpStatus status, LLCore::HttpResponse * response);
+ void processFailure(const char * const reason, LLCore::HttpResponse * response);
+
+ private:
LLSD mRequestSD;
};
@@ -109,6 +131,9 @@ public:
private:
bool mIsAgentInvUsable; // used to handle an invalid inventory state
+ // One-time initialization of HTTP system.
+ void initHttpRequest();
+
//--------------------------------------------------------------------
// Root Folders
//--------------------------------------------------------------------
@@ -520,6 +545,41 @@ private:
/********************************************************************************
** **
+ ** HTTP Transport
+ **/
+public:
+ // Invoke handler completion method (onCompleted) for all
+ // requests that are ready.
+ void handleResponses(bool foreground);
+
+ // Request an inventory HTTP operation to either the
+ // foreground or background processor. These are actually
+ // the same service queue but the background requests are
+ // seviced more slowly effectively de-prioritizing new
+ // requests.
+ LLCore::HttpHandle requestPost(bool foreground,
+ const std::string & url,
+ const LLSD & body,
+ LLCore::HttpHandler * handler,
+ const char * const message);
+
+private:
+ // Usual plumbing for LLCore:: HTTP operations.
+ LLCore::HttpRequest * mHttpRequestFG;
+ LLCore::HttpRequest * mHttpRequestBG;
+ LLCore::HttpOptions * mHttpOptions;
+ LLCore::HttpHeaders * mHttpHeaders;
+ LLCore::HttpRequest::policy_t mHttpPolicyClass;
+ LLCore::HttpRequest::priority_t mHttpPriorityFG;
+ LLCore::HttpRequest::priority_t mHttpPriorityBG;
+
+/** HTTP Transport
+ ** **
+ *******************************************************************************/
+
+
+/********************************************************************************
+ ** **
** MISCELLANEOUS
**/
diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp
index 2de37b0790..f18832fe95 100755
--- a/indra/newview/llinventorymodelbackgroundfetch.cpp
+++ b/indra/newview/llinventorymodelbackgroundfetch.cpp
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2014, 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
@@ -37,31 +37,180 @@
#include "llviewermessage.h"
#include "llviewerregion.h"
#include "llviewerwindow.h"
+#include "llhttpconstants.h"
+#include "bufferarray.h"
+#include "bufferstream.h"
+#include "llcorehttputil.h"
+
+// History (may be apocryphal)
+//
+// Around V2, an HTTP inventory download mechanism was added
+// along with inventory LINK items referencing other inventory
+// items. As part of this, at login, the entire inventory
+// structure is downloaded 'in the background' using the
+// backgroundFetch()/bulkFetch() methods. The UDP path can
+// still be used and is found in the 'DEPRECATED OLD CODE'
+// section.
+//
+// The old UDP path implemented a throttle that adapted
+// itself during running. The mechanism survived info HTTP
+// somewhat but was pinned to poll the HTTP plumbing at
+// 0.5S intervals. The reasons for this particular value
+// have been lost. It's possible to switch between UDP
+// and HTTP while this is happening but there may be
+// surprises in what happens in that case.
+//
+// Conversion to llcorehttp reduced the number of connections
+// used but batches more data and queues more requests (but
+// doesn't due pipelining due to libcurl restrictions). The
+// poll interval above was re-examined and reduced to get
+// inventory into the viewer more quickly.
+//
+// Possible future work:
+//
+// * Don't download the entire heirarchy in one go (which
+// might have been how V1 worked). Implications for
+// links (which may not have a valid target) and search
+// which would then be missing data.
+//
+// * Review the download rate throttling. Slow then fast?
+// Detect bandwidth usage and speed up when it drops?
+//
+// * A lot of calls to notifyObservers(). It looks like
+// these could be collapsed by maintaining a 'dirty'
+// bit and there appears to be an attempt to do this.
+// But it isn't used or is used in a limited fashion.
+// Are there semanic issues requiring a call after certain
+// updateItem() calls?
+//
+// * An error on a fetch could be due to one item in the batch.
+// If the batch were broken up, perhaps more of the inventory
+// would download. (Handwave here, not certain this is an
+// issue in practice.)
+//
+// * Conversion to AISv3.
+//
+
+
+namespace
+{
+
+///----------------------------------------------------------------------------
+/// Class <anonymous>::BGItemHttpHandler
+///----------------------------------------------------------------------------
+
+//
+// Http request handler class for single inventory item requests.
+//
+// We'll use a handler-per-request pattern here rather than
+// a shared handler. Mainly convenient as this was converted
+// from a Responder class model.
+//
+// Derives from and is identical to the normal FetchItemHttpHandler
+// except that: 1) it uses the background request object which is
+// updated more slowly than the foreground and 2) keeps a count of
+// active requests on the LLInventoryModelBackgroundFetch object
+// to indicate outstanding operations are in-flight.
+//
+class BGItemHttpHandler : public LLInventoryModel::FetchItemHttpHandler
+{
+ LOG_CLASS(BGItemHttpHandler);
+
+public:
+ BGItemHttpHandler(const LLSD & request_sd)
+ : LLInventoryModel::FetchItemHttpHandler(request_sd)
+ {
+ LLInventoryModelBackgroundFetch::instance().incrFetchCount(1);
+ }
+
+ virtual ~BGItemHttpHandler()
+ {
+ LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1);
+ }
+
+protected:
+ BGItemHttpHandler(const BGItemHttpHandler &); // Not defined
+ void operator=(const BGItemHttpHandler &); // Not defined
+};
+
+
+///----------------------------------------------------------------------------
+/// Class <anonymous>::BGFolderHttpHandler
+///----------------------------------------------------------------------------
+
+// Http request handler class for folders.
+//
+// Handler for FetchInventoryDescendents2 and FetchLibDescendents2
+// caps requests for folders.
+//
+class BGFolderHttpHandler : public LLCore::HttpHandler
+{
+ LOG_CLASS(BGFolderHttpHandler);
+
+public:
+ BGFolderHttpHandler(const LLSD & request_sd, const uuid_vec_t & recursive_cats)
+ : LLCore::HttpHandler(),
+ mRequestSD(request_sd),
+ mRecursiveCatUUIDs(recursive_cats)
+ {
+ LLInventoryModelBackgroundFetch::instance().incrFetchCount(1);
+ }
+
+ virtual ~BGFolderHttpHandler()
+ {
+ LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1);
+ }
+
+protected:
+ BGFolderHttpHandler(const BGFolderHttpHandler &); // Not defined
+ void operator=(const BGFolderHttpHandler &); // Not defined
+
+public:
+ virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response);
+
+ bool getIsRecursive(const LLUUID & cat_id) const;
+
+private:
+ void processData(LLSD & body, LLCore::HttpResponse * response);
+ void processFailure(LLCore::HttpStatus status, LLCore::HttpResponse * response);
+ void processFailure(const char * const reason, LLCore::HttpResponse * response);
+
+private:
+ LLSD mRequestSD;
+ const uuid_vec_t mRecursiveCatUUIDs; // hack for storing away which cat fetches are recursive
+};
+
-const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f;
const S32 MAX_FETCH_RETRIES = 10;
-LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch() :
+const char * const LOG_INV("Inventory");
+
+} // end of namespace anonymous
+
+
+///----------------------------------------------------------------------------
+/// Class LLInventoryModelBackgroundFetch
+///----------------------------------------------------------------------------
+
+LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch():
mBackgroundFetchActive(FALSE),
mFolderFetchActive(false),
+ mFetchCount(0),
mAllFoldersFetched(FALSE),
mRecursiveInventoryFetchStarted(FALSE),
mRecursiveLibraryFetchStarted(FALSE),
mNumFetchRetries(0),
mMinTimeBetweenFetches(0.3f),
mMaxTimeBetweenFetches(10.f),
- mTimelyFetchPending(FALSE),
- mFetchCount(0)
-{
-}
+ mTimelyFetchPending(FALSE)
+{}
LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch()
-{
-}
+{}
bool LLInventoryModelBackgroundFetch::isBulkFetchProcessingComplete() const
{
- return mFetchQueue.empty() && mFetchCount<=0;
+ return mFetchQueue.empty() && mFetchCount <= 0;
}
bool LLInventoryModelBackgroundFetch::libraryFetchStarted() const
@@ -91,7 +240,7 @@ bool LLInventoryModelBackgroundFetch::inventoryFetchCompleted() const
bool LLInventoryModelBackgroundFetch::inventoryFetchInProgress() const
{
- return inventoryFetchStarted() && !inventoryFetchCompleted();
+ return inventoryFetchStarted() && ! inventoryFetchCompleted();
}
bool LLInventoryModelBackgroundFetch::isEverythingFetched() const
@@ -104,24 +253,36 @@ BOOL LLInventoryModelBackgroundFetch::folderFetchActive() const
return mFolderFetchActive;
}
+void LLInventoryModelBackgroundFetch::addRequestAtFront(const LLUUID & id, BOOL recursive, bool is_category)
+{
+ mFetchQueue.push_front(FetchQueueInfo(id, recursive, is_category));
+}
+
+void LLInventoryModelBackgroundFetch::addRequestAtBack(const LLUUID & id, BOOL recursive, bool is_category)
+{
+ mFetchQueue.push_back(FetchQueueInfo(id, recursive, is_category));
+}
+
void LLInventoryModelBackgroundFetch::start(const LLUUID& id, BOOL recursive)
{
- LLViewerInventoryCategory* cat = gInventory.getCategory(id);
- if (cat || (id.isNull() && !isEverythingFetched()))
- { // it's a folder, do a bulk fetch
- LL_DEBUGS("InventoryFetch") << "Start fetching category: " << id << ", recursive: " << recursive << LL_ENDL;
+ LLViewerInventoryCategory * cat(gInventory.getCategory(id));
+
+ if (cat || (id.isNull() && ! isEverythingFetched()))
+ {
+ // it's a folder, do a bulk fetch
+ LL_DEBUGS(LOG_INV) << "Start fetching category: " << id << ", recursive: " << recursive << LL_ENDL;
mBackgroundFetchActive = TRUE;
mFolderFetchActive = true;
if (id.isNull())
{
- if (!mRecursiveInventoryFetchStarted)
+ if (! mRecursiveInventoryFetchStarted)
{
mRecursiveInventoryFetchStarted |= recursive;
mFetchQueue.push_back(FetchQueueInfo(gInventory.getRootFolderID(), recursive));
gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);
}
- if (!mRecursiveLibraryFetchStarted)
+ if (! mRecursiveLibraryFetchStarted)
{
mRecursiveLibraryFetchStarted |= recursive;
mFetchQueue.push_back(FetchQueueInfo(gInventory.getLibraryRootFolderID(), recursive));
@@ -146,9 +307,9 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& id, BOOL recursive)
}
}
}
- else if (LLViewerInventoryItem* itemp = gInventory.getItem(id))
+ else if (LLViewerInventoryItem * itemp = gInventory.getItem(id))
{
- if (!itemp->mIsComplete && (mFetchQueue.empty() || mFetchQueue.front().mUUID != id))
+ if (! itemp->mIsComplete && (mFetchQueue.empty() || mFetchQueue.front().mUUID != id))
{
mBackgroundFetchActive = TRUE;
@@ -172,11 +333,12 @@ void LLInventoryModelBackgroundFetch::setAllFoldersFetched()
mRecursiveLibraryFetchStarted)
{
mAllFoldersFetched = TRUE;
- //LL_INFOS() << "All folders fetched, validating" << LL_ENDL;
+ //LL_INFOS(LOG_INV) << "All folders fetched, validating" << LL_ENDL;
//gInventory.validate();
}
mFolderFetchActive = false;
mBackgroundFetchActive = false;
+ LL_INFOS(LOG_INV) << "Inventory background fetch completed" << LL_ENDL;
}
void LLInventoryModelBackgroundFetch::backgroundFetchCB(void *)
@@ -203,12 +365,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
// No more categories to fetch, stop fetch process.
if (mFetchQueue.empty())
{
- LL_INFOS() << "Inventory fetch completed" << LL_ENDL;
-
setAllFoldersFetched();
- mBackgroundFetchActive = false;
- mFolderFetchActive = false;
-
return;
}
@@ -219,7 +376,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
// Double timeouts on failure.
mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f);
mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f);
- LL_DEBUGS() << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL;
// fetch is no longer considered "timely" although we will wait for full time-out.
mTimelyFetchPending = FALSE;
}
@@ -231,7 +388,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
break;
}
- if(gDisconnected)
+ if (gDisconnected)
{
// Just bail if we are disconnected.
break;
@@ -292,7 +449,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
// Shrink timeouts based on success.
mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f);
mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f);
- LL_DEBUGS() << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL;
}
mTimelyFetchPending = FALSE;
@@ -355,258 +512,61 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
}
}
-void LLInventoryModelBackgroundFetch::incrFetchCount(S16 fetching)
+void LLInventoryModelBackgroundFetch::incrFetchCount(S32 fetching)
{
mFetchCount += fetching;
if (mFetchCount < 0)
{
+ LL_WARNS_ONCE(LOG_INV) << "Inventory fetch count fell below zero (0)." << LL_ENDL;
mFetchCount = 0;
}
}
-class LLInventoryModelFetchItemResponder : public LLInventoryModel::fetchInventoryResponder
-{
- LOG_CLASS(LLInventoryModelFetchItemResponder);
-public:
- LLInventoryModelFetchItemResponder(const LLSD& request_sd) :
- LLInventoryModel::fetchInventoryResponder(request_sd)
- {
- LLInventoryModelBackgroundFetch::instance().incrFetchCount(1);
- }
-private:
- /* virtual */ void httpCompleted()
- {
- LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1);
- LLInventoryModel::fetchInventoryResponder::httpCompleted();
- }
-};
-
-class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder
-{
- LOG_CLASS(LLInventoryModelFetchDescendentsResponder);
-public:
- LLInventoryModelFetchDescendentsResponder(const LLSD& request_sd, uuid_vec_t recursive_cats) :
- mRequestSD(request_sd),
- mRecursiveCatUUIDs(recursive_cats)
- {
- LLInventoryModelBackgroundFetch::instance().incrFetchCount(1);
- }
- //LLInventoryModelFetchDescendentsResponder() {};
-private:
- /* virtual */ void httpCompleted()
- {
- LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1);
- LLHTTPClient::Responder::httpCompleted();
- }
- /* virtual */ void httpSuccess();
- /* virtual */ void httpFailure();
-protected:
- BOOL getIsRecursive(const LLUUID& cat_id) const;
-private:
- LLSD mRequestSD;
- uuid_vec_t mRecursiveCatUUIDs; // hack for storing away which cat fetches are recursive
-};
-
-// If we get back a normal response, handle it here.
-void LLInventoryModelFetchDescendentsResponder::httpSuccess()
+// Bundle up a bunch of requests to send all at once.
+void LLInventoryModelBackgroundFetch::bulkFetch()
{
- const LLSD& content = getContent();
- if (!content.isMap())
+ //Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped.
+ //If there are items in mFetchQueue, we want to check the time since the last bulkFetch was
+ //sent. If it exceeds our retry time, go ahead and fire off another batch.
+ LLViewerRegion * region(gAgent.getRegion());
+ if (! region || gDisconnected)
{
- failureResult(HTTP_INTERNAL_ERROR, "Malformed response contents", content);
return;
}
- LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance();
- if (content.has("folders"))
- {
-
- for(LLSD::array_const_iterator folder_it = content["folders"].beginArray();
- folder_it != content["folders"].endArray();
- ++folder_it)
- {
- LLSD folder_sd = *folder_it;
-
-
- //LLUUID agent_id = folder_sd["agent_id"];
-
- //if(agent_id != gAgent.getID()) //This should never happen.
- //{
- // LL_WARNS() << "Got a UpdateInventoryItem for the wrong agent."
- // << LL_ENDL;
- // break;
- //}
-
- LLUUID parent_id = folder_sd["folder_id"];
- LLUUID owner_id = folder_sd["owner_id"];
- S32 version = (S32)folder_sd["version"].asInteger();
- S32 descendents = (S32)folder_sd["descendents"].asInteger();
- LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
- if (parent_id.isNull())
- {
- LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
- for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray();
- item_it != folder_sd["items"].endArray();
- ++item_it)
- {
- const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
- if (lost_uuid.notNull())
- {
- LLSD item = *item_it;
- titem->unpackMessage(item);
-
- LLInventoryModel::update_list_t update;
- LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1);
- update.push_back(new_folder);
- gInventory.accountForUpdate(update);
-
- titem->setParent(lost_uuid);
- titem->updateParentOnServer(FALSE);
- gInventory.updateItem(titem);
- gInventory.notifyObservers();
-
- }
- }
- }
-
- LLViewerInventoryCategory* pcat = gInventory.getCategory(parent_id);
- if (!pcat)
- {
- continue;
- }
-
- for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray();
- category_it != folder_sd["categories"].endArray();
- ++category_it)
- {
- LLSD category = *category_it;
- tcategory->fromLLSD(category);
-
- const BOOL recursive = getIsRecursive(tcategory->getUUID());
-
- if (recursive)
- {
- fetcher->mFetchQueue.push_back(LLInventoryModelBackgroundFetch::FetchQueueInfo(tcategory->getUUID(), recursive));
- }
- else if ( !gInventory.isCategoryComplete(tcategory->getUUID()) )
- {
- gInventory.updateCategory(tcategory);
- }
-
- }
- LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
- for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray();
- item_it != folder_sd["items"].endArray();
- ++item_it)
- {
- LLSD item = *item_it;
- titem->unpackMessage(item);
-
- gInventory.updateItem(titem);
- }
-
- // Set version and descendentcount according to message.
- LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id);
- if(cat)
- {
- cat->setVersion(version);
- cat->setDescendentCount(descendents);
- cat->determineFolderType();
- }
-
- }
- }
-
- if (content.has("bad_folders"))
- {
- for(LLSD::array_const_iterator folder_it = content["bad_folders"].beginArray();
- folder_it != content["bad_folders"].endArray();
- ++folder_it)
- {
- // *TODO: Stop copying data
- LLSD folder_sd = *folder_it;
-
- // These folders failed on the dataserver. We probably don't want to retry them.
- LL_WARNS() << "Folder " << folder_sd["folder_id"].asString()
- << "Error: " << folder_sd["error"].asString() << LL_ENDL;
- }
- }
+ // *TODO: These values could be tweaked at runtime to effect
+ // a fast/slow fetch throttle. Once login is complete and the scene
+ // is mostly loaded, we could turn up the throttle and fill missing
+ // inventory more quickly.
+ static const U32 max_batch_size(10);
+ static const S32 max_concurrent_fetches(12); // Outstanding requests, not connections
+ static const F32 new_min_time(0.05f); // *HACK: Clean this up when old code goes away entirely.
- if (fetcher->isBulkFetchProcessingComplete())
+ mMinTimeBetweenFetches = new_min_time;
+ if (mMinTimeBetweenFetches < new_min_time)
{
- LL_INFOS() << "Inventory fetch completed" << LL_ENDL;
- fetcher->setAllFoldersFetched();
+ mMinTimeBetweenFetches = new_min_time; // *HACK: See above.
}
-
- gInventory.notifyObservers();
-}
-
-// If we get back an error (not found, etc...), handle it here.
-void LLInventoryModelFetchDescendentsResponder::httpFailure()
-{
- LL_WARNS() << dumpResponse() << LL_ENDL;
- LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance();
- LL_INFOS() << dumpResponse() << LL_ENDL;
-
- fetcher->incrFetchCount(-1);
-
- if (getStatus()==HTTP_INTERNAL_ERROR) // timed out or curl failure
- {
- for(LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray();
- folder_it != mRequestSD["folders"].endArray();
- ++folder_it)
- {
- LLSD folder_sd = *folder_it;
- LLUUID folder_id = folder_sd["folder_id"];
- const BOOL recursive = getIsRecursive(folder_id);
- fetcher->mFetchQueue.push_front(LLInventoryModelBackgroundFetch::FetchQueueInfo(folder_id, recursive));
- }
- }
- else
+ if (mFetchCount)
{
- if (fetcher->isBulkFetchProcessingComplete())
- {
- fetcher->setAllFoldersFetched();
- }
- }
- gInventory.notifyObservers();
-}
-
-BOOL LLInventoryModelFetchDescendentsResponder::getIsRecursive(const LLUUID& cat_id) const
-{
- return (std::find(mRecursiveCatUUIDs.begin(),mRecursiveCatUUIDs.end(), cat_id) != mRecursiveCatUUIDs.end());
-}
-// Bundle up a bunch of requests to send all at once.
-// static
-void LLInventoryModelBackgroundFetch::bulkFetch()
-{
- //Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped.
- //If there are items in mFetchQueue, we want to check the time since the last bulkFetch was
- //sent. If it exceeds our retry time, go ahead and fire off another batch.
- LLViewerRegion* region = gAgent.getRegion();
- if (!region) return;
-
- S16 max_concurrent_fetches=8;
- F32 new_min_time = 0.5f; //HACK! Clean this up when old code goes away entirely.
- if (mMinTimeBetweenFetches < new_min_time)
- {
- mMinTimeBetweenFetches=new_min_time; //HACK! See above.
+ // Process completed background HTTP requests
+ gInventory.handleResponses(false);
}
- if (gDisconnected ||
- (mFetchCount > max_concurrent_fetches) ||
+ if ((mFetchCount > max_concurrent_fetches) ||
(mFetchTimer.getElapsedTimeF32() < mMinTimeBetweenFetches))
{
- return; // just bail if we are disconnected
+ return;
}
- U32 item_count=0;
- U32 folder_count=0;
- U32 max_batch_size=5;
+ U32 item_count(0);
+ U32 folder_count(0);
- U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1;
+ const U32 sort_order(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1);
+ // *TODO: Think I'd like to get a shared pointer to this and share it
+ // among all the folder requests.
uuid_vec_t recursive_cats;
LLSD folder_request_body;
@@ -614,27 +574,27 @@ void LLInventoryModelBackgroundFetch::bulkFetch()
LLSD item_request_body;
LLSD item_request_body_lib;
- while (!mFetchQueue.empty()
+ while (! mFetchQueue.empty()
&& (item_count + folder_count) < max_batch_size)
{
- const FetchQueueInfo& fetch_info = mFetchQueue.front();
+ const FetchQueueInfo & fetch_info(mFetchQueue.front());
if (fetch_info.mIsCategory)
{
- const LLUUID &cat_id = fetch_info.mUUID;
+ const LLUUID & cat_id(fetch_info.mUUID);
if (cat_id.isNull()) //DEV-17797
{
LLSD folder_sd;
folder_sd["folder_id"] = LLUUID::null.asString();
folder_sd["owner_id"] = gAgent.getID();
- folder_sd["sort_order"] = (LLSD::Integer)sort_order;
- folder_sd["fetch_folders"] = (LLSD::Boolean)FALSE;
- folder_sd["fetch_items"] = (LLSD::Boolean)TRUE;
+ folder_sd["sort_order"] = LLSD::Integer(sort_order);
+ folder_sd["fetch_folders"] = LLSD::Boolean(FALSE);
+ folder_sd["fetch_items"] = LLSD::Boolean(TRUE);
folder_request_body["folders"].append(folder_sd);
folder_count++;
}
else
{
- const LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
+ const LLViewerInventoryCategory * cat(gInventory.getCategory(cat_id));
if (cat)
{
@@ -643,21 +603,26 @@ void LLInventoryModelBackgroundFetch::bulkFetch()
LLSD folder_sd;
folder_sd["folder_id"] = cat->getUUID();
folder_sd["owner_id"] = cat->getOwnerID();
- folder_sd["sort_order"] = (LLSD::Integer)sort_order;
- folder_sd["fetch_folders"] = TRUE; //(LLSD::Boolean)sFullFetchStarted;
- folder_sd["fetch_items"] = (LLSD::Boolean)TRUE;
+ folder_sd["sort_order"] = LLSD::Integer(sort_order);
+ folder_sd["fetch_folders"] = LLSD::Boolean(TRUE); //(LLSD::Boolean)sFullFetchStarted;
+ folder_sd["fetch_items"] = LLSD::Boolean(TRUE);
if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID())
+ {
folder_request_body_lib["folders"].append(folder_sd);
+ }
else
+ {
folder_request_body["folders"].append(folder_sd);
+ }
folder_count++;
}
+
// May already have this folder, but append child folders to list.
if (fetch_info.mRecursive)
{
- LLInventoryModel::cat_array_t* categories;
- LLInventoryModel::item_array_t* items;
+ LLInventoryModel::cat_array_t * categories(NULL);
+ LLInventoryModel::item_array_t * items(NULL);
gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items);
for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin();
it != categories->end();
@@ -669,11 +634,14 @@ void LLInventoryModelBackgroundFetch::bulkFetch()
}
}
if (fetch_info.mRecursive)
+ {
recursive_cats.push_back(cat_id);
+ }
}
else
{
- LLViewerInventoryItem* itemp = gInventory.getItem(fetch_info.mUUID);
+ LLViewerInventoryItem * itemp(gInventory.getItem(fetch_info.mUUID));
+
if (itemp)
{
LLSD item_sd;
@@ -694,72 +662,80 @@ void LLInventoryModelBackgroundFetch::bulkFetch()
mFetchQueue.pop_front();
}
-
+
+ // Issue HTTP POST requests to fetch folders and items
+
if (item_count + folder_count > 0)
{
if (folder_count)
{
- std::string url = region->getCapability("FetchInventoryDescendents2");
- if ( !url.empty() )
+ if (folder_request_body["folders"].size())
{
- if (folder_request_body["folders"].size())
+ const std::string url(region->getCapability("FetchInventoryDescendents2"));
+
+ if (! url.empty())
{
- LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body, recursive_cats);
- LLHTTPClient::post(url, folder_request_body, fetcher, 300.0);
+ BGFolderHttpHandler * handler(new BGFolderHttpHandler(folder_request_body, recursive_cats));
+ gInventory.requestPost(false, url, folder_request_body, handler, "Inventory Folder");
}
- if (folder_request_body_lib["folders"].size())
- {
- std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents2");
+ }
+
+ if (folder_request_body_lib["folders"].size())
+ {
+ const std::string url(region->getCapability("FetchLibDescendents2"));
- LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body_lib, recursive_cats);
- LLHTTPClient::post(url_lib, folder_request_body_lib, fetcher, 300.0);
+ if (! url.empty())
+ {
+ BGFolderHttpHandler * handler(new BGFolderHttpHandler(folder_request_body_lib, recursive_cats));
+ gInventory.requestPost(false, url, folder_request_body_lib, handler, "Library Folder");
}
}
- }
+ } // if (folder_count)
+
if (item_count)
{
- std::string url;
-
if (item_request_body.size())
{
- url = region->getCapability("FetchInventory2");
- if (!url.empty())
+ const std::string url(region->getCapability("FetchInventory2"));
+
+ if (! url.empty())
{
LLSD body;
body["items"] = item_request_body;
-
- LLHTTPClient::post(url, body, new LLInventoryModelFetchItemResponder(body));
+ BGItemHttpHandler * handler(new BGItemHttpHandler(body));
+ gInventory.requestPost(false, url, body, handler, "Inventory Item");
}
}
if (item_request_body_lib.size())
{
+ const std::string url(region->getCapability("FetchLib2"));
- url = region->getCapability("FetchLib2");
- if (!url.empty())
+ if (! url.empty())
{
LLSD body;
body["items"] = item_request_body_lib;
-
- LLHTTPClient::post(url, body, new LLInventoryModelFetchItemResponder(body));
+ BGItemHttpHandler * handler(new BGItemHttpHandler(body));
+ gInventory.requestPost(false, url, body, handler, "Library Item");
}
}
- }
+ } // if (item_count)
+
mFetchTimer.reset();
}
-
else if (isBulkFetchProcessingComplete())
{
setAllFoldersFetched();
}
}
-bool LLInventoryModelBackgroundFetch::fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id) const
+bool LLInventoryModelBackgroundFetch::fetchQueueContainsNoDescendentsOf(const LLUUID & cat_id) const
{
for (fetch_queue_t::const_iterator it = mFetchQueue.begin();
- it != mFetchQueue.end(); ++it)
+ it != mFetchQueue.end();
+ ++it)
{
- const LLUUID& fetch_id = (*it).mUUID;
+ const LLUUID & fetch_id = (*it).mUUID;
if (gInventory.isObjectDescendentOf(fetch_id, cat_id))
return false;
}
@@ -767,3 +743,304 @@ bool LLInventoryModelBackgroundFetch::fetchQueueContainsNoDescendentsOf(const LL
}
+namespace
+{
+
+///----------------------------------------------------------------------------
+/// Class <anonymous>::BGFolderHttpHandler
+///----------------------------------------------------------------------------
+
+void BGFolderHttpHandler::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response)
+{
+ do // Single-pass do-while used for common exit handling
+ {
+ LLCore::HttpStatus status(response->getStatus());
+ // status = LLCore::HttpStatus(404); // Dev tool to force error handling
+ if (! status)
+ {
+ processFailure(status, response);
+ break; // Goto common exit
+ }
+
+ // Response body should be present.
+ LLCore::BufferArray * body(response->getBody());
+ // body = NULL; // Dev tool to force error handling
+ if (! body || ! body->size())
+ {
+ LL_WARNS(LOG_INV) << "Missing data in inventory folder query." << LL_ENDL;
+ processFailure("HTTP response missing expected body", response);
+ break; // Goto common exit
+ }
+
+ // Could test 'Content-Type' header but probably unreliable.
+
+ // Convert response to LLSD
+ // body->write(0, "Garbage Response", 16); // Dev tool to force error handling
+ LLSD body_llsd;
+ if (! LLCoreHttpUtil::responseToLLSD(response, true, body_llsd))
+ {
+ // INFOS-level logging will occur on the parsed failure
+ processFailure("HTTP response contained malformed LLSD", response);
+ break; // goto common exit
+ }
+
+ // Expect top-level structure to be a map
+ // body_llsd = LLSD::emptyArray(); // Dev tool to force error handling
+ if (! body_llsd.isMap())
+ {
+ processFailure("LLSD response not a map", response);
+ break; // goto common exit
+ }
+
+ // Check for 200-with-error failures
+ //
+ // See comments in llinventorymodel.cpp about this mode of error.
+ //
+ // body_llsd["error"] = LLSD::emptyMap(); // Dev tool to force error handling
+ // body_llsd["error"]["identifier"] = "Development";
+ // body_llsd["error"]["message"] = "You left development code in the viewer";
+ if (body_llsd.has("error"))
+ {
+ processFailure("Inventory application error (200-with-error)", response);
+ break; // goto common exit
+ }
+
+ // Okay, process data if possible
+ processData(body_llsd, response);
+ }
+ while (false);
+
+ // Must delete on completion.
+ delete this;
+}
+
+
+void BGFolderHttpHandler::processData(LLSD & content, LLCore::HttpResponse * response)
+{
+ LLInventoryModelBackgroundFetch * fetcher(LLInventoryModelBackgroundFetch::getInstance());
+
+ // API V2 and earlier should probably be testing for "error" map
+ // in response as an application-level error.
+
+ // Instead, we assume success and attempt to extract information.
+ if (content.has("folders"))
+ {
+ LLSD folders(content["folders"]);
+
+ for (LLSD::array_const_iterator folder_it = folders.beginArray();
+ folder_it != folders.endArray();
+ ++folder_it)
+ {
+ LLSD folder_sd(*folder_it);
+
+ //LLUUID agent_id = folder_sd["agent_id"];
+
+ //if(agent_id != gAgent.getID()) //This should never happen.
+ //{
+ // LL_WARNS(LOG_INV) << "Got a UpdateInventoryItem for the wrong agent."
+ // << LL_ENDL;
+ // break;
+ //}
+
+ LLUUID parent_id(folder_sd["folder_id"].asUUID());
+ LLUUID owner_id(folder_sd["owner_id"].asUUID());
+ S32 version(folder_sd["version"].asInteger());
+ S32 descendents(folder_sd["descendents"].asInteger());
+ LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
+
+ if (parent_id.isNull())
+ {
+ LLSD items(folder_sd["items"]);
+ LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
+
+ for (LLSD::array_const_iterator item_it = items.beginArray();
+ item_it != items.endArray();
+ ++item_it)
+ {
+ const LLUUID lost_uuid(gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND));
+
+ if (lost_uuid.notNull())
+ {
+ LLSD item(*item_it);
+
+ titem->unpackMessage(item);
+
+ LLInventoryModel::update_list_t update;
+ LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1);
+ update.push_back(new_folder);
+ gInventory.accountForUpdate(update);
+
+ titem->setParent(lost_uuid);
+ titem->updateParentOnServer(FALSE);
+ gInventory.updateItem(titem);
+ gInventory.notifyObservers();
+ }
+ }
+ }
+
+ LLViewerInventoryCategory * pcat(gInventory.getCategory(parent_id));
+ if (! pcat)
+ {
+ continue;
+ }
+
+ LLSD categories(folder_sd["categories"]);
+ for (LLSD::array_const_iterator category_it = categories.beginArray();
+ category_it != categories.endArray();
+ ++category_it)
+ {
+ LLSD category(*category_it);
+ tcategory->fromLLSD(category);
+
+ const bool recursive(getIsRecursive(tcategory->getUUID()));
+ if (recursive)
+ {
+ fetcher->addRequestAtBack(tcategory->getUUID(), recursive, true);
+ }
+ else if (! gInventory.isCategoryComplete(tcategory->getUUID()))
+ {
+ gInventory.updateCategory(tcategory);
+ }
+ }
+
+ LLSD items(folder_sd["items"]);
+ LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
+ for (LLSD::array_const_iterator item_it = items.beginArray();
+ item_it != items.endArray();
+ ++item_it)
+ {
+ LLSD item(*item_it);
+ titem->unpackMessage(item);
+
+ gInventory.updateItem(titem);
+ }
+
+ // Set version and descendentcount according to message.
+ LLViewerInventoryCategory * cat(gInventory.getCategory(parent_id));
+ if (cat)
+ {
+ cat->setVersion(version);
+ cat->setDescendentCount(descendents);
+ cat->determineFolderType();
+ }
+ }
+ }
+
+ if (content.has("bad_folders"))
+ {
+ LLSD bad_folders(content["bad_folders"]);
+ for (LLSD::array_const_iterator folder_it = bad_folders.beginArray();
+ folder_it != bad_folders.endArray();
+ ++folder_it)
+ {
+ // *TODO: Stop copying data [ed: this isn't copying data]
+ LLSD folder_sd(*folder_it);
+
+ // These folders failed on the dataserver. We probably don't want to retry them.
+ LL_WARNS(LOG_INV) << "Folder " << folder_sd["folder_id"].asString()
+ << "Error: " << folder_sd["error"].asString() << LL_ENDL;
+ }
+ }
+
+ if (fetcher->isBulkFetchProcessingComplete())
+ {
+ fetcher->setAllFoldersFetched();
+ }
+
+ gInventory.notifyObservers();
+}
+
+
+void BGFolderHttpHandler::processFailure(LLCore::HttpStatus status, LLCore::HttpResponse * response)
+{
+ const std::string & ct(response->getContentType());
+ LL_WARNS(LOG_INV) << "Inventory folder fetch failure\n"
+ << "[Status: " << status.toTerseString() << "]\n"
+ << "[Reason: " << status.toString() << "]\n"
+ << "[Content-type: " << ct << "]\n"
+ << "[Content (abridged): "
+ << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL;
+
+ // Could use a 404 test here to try to detect revoked caps...
+
+ // This was originally the request retry logic for the inventory
+ // request which tested on HTTP_INTERNAL_ERROR status. This
+ // retry logic was unbounded and lacked discrimination as to the
+ // cause of the retry. The new http library should be doing
+ // adquately on retries but I want to keep the structure of a
+ // retry for reference.
+ LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance();
+ if (false)
+ {
+ // timed out or curl failure
+ for (LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray();
+ folder_it != mRequestSD["folders"].endArray();
+ ++folder_it)
+ {
+ LLSD folder_sd(*folder_it);
+ LLUUID folder_id(folder_sd["folder_id"].asUUID());
+ const BOOL recursive = getIsRecursive(folder_id);
+ fetcher->addRequestAtFront(folder_id, recursive, true);
+ }
+ }
+ else
+ {
+ if (fetcher->isBulkFetchProcessingComplete())
+ {
+ fetcher->setAllFoldersFetched();
+ }
+ }
+ gInventory.notifyObservers();
+}
+
+
+void BGFolderHttpHandler::processFailure(const char * const reason, LLCore::HttpResponse * response)
+{
+ LL_WARNS(LOG_INV) << "Inventory folder fetch failure\n"
+ << "[Status: internal error]\n"
+ << "[Reason: " << reason << "]\n"
+ << "[Content (abridged): "
+ << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL;
+
+ // Reverse of previous processFailure() method, this is invoked
+ // when response structure is found to be invalid. Original
+ // always re-issued the request (without limit). This does
+ // the same but be aware that this may be a source of problems.
+ // Philosophy is that inventory folders are so essential to
+ // operation that this is a reasonable action.
+ LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance();
+ if (true)
+ {
+ for (LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray();
+ folder_it != mRequestSD["folders"].endArray();
+ ++folder_it)
+ {
+ LLSD folder_sd(*folder_it);
+ LLUUID folder_id(folder_sd["folder_id"].asUUID());
+ const BOOL recursive = getIsRecursive(folder_id);
+ fetcher->addRequestAtFront(folder_id, recursive, true);
+ }
+ }
+ else
+ {
+ if (fetcher->isBulkFetchProcessingComplete())
+ {
+ fetcher->setAllFoldersFetched();
+ }
+ }
+ gInventory.notifyObservers();
+}
+
+
+bool BGFolderHttpHandler::getIsRecursive(const LLUUID & cat_id) const
+{
+ return std::find(mRecursiveCatUUIDs.begin(), mRecursiveCatUUIDs.end(), cat_id) != mRecursiveCatUUIDs.end();
+}
+
+///----------------------------------------------------------------------------
+/// Class <anonymous>::BGItemHttpHandler
+///----------------------------------------------------------------------------
+
+// Nothing to implement here. All ctor/dtor changes.
+
+} // end namespace anonymous
diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h
index 9dfedddd6d..2139f85519 100755
--- a/indra/newview/llinventorymodelbackgroundfetch.h
+++ b/indra/newview/llinventorymodelbackgroundfetch.h
@@ -29,6 +29,11 @@
#include "llsingleton.h"
#include "lluuid.h"
+#include "httpcommon.h"
+#include "httprequest.h"
+#include "httpoptions.h"
+#include "httpheaders.h"
+#include "httphandler.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryModelBackgroundFetch
@@ -38,8 +43,6 @@
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLInventoryModelBackgroundFetch : public LLSingleton<LLInventoryModelBackgroundFetch>
{
- friend class LLInventoryModelFetchDescendentsResponder;
-
public:
LLInventoryModelBackgroundFetch();
~LLInventoryModelBackgroundFetch();
@@ -60,16 +63,22 @@ public:
bool inventoryFetchInProgress() const;
void findLostItems();
- void incrFetchCount(S16 fetching);
-protected:
+ void incrFetchCount(S32 fetching);
+
bool isBulkFetchProcessingComplete() const;
+ void setAllFoldersFetched();
+
+ void addRequestAtFront(const LLUUID & id, BOOL recursive, bool is_category);
+ void addRequestAtBack(const LLUUID & id, BOOL recursive, bool is_category);
+
+protected:
void bulkFetch();
void backgroundFetch();
static void backgroundFetchCB(void*); // background fetch idle function
- void setAllFoldersFetched();
bool fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id) const;
+
private:
BOOL mRecursiveInventoryFetchStarted;
BOOL mRecursiveLibraryFetchStarted;
@@ -77,7 +86,7 @@ private:
BOOL mBackgroundFetchActive;
bool mFolderFetchActive;
- S16 mFetchCount;
+ S32 mFetchCount;
BOOL mTimelyFetchPending;
S32 mNumFetchRetries;
@@ -87,9 +96,12 @@ private:
struct FetchQueueInfo
{
- FetchQueueInfo(const LLUUID& id, BOOL recursive, bool is_category = true) :
- mUUID(id), mRecursive(recursive), mIsCategory(is_category)
+ FetchQueueInfo(const LLUUID& id, BOOL recursive, bool is_category = true)
+ : mUUID(id),
+ mIsCategory(is_category),
+ mRecursive(recursive)
{}
+
LLUUID mUUID;
bool mIsCategory;
BOOL mRecursive;
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 2dd8dce42f..d81401b59b 100755
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -237,7 +237,8 @@ void fetch_items_from_llsd(const LLSD& items_llsd)
if (!url.empty())
{
body[i]["agent_id"] = gAgent.getID();
- LLHTTPClient::post(url, body[i], new LLInventoryModel::fetchInventoryResponder(body[i]));
+ LLInventoryModel::FetchItemHttpHandler * handler(new LLInventoryModel::FetchItemHttpHandler(body[i]));
+ gInventory.requestPost(true, url, body[i], handler, (i ? "Library Item" : "Inventory Item"));
continue;
}
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 9b4f146332..39f3c0f113 100755
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -96,33 +96,6 @@ bool LLLoginHandler::handle(const LLSD& tokens,
return true;
}
- if (tokens.size() == 1
- && tokens[0].asString() == "show")
- {
- // We're using reg-in-client, so show the XUI login widgets
- LLPanelLogin::showLoginWidgets();
- return true;
- }
-
- if (tokens.size() == 1
- && tokens[0].asString() == "reg")
- {
- LLWindow* window = gViewerWindow->getWindow();
- window->incBusyCount();
- window->setCursor(UI_CURSOR_ARROW);
-
- // Do this first, as it may be slow and we want to keep something
- // on the user's screen as long as possible
- LLWeb::loadURLExternal( "http://join.eniac15.lindenlab.com/" );
-
- window->decBusyCount();
- window->setCursor(UI_CURSOR_ARROW);
-
- // Then hide the window
- window->minimize();
- return true;
- }
-
// Make sure window is visible
LLWindow* window = gViewerWindow->getWindow();
if (window->getMinimized())
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 8f50555a73..648056484e 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -1,4 +1,3 @@
-
/**
* @file llmeshrepository.cpp
* @brief Mesh repository implementation.
@@ -72,6 +71,7 @@
#include "bufferarray.h"
#include "bufferstream.h"
#include "llfasttimer.h"
+#include "llcorehttputil.h"
#include "boost/lexical_cast.hpp"
@@ -338,14 +338,17 @@ static LLFastTimer::DeclareTimer FTM_MESH_FETCH("Mesh Fetch");
LLMeshRepository gMeshRepo;
const S32 MESH_HEADER_SIZE = 4096; // Important: assumption is that headers fit in this space
+
const S32 REQUEST_HIGH_WATER_MIN = 32; // Limits for GetMesh regions
const S32 REQUEST_HIGH_WATER_MAX = 150; // Should remain under 2X throttle
const S32 REQUEST_LOW_WATER_MIN = 16;
const S32 REQUEST_LOW_WATER_MAX = 75;
+
const S32 REQUEST2_HIGH_WATER_MIN = 32; // Limits for GetMesh2 regions
-const S32 REQUEST2_HIGH_WATER_MAX = 80;
+const S32 REQUEST2_HIGH_WATER_MAX = 100;
const S32 REQUEST2_LOW_WATER_MIN = 16;
-const S32 REQUEST2_LOW_WATER_MAX = 40;
+const S32 REQUEST2_LOW_WATER_MAX = 50;
+
const U32 LARGE_MESH_FETCH_THRESHOLD = 1U << 21; // Size at which requests goes to narrow/slow queue
const long SMALL_MESH_XFER_TIMEOUT = 120L; // Seconds to complete xfer, small mesh downloads
const long LARGE_MESH_XFER_TIMEOUT = 600L; // Seconds to complete xfer, large downloads
@@ -518,11 +521,13 @@ class LLMeshHandlerBase : public LLCore::HttpHandler
{
public:
LOG_CLASS(LLMeshHandlerBase);
- LLMeshHandlerBase()
+ LLMeshHandlerBase(U32 offset, U32 requested_bytes)
: LLCore::HttpHandler(),
mMeshParams(),
mProcessed(false),
- mHttpHandle(LLCORE_HTTP_HANDLE_INVALID)
+ mHttpHandle(LLCORE_HTTP_HANDLE_INVALID),
+ mOffset(offset),
+ mRequestedBytes(requested_bytes)
{}
virtual ~LLMeshHandlerBase()
@@ -534,13 +539,15 @@ protected:
public:
virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response);
- virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size) = 0;
+ virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size) = 0;
virtual void processFailure(LLCore::HttpStatus status) = 0;
public:
LLVolumeParams mMeshParams;
bool mProcessed;
- LLCore::HttpHandle mHttpHandle;
+ LLCore::HttpHandle mHttpHandle;
+ U32 mOffset;
+ U32 mRequestedBytes;
};
@@ -551,8 +558,8 @@ class LLMeshHeaderHandler : public LLMeshHandlerBase
{
public:
LOG_CLASS(LLMeshHeaderHandler);
- LLMeshHeaderHandler(const LLVolumeParams & mesh_params)
- : LLMeshHandlerBase()
+ LLMeshHeaderHandler(const LLVolumeParams & mesh_params, U32 offset, U32 requested_bytes)
+ : LLMeshHandlerBase(offset, requested_bytes)
{
mMeshParams = mesh_params;
LLMeshRepoThread::incActiveHeaderRequests();
@@ -564,7 +571,7 @@ protected:
void operator=(const LLMeshHeaderHandler &); // Not defined
public:
- virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size);
+ virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size);
virtual void processFailure(LLCore::HttpStatus status);
};
@@ -573,17 +580,16 @@ public:
//
// Thread: repo
class LLMeshLODHandler : public LLMeshHandlerBase
- {
+{
public:
+ LOG_CLASS(LLMeshLODHandler);
LLMeshLODHandler(const LLVolumeParams & mesh_params, S32 lod, U32 offset, U32 requested_bytes)
- : LLMeshHandlerBase(),
- mLOD(lod),
- mRequestedBytes(requested_bytes),
- mOffset(offset)
+ : LLMeshHandlerBase(offset, requested_bytes),
+ mLOD(lod)
{
- mMeshParams = mesh_params;
- LLMeshRepoThread::incActiveLODRequests();
- }
+ mMeshParams = mesh_params;
+ LLMeshRepoThread::incActiveLODRequests();
+ }
virtual ~LLMeshLODHandler();
protected:
@@ -591,13 +597,11 @@ protected:
void operator=(const LLMeshLODHandler &); // Not defined
public:
- virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size);
+ virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size);
virtual void processFailure(LLCore::HttpStatus status);
public:
S32 mLOD;
- U32 mRequestedBytes;
- U32 mOffset;
};
@@ -605,14 +609,12 @@ public:
//
// Thread: repo
class LLMeshSkinInfoHandler : public LLMeshHandlerBase
- {
+{
public:
LOG_CLASS(LLMeshSkinInfoHandler);
- LLMeshSkinInfoHandler(const LLUUID& id, U32 offset, U32 size)
- : LLMeshHandlerBase(),
- mMeshID(id),
- mRequestedBytes(size),
- mOffset(offset)
+ LLMeshSkinInfoHandler(const LLUUID& id, U32 offset, U32 requested_bytes)
+ : LLMeshHandlerBase(offset, requested_bytes),
+ mMeshID(id)
{}
virtual ~LLMeshSkinInfoHandler();
@@ -621,13 +623,11 @@ protected:
void operator=(const LLMeshSkinInfoHandler &); // Not defined
public:
- virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size);
+ virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size);
virtual void processFailure(LLCore::HttpStatus status);
public:
LLUUID mMeshID;
- U32 mRequestedBytes;
- U32 mOffset;
};
@@ -635,14 +635,12 @@ public:
//
// Thread: repo
class LLMeshDecompositionHandler : public LLMeshHandlerBase
- {
+{
public:
LOG_CLASS(LLMeshDecompositionHandler);
- LLMeshDecompositionHandler(const LLUUID& id, U32 offset, U32 size)
- : LLMeshHandlerBase(),
- mMeshID(id),
- mRequestedBytes(size),
- mOffset(offset)
+ LLMeshDecompositionHandler(const LLUUID& id, U32 offset, U32 requested_bytes)
+ : LLMeshHandlerBase(offset, requested_bytes),
+ mMeshID(id)
{}
virtual ~LLMeshDecompositionHandler();
@@ -651,13 +649,11 @@ protected:
void operator=(const LLMeshDecompositionHandler &); // Not defined
public:
- virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size);
+ virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size);
virtual void processFailure(LLCore::HttpStatus status);
public:
LLUUID mMeshID;
- U32 mRequestedBytes;
- U32 mOffset;
};
@@ -665,14 +661,12 @@ public:
//
// Thread: repo
class LLMeshPhysicsShapeHandler : public LLMeshHandlerBase
- {
+{
public:
LOG_CLASS(LLMeshPhysicsShapeHandler);
- LLMeshPhysicsShapeHandler(const LLUUID& id, U32 offset, U32 size)
- : LLMeshHandlerBase(),
- mMeshID(id),
- mRequestedBytes(size),
- mOffset(offset)
+ LLMeshPhysicsShapeHandler(const LLUUID& id, U32 offset, U32 requested_bytes)
+ : LLMeshHandlerBase(offset, requested_bytes),
+ mMeshID(id)
{}
virtual ~LLMeshPhysicsShapeHandler();
@@ -681,13 +675,11 @@ protected:
void operator=(const LLMeshPhysicsShapeHandler &); // Not defined
public:
- virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size);
+ virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size);
virtual void processFailure(LLCore::HttpStatus status);
public:
LLUUID mMeshID;
- U32 mRequestedBytes;
- U32 mOffset;
};
@@ -713,8 +705,8 @@ void log_upload_error(LLCore::HttpStatus status, const LLSD& content,
LL_WARNS(LOG_MESH) << "error: " << err << LL_ENDL;
LL_WARNS(LOG_MESH) << " mesh upload failed, stage '" << stage
<< "', error '" << err["error"].asString()
- << "', message '" << err["message"].asString()
- << "', id '" << err["identifier"].asString()
+ << "', message '" << err["message"].asString()
+ << "', id '" << err["identifier"].asString()
<< "'" << LL_ENDL;
if (err.has("errors"))
{
@@ -754,7 +746,9 @@ LLMeshRepoThread::LLMeshRepoThread()
mHttpLargePolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID),
mHttpPriority(0),
mGetMeshVersion(2)
- {
+{
+ LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp());
+
mMutex = new LLMutex(NULL);
mHeaderMutex = new LLMutex(NULL);
mSignal = new LLCondition(NULL);
@@ -766,15 +760,15 @@ LLMeshRepoThread::LLMeshRepoThread()
mHttpLargeOptions->setTransferTimeout(LARGE_MESH_XFER_TIMEOUT);
mHttpLargeOptions->setUseRetryAfter(gSavedSettings.getBOOL("MeshUseHttpRetryAfter"));
mHttpHeaders = new LLCore::HttpHeaders;
- mHttpHeaders->append("Accept", "application/vnd.ll.mesh");
- mHttpPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_MESH2);
- mHttpLegacyPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_MESH1);
- mHttpLargePolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_LARGE_MESH);
- }
+ mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_VND_LL_MESH);
+ mHttpPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_MESH2);
+ mHttpLegacyPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_MESH1);
+ mHttpLargePolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_LARGE_MESH);
+}
LLMeshRepoThread::~LLMeshRepoThread()
- {
+{
LL_INFOS(LOG_MESH) << "Small GETs issued: " << LLMeshRepository::sHTTPRequestCount
<< ", Large GETs issued: " << LLMeshRepository::sHTTPLargeRequestCount
<< ", Max Lock Holdoffs: " << LLMeshRepository::sMaxLockHoldoffs
@@ -785,23 +779,23 @@ LLMeshRepoThread::~LLMeshRepoThread()
++iter)
{
delete *iter;
- }
+ }
mHttpRequestSet.clear();
if (mHttpHeaders)
- {
+ {
mHttpHeaders->release();
mHttpHeaders = NULL;
- }
+ }
if (mHttpOptions)
- {
+ {
mHttpOptions->release();
mHttpOptions = NULL;
- }
+ }
if (mHttpLargeOptions)
-{
+ {
mHttpLargeOptions->release();
mHttpLargeOptions = NULL;
-}
+ }
delete mHttpRequest;
mHttpRequest = NULL;
delete mMutex;
@@ -846,48 +840,49 @@ void LLMeshRepoThread::run()
{
// Dispatch all HttpHandler notifications
mHttpRequest->update(0L);
- }
+ }
sRequestWaterLevel = mHttpRequestSet.size(); // Stats data update
// NOTE: order of queue processing intentionally favors LOD requests over header requests
while (!mLODReqQ.empty() && mHttpRequestSet.size() < sRequestHighWater)
- {
+ {
if (! mMutex)
- {
+ {
break;
}
- mMutex->lock();
- LODRequest req = mLODReqQ.front();
- mLODReqQ.pop();
- LLMeshRepository::sLODProcessing--;
- mMutex->unlock();
+ mMutex->lock();
+ LODRequest req = mLODReqQ.front();
+ mLODReqQ.pop();
+ LLMeshRepository::sLODProcessing--;
+ mMutex->unlock();
+
if (!fetchMeshLOD(req.mMeshParams, req.mLOD)) // failed, resubmit
- {
- mMutex->lock();
- mLODReqQ.push(req);
+ {
+ mMutex->lock();
+ mLODReqQ.push(req);
++LLMeshRepository::sLODProcessing;
- mMutex->unlock();
- }
- }
+ mMutex->unlock();
+ }
+ }
while (!mHeaderReqQ.empty() && mHttpRequestSet.size() < sRequestHighWater)
- {
+ {
if (! mMutex)
- {
+ {
break;
}
- mMutex->lock();
- HeaderRequest req = mHeaderReqQ.front();
- mHeaderReqQ.pop();
- mMutex->unlock();
+ mMutex->lock();
+ HeaderRequest req = mHeaderReqQ.front();
+ mHeaderReqQ.pop();
+ mMutex->unlock();
if (!fetchMeshHeader(req.mMeshParams))//failed, resubmit
- {
- mMutex->lock();
- mHeaderReqQ.push(req) ;
- mMutex->unlock();
- }
- }
+ {
+ mMutex->lock();
+ mHeaderReqQ.push(req) ;
+ mMutex->unlock();
+ }
+ }
// For the final three request lists, similar goal to above but
// slightly different queue structures. Stay off the mutex when
@@ -983,7 +978,7 @@ void LLMeshRepoThread::run()
}
}
mMutex->unlock();
- }
+ }
// For dev purposes only. A dynamic change could make this false
// and that shouldn't assert.
@@ -1131,6 +1126,9 @@ LLCore::HttpHandle LLMeshRepoThread::getByteRange(const std::string & url, int c
size_t offset, size_t len,
LLCore::HttpHandler * handler)
{
+ // Also used in lltexturefetch.cpp
+ static LLCachedControl<bool> disable_range_req(gSavedSettings, "HttpRangeRequestsDisable", false);
+
LLCore::HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID);
if (len < LARGE_MESH_FETCH_THRESHOLD)
@@ -1140,8 +1138,8 @@ LLCore::HttpHandle LLMeshRepoThread::getByteRange(const std::string & url, int c
: mHttpLegacyPolicyClass),
mHttpPriority,
url,
- offset,
- len,
+ (disable_range_req ? size_t(0) : offset),
+ (disable_range_req ? size_t(0) : len),
mHttpOptions,
mHttpHeaders,
handler);
@@ -1155,8 +1153,8 @@ LLCore::HttpHandle LLMeshRepoThread::getByteRange(const std::string & url, int c
handle = mHttpRequest->requestGetByteRange(mHttpLargePolicyClass,
mHttpPriority,
url,
- offset,
- len,
+ (disable_range_req ? size_t(0) : offset),
+ (disable_range_req ? size_t(0) : len),
mHttpLargeOptions,
mHttpHeaders,
handler);
@@ -1250,7 +1248,6 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
<< LL_ENDL;
delete handler;
ret = false;
-
}
else
{
@@ -1527,7 +1524,7 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params)
//within the first 4KB
//NOTE -- this will break of headers ever exceed 4KB
- LLMeshHeaderHandler * handler = new LLMeshHeaderHandler(mesh_params);
+ LLMeshHeaderHandler * handler = new LLMeshHeaderHandler(mesh_params, 0, MESH_HEADER_SIZE);
LLCore::HttpHandle handle = getByteRange(http_url, cap_version, 0, MESH_HEADER_SIZE, handler);
if (LLCORE_HTTP_HANDLE_INVALID == handle)
{
@@ -1860,7 +1857,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,
bool upload_skin, bool upload_joints, const std::string & upload_url, bool do_upload,
LLHandle<LLWholeModelFeeObserver> fee_observer,
LLHandle<LLWholeModelUploadObserver> upload_observer)
-: LLThread("mesh upload"),
+ : LLThread("mesh upload"),
LLCore::HttpHandler(),
mDiscarded(false),
mDoUpload(do_upload),
@@ -1890,7 +1887,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,
mHttpOptions->setUseRetryAfter(gSavedSettings.getBOOL("MeshUseHttpRetryAfter"));
mHttpOptions->setRetries(UPLOAD_RETRY_LIMIT);
mHttpHeaders = new LLCore::HttpHeaders;
- mHttpHeaders->append("Content-Type", "application/llsd+xml");
+ mHttpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML);
mHttpPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_UPLOADS);
mHttpPriority = 0;
}
@@ -2240,21 +2237,17 @@ void LLMeshUploadThread::doWholeModelUpload()
mModelData = LLSD::emptyMap();
wholeModelToLLSD(mModelData, true);
LLSD body = mModelData["asset_resources"];
- dump_llsd_to_file(body,make_dump_name("whole_model_body_",dump_num));
-
- LLCore::BufferArray * ba = new LLCore::BufferArray;
- LLCore::BufferArrayStream bas(ba);
- LLSDSerialize::toXML(body, bas);
- // LLSDSerialize::toXML(mModelData, bas); // <- Enabling this will generate a convenient upload error
- LLCore::HttpHandle handle = mHttpRequest->requestPost(mHttpPolicyClass,
- mHttpPriority,
- mWholeModelUploadURL,
- ba,
- mHttpOptions,
- mHttpHeaders,
- this);
- ba->release();
-
+
+ dump_llsd_to_file(body, make_dump_name("whole_model_body_", dump_num));
+
+ LLCore::HttpHandle handle = LLCoreHttpUtil::requestPostWithLLSD(mHttpRequest,
+ mHttpPolicyClass,
+ mHttpPriority,
+ mWholeModelUploadURL,
+ body,
+ mHttpOptions,
+ mHttpHeaders,
+ this);
if (LLCORE_HTTP_HANDLE_INVALID == handle)
{
mHttpStatus = mHttpRequest->getStatus();
@@ -2271,7 +2264,7 @@ void LLMeshUploadThread::doWholeModelUpload()
mHttpRequest->update(0);
while (! LLApp::isQuitting() && ! finished() && ! isDiscarded())
- {
+ {
ms_sleep(sleep_time);
sleep_time = llmin(250U, sleep_time + sleep_time);
mHttpRequest->update(0);
@@ -2287,7 +2280,7 @@ void LLMeshUploadThread::doWholeModelUpload()
}
}
}
- }
+}
void LLMeshUploadThread::requestWholeModelFee()
{
@@ -2298,19 +2291,14 @@ void LLMeshUploadThread::requestWholeModelFee()
mModelData = LLSD::emptyMap();
wholeModelToLLSD(mModelData, false);
dump_llsd_to_file(mModelData, make_dump_name("whole_model_fee_request_", dump_num));
-
- LLCore::BufferArray * ba = new LLCore::BufferArray;
- LLCore::BufferArrayStream bas(ba);
- LLSDSerialize::toXML(mModelData, bas);
-
- LLCore::HttpHandle handle = mHttpRequest->requestPost(mHttpPolicyClass,
- mHttpPriority,
- mWholeModelFeeCapability,
- ba,
- mHttpOptions,
- mHttpHeaders,
- this);
- ba->release();
+ LLCore::HttpHandle handle = LLCoreHttpUtil::requestPostWithLLSD(mHttpRequest,
+ mHttpPolicyClass,
+ mHttpPriority,
+ mWholeModelFeeCapability,
+ mModelData,
+ mHttpOptions,
+ mHttpHeaders,
+ this);
if (LLCORE_HTTP_HANDLE_INVALID == handle)
{
mHttpStatus = mHttpRequest->getStatus();
@@ -2318,7 +2306,7 @@ void LLMeshUploadThread::requestWholeModelFee()
LL_WARNS(LOG_MESH) << "Couldn't issue request for model fee. Reason: " << mHttpStatus.toString()
<< " (" << mHttpStatus.toTerseString() << ")"
<< LL_ENDL;
- }
+ }
else
{
U32 sleep_time(10);
@@ -2335,7 +2323,7 @@ void LLMeshUploadThread::requestWholeModelFee()
LL_DEBUGS(LOG_MESH) << "Mesh fee query operation discarded." << LL_ENDL;
}
}
- }
+}
// Does completion duty for both fee queries and actual uploads.
@@ -2383,17 +2371,13 @@ void LLMeshUploadThread::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResp
}
else
{
- LLCore::BufferArray * ba(response->getBody());
- if (ba && ba->size())
- {
- LLCore::BufferArrayStream bas(ba);
- LLSDSerialize::fromXML(body, bas);
-}
+ // *TODO: handle error in conversion process
+ LLCoreHttpUtil::responseToLLSD(response, true, body);
}
dump_llsd_to_file(body, make_dump_name("whole_model_upload_response_", dump_num));
if (body["state"].asString() == "complete")
-{
+ {
// requested "mesh" asset type isn't actually the type
// of the resultant object, fix it up here.
mModelData["asset_type"] = "object";
@@ -2446,18 +2430,14 @@ void LLMeshUploadThread::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResp
body = llsd_from_file("fake_upload_error.xml");
}
else
- {
- LLCore::BufferArray * ba(response->getBody());
- if (ba && ba->size())
- {
- LLCore::BufferArrayStream bas(ba);
- LLSDSerialize::fromXML(body, bas);
- }
- }
+ {
+ // *TODO: handle error in conversion process
+ LLCoreHttpUtil::responseToLLSD(response, true, body);
+ }
dump_llsd_to_file(body, make_dump_name("whole_model_fee_response_", dump_num));
if (body["state"].asString() == "upload")
- {
+ {
mWholeModelUploadURL = body["uploader"].asString();
if (observer)
@@ -2543,18 +2523,18 @@ void LLMeshRepoThread::notifyLoadedMeshes()
skin_info_q.swap(mSkinInfoQ);
}
if (! mDecompositionQ.empty())
- {
+ {
decomp_q.swap(mDecompositionQ);
- }
+ }
mMutex->unlock();
// Process the elements free of the lock
while (! skin_info_q.empty())
- {
+ {
gMeshRepo.notifySkinInfoReceived(skin_info_q.front());
skin_info_q.pop_front();
- }
+ }
while (! decomp_q.empty())
{
@@ -2648,6 +2628,17 @@ void LLMeshRepository::cacheOutgoingMesh(LLMeshUploadData& data, LLSD& header)
}
+// Handle failed or successful requests for mesh assets.
+//
+// Support for 200 responses was added for several reasons. One,
+// a service or cache can ignore range headers and give us a
+// 200 with full asset should it elect to. We also support
+// a debug flag which disables range requests for those very
+// few users that have some sort of problem with their networking
+// services. But the 200 response handling is suboptimal: rather
+// than cache the whole asset, we just extract the part that would
+// have been sent in a 206 and process that. Inefficient but these
+// are cases far off the norm.
void LLMeshHandlerBase::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response)
{
mProcessed = true;
@@ -2676,35 +2667,78 @@ void LLMeshHandlerBase::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRespo
// rather than partial) and 416 (request completely unsatisfyable).
// Always been exposed to these but are less likely here where
// speculative loads aren't done.
- static const LLCore::HttpStatus par_status(HTTP_PARTIAL_CONTENT);
+ LLCore::BufferArray * body(response->getBody());
+ S32 body_offset(0);
+ U8 * data(NULL);
+ S32 data_size(body ? body->size() : 0);
- if (par_status != status)
+ if (data_size > 0)
{
- LL_WARNS_ONCE(LOG_MESH) << "Non-206 successful status received for fetch: "
- << status.toTerseString() << LL_ENDL;
- }
+ static const LLCore::HttpStatus par_status(HTTP_PARTIAL_CONTENT);
+
+ unsigned int offset(0), length(0), full_length(0);
+
+ if (par_status == status)
+ {
+ // 206 case
+ response->getRange(&offset, &length, &full_length);
+ if (! offset && ! length)
+ {
+ // This is the case where we receive a 206 status but
+ // there wasn't a useful Content-Range header in the response.
+ // This could be because it was badly formatted but is more
+ // likely due to capabilities services which scrub headers
+ // from responses. Assume we got what we asked for...`
+ // length = data_size;
+ offset = mOffset;
+ }
+ }
+ else
+ {
+ // 200 case, typically
+ offset = 0;
+ }
- LLCore::BufferArray * body(response->getBody());
- S32 data_size(body ? body->size() : 0);
- U8 * data(NULL);
+ // *DEBUG: To test validation below
+ // offset += 1;
- if (data_size > 0)
- {
+ // Validate that what we think we received is consistent with
+ // what we've asked for. I.e. first byte we wanted lies somewhere
+ // in the response.
+ if (offset > mOffset
+ || (offset + data_size) <= mOffset
+ || (mOffset - offset) >= data_size)
+ {
+ // No overlap with requested range. Fail request with
+ // suitable error. Shouldn't happen unless server/cache/ISP
+ // is doing something awful.
+ LL_WARNS(LOG_MESH) << "Mesh response (bytes ["
+ << offset << ".." << (offset + length - 1)
+ << "]) didn't overlap with request's origin (bytes ["
+ << mOffset << ".." << (mOffset + mRequestedBytes - 1)
+ << "])." << LL_ENDL;
+ processFailure(LLCore::HttpStatus(LLCore::HttpStatus::LLCORE, LLCore::HE_INV_CONTENT_RANGE_HDR));
+ ++LLMeshRepository::sHTTPErrorCount;
+ goto common_exit;
+ }
+
// *TODO: Try to get rid of data copying and add interfaces
// that support BufferArray directly. Introduce a two-phase
// handler, optional first that takes a body, fallback second
// that requires a temporary allocation and data copy.
- data = new U8[data_size];
- body->read(0, (char *) data, data_size);
+ body_offset = mOffset - offset;
+ data = new U8[data_size - body_offset];
+ body->read(body_offset, (char *) data, data_size - body_offset);
LLMeshRepository::sBytesReceived += data_size;
}
- processData(body, data, data_size);
+ processData(body, body_offset, data, data_size - body_offset);
delete [] data;
}
// Release handler
+common_exit:
gMeshRepo.mThread->mHttpRequestSet.erase(this);
delete this; // Must be last statement
}
@@ -2739,9 +2773,10 @@ void LLMeshHeaderHandler::processFailure(LLCore::HttpStatus status)
{
gMeshRepo.mThread->mUnavailableQ.push(LLMeshRepoThread::LODRequest(mMeshParams, i));
}
- }
+}
-void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size)
+void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
+ U8 * data, S32 data_size)
{
LLUUID mesh_id = mMeshParams.getSculptID();
bool success = (! MESH_HEADER_PROCESS_FAILED) && gMeshRepo.mThread->headerReceived(mMeshParams, data, data_size);
@@ -2756,12 +2791,12 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32
// Can't get the header so none of the LODs will be available
LLMutexLock lock(gMeshRepo.mThread->mMutex);
for (int i(0); i < 4; ++i)
- {
+ {
gMeshRepo.mThread->mUnavailableQ.push(LLMeshRepoThread::LODRequest(mMeshParams, i));
- }
}
+ }
else if (data && data_size > 0)
- {
+ {
// header was successfully retrieved from sim, cache in vfs
LLSD header = gMeshRepo.mThread->mMeshHeader[mesh_id];
@@ -2774,11 +2809,11 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32
S32 lod_bytes = 0;
for (U32 i = 0; i < LLModel::LOD_PHYSICS; ++i)
- {
+ {
// figure out how many bytes we'll need to reserve in the file
const std::string & lod_name = header_lod[i];
lod_bytes = llmax(lod_bytes, header[lod_name]["offset"].asInteger()+header[lod_name]["size"].asInteger());
- }
+ }
// just in case skin info or decomposition is at the end of the file (which it shouldn't be)
lod_bytes = llmax(lod_bytes, header["skin"]["offset"].asInteger() + header["skin"]["size"].asInteger());
@@ -2794,7 +2829,7 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE);
if (file.getMaxSize() >= bytes || file.setMaxSize(bytes))
- {
+ {
LLMeshRepository::sCacheBytesWritten += data_size;
++LLMeshRepository::sCacheWrites;
@@ -2805,19 +2840,19 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32
memset(block, 0, sizeof(block));
while (bytes-file.tell() > sizeof(block))
- {
+ {
file.write(block, sizeof(block));
- }
+ }
S32 remaining = bytes-file.tell();
if (remaining > 0)
- {
+ {
file.write(block, remaining);
}
}
}
}
- }
+}
LLMeshLODHandler::~LLMeshLODHandler()
{
@@ -2843,8 +2878,9 @@ void LLMeshLODHandler::processFailure(LLCore::HttpStatus status)
gMeshRepo.mThread->mUnavailableQ.push(LLMeshRepoThread::LODRequest(mMeshParams, mLOD));
}
-void LLMeshLODHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size)
- {
+void LLMeshLODHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
+ U8 * data, S32 data_size)
+{
if ((! MESH_LOD_PROCESS_FAILED) && gMeshRepo.mThread->lodReceived(mMeshParams, mLOD, data, data_size))
{
//good fetch from sim, write to VFS for caching
@@ -2860,7 +2896,7 @@ void LLMeshLODHandler::processData(LLCore::BufferArray * body, U8 * data, S32 da
LLMeshRepository::sCacheBytesWritten += size;
++LLMeshRepository::sCacheWrites;
}
- }
+ }
else
{
LL_WARNS(LOG_MESH) << "Error during mesh LOD processing. ID: " << mMeshParams.getSculptID()
@@ -2872,12 +2908,12 @@ void LLMeshLODHandler::processData(LLCore::BufferArray * body, U8 * data, S32 da
}
LLMeshSkinInfoHandler::~LLMeshSkinInfoHandler()
- {
- llassert(mProcessed);
- }
+{
+ llassert(mProcessed);
+}
void LLMeshSkinInfoHandler::processFailure(LLCore::HttpStatus status)
- {
+{
LL_WARNS(LOG_MESH) << "Error during mesh skin info handling. ID: " << mMeshID
<< ", Reason: " << status.toString()
<< " (" << status.toTerseString() << "). Not retrying."
@@ -2885,10 +2921,11 @@ void LLMeshSkinInfoHandler::processFailure(LLCore::HttpStatus status)
// *TODO: Mark mesh unavailable on error. For now, simply leave
// request unfulfilled rather than retry forever.
- }
+}
-void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size)
- {
+void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
+ U8 * data, S32 data_size)
+{
if ((! MESH_SKIN_INFO_PROCESS_FAILED) && gMeshRepo.mThread->skinInfoReceived(mMeshID, data, data_size))
{
//good fetch from sim, write to VFS for caching
@@ -2916,20 +2953,21 @@ void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * body, U8 * data, S
LLMeshDecompositionHandler::~LLMeshDecompositionHandler()
{
- llassert(mProcessed);
+ llassert(mProcessed);
}
void LLMeshDecompositionHandler::processFailure(LLCore::HttpStatus status)
- {
+{
LL_WARNS(LOG_MESH) << "Error during mesh decomposition handling. ID: " << mMeshID
<< ", Reason: " << status.toString()
<< " (" << status.toTerseString() << "). Not retrying."
<< LL_ENDL;
// *TODO: Mark mesh unavailable on error. For now, simply leave
// request unfulfilled rather than retry forever.
- }
+}
-void LLMeshDecompositionHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size)
+void LLMeshDecompositionHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
+ U8 * data, S32 data_size)
{
if ((! MESH_DECOMP_PROCESS_FAILED) && gMeshRepo.mThread->decompositionReceived(mMeshID, data, data_size))
{
@@ -2946,34 +2984,35 @@ void LLMeshDecompositionHandler::processData(LLCore::BufferArray * body, U8 * da
file.seek(offset);
file.write(data, size);
}
- }
- else
- {
+ }
+ else
+ {
LL_WARNS(LOG_MESH) << "Error during mesh decomposition processing. ID: " << mMeshID
<< ", Unknown reason. Not retrying."
<< LL_ENDL;
// *TODO: Mark mesh unavailable on error
- }
}
+}
LLMeshPhysicsShapeHandler::~LLMeshPhysicsShapeHandler()
- {
- llassert(mProcessed);
- }
+{
+ llassert(mProcessed);
+}
void LLMeshPhysicsShapeHandler::processFailure(LLCore::HttpStatus status)
- {
+{
LL_WARNS(LOG_MESH) << "Error during mesh physics shape handling. ID: " << mMeshID
<< ", Reason: " << status.toString()
<< " (" << status.toTerseString() << "). Not retrying."
<< LL_ENDL;
// *TODO: Mark mesh unavailable on error
- }
+}
-void LLMeshPhysicsShapeHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size)
- {
+void LLMeshPhysicsShapeHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
+ U8 * data, S32 data_size)
+{
if ((! MESH_PHYS_SHAPE_PROCESS_FAILED) && gMeshRepo.mThread->physicsShapeReceived(mMeshID, data, data_size))
- {
+ {
// good fetch from sim, write to VFS for caching
LLVFile file(gVFS, mMeshID, LLAssetType::AT_MESH, LLVFile::WRITE);
@@ -2981,13 +3020,13 @@ void LLMeshPhysicsShapeHandler::processData(LLCore::BufferArray * body, U8 * dat
S32 size = mRequestedBytes;
if (file.getSize() >= offset+size)
- {
+ {
LLMeshRepository::sCacheBytesWritten += size;
++LLMeshRepository::sCacheWrites;
file.seek(offset);
file.write(data, size);
- }
}
+ }
else
{
LL_WARNS(LOG_MESH) << "Error during mesh physics shape processing. ID: " << mMeshID
@@ -3187,7 +3226,7 @@ void LLMeshRepository::notifyLoadedMeshes()
if (1 == mGetMeshVersion)
{
// Legacy GetMesh operation with high connection concurrency
- LLMeshRepoThread::sMaxConcurrentRequests = gSavedSettings.getU32("MeshMaxConcurrentRequests");
+ LLMeshRepoThread::sMaxConcurrentRequests = gSavedSettings.getU32("MeshMaxConcurrentRequests");
LLMeshRepoThread::sRequestHighWater = llclamp(2 * S32(LLMeshRepoThread::sMaxConcurrentRequests),
REQUEST_HIGH_WATER_MIN,
REQUEST_HIGH_WATER_MAX);
@@ -3198,9 +3237,15 @@ void LLMeshRepository::notifyLoadedMeshes()
else
{
// GetMesh2 operation with keepalives, etc. With pipelining,
- // we'll increase this.
+ // we'll increase this. See llappcorehttp and llcorehttp for
+ // discussion on connection strategies.
+ LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp());
+ S32 scale(app_core_http.isPipelined(LLAppCoreHttp::AP_MESH2)
+ ? (2 * LLAppCoreHttp::PIPELINING_DEPTH)
+ : 5);
+
LLMeshRepoThread::sMaxConcurrentRequests = gSavedSettings.getU32("Mesh2MaxConcurrentRequests");
- LLMeshRepoThread::sRequestHighWater = llclamp(5 * S32(LLMeshRepoThread::sMaxConcurrentRequests),
+ LLMeshRepoThread::sRequestHighWater = llclamp(scale * S32(LLMeshRepoThread::sMaxConcurrentRequests),
REQUEST2_HIGH_WATER_MIN,
REQUEST2_HIGH_WATER_MAX);
LLMeshRepoThread::sRequestLowWater = llclamp(LLMeshRepoThread::sRequestHighWater / 2,
@@ -3300,18 +3345,18 @@ void LLMeshRepository::notifyLoadedMeshes()
// If we can't get the locks, skip and pick this up later.
++hold_offs;
sMaxLockHoldoffs = llmax(sMaxLockHoldoffs, hold_offs);
- return;
- }
+ return;
+ }
hold_offs = 0;
if (gAgent.getRegion())
{
// Update capability urls
- static std::string region_name("never name a region this");
+ static std::string region_name("never name a region this");
- if (gAgent.getRegion()->getName() != region_name && gAgent.getRegion()->capabilitiesReceived())
- {
- region_name = gAgent.getRegion()->getName();
+ if (gAgent.getRegion()->getName() != region_name && gAgent.getRegion()->capabilitiesReceived())
+ {
+ region_name = gAgent.getRegion()->getName();
const bool use_v1(gSavedSettings.getBOOL("MeshUseGetMesh1"));
const std::string mesh1(gAgent.getRegion()->getCapability("GetMesh"));
const std::string mesh2(gAgent.getRegion()->getCapability("GetMesh2"));
@@ -3322,8 +3367,8 @@ void LLMeshRepository::notifyLoadedMeshes()
<< ", GetMesh: " << mesh1
<< ", using version: " << mGetMeshVersion
<< LL_ENDL;
+ }
}
- }
//popup queued error messages from background threads
while (!mUploadErrorQ.empty())
@@ -3338,46 +3383,46 @@ void LLMeshRepository::notifyLoadedMeshes()
S32 push_count = LLMeshRepoThread::sRequestHighWater - active_count;
if (mPendingRequests.size() > push_count)
- {
+ {
// More requests than the high-water limit allows so
// sort and forward the most important.
- //calculate "score" for pending requests
+ //calculate "score" for pending requests
- //create score map
- std::map<LLUUID, F32> score_map;
+ //create score map
+ std::map<LLUUID, F32> score_map;
- for (U32 i = 0; i < 4; ++i)
- {
- for (mesh_load_map::iterator iter = mLoadingMeshes[i].begin(); iter != mLoadingMeshes[i].end(); ++iter)
+ for (U32 i = 0; i < 4; ++i)
{
- F32 max_score = 0.f;
- for (std::set<LLUUID>::iterator obj_iter = iter->second.begin(); obj_iter != iter->second.end(); ++obj_iter)
+ for (mesh_load_map::iterator iter = mLoadingMeshes[i].begin(); iter != mLoadingMeshes[i].end(); ++iter)
{
- LLViewerObject* object = gObjectList.findObject(*obj_iter);
-
- if (object)
+ F32 max_score = 0.f;
+ for (std::set<LLUUID>::iterator obj_iter = iter->second.begin(); obj_iter != iter->second.end(); ++obj_iter)
{
- LLDrawable* drawable = object->mDrawable;
- if (drawable)
+ LLViewerObject* object = gObjectList.findObject(*obj_iter);
+
+ if (object)
{
- F32 cur_score = drawable->getRadius()/llmax(drawable->mDistanceWRTCamera, 1.f);
- max_score = llmax(max_score, cur_score);
+ LLDrawable* drawable = object->mDrawable;
+ if (drawable)
+ {
+ F32 cur_score = drawable->getRadius()/llmax(drawable->mDistanceWRTCamera, 1.f);
+ max_score = llmax(max_score, cur_score);
+ }
}
}
- }
- score_map[iter->first.getSculptID()] = max_score;
+ score_map[iter->first.getSculptID()] = max_score;
+ }
}
- }
- //set "score" for pending requests
- for (std::vector<LLMeshRepoThread::LODRequest>::iterator iter = mPendingRequests.begin(); iter != mPendingRequests.end(); ++iter)
- {
- iter->mScore = score_map[iter->mMeshParams.getSculptID()];
- }
+ //set "score" for pending requests
+ for (std::vector<LLMeshRepoThread::LODRequest>::iterator iter = mPendingRequests.begin(); iter != mPendingRequests.end(); ++iter)
+ {
+ iter->mScore = score_map[iter->mMeshParams.getSculptID()];
+ }
- //sort by "score"
+ //sort by "score"
std::partial_sort(mPendingRequests.begin(), mPendingRequests.begin() + push_count,
mPendingRequests.end(), LLMeshRepoThread::CompareScoreGreater());
}
@@ -3588,7 +3633,6 @@ void LLMeshRepository::fetchPhysicsShape(const LLUUID& mesh_id)
}
}
}
-
}
LLModel::Decomposition* LLMeshRepository::getDecomposition(const LLUUID& mesh_id)
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index abdfa89f50..bbc3b85bf0 100755
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -81,20 +81,86 @@ const S32 MAX_PASSWORD = 16;
LLPanelLogin *LLPanelLogin::sInstance = NULL;
BOOL LLPanelLogin::sCapslockDidNotification = FALSE;
-class LLLoginRefreshHandler : public LLCommandHandler
+class LLLoginLocationAutoHandler : public LLCommandHandler
{
public:
// don't allow from external browsers
- LLLoginRefreshHandler() : LLCommandHandler("login_refresh", UNTRUSTED_BLOCK) { }
+ LLLoginLocationAutoHandler() : LLCommandHandler("location_login", UNTRUSTED_BLOCK) { }
bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
{
- LLPanelLogin::loadLoginPage();
+ if ( tokens.size() == 0 || tokens.size() > 4 )
+ return false;
+
+ // unescape is important - uris with spaces are escaped in this code path
+ // (e.g. space -> %20) and the code to log into a region doesn't support that.
+ const std::string region = LLURI::unescape( tokens[0].asString() );
+
+ // just region name as payload
+ if ( tokens.size() == 1 )
+ {
+ // region name only - slurl will end up as center of region
+ LLSLURL slurl(region);
+ LLPanelLogin::autologinToLocation(slurl);
+ }
+ else
+ // region name and x coord as payload
+ if ( tokens.size() == 2 )
+ {
+ // invalid to only specify region and x coordinate
+ // slurl code will revert to same as region only, so do this anyway
+ LLSLURL slurl(region);
+ LLPanelLogin::autologinToLocation(slurl);
+ }
+ else
+ // region name and x/y coord as payload
+ if ( tokens.size() == 3 )
+ {
+ // region and x/y specified - default z to 0
+ F32 xpos;
+ std::istringstream codec(tokens[1].asString());
+ codec >> xpos;
+
+ F32 ypos;
+ codec.clear();
+ codec.str(tokens[2].asString());
+ codec >> ypos;
+
+ const LLVector3 location(xpos, ypos, 0.0f);
+ LLSLURL slurl(region, location);
+
+ LLPanelLogin::autologinToLocation(slurl);
+ }
+ else
+ // region name and x/y/z coord as payload
+ if ( tokens.size() == 4 )
+ {
+ // region and x/y/z specified - ok
+ F32 xpos;
+ std::istringstream codec(tokens[1].asString());
+ codec >> xpos;
+
+ F32 ypos;
+ codec.clear();
+ codec.str(tokens[2].asString());
+ codec >> ypos;
+
+ F32 zpos;
+ codec.clear();
+ codec.str(tokens[3].asString());
+ codec >> zpos;
+
+ const LLVector3 location(xpos, ypos, zpos);
+ LLSLURL slurl(region, location);
+
+ LLPanelLogin::autologinToLocation(slurl);
+ };
}
return true;
}
};
+LLLoginLocationAutoHandler gLoginLocationAutoHandler;
//---------------------------------------------------------------------------
// Public methods
@@ -103,10 +169,14 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
void (*callback)(S32 option, void* user_data),
void *cb_data)
: LLPanel(),
- mLogoImage(),
mCallback(callback),
mCallbackData(cb_data),
- mListener(new LLPanelLoginListener(this))
+ mListener(new LLPanelLoginListener(this)),
+ mUsernameLength(0),
+ mPasswordLength(0),
+ mLocationLength(0),
+ mFavoriteSelected(false),
+ mShowFavorites(false)
{
setBackgroundVisible(FALSE);
setBackgroundOpaque(TRUE);
@@ -120,28 +190,37 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
login_holder->addChild(this);
}
- // Logo
- mLogoImage = LLUI::getUIImage("startup_logo");
-
+ if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
+ {
+ buildFromFile( "panel_login_first.xml");
+ }
+ else
+ {
buildFromFile( "panel_login.xml");
+ }
reshape(rect.getWidth(), rect.getHeight());
LLLineEditor* password_edit(getChild<LLLineEditor>("password_edit"));
password_edit->setKeystrokeCallback(onPassKey, this);
// STEAM-14: When user presses Enter with this field in focus, initiate login
- password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, this));
+ password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLast, this));
// change z sort of clickable text to be behind buttons
sendChildToBack(getChildView("forgot_password_text"));
- LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo");
+ LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo");
updateLocationSelectorsVisibility(); // separate so that it can be called from preferences
- location_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this));
+ favorites_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this));
+ favorites_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectFavorite, this));
LLComboBox* server_choice_combo = getChild<LLComboBox>("server_combo");
server_choice_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectServer, this));
+ LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit");
+ location_edit->setKeystrokeCallback(boost::bind(&LLPanelLogin::onLocationEditChanged, this, _1), NULL);
+ location_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLocation, this));
+
// Load all of the grids, sorted, and then add a bar and the current grid at the top
server_choice_combo->removeall();
@@ -188,9 +267,12 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed
}
- childSetAction("connect_btn", onClickConnect, this);
+ childSetAction("connect_btn", onClickConnectLast, this);
+ childSetAction("connect_favorite_btn", onClickConnectFavorite, this);
+ childSetAction("connect_location_btn", onClickConnectLocation, this);
- getChild<LLPanel>("links_login_panel")->setDefaultBtn("connect_btn");
+ LLButton* def_btn = getChild<LLButton>("connect_btn");
+ setDefaultBtn(def_btn);
std::string channel = LLVersionInfo::getChannel();
std::string version = llformat("%s (%d)",
@@ -200,8 +282,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLTextBox* forgot_password_text = getChild<LLTextBox>("forgot_password_text");
forgot_password_text->setClickedCallback(onClickForgotPassword, NULL);
- childSetAction("create_new_account_btn", onClickNewAccount, NULL);
-
LLTextBox* need_help_text = getChild<LLTextBox>("login_help");
need_help_text->setClickedCallback(onClickHelp, NULL);
@@ -209,8 +289,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
web_browser->addObserver(this);
- reshapeBrowser();
-
loadLoginPage();
// Show last logged in user favorites in "Start at" combo.
@@ -240,6 +318,8 @@ void LLPanelLogin::addUsersWithFavoritesToUsername()
iter != fav_llsd.endMap(); ++iter)
{
combo->add(iter->first);
+ mUsernameLength = iter->first.length();
+ updateLoginButtons();
}
}
@@ -249,7 +329,7 @@ void LLPanelLogin::addFavoritesToStartLocation()
LLComboBox* combo = getChild<LLComboBox>("start_location_combo");
if (!combo) return;
int num_items = combo->getItemCount();
- for (int i = num_items - 1; i > 2; i--)
+ for (int i = num_items - 1; i > 0; i--)
{
combo->remove(i);
}
@@ -259,6 +339,9 @@ void LLPanelLogin::addFavoritesToStartLocation()
std::replace(user_defined_name.begin(), user_defined_name.end(), '.', ' ');
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml");
std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
+ mUsernameLength = user_defined_name.length();
+ updateLoginButtons();
+
LLSD fav_llsd;
llifstream file;
file.open(filename);
@@ -268,6 +351,7 @@ void LLPanelLogin::addFavoritesToStartLocation()
if (!file.is_open()) return;
}
LLSDSerialize::fromXML(fav_llsd, file);
+
for (LLSD::map_const_iterator iter = fav_llsd.beginMap();
iter != fav_llsd.endMap(); ++iter)
{
@@ -291,6 +375,7 @@ void LLPanelLogin::addFavoritesToStartLocation()
std::string value = (*iter1)["slurl"].asString();
if(label != "" && value != "")
{
+ mShowFavorites = true;
combo->add(label, value);
}
}
@@ -298,21 +383,6 @@ void LLPanelLogin::addFavoritesToStartLocation()
}
}
-// force the size to be correct (XML doesn't seem to be sufficient to do this)
-// (with some padding so the other login screen doesn't show through)
-void LLPanelLogin::reshapeBrowser()
-{
- LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
- LLRect rect = gViewerWindow->getWindowRectScaled();
- LLRect html_rect;
- html_rect.setCenterAndSize(
- rect.getCenterX() - 2, rect.getCenterY() + 40,
- rect.getWidth() + 6, rect.getHeight() - 78 );
- web_browser->setRect( html_rect );
- web_browser->reshape( html_rect.getWidth(), html_rect.getHeight(), TRUE );
- reshape( rect.getWidth(), rect.getHeight(), 1 );
-}
-
LLPanelLogin::~LLPanelLogin()
{
LLPanelLogin::sInstance = NULL;
@@ -323,50 +393,6 @@ LLPanelLogin::~LLPanelLogin()
}
// virtual
-void LLPanelLogin::draw()
-{
- gGL.pushMatrix();
- {
- F32 image_aspect = 1.333333f;
- F32 view_aspect = (F32)getRect().getWidth() / (F32)getRect().getHeight();
- // stretch image to maintain aspect ratio
- if (image_aspect > view_aspect)
- {
- gGL.translatef(-0.5f * (image_aspect / view_aspect - 1.f) * getRect().getWidth(), 0.f, 0.f);
- gGL.scalef(image_aspect / view_aspect, 1.f, 1.f);
- }
-
- S32 width = getRect().getWidth();
- S32 height = getRect().getHeight();
-
- if (getChild<LLView>("login_widgets")->getVisible())
- {
- // draw a background box in black
- gl_rect_2d( 0, height - 264, width, 264, LLColor4::black );
- // draw the bottom part of the background image
- // just the blue background to the native client UI
- mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight());
- };
- }
- gGL.popMatrix();
-
- LLPanel::draw();
-}
-
-// virtual
-BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask)
-{
- if ( KEY_F1 == key )
- {
- LLViewerHelp* vhelp = LLViewerHelp::getInstance();
- vhelp->showTopic(vhelp->f1HelpTopic());
- return TRUE;
- }
-
- return LLPanel::handleKeyHere(key, mask);
-}
-
-// virtual
void LLPanelLogin::setFocus(BOOL b)
{
if(b != hasFocus())
@@ -429,10 +455,10 @@ void LLPanelLogin::showLoginWidgets()
// It seems to be part of the defunct? reg-in-client project.
sInstance->getChildView("login_widgets")->setVisible( true);
LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
- sInstance->reshapeBrowser();
+
// *TODO: Append all the usual login parameters, like first_login=Y etc.
std::string splash_screen_url = LLGridManager::getInstance()->getLoginPage();
- web_browser->navigateTo( splash_screen_url, HTTP_CONTENT_TEXT_HTML );
+ web_browser->navigateTo( splash_screen_url, "text/html" );
LLUICtrl* username_combo = sInstance->getChild<LLUICtrl>("username_combo");
username_combo->setFocus(TRUE);
}
@@ -511,9 +537,11 @@ void LLPanelLogin::setFields(LLPointer<LLCredential> credential,
// This is a MD5 hex digest of a password.
// We don't actually use the password input field,
// fill it with MAX_PASSWORD characters so we get a
- // nice row of asterixes.
+ // nice row of asterisks.
const std::string filler("123456789!123456");
- sInstance->getChild<LLUICtrl>("password_edit")->setValue(std::string("123456789!123456"));
+ sInstance->getChild<LLUICtrl>("password_edit")->setValue(filler);
+ sInstance->mPasswordLength = filler.length();
+ sInstance->updateLoginButtons();
}
else
{
@@ -646,11 +674,12 @@ void LLPanelLogin::updateLocationSelectorsVisibility()
{
if (sInstance)
{
- BOOL show_start = gSavedSettings.getBOOL("ShowStartLocation");
- sInstance->getChild<LLLayoutPanel>("start_location_panel")->setVisible(show_start);
-
BOOL show_server = gSavedSettings.getBOOL("ForceShowGrid");
- sInstance->getChild<LLLayoutPanel>("grid_panel")->setVisible(show_server);
+ LLComboBox* server_combo = sInstance->getChild<LLComboBox>("server_combo");
+ if ( server_combo )
+ {
+ server_combo->setVisible(show_server);
+ }
}
}
@@ -662,6 +691,7 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
LL_DEBUGS("AppInit")<<new_start_slurl.asString()<<LL_ENDL;
LLComboBox* location_combo = sInstance->getChild<LLComboBox>("start_location_combo");
+ LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit");
/*
* Determine whether or not the new_start_slurl modifies the grid.
*
@@ -691,7 +721,12 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
updateServer(); // to change the links and splash screen
}
- location_combo->setTextEntry(new_start_slurl.getLocationString());
+ if ( new_start_slurl.getLocationString().length() )
+ {
+ location_edit->setValue(new_start_slurl.getLocationString());
+ sInstance->mLocationLength = new_start_slurl.getLocationString().length();
+ sInstance->updateLoginButtons();
+ }
}
else
{
@@ -704,16 +739,12 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
break;
case LLSLURL::HOME_LOCATION:
- location_combo->setCurrentByIndex(1); // home location
- break;
-
- case LLSLURL::LAST_LOCATION:
- location_combo->setCurrentByIndex(0); // last location
+ //location_combo->setCurrentByIndex(0); // home location
break;
default:
LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL;
- location_combo->setCurrentByIndex(1); // home location
+ //location_combo->setCurrentByIndex(0); // home location
break;
}
}
@@ -724,6 +755,19 @@ void LLPanelLogin::setLocation(const LLSLURL& slurl)
LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above
}
+void LLPanelLogin::autologinToLocation(const LLSLURL& slurl)
+{
+ LL_DEBUGS("AppInit")<<"automatically logging into Location "<<slurl.asString()<<LL_ENDL;
+ LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above
+
+ if ( LLPanelLogin::sInstance != NULL )
+ {
+ void* unused_parameter = 0;
+ LLPanelLogin::sInstance->onClickConnect(unused_parameter);
+ }
+}
+
+
// static
void LLPanelLogin::closePanel()
{
@@ -761,6 +805,13 @@ void LLPanelLogin::loadLoginPage()
LL_DEBUGS("AppInit") << "login_page: " << login_page << LL_ENDL;
+ // allow users (testers really) to specify a different login content URL
+ std::string force_login_url = gSavedSettings.getString("ForceLoginURL");
+ if ( force_login_url.length() > 0 )
+ {
+ login_page = LLURI(force_login_url);
+ }
+
// Language
params["lang"] = LLUI::getLanguage();
@@ -785,6 +836,9 @@ void LLPanelLogin::loadLoginPage()
// sourceid
params["sourceid"] = gSavedSettings.getString("sourceid");
+ // login page (web) content version
+ params["login_content_version"] = gSavedSettings.getString("LoginContentVersion");
+
// Make an LLURI with this augmented info
LLURI login_uri(LLURI::buildHTTP(login_page.authority(),
login_page.path(),
@@ -796,7 +850,7 @@ void LLPanelLogin::loadLoginPage()
if (web_browser->getCurrentNavUrl() != login_uri.asString())
{
LL_DEBUGS("AppInit") << "loading: " << login_uri << LL_ENDL;
- web_browser->navigateTo( login_uri.asString(), HTTP_CONTENT_TEXT_HTML );
+ web_browser->navigateTo( login_uri.asString(), "text/html" );
}
}
@@ -807,6 +861,32 @@ void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev
//---------------------------------------------------------------------------
// Protected methods
//---------------------------------------------------------------------------
+// static
+void LLPanelLogin::onClickConnectLast(void *)
+{
+ std::string location = LLSLURL::SIM_LOCATION_LAST;
+ LLStartUp::setStartSLURL(location);
+
+ void* unused_parameter = 0;
+ LLPanelLogin::sInstance->onClickConnect(unused_parameter);
+}
+
+void LLPanelLogin::onClickConnectFavorite(void *)
+{
+ LLPanelLogin::sInstance->onLocationSLURL();
+
+ void* unused_parameter = 0;
+ LLPanelLogin::sInstance->onClickConnect(unused_parameter);
+}
+
+void LLPanelLogin::onClickConnectLocation(void *)
+{
+ std::string location = sInstance->getChild<LLUICtrl>("location_edit")->getValue().asString();
+ LLStartUp::setStartSLURL(location);
+
+ void* unused_parameter = 0;
+ LLPanelLogin::sInstance->onClickConnect(unused_parameter);
+}
// static
void LLPanelLogin::onClickConnect(void *)
@@ -876,16 +956,6 @@ void LLPanelLogin::onClickConnect(void *)
}
// static
-void LLPanelLogin::onClickNewAccount(void*)
-{
- if (sInstance)
- {
- LLWeb::loadURLExternal(LLTrans::getString("create_account_url"));
- }
-}
-
-
-// static
void LLPanelLogin::onClickVersion(void*)
{
LLFloaterReg::showInstance("sl_about");
@@ -913,13 +983,17 @@ void LLPanelLogin::onClickHelp(void*)
// static
void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data)
{
- LLPanelLogin *This = (LLPanelLogin *) user_data;
- This->mPasswordModified = TRUE;
+ LLPanelLogin *self = (LLPanelLogin *)user_data;
+ self->mPasswordModified = TRUE;
if (gKeyboard->getKeyDown(KEY_CAPSLOCK) && sCapslockDidNotification == FALSE)
{
// *TODO: use another way to notify user about enabled caps lock, see EXT-6858
sCapslockDidNotification = TRUE;
}
+
+ LLLineEditor* password_edit(self->getChild<LLLineEditor>("password_edit"));
+ self->mPasswordLength = password_edit->getText().length();
+ self->updateLoginButtons();
}
@@ -960,6 +1034,64 @@ void LLPanelLogin::updateServer()
}
}
+void LLPanelLogin::updateLoginButtons()
+{
+ LLButton* last_login_btn = getChild<LLButton>("connect_btn");
+ LLButton* loc_btn = getChild<LLButton>("connect_location_btn");
+ LLButton* fav_btn = getChild<LLButton>("connect_favorite_btn");
+
+ // no username or no password - turn all buttons off
+ if ( mUsernameLength == 0 || mPasswordLength == 0 )
+ {
+ last_login_btn->setEnabled(false);
+ loc_btn->setEnabled(false);
+ fav_btn->setEnabled(false);
+ };
+
+ // we have a username and a password
+ if ( mUsernameLength != 0 && mPasswordLength != 0 )
+ {
+ // last login button always enabled for this case
+ last_login_btn->setEnabled(true);
+
+ // double check status of favorites combo (must be items there and one must be selected to enable button)
+ LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo");
+ int num_items = favorites_combo->getItemCount();
+ int selected_index = favorites_combo->getCurrentIndex();
+ if ( num_items > 0 && selected_index >=0 )
+ mFavoriteSelected = true;
+ else
+ mFavoriteSelected = false;
+
+ // only turn on favorites login button if one is selected
+ fav_btn->setEnabled( mFavoriteSelected );
+
+ // only enable location login if there is content there
+ if ( mLocationLength > 0 )
+ loc_btn->setEnabled(true);
+ else
+ loc_btn->setEnabled(false);
+ }
+}
+
+void LLPanelLogin::onLocationEditChanged(LLUICtrl* ctrl)
+{
+ LLLineEditor* self = (LLLineEditor*)ctrl;
+ if (self )
+ {
+ mLocationLength = self->getText().length();
+ updateLoginButtons();
+ }
+}
+
+void LLPanelLogin::onSelectFavorite()
+{
+ // no way to unselect a favorite once it's selected (i think)
+ mFavoriteSelected = true;
+
+ updateLoginButtons();
+}
+
void LLPanelLogin::onSelectServer()
{
// The user twiddled with the grid choice ui.
@@ -1002,6 +1134,7 @@ void LLPanelLogin::onSelectServer()
// the grid specified by the location is not this one, so clear the combo
location_combo->setCurrentByIndex(0); // last location on the new grid
location_combo->setTextEntry(LLStringUtil::null);
+ mFavoriteSelected = true;
}
}
break;
@@ -1018,3 +1151,9 @@ void LLPanelLogin::onLocationSLURL()
LLStartUp::setStartSLURL(location); // calls onUpdateStartSLURL, above
}
+
+// static
+bool LLPanelLogin::getShowFavorites()
+{
+ return gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin");
+}
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index c71cfc3783..aa63ffabfc 100755
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -49,14 +49,8 @@ public:
void *callback_data);
~LLPanelLogin();
- virtual BOOL handleKeyHere(KEY key, MASK mask);
- virtual void draw();
virtual void setFocus( BOOL b );
- // Show the XUI first name, last name, and password widgets. They are
- // hidden on startup for reg-in-client
- static void showLoginWidgets();
-
static void show(const LLRect &rect,
void (*callback)(S32 option, void* user_data),
void* callback_data);
@@ -67,6 +61,7 @@ public:
static BOOL areCredentialFieldsDirty();
static void setLocation(const LLSLURL& slurl);
+ static void autologinToLocation(const LLSLURL& slurl);
/// Call when preferences that control visibility may have changed
static void updateLocationSelectorsVisibility();
@@ -75,6 +70,8 @@ public:
void setSiteIsAlive( bool alive );
+ void showLoginWidgets();
+
static void loadLoginPage();
static void giveFocus();
static void setAlwaysRefresh(bool refresh);
@@ -86,14 +83,21 @@ public:
/// to be called from LLStartUp::setStartSLURL
static void onUpdateStartSLURL(const LLSLURL& new_start_slurl);
+ // called from prefs when initializing panel
+ static bool getShowFavorites();
+
private:
friend class LLPanelLoginListener;
- void reshapeBrowser();
void addFavoritesToStartLocation();
void addUsersWithFavoritesToUsername();
+ void onLocationEditChanged(LLUICtrl* ctrl);
+ void onSelectFavorite();
void onSelectServer();
void onLocationSLURL();
+ static void onClickConnectLast(void*);
+ static void onClickConnectFavorite(void*);
+ static void onClickConnectLocation(void*);
static void onClickConnect(void*);
static void onClickNewAccount(void*);
static void onClickVersion(void*);
@@ -103,16 +107,23 @@ private:
static void updateServerCombo();
private:
- LLPointer<LLUIImage> mLogoImage;
boost::scoped_ptr<LLPanelLoginListener> mListener;
+ void updateLoginButtons();
+
void (*mCallback)(S32 option, void *userdata);
void* mCallbackData;
BOOL mPasswordModified;
+ bool mShowFavorites;
static LLPanelLogin* sInstance;
static BOOL sCapslockDidNotification;
+ bool mFirstLoginThisInstall;
+ bool mFavoriteSelected;
+ unsigned int mUsernameLength;
+ unsigned int mPasswordLength;
+ unsigned int mLocationLength;
};
#endif
diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp
index 1aa7041175..600ebf5914 100644
--- a/indra/newview/llsnapshotlivepreview.cpp
+++ b/indra/newview/llsnapshotlivepreview.cpp
@@ -5,7 +5,7 @@
*
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
* Second Life Viewer Source Code
-* Copyright (C) 2013, Linden Research, Inc.
+* Copyright (C) 2014, 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
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 74df18810c..9da7717b74 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1891,19 +1891,6 @@ bool idle_startup()
display_startup();
- // based on the comments, we've successfully logged in so we can delete the 'forced'
- // URL that the updater set in settings.ini (in a mostly paranoid fashion)
- std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
- if ( nextLoginLocation.length() )
- {
- // clear it
- gSavedSettings.setString( "NextLoginLocation", "" );
-
- // and make sure it's saved
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE );
- LLUIColorTable::instance().saveUserSettings();
- };
-
display_startup();
// JC: Initializing audio requests many sounds for download.
init_audio();
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index d9a874be49..acd4cf2d8d 100755
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -56,13 +56,13 @@
#include "llsdparam.h"
#include "llsdutil.h"
#include "llstartup.h"
-#include "llsdserialize.h"
#include "httprequest.h"
#include "httphandler.h"
#include "httpresponse.h"
#include "bufferarray.h"
#include "bufferstream.h"
+#include "llcorehttputil.h"
#include "llhttpretrypolicy.h"
@@ -241,8 +241,10 @@ LLTrace::EventStatHandle<F64Milliseconds > LLTextureFetch::sCacheReadLatency("te
// Tuning/Parameterization Constants
-static const S32 HTTP_REQUESTS_IN_QUEUE_HIGH_WATER = 40; // Maximum requests to have active in HTTP
-static const S32 HTTP_REQUESTS_IN_QUEUE_LOW_WATER = 20; // Active level at which to refill
+static const S32 HTTP_PIPE_REQUESTS_HIGH_WATER = 100; // Maximum requests to have active in HTTP (pipelined)
+static const S32 HTTP_PIPE_REQUESTS_LOW_WATER = 50; // Active level at which to refill
+static const S32 HTTP_NONPIPE_REQUESTS_HIGH_WATER = 40;
+static const S32 HTTP_NONPIPE_REQUESTS_LOW_WATER = 20;
// BUG-3323/SH-4375
// *NOTE: This is a heuristic value. Texture fetches have a habit of using a
@@ -481,12 +483,12 @@ private:
bool acquireHttpSemaphore()
{
llassert(! mHttpHasResource);
- if (mFetcher->mHttpSemaphore <= 0)
+ if (mFetcher->mHttpSemaphore >= mFetcher->mHttpHighWater)
{
return false;
}
mHttpHasResource = true;
- mFetcher->mHttpSemaphore--;
+ mFetcher->mHttpSemaphore++;
return true;
}
@@ -496,7 +498,8 @@ private:
{
llassert(mHttpHasResource);
mHttpHasResource = false;
- mFetcher->mHttpSemaphore++;
+ mFetcher->mHttpSemaphore--;
+ llassert_always(mFetcher->mHttpSemaphore >= 0);
}
private:
@@ -608,16 +611,16 @@ private:
LLCore::HttpHandle mHttpHandle; // Handle of any active request
LLCore::BufferArray * mHttpBufferArray; // Refcounted pointer to response data
- S32 mHttpPolicyClass;
+ S32 mHttpPolicyClass;
bool mHttpActive; // Active request to http library
- U32 mHttpReplySize, // Actual received data size
- mHttpReplyOffset; // Actual received data offset
+ U32 mHttpReplySize, // Actual received data size
+ mHttpReplyOffset; // Actual received data offset
bool mHttpHasResource; // Counts against Fetcher's mHttpSemaphore
// State history
- U32 mCacheReadCount,
- mCacheWriteCount,
- mResourceWaitCount; // Requests entering WAIT_HTTP_RESOURCE2
+ U32 mCacheReadCount,
+ mCacheWriteCount,
+ mResourceWaitCount; // Requests entering WAIT_HTTP_RESOURCE2
};
//////////////////////////////////////////////////////////////////////////////
@@ -1325,7 +1328,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
}
- static LLCachedControl<bool> use_http(gSavedSettings,"ImagePipelineUseHTTP", true);
+ static LLCachedControl<bool> use_http(gSavedSettings, "ImagePipelineUseHTTP", true);
// if (mHost != LLHost::invalid) get_url = false;
if ( use_http && mCanUseHTTP && mUrl.empty())//get http url.
@@ -1346,20 +1349,20 @@ bool LLTextureFetchWorker::doWork(S32 param)
LL_WARNS(LOG_TXT) << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL;
}
setUrl(http_url + "/?texture_id=" + mID.asString().c_str());
- LL_DEBUGS("Texture") << "Texture URL " << mUrl << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "Texture URL: " << mUrl << LL_ENDL;
mWriteToCacheState = CAN_WRITE ; //because this texture has a fixed texture id.
}
else
{
mCanUseHTTP = false ;
- LL_DEBUGS("Texture") << "Texture not available via HTTP: no URL " << mUrl << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "Texture not available via HTTP: empty URL." << LL_ENDL;
}
}
else
{
// This will happen if not logged in or if a region deoes not have HTTP Texture enabled
//LL_WARNS(LOG_TXT) << "Region not found for host: " << mHost << LL_ENDL;
- LL_DEBUGS("Texture") << "Texture not available via HTTP: no region " << mUrl << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "Texture not available via HTTP: no region " << mUrl << LL_ENDL;
mCanUseHTTP = false;
}
}
@@ -1473,6 +1476,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
if (mState == SEND_HTTP_REQ)
{
+ // Also used in llmeshrepository
+ static LLCachedControl<bool> disable_range_req(gSavedSettings, "HttpRangeRequestsDisable", false);
+
if (! mCanUseHTTP)
{
releaseHttpSemaphore();
@@ -1528,22 +1534,47 @@ bool LLTextureFetchWorker::doWork(S32 param)
mRequestedOffset -= 1;
mRequestedSize += 1;
}
-
mHttpHandle = LLCORE_HTTP_HANDLE_INVALID;
- if (!mUrl.empty())
- {
- mRequestedTimer.reset();
- mLoaded = FALSE;
- mGetStatus = LLCore::HttpStatus();
- mGetReason.clear();
- LL_DEBUGS(LOG_TXT) << "HTTP GET: " << mID << " Offset: " << mRequestedOffset
- << " Bytes: " << mRequestedSize
- << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth
- << LL_ENDL;
- // Will call callbackHttpGet when curl request completes
- // Only server bake images use the returned headers currently, for getting retry-after field.
- LLCore::HttpOptions *options = (mFTType == FTT_SERVER_BAKE) ? mFetcher->mHttpOptionsWithHeaders: mFetcher->mHttpOptions;
+ if (mUrl.empty())
+ {
+ // *FIXME: This should not be reachable except it has become
+ // so after some recent 'work'. Need to track this down
+ // and illuminate the unenlightened.
+ LL_WARNS(LOG_TXT) << "HTTP GET request failed for " << mID
+ << " on empty URL." << LL_ENDL;
+ resetFormattedData();
+ releaseHttpSemaphore();
+ return true; // failed
+ }
+
+ mRequestedTimer.reset();
+ mLoaded = FALSE;
+ mGetStatus = LLCore::HttpStatus();
+ mGetReason.clear();
+ LL_DEBUGS(LOG_TXT) << "HTTP GET: " << mID << " Offset: " << mRequestedOffset
+ << " Bytes: " << mRequestedSize
+ << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth
+ << LL_ENDL;
+
+ // Will call callbackHttpGet when curl request completes
+ // Only server bake images use the returned headers currently, for getting retry-after field.
+ LLCore::HttpOptions *options = (mFTType == FTT_SERVER_BAKE) ? mFetcher->mHttpOptionsWithHeaders: mFetcher->mHttpOptions;
+ if (disable_range_req)
+ {
+ // 'Range:' requests may be disabled in which case all HTTP
+ // texture fetches result in full fetches. This can be used
+ // by people with questionable ISPs or networking gear that
+ // doesn't handle these well.
+ mHttpHandle = mFetcher->mHttpRequest->requestGet(mHttpPolicyClass,
+ mWorkPriority,
+ mUrl,
+ options,
+ mFetcher->mHttpHeaders,
+ this);
+ }
+ else
+ {
mHttpHandle = mFetcher->mHttpRequest->requestGetByteRange(mHttpPolicyClass,
mWorkPriority,
mUrl,
@@ -1557,7 +1588,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
if (LLCORE_HTTP_HANDLE_INVALID == mHttpHandle)
{
- LL_WARNS(LOG_TXT) << "HTTP GET request failed for " << mID << LL_ENDL;
+ LLCore::HttpStatus status(mFetcher->mHttpRequest->getStatus());
+ LL_WARNS(LOG_TXT) << "HTTP GET request failed for " << mID
+ << ", Status: " << status.toTerseString()
+ << " Reason: '" << status.toString() << "'"
+ << LL_ENDL;
resetFormattedData();
releaseHttpSemaphore();
return true; // failed
@@ -1613,10 +1648,6 @@ bool LLTextureFetchWorker::doWork(S32 param)
else if (http_service_unavail == mGetStatus)
{
LL_INFOS_ONCE(LOG_TXT) << "Texture server busy (503): " << mUrl << LL_ENDL;
- LL_INFOS(LOG_TXT) << "503: HTTP GET failed for: " << mUrl
- << " Status: " << mGetStatus.toHex()
- << " Reason: '" << mGetReason << "'"
- << LL_ENDL;
}
else if (http_not_sat == mGetStatus)
{
@@ -1774,7 +1805,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
if (mState == DECODE_IMAGE)
{
- static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled", false);
+ static LLCachedControl<bool> textures_decode_disabled(gSavedSettings, "TextureDecodeDisabled", false);
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
if (textures_decode_disabled)
@@ -2483,9 +2514,9 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mHttpOptions(NULL),
mHttpOptionsWithHeaders(NULL),
mHttpHeaders(NULL),
- mHttpMetricsHeaders(NULL),
mHttpPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID),
- mHttpSemaphore(HTTP_REQUESTS_IN_QUEUE_HIGH_WATER),
+ mHttpMetricsHeaders(NULL),
+ mHttpMetricsPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID),
mTotalCacheReadCount(0U),
mTotalCacheWriteCount(0U),
mTotalResourceWaitCount(0U),
@@ -2497,6 +2528,23 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), U32Bytes(gSavedSettings.getU32("TextureLoggingThreshold")));
+ LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp());
+ mHttpRequest = new LLCore::HttpRequest;
+ mHttpOptions = new LLCore::HttpOptions;
+ mHttpOptionsWithHeaders = new LLCore::HttpOptions;
+ mHttpOptionsWithHeaders->setWantHeaders(true);
+ mHttpHeaders = new LLCore::HttpHeaders;
+ mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_IMAGE_X_J2C);
+ mHttpPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_TEXTURE);
+ mHttpMetricsHeaders = new LLCore::HttpHeaders;
+ mHttpMetricsHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML);
+ mHttpMetricsPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_REPORTING);
+ mHttpHighWater = HTTP_NONPIPE_REQUESTS_HIGH_WATER;
+ mHttpLowWater = HTTP_NONPIPE_REQUESTS_LOW_WATER;
+ mHttpSemaphore = 0;
+
+ // Conditionally construct debugger object after 'this' is
+ // fully initialized.
LLTextureFetchDebugger::sDebuggerEnabled = gSavedSettings.getBOOL("TextureFetchDebuggerEnabled");
if(LLTextureFetchDebugger::isEnabled())
{
@@ -2509,16 +2557,6 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
}
mOriginFetchSource = mFetchSource;
}
-
- mHttpRequest = new LLCore::HttpRequest;
- mHttpOptions = new LLCore::HttpOptions;
- mHttpOptionsWithHeaders = new LLCore::HttpOptions;
- mHttpOptionsWithHeaders->setWantHeaders(true);
- mHttpHeaders = new LLCore::HttpHeaders;
- mHttpHeaders->append("Accept", "image/x-j2c");
- mHttpMetricsHeaders = new LLCore::HttpHeaders;
- mHttpMetricsHeaders->append("Content-Type", "application/llsd+xml");
- mHttpPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_TEXTURE);
}
LLTextureFetch::~LLTextureFetch()
@@ -2990,6 +3028,20 @@ bool LLTextureFetch::runCondition()
// Threads: Ttf
void LLTextureFetch::commonUpdate()
{
+ // Update low/high water levels based on pipelining. We pick
+ // up setting eventually, so the semaphore/request level can
+ // fall outside the [0..HIGH_WATER] range. Expect that.
+ if (LLAppViewer::instance()->getAppCoreHttp().isPipelined(LLAppCoreHttp::AP_TEXTURE))
+ {
+ mHttpHighWater = HTTP_PIPE_REQUESTS_HIGH_WATER;
+ mHttpLowWater = HTTP_PIPE_REQUESTS_LOW_WATER;
+ }
+ else
+ {
+ mHttpHighWater = HTTP_NONPIPE_REQUESTS_HIGH_WATER;
+ mHttpLowWater = HTTP_NONPIPE_REQUESTS_LOW_WATER;
+ }
+
// Release waiters
releaseHttpWaiters();
@@ -3651,8 +3703,16 @@ void LLTextureFetch::releaseHttpWaiters()
{
// Use mHttpSemaphore rather than mHTTPTextureQueue.size()
// to avoid a lock.
- if (mHttpSemaphore < (HTTP_REQUESTS_IN_QUEUE_HIGH_WATER - HTTP_REQUESTS_IN_QUEUE_LOW_WATER))
+ if (mHttpSemaphore >= mHttpLowWater)
return;
+ S32 needed(mHttpHighWater - mHttpSemaphore);
+ if (needed <= 0)
+ {
+ // Would only happen if High/LowWater were changed behind
+ // our back. In that case, defer fill until usage falls within
+ // limits.
+ return;
+ }
// Quickly make a copy of all the LLUIDs. Get off the
// mutex as early as possible.
@@ -3701,10 +3761,10 @@ void LLTextureFetch::releaseHttpWaiters()
tids.clear();
// Sort into priority order, if necessary and only as much as needed
- if (tids2.size() > mHttpSemaphore)
+ if (tids2.size() > needed)
{
LLTextureFetchWorker::Compare compare;
- std::partial_sort(tids2.begin(), tids2.begin() + mHttpSemaphore, tids2.end(), compare);
+ std::partial_sort(tids2.begin(), tids2.begin() + needed, tids2.end(), compare);
}
// Release workers up to the high water mark. Since we aren't
@@ -3968,7 +4028,9 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)
// Update sequence number
if (S32_MAX == ++report_sequence)
+ {
report_sequence = 0;
+ }
reporting_started = true;
// Limit the size of the stats report if necessary.
@@ -3977,18 +4039,15 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)
if (! mCapsURL.empty())
{
- LLCore::BufferArray * ba = new LLCore::BufferArray;
- LLCore::BufferArrayStream bas(ba);
- LLSDSerialize::toXML(sd, bas);
-
- fetcher->getHttpRequest().requestPost(fetcher->getPolicyClass(),
- report_priority,
- mCapsURL,
- ba,
- NULL,
- fetcher->getMetricsHeaders(),
- handler);
- ba->release();
+ // Don't care about handle, this is a fire-and-forget operation.
+ LLCoreHttpUtil::requestPostWithLLSD(&fetcher->getHttpRequest(),
+ fetcher->getMetricsPolicyClass(),
+ report_priority,
+ mCapsURL,
+ sd,
+ NULL,
+ fetcher->getMetricsHeaders(),
+ handler);
LLTextureFetch::svMetricsDataBreak = false;
}
else
@@ -3999,7 +4058,7 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)
// In QA mode, Metrics submode, log the result for ease of testing
if (fetcher->isQAMode())
{
- LL_INFOS("Textures") << ll_pretty_print_sd(sd) << LL_ENDL;
+ LL_INFOS(LOG_TXT) << ll_pretty_print_sd(sd) << LL_ENDL;
}
return true;
@@ -4169,7 +4228,7 @@ void LLTextureFetchDebugger::init()
if (! mHttpHeaders)
{
mHttpHeaders = new LLCore::HttpHeaders;
- mHttpHeaders->append("Accept", "image/x-j2c");
+ mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_IMAGE_X_J2C);
}
}
@@ -4544,7 +4603,7 @@ S32 LLTextureFetchDebugger::fillCurlQueue()
mNbCurlCompleted = mFetchingHistory.size();
return 0;
}
- if (mNbCurlRequests > HTTP_REQUESTS_IN_QUEUE_LOW_WATER)
+ if (mNbCurlRequests > HTTP_NONPIPE_REQUESTS_LOW_WATER)
{
return mNbCurlRequests;
}
@@ -4577,7 +4636,7 @@ S32 LLTextureFetchDebugger::fillCurlQueue()
mFetchingHistory[i].mHttpHandle = handle;
mFetchingHistory[i].mCurlState = FetchEntry::CURL_IN_PROGRESS;
mNbCurlRequests++;
- if (mNbCurlRequests >= HTTP_REQUESTS_IN_QUEUE_HIGH_WATER) // emulate normal pipeline
+ if (mNbCurlRequests >= HTTP_NONPIPE_REQUESTS_HIGH_WATER) // emulate normal pipeline
{
break;
}
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index c4da2e8685..27779a31e0 100755
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -179,6 +179,9 @@ public:
// Threads: T*
LLCore::HttpHeaders * getMetricsHeaders() const { return mHttpMetricsHeaders; }
+ // Threads: T*
+ LLCore::HttpRequest::policy_t getMetricsPolicyClass() const { return mHttpMetricsPolicyClass; }
+
bool isQAMode() const { return mQAMode; }
// ----------------------------------
@@ -354,9 +357,12 @@ private:
LLCore::HttpOptions * mHttpOptions; // Ttf
LLCore::HttpOptions * mHttpOptionsWithHeaders; // Ttf
LLCore::HttpHeaders * mHttpHeaders; // Ttf
- LLCore::HttpHeaders * mHttpMetricsHeaders; // Ttf
LLCore::HttpRequest::policy_t mHttpPolicyClass; // T*
-
+ LLCore::HttpHeaders * mHttpMetricsHeaders; // Ttf
+ LLCore::HttpRequest::policy_t mHttpMetricsPolicyClass; // T*
+ S32 mHttpHighWater; // Ttf
+ S32 mHttpLowWater; // Ttf
+
// We use a resource semaphore to keep HTTP requests in
// WAIT_HTTP_RESOURCE2 if there aren't sufficient slots in the
// transport. This keeps them near where they can be cheaply
@@ -364,7 +370,11 @@ private:
// where it's more expensive to get at them. Requests in either
// SEND_HTTP_REQ or WAIT_HTTP_REQ charge against the semaphore
// and tracking state transitions is critical to liveness.
- LLAtomicS32 mHttpSemaphore; // Ttf + Tmain
+ //
+ // Originally implemented as a traditional semaphore (heading towards
+ // zero), it now is an outstanding request count that is allowed to
+ // exceed the high water level (but not go below zero).
+ LLAtomicS32 mHttpSemaphore; // Ttf
typedef std::set<LLUUID> wait_http_res_queue_t;
wait_http_res_queue_t mHttpWaitResource; // Mfnq
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 4e4c3471be..d364fce45a 100755
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2014, 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
@@ -75,6 +75,10 @@ void no_op_inventory_func(const LLUUID&) {}
void no_op_llsd_func(const LLSD&) {}
void no_op() {}
+static const char * const LOG_INV("Inventory");
+static const char * const LOG_LOCAL("InventoryLocalize");
+static const char * const LOG_NOTECARD("copy_inventory_from_notecard");
+
///----------------------------------------------------------------------------
/// Helper class to store special inventory item names and their localized values.
///----------------------------------------------------------------------------
@@ -189,7 +193,7 @@ public:
*/
bool localizeInventoryObjectName(std::string& object_name)
{
- LL_DEBUGS("InventoryLocalize") << "Searching for localization: " << object_name << LL_ENDL;
+ LL_DEBUGS(LOG_LOCAL) << "Searching for localization: " << object_name << LL_ENDL;
std::map<std::string, std::string>::const_iterator dictionary_iter = mInventoryItemsDict.find(object_name);
@@ -197,7 +201,7 @@ public:
if(found)
{
object_name = dictionary_iter->second;
- LL_DEBUGS("InventoryLocalize") << "Found, new name is: " << object_name << LL_ENDL;
+ LL_DEBUGS(LOG_LOCAL) << "Found, new name is: " << object_name << LL_ENDL;
}
return found;
}
@@ -307,8 +311,8 @@ LLViewerInventoryItem::LLViewerInventoryItem(const LLViewerInventoryItem* other)
copyViewerItem(other);
if (!mIsComplete)
{
- LL_WARNS() << "LLViewerInventoryItem copy constructor for incomplete item"
- << mUUID << LL_ENDL;
+ LL_WARNS(LOG_INV) << "LLViewerInventoryItem copy constructor for incomplete item"
+ << mUUID << LL_ENDL;
}
}
@@ -355,16 +359,16 @@ void LLViewerInventoryItem::updateServer(BOOL is_new) const
{
// *FIX: deal with this better.
// If we're crashing here then the UI is incorrectly enabled.
- LL_ERRS() << "LLViewerInventoryItem::updateServer() - for incomplete item"
- << LL_ENDL;
+ LL_ERRS(LOG_INV) << "LLViewerInventoryItem::updateServer() - for incomplete item"
+ << LL_ENDL;
return;
}
if(gAgent.getID() != mPermissions.getOwner())
{
// *FIX: deal with this better.
- LL_WARNS() << "LLViewerInventoryItem::updateServer() - for unowned item "
- << ll_pretty_print_sd(this->asLLSD())
- << LL_ENDL;
+ LL_WARNS(LOG_INV) << "LLViewerInventoryItem::updateServer() - for unowned item "
+ << ll_pretty_print_sd(this->asLLSD())
+ << LL_ENDL;
return;
}
LLInventoryModel::LLCategoryUpdate up(mParentUUID, is_new ? 1 : 0);
@@ -392,18 +396,18 @@ void LLViewerInventoryItem::fetchFromServer(void) const
// we have to check region. It can be null after region was destroyed. See EXT-245
if (region)
{
- if(gAgent.getID() != mPermissions.getOwner())
- {
+ if (gAgent.getID() != mPermissions.getOwner())
+ {
url = region->getCapability("FetchLib2");
- }
+ }
else
- {
+ {
url = region->getCapability("FetchInventory2");
- }
+ }
}
else
{
- LL_WARNS() << "Agent Region is absent" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Agent Region is absent" << LL_ENDL;
}
if (!url.empty())
@@ -413,7 +417,8 @@ void LLViewerInventoryItem::fetchFromServer(void) const
body["items"][0]["owner_id"] = mPermissions.getOwner();
body["items"][0]["item_id"] = mUUID;
- LLHTTPClient::post(url, body, new LLInventoryModel::fetchInventoryResponder(body));
+ LLInventoryModel::FetchItemHttpHandler * handler(new LLInventoryModel::FetchItemHttpHandler(body));
+ gInventory.requestPost(true, url, body, handler, "Inventory Item");
}
else
{
@@ -649,7 +654,7 @@ bool LLViewerInventoryCategory::fetch()
if((VERSION_UNKNOWN == getVersion())
&& mDescendentsRequested.hasExpired()) //Expired check prevents multiple downloads.
{
- LL_DEBUGS("InventoryFetch") << "Fetching category children: " << mName << ", UUID: " << mUUID << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Fetching category children: " << mName << ", UUID: " << mUUID << LL_ENDL;
const F32 FETCH_TIMER_EXPIRY = 10.0f;
mDescendentsRequested.reset();
mDescendentsRequested.setTimerExpirySec(FETCH_TIMER_EXPIRY);
@@ -674,7 +679,7 @@ bool LLViewerInventoryCategory::fetch()
}
else
{
- LL_WARNS() << "agent region is null" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "agent region is null" << LL_ENDL;
}
if (!url.empty()) //Capability found. Build up LLSD and use it.
{
@@ -682,7 +687,8 @@ bool LLViewerInventoryCategory::fetch()
}
else
{ //Deprecated, but if we don't have a capability, use the old system.
- LL_INFOS() << "FetchInventoryDescendents2 capability not found. Using deprecated UDP message." << LL_ENDL;
+ LL_INFOS(LOG_INV) << "FetchInventoryDescendents2 capability not found. Using deprecated UDP message." << LL_ENDL;
+
LLMessageSystem* msg = gMessageSystem;
msg->newMessage("FetchInventoryDescendents");
msg->nextBlock("AgentData");
@@ -777,8 +783,8 @@ bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp)
}
else
{
- LL_WARNS() << "unknown keyword '" << keyword
- << "' in inventory import category " << mUUID << LL_ENDL;
+ LL_WARNS(LOG_INV) << "unknown keyword '" << keyword
+ << "' in inventory import category " << mUUID << LL_ENDL;
}
}
return true;
@@ -906,7 +912,7 @@ LLInventoryCallbackManager::LLInventoryCallbackManager() :
{
if( sInstance != NULL )
{
- LL_WARNS() << "LLInventoryCallbackManager::LLInventoryCallbackManager: unexpected multiple instances" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "LLInventoryCallbackManager::LLInventoryCallbackManager: unexpected multiple instances" << LL_ENDL;
return;
}
sInstance = this;
@@ -916,7 +922,7 @@ LLInventoryCallbackManager::~LLInventoryCallbackManager()
{
if( sInstance != this )
{
- LL_WARNS() << "LLInventoryCallbackManager::~LLInventoryCallbackManager: unexpected multiple instances" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "LLInventoryCallbackManager::~LLInventoryCallbackManager: unexpected multiple instances" << LL_ENDL;
return;
}
sInstance = NULL;
@@ -1144,7 +1150,7 @@ void link_inventory_object(const LLUUID& category,
{
if (!baseobj)
{
- LL_WARNS() << "Attempt to link to non-existent object" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Attempt to link to non-existent object" << LL_ENDL;
return;
}
@@ -1178,7 +1184,7 @@ void link_inventory_array(const LLUUID& category,
const LLInventoryObject* baseobj = *it;
if (!baseobj)
{
- LL_WARNS() << "attempt to link to unknown object" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "attempt to link to unknown object" << LL_ENDL;
continue;
}
@@ -1187,7 +1193,7 @@ void link_inventory_array(const LLUUID& category,
// Fail if item can be found but is of a type that can't be linked.
// Arguably should fail if the item can't be found too, but that could
// be a larger behavioral change.
- LL_WARNS() << "attempt to link an unlinkable object, type = " << baseobj->getActualType() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "attempt to link an unlinkable object, type = " << baseobj->getActualType() << LL_ENDL;
continue;
}
@@ -1223,7 +1229,7 @@ void link_inventory_array(const LLUUID& category,
}
else
{
- LL_WARNS() << "could not convert object into an item or category: " << baseobj->getUUID() << LL_ENDL;
+ LL_WARNS(LOG_INV) << "could not convert object into an item or category: " << baseobj->getUUID() << LL_ENDL;
continue;
}
}
@@ -1237,10 +1243,10 @@ void link_inventory_array(const LLUUID& category,
links.append(link);
#ifndef LL_RELEASE_FOR_DOWNLOAD
- LL_DEBUGS("Inventory") << "Linking Object [ name:" << baseobj->getName()
- << " UUID:" << baseobj->getUUID()
- << " ] into Category [ name:" << cat_name
- << " UUID:" << category << " ] " << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Linking Object [ name:" << baseobj->getName()
+ << " UUID:" << baseobj->getUUID()
+ << " ] into Category [ name:" << cat_name
+ << " UUID:" << category << " ] " << LL_ENDL;
#endif
}
@@ -1331,7 +1337,7 @@ void update_inventory_item(
if (!ais_ran)
{
LLPointer<LLViewerInventoryItem> obj = gInventory.getItem(item_id);
- LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << (update_item ? update_item->getName() : "(NOT FOUND)") << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (update_item ? update_item->getName() : "(NOT FOUND)") << LL_ENDL;
if(obj)
{
LLMessageSystem* msg = gMessageSystem;
@@ -1373,7 +1379,7 @@ void update_inventory_item(
if (!ais_ran)
{
LLPointer<LLViewerInventoryItem> obj = gInventory.getItem(item_id);
- LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL;
if(obj)
{
LLPointer<LLViewerInventoryItem> new_item(new LLViewerInventoryItem);
@@ -1408,7 +1414,7 @@ void update_inventory_category(
LLPointer<LLInventoryCallback> cb)
{
LLPointer<LLViewerInventoryCategory> obj = gInventory.getCategory(cat_id);
- LL_DEBUGS("Inventory") << "cat_id: [" << cat_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "cat_id: [" << cat_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL;
if(obj)
{
if (LLFolderType::lookupIsProtectedType(obj->getPreferredType()))
@@ -1471,7 +1477,7 @@ void remove_inventory_item(
}
else
{
- LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << "(NOT FOUND)" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << "(NOT FOUND)" << LL_ENDL;
}
}
@@ -1482,7 +1488,7 @@ void remove_inventory_item(
if(obj)
{
const LLUUID item_id(obj->getUUID());
- LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << obj->getName() << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << obj->getName() << LL_ENDL;
if (AISCommand::isAPIAvailable())
{
LLPointer<AISCommand> cmd_ptr = new RemoveItemCommand(item_id, cb);
@@ -1511,7 +1517,7 @@ void remove_inventory_item(
else
{
// *TODO: Clean up callback?
- LL_WARNS() << "remove_inventory_item called for invalid or nonexistent item." << LL_ENDL;
+ LL_WARNS(LOG_INV) << "remove_inventory_item called for invalid or nonexistent item." << LL_ENDL;
}
}
@@ -1529,7 +1535,7 @@ public:
LLInventoryModel::EHasChildren children = gInventory.categoryHasChildren(mID);
if(children != LLInventoryModel::CHILDREN_NO)
{
- LL_WARNS() << "remove descendents failed, cannot remove category " << LL_ENDL;
+ LL_WARNS(LOG_INV) << "remove descendents failed, cannot remove category " << LL_ENDL;
}
else
{
@@ -1545,7 +1551,7 @@ void remove_inventory_category(
const LLUUID& cat_id,
LLPointer<LLInventoryCallback> cb)
{
- LL_DEBUGS("Inventory") << "cat_id: [" << cat_id << "] " << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "cat_id: [" << cat_id << "] " << LL_ENDL;
LLPointer<LLViewerInventoryCategory> obj = gInventory.getCategory(cat_id);
if(obj)
{
@@ -1566,7 +1572,7 @@ void remove_inventory_category(
LLInventoryModel::EHasChildren children = gInventory.categoryHasChildren(cat_id);
if(children != LLInventoryModel::CHILDREN_NO)
{
- LL_DEBUGS("Inventory") << "Will purge descendents first before deleting category " << cat_id << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "Will purge descendents first before deleting category " << cat_id << LL_ENDL;
LLPointer<LLInventoryCallback> wrap_cb = new LLRemoveCategoryOnDestroy(cat_id, cb);
purge_descendents_of(cat_id, wrap_cb);
return;
@@ -1592,7 +1598,7 @@ void remove_inventory_category(
}
else
{
- LL_WARNS() << "remove_inventory_category called for invalid or nonexistent item " << cat_id << LL_ENDL;
+ LL_WARNS(LOG_INV) << "remove_inventory_category called for invalid or nonexistent item " << cat_id << LL_ENDL;
}
}
@@ -1620,7 +1626,7 @@ void purge_descendents_of(const LLUUID& id, LLPointer<LLInventoryCallback> cb)
LLInventoryModel::EHasChildren children = gInventory.categoryHasChildren(id);
if(children == LLInventoryModel::CHILDREN_NO)
{
- LL_DEBUGS("Inventory") << "No descendents to purge for " << id << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "No descendents to purge for " << id << LL_ENDL;
return;
}
LLPointer<LLViewerInventoryCategory> cat = gInventory.getCategory(id);
@@ -1629,8 +1635,8 @@ void purge_descendents_of(const LLUUID& id, LLPointer<LLInventoryCallback> cb)
if (LLClipboard::instance().hasContents() && LLClipboard::instance().isCutMode())
{
// Something on the clipboard is in "cut mode" and needs to be preserved
- LL_DEBUGS("Inventory") << "purge_descendents_of clipboard case " << cat->getName()
- << " iterate and purge non hidden items" << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "purge_descendents_of clipboard case " << cat->getName()
+ << " iterate and purge non hidden items" << LL_ENDL;
LLInventoryModel::cat_array_t* categories;
LLInventoryModel::item_array_t* items;
// Get the list of direct descendants in tha categoy passed as argument
@@ -1665,7 +1671,7 @@ void purge_descendents_of(const LLUUID& id, LLPointer<LLInventoryCallback> cb)
else // no cap
{
// Fast purge
- LL_DEBUGS("Inventory") << "purge_descendents_of fast case " << cat->getName() << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "purge_descendents_of fast case " << cat->getName() << LL_ENDL;
// send it upstream
LLMessageSystem* msg = gMessageSystem;
@@ -1708,9 +1714,9 @@ void copy_inventory_from_notecard(const LLUUID& destination_id,
{
if (NULL == src)
{
- LL_WARNS("copy_inventory_from_notecard") << "Null pointer to item was passed for object_id "
- << object_id << " and notecard_inv_id "
- << notecard_inv_id << LL_ENDL;
+ LL_WARNS(LOG_NOTECARD) << "Null pointer to item was passed for object_id "
+ << object_id << " and notecard_inv_id "
+ << notecard_inv_id << LL_ENDL;
return;
}
@@ -1730,9 +1736,9 @@ void copy_inventory_from_notecard(const LLUUID& destination_id,
if (! viewer_region)
{
- LL_WARNS("copy_inventory_from_notecard") << "Can't find region from object_id "
- << object_id << " or gAgent"
- << LL_ENDL;
+ LL_WARNS(LOG_NOTECARD) << "Can't find region from object_id "
+ << object_id << " or gAgent"
+ << LL_ENDL;
return;
}
@@ -1740,9 +1746,9 @@ void copy_inventory_from_notecard(const LLUUID& destination_id,
std::string url = viewer_region->getCapability("CopyInventoryFromNotecard");
if (url.empty())
{
- LL_WARNS("copy_inventory_from_notecard") << "There is no 'CopyInventoryFromNotecard' capability"
- << " for region: " << viewer_region->getName()
- << LL_ENDL;
+ LL_WARNS(LOG_NOTECARD) << "There is no 'CopyInventoryFromNotecard' capability"
+ << " for region: " << viewer_region->getName()
+ << LL_ENDL;
return;
}
@@ -1816,15 +1822,15 @@ void slam_inventory_folder(const LLUUID& folder_id,
{
if (AISCommand::isAPIAvailable())
{
- LL_DEBUGS("Avatar") << "using AISv3 to slam folder, id " << folder_id
- << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "using AISv3 to slam folder, id " << folder_id
+ << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
LLPointer<AISCommand> cmd_ptr = new SlamFolderCommand(folder_id, contents, cb);
cmd_ptr->run_command();
}
else // no cap
{
- LL_DEBUGS("Avatar") << "using item-by-item calls to slam folder, id " << folder_id
- << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "using item-by-item calls to slam folder, id " << folder_id
+ << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
for (LLSD::array_const_iterator it = contents.beginArray();
it != contents.endArray();
++it)
@@ -1926,7 +1932,7 @@ void menu_create_inventory_item(LLInventoryPanel* panel, LLFolderBridge *bridge,
}
else
{
- LL_WARNS() << "Can't create unrecognized type " << type_name << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Can't create unrecognized type " << type_name << LL_ENDL;
}
}
panel->getRootFolder()->setNeedsAutoRename(TRUE);
@@ -2161,7 +2167,7 @@ LLViewerInventoryItem *LLViewerInventoryItem::getLinkedItem() const
LLViewerInventoryItem *linked_item = gInventory.getItem(mAssetUUID);
if (linked_item && linked_item->getIsLinkType())
{
- LL_WARNS() << "Warning: Accessing link to link" << LL_ENDL;
+ LL_WARNS(LOG_INV) << "Warning: Accessing link to link" << LL_ENDL;
return NULL;
}
return linked_item;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 38aaff9279..3abeba4b43 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2014, 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
@@ -7216,7 +7216,7 @@ class LLAdvancedClickRenderProfile: public view_listener_t
}
};
-void gpu_benchmark();
+F32 gpu_benchmark();
class LLAdvancedClickRenderBenchmark: public view_listener_t
{
@@ -8287,7 +8287,7 @@ class LLWorldEnableEnvSettings : public view_listener_t
}
else
{
- llwarns << "Unknown item" << llendl;
+ LL_WARNS() << "Unknown time-of-day item: " << tod << LL_ENDL;
}
}
return result;
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 46698b3949..1f10d966d5 100755
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -489,6 +489,11 @@ with the same filename but different name
<texture name="PushButton_Selected_Press" file_name="widgets/PushButton_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Selected_Disabled" file_name="widgets/PushButton_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="PushButton_Login" file_name="widgets/PushButton_Login.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="PushButton_Login_Over" file_name="widgets/PushButton_Login_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="PushButton_Login_Pressed" file_name="widgets/PushButton_Login_Pressed.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+
+
<texture name="RadioButton_Press" file_name="widgets/RadioButton_Press.png" preload="true" />
<texture name="RadioButton_On_Press" file_name="widgets/RadioButton_On_Press.png" preload="true" />
<texture name="RadioButton_Off" file_name="widgets/RadioButton_Off.png" preload="true" />
@@ -577,6 +582,11 @@ with the same filename but different name
<texture name="startup_logo" file_name="windows/startup_logo.png" preload="true" />
+ <texture name="login_sl_logo" file_name="windows/login_sl_logo.png" preload="true" />
+ <texture name="login_sl_logo_small" file_name="windows/login_sl_logo_small.png" preload="true" />
+ <texture name="first_login_image_left" file_name="windows/first_login_image_left.png" preload="true" />
+ <texture name="first_login_image_right" file_name="windows/first_login_image_right.png" preload="true" />
+
<texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" />
<texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="false" />
<texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="false" />
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login.png b/indra/newview/skins/default/textures/widgets/PushButton_Login.png
new file mode 100644
index 0000000000..6f8b5a0770
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/PushButton_Login.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png b/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png
new file mode 100644
index 0000000000..e9e8af13d4
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png b/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png
new file mode 100644
index 0000000000..4a9f1052b3
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/first_login_image_left.png b/indra/newview/skins/default/textures/windows/first_login_image_left.png
new file mode 100644
index 0000000000..b405a88245
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/first_login_image_left.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/first_login_image_right.png b/indra/newview/skins/default/textures/windows/first_login_image_right.png
new file mode 100644
index 0000000000..22a6dd8a53
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/first_login_image_right.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/login_sl_logo.png b/indra/newview/skins/default/textures/windows/login_sl_logo.png
new file mode 100644
index 0000000000..9810d00237
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/login_sl_logo.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/login_sl_logo_small.png b/indra/newview/skins/default/textures/windows/login_sl_logo_small.png
new file mode 100644
index 0000000000..0a245442d5
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/login_sl_logo_small.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/de/floater_big_preview.xml b/indra/newview/skins/default/xui/de/floater_big_preview.xml
new file mode 100644
index 0000000000..c5ce56d1d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="VORSCHAU"/>
diff --git a/indra/newview/skins/default/xui/de/floater_facebook.xml b/indra/newview/skins/default/xui/de/floater_facebook.xml
new file mode 100644
index 0000000000..25b11536eb
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="AUF FACEBOOK POSTEN">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="STATUS" name="panel_facebook_status"/>
+ <panel label="FOTO" name="panel_facebook_photo"/>
+ <panel label="EINCHECKEN" name="panel_facebook_place"/>
+ <panel label="FREUNDE" name="panel_facebook_friends"/>
+ <panel label="KONTO" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Fehler
+ </text>
+ <text name="connection_loading_text">
+ Laden...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_flickr.xml b/indra/newview/skins/default/xui/de/floater_flickr.xml
new file mode 100644
index 0000000000..b50fa19ec8
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="AUF FLICKR HOCHLADEN">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="FOTO" name="panel_flickr_photo"/>
+ <panel label="KONTO" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Fehler
+ </text>
+ <text name="connection_loading_text">
+ Laden...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_perms_default.xml b/indra/newview/skins/default/xui/de/floater_perms_default.xml
new file mode 100644
index 0000000000..6d6c89172d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="STANDARD-ERSTELLUNGSBERECHTIGUNGEN">
+ <panel label="Standardberechtigungen" name="default permissions"/>
+ <button label="OK" label_selected="OK" name="ok"/>
+ <button label="Abbrechen" label_selected="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
index e37e298478..34cb3d1cc2 100755
--- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
@@ -45,7 +45,7 @@ Objekt:
<combo_box.item label="Alter &gt; Erwachsener Einwohner in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Alter &gt; Minderjähriger Einwohner außerhalb Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Angriff &gt; Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Angriff &gt; Sichere Region" name="Assault__Safe_area"/>
+ <combo_box.item label="Angriff &gt; Anschießen, Schubsen oder Anrempeln eines anderen Einwohners in einer sicheren Gegend" name="Assault__Safe_area"/>
<combo_box.item label="Angriff &gt; Sandbox für Waffentest" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Handel &gt; Produkt nicht geliefert oder Dienstleistung nicht erbracht" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="Offenlegung &gt; Informationen aus realer Welt" name="Disclosure__Real_world_information"/>
@@ -59,22 +59,22 @@ Objekt:
<combo_box.item label="Betrug &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Betrug &gt; Land" name="Fraud__Land"/>
<combo_box.item label="Betrug &gt; Schneeballsystem oder Kettenbrief" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="Betrug &gt; US$" name="Fraud__US$"/>
+ <combo_box.item label="Betrug &gt; L$ oder US$" name="Fraud__US$"/>
<combo_box.item label="Belästigung &gt; Werbefarmen / visueller Spam" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="Belästigung &gt; Diffamieren von Einzelpersonen/Gruppen" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="Belästigung &gt; Bewegungseinschränkung" name="Harassment__Impeding_movement"/>
<combo_box.item label="Belästigung &gt; Sexuelle Belästigung" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="Belästigung &gt; Anstiften Dritter zur Missachtung der Nutzungsbedingungen" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Nötigung &gt; Böswilliges Störverhalten" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="Belästigung &gt; Beschimpfung" name="Harassment__Verbal_abuse"/>
<combo_box.item label="Unanständigkeit &gt; Anstößige Inhalte oder Handlungen in der Öffentlichkeit" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="Unanständigkeit &gt; Anstößiger Avatarname" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Unsittliches Verhalten &gt; Für Regionseinstufung unpassende Inhalte/Verhaltensweisen" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in moderater Region" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="Urheberrechtsverletzung &gt; Entfernen von Inhalten" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="Urheberrechtsverletzung &gt; CopyBot oder Berechtigungs-Exploit" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="Intoleranz" name="Intolerance"/>
<combo_box.item label="Land &gt; Missbrauch der Sandbox-Ressourcen" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Objekte/Texturen" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Objekte oder Texturen" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Partikel" name="Land__Encroachment__Particles"/>
<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Bäume/Pflanzen" name="Land__Encroachment__Trees_plants"/>
<combo_box.item label="Wetten/Glücksspiel" name="Wagering_gambling"/>
diff --git a/indra/newview/skins/default/xui/de/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/de/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..2f9182980b
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="SKRIPTFARBEN">
+ <text name="color_pickers_label">
+ Gewünschte Farben auswählen:
+ </text>
+ <text name="text_label">
+ Text
+ </text>
+ <text name="cursor_label">
+ Cursor
+ </text>
+ <text name="background_label">
+ Hintergrund
+ </text>
+ <text name="datatype_label">
+ Datentypen
+ </text>
+ <text name="event_label">
+ Events
+ </text>
+ <text name="string_literal_label">
+ String-Literale
+ </text>
+ <text name="constant_label">
+ Konstante
+ </text>
+ <text name="flow_control_label">
+ Flusskontrolle
+ </text>
+ <text name="function_label">
+ Funktion
+ </text>
+ <text name="comment_label">
+ Kommentar
+ </text>
+ <script_editor name="Script Preview">
+ /* Ein Beispielskript */
+default
+{
+ state_entry()
+ {
+ // Kommentar
+ string greeting = &quot;Hallo&quot;;
+ llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index b98ee78685..51614f1e8d 100755
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="FOTO-ANZEIGE">
+<floater name="Snapshot" title="SCHNAPPSCHUSS">
<floater.string name="unknown">
unbekannt
</floater.string>
@@ -46,7 +46,6 @@
<text name="file_size_label">
[SIZE] KB
</text>
- <button name="advanced_options" label="AUFNAHME OPTIONEN"/>
<panel name="advanced_options_panel">
<text name="layer_type_label">
Aufnehmen:
@@ -55,12 +54,15 @@
<combo_box.item label="Farben" name="Colors"/>
<combo_box.item label="Tiefe" name="Depth"/>
</combo_box>
- <combo_box label="Filter" name="filters_combobox">
- <combo_box.item label="Kein Filter" name="NoFilter"/>
- </combo_box>
<check_box label="Benutzeroberfläche" name="ui_check"/>
<check_box label="HUDs" name="hud_check"/>
<check_box label="Standbild (Vollbild)" name="freeze_frame_check"/>
<check_box label="Automatisch aktualisieren" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ Filter:
+ </text>
+ <combo_box label="Filter" name="filters_combobox" tool_tip="Bildfilter">
+ <combo_box.item label="Kein Filter" name="NoFilter"/>
+ </combo_box>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml
index f4a9acddec..993316134a 100755
--- a/indra/newview/skins/default/xui/de/floater_stats.xml
+++ b/indra/newview/skins/default/xui/de/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="Darstellung" name="render">
<stat_bar label="KTris pro Frame" name="ktrisframe"/>
<stat_bar label="KTris pro Sekunden" name="ktrissec"/>
- <stat_bar label="Objektanzahl" name="objs"/>
+ <stat_bar label="Objekte gesamt" name="totalobjs"/>
+ <stat_bar label="Zwischengespeicherte Objekte" name="cachedobjs"/>
<stat_bar label="Neue Objekte" name="newobjs"/>
<stat_bar label="Objektcache-Trefferrate" name="object_cache_hits"/>
<stat_bar label="Durchgeführte Okklusionsabfragen" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 6634a4bd90..7dd5938601 100755
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -72,7 +72,7 @@
<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
<button label="Link" name="link_btn" width="30"/>
<button label="Verknüpfung auflösen" name="unlink_btn" width="126"/>
- <check_box label="" name="checkbox uniform"/>
+ <check_box label="Beide Seiten dehnen" name="checkbox uniform"/>
<text label="Beide Seiten dehnen" name="checkbox uniform label">
Beide Seiten dehnen
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_twitter.xml b/indra/newview/skins/default/xui/de/floater_twitter.xml
new file mode 100644
index 0000000000..a79a5d3cac
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="TWITTER">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="ERSTELLEN" name="panel_twitter_photo"/>
+ <panel label="KONTO" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Fehler
+ </text>
+ <text name="connection_loading_text">
+ Laden...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/menu_conversation.xml b/indra/newview/skins/default/xui/de/menu_conversation.xml
index bdfa66c23b..0a7995198e 100644
--- a/indra/newview/skins/default/xui/de/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/de/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="Alle stummschalten" name="ModerateVoiceMute"/>
<menu_item_call label="Stummschaltung für alle aufheben" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="Mitglied verbannen" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml
index de2b409678..dbf78f406b 100755
--- a/indra/newview/skins/default/xui/de/menu_object.xml
+++ b/indra/newview/skins/default/xui/de/menu_object.xml
@@ -21,6 +21,7 @@
<context_menu label="Verwalten" name="Remove">
<menu_item_call label="Missbrauch melden" name="Report Abuse..."/>
<menu_item_call label="Ignorieren" name="Object Mute"/>
+ <menu_item_call label="Freischalten" name="Object Unmute"/>
<menu_item_call label="Zurückgeben" name="Return..."/>
</context_menu>
<menu_item_call label="Nehmen" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 8e15e128a6..c9fad9c9d3 100755
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -36,6 +36,9 @@
<menu_item_check label="Chat in der Nähe..." name="Nearby Chat"/>
<menu_item_check label="Sprechen" name="Speak"/>
<menu_item_check label="Unterhaltungsprotokoll..." name="Conversation Log..."/>
+ <menu_item_call label="Facebook..." name="Facebook"/>
+ <menu_item_call label="Twitter..." name="Twitter"/>
+ <menu_item_call label="Flickr..." name="Flickr"/>
<menu label="Voice-Morphing" name="VoiceMorphing">
<menu_item_check label="Kein Voice-Morphing" name="NoVoiceMorphing"/>
<menu_item_check label="Vorschau..." name="Preview"/>
@@ -150,7 +153,8 @@
<menu_item_check label="An Raster ausrichten" name="Snap to Grid"/>
<menu_item_call label="Objekt-XY an Raster ausrichten" name="Snap Object XY to Grid"/>
<menu_item_call label="Auswahl für Raster verwenden" name="Use Selection for Grid"/>
- <menu_item_call label="Rasteroptionen" name="Grid Options"/>
+ <menu_item_call label="Rasteroptionen..." name="Grid Options"/>
+ <menu_item_call label="Standard-Berechtigungen einstellen..." name="Set default permissions"/>
</menu>
<menu label="Hochladen" name="Upload">
<menu_item_call label="Bild ([COST] L$)..." name="Upload Image"/>
@@ -158,7 +162,6 @@
<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Modell..." name="Upload Model"/>
<menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/>
- <menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>
</menu>
<menu_item_call label="Rückgängig" name="Undo"/>
<menu_item_call label="Wiederholen" name="Redo"/>
@@ -304,6 +307,7 @@
<menu_item_check label="Detailstufeninfos" name="LOD Info"/>
<menu_item_check label="Konstruktionswarteschlange" name="Build Queue"/>
<menu_item_check label="Lichter" name="Lights"/>
+ <menu_item_check label="Partikel" name="Particles"/>
<menu_item_check label="Gelenkpunkte" name="Collision Skeleton"/>
<menu_item_check label="Gelenke" name="Joints"/>
<menu_item_check label="Raycast" name="Raycast"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index c728402e89..2fa5005d15 100755
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -216,6 +216,22 @@ Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
+
+ *ACHTUNG*
+Jedem Mitglied in einer Rolle mit dieser Fähigkeit werden auch die Fähigkeiten „[ACTION_NAME_2]“ und „[ACTION_NAME_3]“ zugewiesen.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ Sie sind im Begriff, die Fähigkeit „[ACTION_NAME]“ aus der Rolle „[ROLE_NAME]“ zu entfernen.
+
+ *ACHTUNG*
+Durch Entfernen dieser Fähigkeit werden die Fähigkeiten „[ACTION_NAME_2]“ und „[ACTION_NAME_3]“ NICHT entfernt.
+
+Wenn diese Rolle nicht mehr diese Fähigkeiten haben soll, deaktivieren Sie sie bitte umgehend.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
Sie sind dabei, [AVATAR_NAME] aus der Gruppe hinauszuwerfen.
<usetemplate ignoretext="Hinauswerfen eines einzelnen Gruppenmitglieds bestätigen" name="okcancelignore" notext="Abbrechen" yestext="Hinauswerfen"/>
@@ -1591,6 +1607,14 @@ Diese Gruppe verlassen?
Sie können die Gruppe nicht verlassen, da Sie der letzte Besitzer der Gruppe sind. Weisen Sie die Besitzerrolle zuerst einem anderen Mitglied zu.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
+ <notification name="GroupDepartError">
+ Kann Gruppe nicht verlassen: [reason].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GroupDepart">
+ Sie haben die Gruppe „[group_name]“ verlassen.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
@@ -2474,6 +2498,12 @@ Wählen Sie eine kleinere Landfläche.
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4050,6 +4080,10 @@ Wählen Sie eine kleinere Landfläche aus.
Dateien können nicht verschoben werden. Vorheriger Pfad wurde wiederhergestellt.
<usetemplate ignoretext="Dateien können nicht verschoben werden. Vorheriger Pfad wurde wiederhergestellt." name="okignore" yestext="OK"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ Die Standardberechtigungen konnten aus folgendem Grund nicht gespeichert werden: [REASON]. Versuchen Sie später, die Standardberechtigungen einzustellen.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
Chatverlaufsdatei ist noch mit vorheriger Operation beschäftigt. Versuchen Sie es in ein paar Minuten noch einmal oder chatten Sie mit einer anderen Person.
<usetemplate name="okbutton" yestext="OK"/>
diff --git a/indra/newview/skins/default/xui/de/panel_facebook_account.xml b/indra/newview/skins/default/xui/de/panel_facebook_account.xml
new file mode 100644
index 0000000000..caa5f55186
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="Sie sind mit Facebook verbunden als:"/>
+ <string name="facebook_disconnected" value="Nicht mit Facebook verbunden"/>
+ <text name="account_caption_label">
+ Nicht mit Facebook verbunden.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Verbinden..." name="connect_btn"/>
+ <button label="Trennen" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Anweisungen zum Posten auf Facebook]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_facebook_friends.xml b/indra/newview/skins/default/xui/de/panel_facebook_friends.xml
new file mode 100644
index 0000000000..9712d681c7
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="Sie haben gegenwärtig keine Facebook-Freunde, die gleichzeitig Einwohner von Second Life sind. Laden Sie Ihre Facebook-Freunde ein, Second Life beizutreten!"/>
+ <string name="facebook_friends_no_connected" value="Sie sind gegenwärtig nicht mit Facebook verbunden. Um eine Verbindung herzustellen und diese Funktion zu aktivieren, gehen Sie zur Registerkarte „Konto“."/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="SL-Freunde"/>
+ <accordion_tab name="tab_suggested_friends" title="Diese Personen als SL-Freunde hinzufügen"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ Nicht mit Facebook verbunden.
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_facebook_photo.xml b/indra/newview/skins/default/xui/de/panel_facebook_photo.xml
new file mode 100644
index 0000000000..a1aabcd29c
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Bildauflösung">
+ <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1200x630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Bildfilter">
+ <combo_box.item label="Kein Filter" name="NoFilter"/>
+ </combo_box>
+ <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/>
+ <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/>
+ <text name="caption_label">
+ Kommentar (optional):
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Posten" name="post_photo_btn"/>
+ <button label="Abbrechen" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_facebook_place.xml b/indra/newview/skins/default/xui/de/panel_facebook_place.xml
new file mode 100644
index 0000000000..0f556565b4
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ Details zu Ihrem aktuellen Standort:
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="Posten" name="post_place_btn"/>
+ <button label="Abbrechen" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_facebook_status.xml b/indra/newview/skins/default/xui/de/panel_facebook_status.xml
new file mode 100644
index 0000000000..437243c360
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ Was machst du gerade?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="Posten" name="post_status_btn"/>
+ <button label="Abbrechen" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_flickr_account.xml b/indra/newview/skins/default/xui/de/panel_flickr_account.xml
new file mode 100644
index 0000000000..416761f0da
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="Sie sind mit Flickr verbunden als:"/>
+ <string name="flickr_disconnected" value="Nicht mit Flickr verbunden"/>
+ <text name="account_caption_label">
+ Nicht mit Flickr verbunden.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Verbinden..." name="connect_btn"/>
+ <button label="Trennen" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Anweisungen zum Posten auf Flickr]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_flickr_photo.xml b/indra/newview/skins/default/xui/de/panel_flickr_photo.xml
new file mode 100644
index 0000000000..1627f405c5
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_flickr_photo.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Bildauflösung">
+ <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Bildfilter">
+ <combo_box.item label="Kein Filter" name="NoFilter"/>
+ </combo_box>
+ <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/>
+ <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/>
+ <text name="title_label">
+ Titel:
+ </text>
+ <text name="description_label">
+ Beschreibung:
+ </text>
+ <check_box initial_value="true" label="SL-Standort am Ende der Beschreibung hinzufügen" name="add_location_cb"/>
+ <text name="tags_label">
+ Markierungen:
+ </text>
+ <text name="tags_help_label">
+ Markierungen durch Leerzeichen trennen.
+Für Markierungen, die aus mehreren Wörtern bestehen, &quot;&quot; verwenden.
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Flickr-Inhaltseinstufung">
+ <combo_box.item label="Sichere Flickr-Einstufung" name="SafeRating"/>
+ <combo_box.item label="Moderate Flickr-Einstufung" name="ModerateRating"/>
+ <combo_box.item label="Beschränkte Flickr-Einstufung" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Hochladen" name="post_photo_btn"/>
+ <button label="Abbrechen" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/de/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..fb1d89f08a
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_group_bulk_ban.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Einwohner verbannen" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (wird geladen...)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ Gruppenverbannungen nicht gesendet: zu viele Einwohner ausgewählt. Gruppenverbannungen sind auf 100 pro Anfrage beschränkt.
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ Gruppenverbannung nicht gesendet: Sie sind nicht zur Verwaltung der Bannliste berechtigt.
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ Gruppenverbannung nicht gesendet: Ihre Gruppe hat die Höchstzahl möglicher Verbannungen erreicht.
+ </panel.string>
+ <panel.string name="partial_ban">
+ Einige Gruppenverbannungen wurden nicht gesendet:
+[REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ Gruppenverbannungen nicht gesendet:
+[REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - Folgende(r) Einwohner ist/sind bereits verbannt: [RESIDENTS]
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - Höchstzahl Verbannungen erreicht; folgende Agenten wurden nicht verbannt: [RESIDENTS].
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - Sie können sich nicht selbst aus einer Gruppe verbannen.
+ </panel.string>
+ <text name="help_text">
+ Sie können mehrere Einwohner auswählen, um sie aus Ihrer Gruppe zu verbannen. Klicken Sie hierzu auf „Einwohnerliste öffnen“.
+ </text>
+ <button label="Einwohnerliste öffnen" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Namen."/>
+ <button label="Ausgewählte Einwohner aus Liste entfernen" name="remove_button" tool_tip="Dadurch werden die oben ausgewählten Einwohner aus der Bannliste entfernt."/>
+ <button label="Einwohner verbannen" name="ban_button"/>
+ <button label="Abbrechen" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ Gruppenverbannung
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml
index c32d2fe4bf..d67eaa662c 100755
--- a/indra/newview/skins/default/xui/de/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_invite.xml
@@ -22,7 +22,7 @@
Wählen Sie eine Rolle aus:
</text>
<combo_box name="role_name" tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen."/>
- <button label="Einladungen versenden" name="ok_button"/>
+ <button label="Einladungen versenden" name="invite_button"/>
<button label="Abbrechen" name="cancel_button"/>
<string name="GroupInvitation">
Gruppeneinladung
diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml
index 20f61817a3..2f3268164c 100755
--- a/indra/newview/skins/default/xui/de/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml
@@ -25,13 +25,14 @@ um mehrere Mitglieder auszuwählen.
</name_list>
<button label="Einladen" name="member_invite"/>
<button label="Hinauswerfen" name="member_eject"/>
+ <button label="Mitglied(er) verbannen" name="member_ban"/>
</panel>
<panel label="ROLLEN" name="roles_sub_tab">
<panel.string name="help_text">
Rollen haben einen Titel und umfassen bestimmte
-Fähigkeiten. Mitglieder können mehrere
-Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
-definieren, darunter &apos;Jeder &apos; und &apos;Eigentümer &apos;.
+ Fähigkeiten. Mitglieder können mehrere
+ Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
+ aufweisen, darunter „Jeder“ und „Eigentümer“.
</panel.string>
<panel.string name="cant_delete_role">
Die Rollen „Jeder&quot; und „Eigentuemer&quot; sind besondere Rollen und können nicht gelöscht werden.
@@ -57,13 +58,28 @@ definieren, darunter &apos;Jeder &apos; und &apos;Eigentümer &apos;.
<panel label="FÄHIGKEITEN" name="actions_sub_tab" tool_tip="Sie können eine Beschreibung der Fähigkeit anzeigen und welche Rollen bzw. Mitglieder über diese Fähigkeit verfügen.">
<panel.string name="help_text">
Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
-Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
+ Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
</panel.string>
<filter_editor label="Fähigkeiten filtern" name="filter_input"/>
<scroll_list name="action_list" tool_tip="Eine Fähigkeit auswählen, um mehr Details anzuzeigen.">
<scroll_list.columns label="" name="action"/>
</scroll_list>
</panel>
+ <panel label="VERBANNTE EINWOHNER" name="banlist_sub_tab" tool_tip="Verbannte Einwohner in dieser Gruppe anzeigen.">
+ <panel.string name="help_text">
+ Einwohner auf der Bannliste können nicht der Gruppe beitreten.
+ </panel.string>
+ <panel.string name="ban_count_template">
+ Anzahl Verbannungen: [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="Einwohner" name="name"/>
+ <name_list.columns label="Datum der Verbannung" name="ban_date"/>
+ </name_list>
+ <button label="Einwohner verbannen" name="ban_create" tool_tip="Einwohner Ihrer Gruppe verbannen"/>
+ <button label="Verbannung(en) entfernen" name="ban_delete" tool_tip="Verbannung für bestimmte Einwohner in Ihrer Gruppe aufheben"/>
+ <button name="ban_refresh" tool_tip="Bannliste aktualisieren"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml
index 8cc467185c..816f22178c 100755
--- a/indra/newview/skins/default/xui/de/panel_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php?lang=de
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- ANMELDEN
- </text>
- <text name="username_text">
- Benutzername:
- </text>
- <combo_box name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/>
- <text name="password_text">
- Kennwort:
- </text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- Hier starten:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Mein letzter Standort" name="MyLastLocation"/>
- <combo_box.item label="Mein Zuhause" name="MyHome"/>
- <combo_box.item label="&lt;Region eingeben&gt;" name="Typeregionname"/>
- </combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- Brauchen Sie Hilfe beim Anmelden?
- </text>
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="Benutzername" name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/>
+ <line_editor label="Kennwort" name="password_edit"/>
+ <check_box label="Details speichern" name="remember_check"/>
<text name="forgot_password_text">
- Benutzernamen oder Kennwort vergessen?
+ Kennwort vergessen
</text>
<button label="Anmelden" name="connect_btn"/>
- <check_box label="Kennwort speichern" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- IHR KONTO ERSTELLEN
+ <text name="At_My_Last_Location_Label">
+ bei letztem Ort
</text>
- <button label="Jetzt starten" name="create_new_account_btn"/>
+ <combo_box label="Meine Lieblingsorte" name="start_location_combo">
+ <combo_box.item label="Mein Zuhause" name="MyHome"/>
+ </combo_box>
+ <button label="Anmelden" name="connect_favorite_btn"/>
+ <line_editor label="Ort eingeben" name="location_edit"/>
+ <button label="Anmelden" name="connect_location_btn"/>
+ <combo_box label="Grid auswählen" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_login_first.xml b/indra/newview/skins/default/xui/de/panel_login_first.xml
new file mode 100644
index 0000000000..44637d5159
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php?lang=de
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="Benutzername" name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/>
+ <line_editor label="Kennwort" name="password_edit"/>
+ <button label="Anmelden" name="connect_btn"/>
+ <check_box label="Details speichern" name="remember_check"/>
+ <text name="forgot_password_text">
+ Kennwort vergessen
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ Ihr erster Schritt ist Learning Island. Suchen Sie die Pforte!
+ </text>
+ <text name="image_caption_right">
+ Erkunden Sie dann Social Island und lernen Sie andere Einwohner kennen!
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
index 8a5c175f2f..60e4fb19a7 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="Bei Anmeldung Rasterauswahl anzeigen" name="show_grid_selection_check"/>
<check_box label="Menü „Erweitert“ anzeigen" name="show_advanced_menu_check"/>
<check_box label="Menü „Entwickler“ anzeigen" name="show_develop_menu_check"/>
+ <button label="Standard-Erstellungsberechtigungen" name="default_creation_permissions"/>
</panel>
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 4e453b6969..2587ea0ced 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
@@ -30,14 +30,10 @@
<combo_box.item label="Generell und Moderat" name="Desired_Mature"/>
<combo_box.item label="Generell" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- Startstandort:
+ <check_box label="Lieblingsstandorte auf dem Anmeldebildschirm anzeigen" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (Andere, die Ihren Computer benutzen, sehen sie ebenfalls)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Mein letzter Standort" name="MyLastLocation" tool_tip="Als Standardeinstellung in letztem Standort anmelden."/>
- <combo_box.item label="Mein Zuhause" name="MyHome" tool_tip="Als Standardeinstellung in Zuhauseposition anmelden."/>
- </combo_box>
- <check_box initial_value="true" label="Beim Anmelden anzeigen" name="show_location_checkbox"/>
<text name="name_tags_textbox">
Avatarnamen:
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
index afde50b981..7ac6708321 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
@@ -7,11 +7,11 @@
<text name="cache_size_label_l">
(Standorte, Bilder, Web, Suchverlauf)
</text>
- <check_box label="Zeigen Sie mein Profil Informationen in Suchergebnisse" name="online_searchresults"/>
+ <check_box label="Meine Profilinfos in Suchergebnissen anzeigen" name="online_searchresults"/>
<check_box label="Nur Freunde und Gruppen wissen, dass ich online bin" name="online_visibility"/>
<check_box label="Nur Freunde und Gruppen können mich anrufen oder mir eine IM schicken" name="voice_call_friends_only_check"/>
<check_box label="Mikrofon ausschalten, wenn Anrufe beendet werden" name="auto_disengage_mic_check"/>
- <check_box label="Meine Lieblingslandmarken bei Anmeldung anzeigen (im Dropdown-Menü &#10;„Hier anfangen“)" name="favorites_on_login_check" top_pad="15"/>
+ <check_box label="Meine Lieblingslandmarken bei Anmeldung anzeigen (im Dropdown-Menü „Hier anfangen“)" name="favorites_on_login_check" top_pad="15"/>
<text name="Logs:">
Chatprotokolle:
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml
index d688bedd5c..8975cd40f8 100755
--- a/indra/newview/skins/default/xui/de/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/de/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="Alle Änderungen zurücksetzen" name="Revert All Changes"/>
<menu_item_call label="Aus Datei laden..." name="LoadFromFile"/>
<menu_item_call label="In Datei speichern..." name="SaveToFile"/>
+ <menu_item_call label="Farben..." name="Colors"/>
</menu>
<menu label="Bearbeiten" name="Edit">
<menu_item_call label="Rückgängig" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="Schlüsselwort-Hilfe" name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
Wird geladen...
- </text_editor>
+ </script_editor>
<combo_box label="Einfügen..." name="Insert..."/>
<button label="Speichern" label_selected="Speichern" name="Save_btn"/>
<button label="Bearbeiten..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
index e2ba5bd4db..7ec22adc4c 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
@@ -4,7 +4,13 @@
<button label="Per E-Mail senden" name="save_to_email_btn"/>
<button label="Im Inventar speichern" name="save_to_inventory_btn"/>
<button label="Auf Festplatte speichern" name="save_to_computer_btn"/>
- <button label="Zu Facebook hochladen" name="send_to_facebook_btn"/>
- <button label="Zu Twitter hochladen" name="send_to_twitter_btn"/>
- <button label="Zu Flickr hochladen" name="send_to_flickr_btn"/>
+ <text name="send_to_facebook_textbox">
+ Senden an: [secondlife:/// Facebook]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// Twitter]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml
index 4b57aa69b6..5a402d02a1 100755
--- a/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
<text name="region" value="..."/>
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="Objektinfo anzeigen"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_twitter_account.xml b/indra/newview/skins/default/xui/de/panel_twitter_account.xml
new file mode 100644
index 0000000000..f2cbf3eb55
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="Sie sind mit Twitter verbunden als:"/>
+ <string name="twitter_disconnected" value="Nicht mit Twitter verbunden"/>
+ <text name="account_caption_label">
+ Nicht mit Twitter verbunden.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Verbinden..." name="connect_btn"/>
+ <button label="Trennen" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Anweisungen zum Posten auf Twitter]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_twitter_photo.xml b/indra/newview/skins/default/xui/de/panel_twitter_photo.xml
new file mode 100644
index 0000000000..89c4b98ffc
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ Was ist los?
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="SL-Standort hinzufügen" name="add_location_cb"/>
+ <check_box initial_value="true" label="Foto hinzufügen" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Bildauflösung">
+ <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Bildfilter">
+ <combo_box.item label="Kein Filter" name="NoFilter"/>
+ </combo_box>
+ <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/>
+ <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Tweeten" name="post_photo_btn"/>
+ <button label="Abbrechen" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml
index 3e9d406e5f..d834fc57ca 100755
--- a/indra/newview/skins/default/xui/de/role_actions.xml
+++ b/indra/newview/skins/default/xui/de/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen und Entfernen von Mitgliedern sowie den Beitritt ohne Einladung." name="Membership">
<action description="Personen in diese Gruppe einladen" longdescription="Leute in diese Gruppe mit der Schaltfläche „Einladen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ in die Gruppe einladen." name="member invite" value="1"/>
<action description="Mitglieder aus dieser Gruppe werfen" longdescription="Leute aus dieser Gruppe mit der Schaltfläche „Hinauswerfen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ aus der Gruppe werfen. Ein Eigentümer kann jeden, außer einen anderen Eigentümer, ausschließen. Wenn Sie kein Eigentümer sind, können Sie ein Mitglied nur dann aus der Gruppe werfen, wenn es die Rolle Jeder inne hat, jedoch KEINE andere Rolle. Um Mitgliedern Rollen entziehen zu können, müssen Sie über die Fähigkeit „Mitgliedern Rollen entziehen“ verfügen." name="member eject" value="2"/>
+ <action description="Bannliste verwalten" longdescription="Gruppenmitglied das Verbannen/Zulassen von Einwohnern aus dieser Gruppe gestatten." name="allow ban" value="51"/>
<action description="„Registrierung offen“ aktivieren/deaktivieren und „Beitrittsgebühr“ ändern." longdescription="„Registrierung offen“ aktivieren, um damit neue Mitglieder ohne Einladung beitreten können, und die „Beitrittsgebühr“ im Abschnitt „Allgemein“ ändern." name="member options" value="3"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen, Entfernen und Ändern von Gruppenrollen, das Zuweisen und Entfernen von Rollen und das Zuweisen von Fähigkeiten zu Rollen." name="Roles">
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 95657ba14e..d4ce7b3fc3 100755
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -335,6 +335,75 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="TestingDisconnect">
Verbindungsabbruch wird getestet
</string>
+ <string name="SocialFlickrConnecting">
+ Verbinden mit Flickr...
+ </string>
+ <string name="SocialFlickrPosting">
+ Posten...
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Flickr-Verbindung wird getrennt...
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ Problem beim Verbinden mit Flickr
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ Problem beim Posten auf Flickr
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ Problem beim Trennen der Flickr-Verbindung
+ </string>
+ <string name="SocialTwitterConnecting">
+ Verbinden mit Twitter...
+ </string>
+ <string name="SocialTwitterPosting">
+ Posten...
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ Twitter-Verbindung wird getrennt...
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ Problem beim Verbinden mit Twitter
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ Problem beim Posten auf Twitter
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ Problem beim Trennen der Twitter-Verbindung
+ </string>
+ <string name="BlackAndWhite">
+ Schwarzweiß
+ </string>
+ <string name="Colors1970">
+ Farben der Siebziger Jahre
+ </string>
+ <string name="Intense">
+ Intensiv
+ </string>
+ <string name="Newspaper">
+ Zeitungspapier
+ </string>
+ <string name="Sepia">
+ Sepia
+ </string>
+ <string name="Spotlight">
+ Spotlight
+ </string>
+ <string name="Video">
+ Video
+ </string>
+ <string name="Autocontrast">
+ Autokontrast
+ </string>
+ <string name="LensFlare">
+ Blendenfleck
+ </string>
+ <string name="Miniature">
+ Miniatur
+ </string>
+ <string name="Toycamera">
+ Spielzeugkamera
+ </string>
<string name="TooltipPerson">
Person
</string>
@@ -886,6 +955,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="use_texture">
Textur verwenden
</string>
+ <string name="manip_hint1">
+ Zum Einrasten Mauscursor
+ </string>
+ <string name="manip_hint2">
+ über Lineal bewegen
+ </string>
<string name="texture_loading">
Wird geladen...
</string>
@@ -4083,6 +4158,12 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="share_alert">
Objekte aus dem Inventar hier her ziehen
</string>
+ <string name="flickr_post_success">
+ Sie haben auf Flickr gepostet.
+ </string>
+ <string name="twitter_post_success">
+ Sie haben auf Twitter gepostet.
+ </string>
<string name="no_session_message">
(IM-Session nicht vorhanden)
</string>
@@ -4539,6 +4620,9 @@ Missbrauchsbericht
<string name="LocalEstimateUSD">
[AMOUNT] US$
</string>
+ <string name="Group Ban">
+ Gruppenverbannung
+ </string>
<string name="Membership">
Mitgliedschaft
</string>
@@ -4961,6 +5045,12 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_Destinations_Label">
Ziele
</string>
+ <string name="Command_Facebook_Label">
+ Facebook
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
Gesten
</string>
@@ -5009,6 +5099,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_Speak_Label">
Sprechen
</string>
+ <string name="Command_Twitter_Label">
+ Twitter
+ </string>
<string name="Command_View_Label">
Kamerasteuerungen
</string>
@@ -5039,6 +5132,12 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_Destinations_Tooltip">
Ziele von Interesse
</string>
+ <string name="Command_Facebook_Tooltip">
+ Auf Facebook posten
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ Auf Flickr hochladen
+ </string>
<string name="Command_Gestures_Tooltip">
Gesten für Ihren Avatar
</string>
@@ -5087,6 +5186,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_Speak_Tooltip">
Über Ihr Mikrofon mit Leuten in der Nähe sprechen
</string>
+ <string name="Command_Twitter_Tooltip">
+ Twitter
+ </string>
<string name="Command_View_Tooltip">
Kamerawinkel ändern
</string>
diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml
index c9a6e1c9c3..fbf262441f 100755
--- a/indra/newview/skins/default/xui/en/floater_stats.xml
+++ b/indra/newview/skins/default/xui/en/floater_stats.xml
@@ -59,10 +59,10 @@
<stat_bar name="ktrissec"
label="KTris per Sec"
stat="trianglesdrawnstat"/>
- <stat_bar name="objs"
+ <stat_bar name="totalobjs"
label="Total Objects"
stat="numobjectsstat"/>
- <stat_bar name="objs"
+ <stat_bar name="cachedobjs"
label="Cached Objects"
stat="numactivecachedobjects"/>
<stat_bar name="newobjs"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index a87027a113..9885e37cea 100755
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -68,6 +68,7 @@
left="0"
follows="all"
height="500"
+ layout="topleft"
mouse_opaque="false"
name="login_panel_holder"
width="1024"/>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 134ca75018..a258a874b0 100755
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -1,265 +1,214 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- follows="all"
- height="600"
- layout="topleft"
- left="0"
- name="panel_login"
- focus_root="true"
- top="600"
- width="1130">
- <string name="reg_in_client_url" translate="false">
- http://secondlife.eniac15.lindenlab.com/reg-in-client/
- </string>
+ follows="all"
+ height="768"
+ layout="topleft"
+ name="panel_login"
+ focus_root="true"
+ background_visible="true"
+ bg_opaque_color="0.16 0.16 0.16 1"
+ background_opaque="true"
+ width="1024">
<panel.string
- name="forgot_password_url">
+ name="forgot_password_url">
http://secondlife.com/account/request.php
</panel.string>
- <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
- <web_browser
- tab_stop="false"
- trusted_content="true"
- bg_opaque_color="Black"
- border_visible="false"
- bottom="600"
- follows="all"
- left="0"
- name="login_html"
- start_url=""
- top="0"
- height="600"
- width="996"/>
<layout_stack
- animate="false"
- clip="false"
- follows="left|bottom|right"
- name="login_widgets"
- layout="topleft"
- orientation="horizontal"
- top="519"
- width="1130"
- height="80">
- <layout_panel
- auto_resize="false"
- follows="left|bottom"
- name="login"
- layout="topleft"
- width="310"
- min_width="310"
- height="80">
- <text
- follows="left|bottom"
- font="SansSerif"
- font.style="BOLD"
- font.size="Large"
- height="16"
- name="log_in_text"
- top="8"
- left="15"
- width="150">
- LOG IN
- </text>
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- height="16"
- name="username_text"
- top="35"
- left="15"
- width="150">
- Username:
- </text>
- <!-- STEAM-14: Turn off commit_on_focus_lost so if user presses Enter
- with focus in this combo_box, we can use commit action to initiate
- login -->
- <combo_box
- allow_text_entry="true"
- follows="left|bottom"
- height="22"
- left_delta="0"
- max_chars="128"
- commit_on_focus_lost="false"
- combo_editor.prevalidate_callback="ascii"
- tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
- top_pad="0"
- name="username_combo"
- width="178">
-<!-- empirically, displayed width is 150 anyway?!? -->
- <combo_box.combo_button
- visible ="false"/>
- <combo_box.drop_down_button
- visible ="false"/>
- </combo_box>
-<!-- left="175" based on actual "username_combo" width of 150 vs. 178 -->
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- height="16"
- name="password_text"
- top="35"
- left="175"
- width="150">
- Password:
- </text>
- <!-- STEAM-14: Turn off commit_on_focus_lost so if user presses Enter
- with focus in this line_editor, we can use commit action to
- initiate login -->
- <line_editor
- follows="left|bottom"
- height="22"
- max_length_bytes="16"
- name="password_edit"
- is_password="true"
- select_on_focus="true"
- commit_on_focus_lost="false"
- top_pad="0"
- width="135" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="left|bottom"
- name="start_location_panel"
- layout="topleft"
- width="175"
- min_width="175"
- height="80">
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- height="16"
- left="10"
- name="start_location_text"
- top="35"
- width="130">
- Start at:
- </text>
- <combo_box
- allow_text_entry="true"
- control_name="NextLoginLocation"
- follows="left|bottom"
- height="22"
- max_chars="128"
- top_pad="0"
- name="start_location_combo"
- width="165">
- <combo_box.item
- label="My last location"
- name="MyLastLocation"
- value="last" />
- <combo_box.item
- label="My home"
- name="MyHome"
- value="home" />
- <combo_box.item
- label="&lt;Type region name&gt;"
- name="Typeregionname" value="" />
- </combo_box>
- </layout_panel>
+ follows="left|right|top"
+ height="172"
+ min_height="172"
+ left="0"
+ name="ui_stack"
+ orientation="horizontal"
+ top="0"
+ width="1024">
<layout_panel
- auto_resize="false"
- follows="left|bottom"
- name="grid_panel"
- layout="topleft"
- width="145"
- height="80"
- visible="false">
- <combo_box
- allow_text_entry="false"
- font="SansSerifSmall"
- follows="left|right|bottom"
- height="23"
- max_chars="256"
- left="10"
- top="51"
- layout="topleft"
- top_pad="2"
- name="server_combo"
- width="135" />
- </layout_panel>
+ height="172"
+ auto_resize="true"
+ name="ui_elastic_pad_left"
+ width="32" />
<layout_panel
- auto_resize="false"
- follows="left|bottom"
- name="links_login_panel"
- layout="topleft"
- width="290"
- height="80">
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- text_color="EmphasisColor"
- left="10"
- height="16"
- name="login_help"
- top="19"
- width="280">
- Need help logging in?
- </text>
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- text_color="EmphasisColor"
- height="16"
- name="forgot_password_text"
- top="35"
- width="280">
- Forgot your username or password?
- </text>
- <button
- follows="left|bottom"
- top_pad="0"
- height="23"
- image_unselected="PushButton_On"
- image_selected="PushButton_On_Selected"
- label="Log In"
- label_color="White"
- layout="topleft"
- name="connect_btn"
- width="90" />
- <check_box
- control_name="RememberPassword"
- follows="left|bottom"
- font="SansSerifSmall"
- left="110"
- top="56"
- height="16"
- label="Remember password"
- top_pad="3"
- name="remember_check"
- width="145" />
+ auto_resize="false"
+ follows="left|right|top"
+ name="ui_container"
+ width="960"
+ left="0"
+ top="0"
+ height="172">
+ <icon
+ height="73"
+ width="165"
+ image_name="login_sl_logo"
+ left="0"
+ top="25"
+ name="sl_logo_small" />
+ <combo_box
+ left_pad="22"
+ bottom_delta="-7"
+ allow_text_entry="true"
+ follows="left|top"
+ height="32"
+ label="Username"
+ combo_editor.font="SansSerifLarge"
+ max_chars="128"
+ commit_on_focus_lost="false"
+ combo_editor.prevalidate_callback="ascii"
+ tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
+ name="username_combo"
+ width="232">
+ <combo_box.combo_editor
+ text_pad_left="8" />
+ <combo_box.combo_button
+ visible="false" />
+ <combo_box.drop_down_button
+ visible="false" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="32"
+ left_pad="0"
+ max_length_bytes="16"
+ text_pad_left="8"
+ name="password_edit"
+ label="Password"
+ font="SansSerifLarge"
+ is_password="true"
+ select_on_focus="true"
+ commit_on_focus_lost="false"
+ bottom_delta="0"
+ width="200" />
+ <check_box
+ control_name="RememberPassword"
+ follows="left|top"
+ font="SansSerifMedium"
+ left_pad="20"
+ bottom_delta="-14"
+ height="24"
+ label="Remember me"
+ check_button.bottom="3"
+ name="remember_check"
+ width="145" />
+ <text
+ follows="left|top"
+ font="SansSerifMedium"
+ text_color="EmphasisColor"
+ height="16"
+ name="forgot_password_text"
+ left_delta="0"
+ bottom_delta="16"
+ width="200">
+ Forgotten password
+ </text>
+ <button
+ follows="left|top"
+ image_unselected="PushButton_Login"
+ image_pressed="PushButton_Login_Pressed"
+ image_hover="PushButton_Login_Over"
+ label="Log In"
+ label_color="White"
+ font="SansSerifMedium"
+ name="connect_btn"
+ enabled="true"
+ left="0"
+ width="80"
+ height="26"
+ bottom_delta="44" />
+ <text
+ follows="left|top"
+ font="SansSerifLarge"
+ height="24"
+ name="At_My_Last_Location_Label"
+ left_pad="8"
+ bottom_delta="1"
+ width="120">
+ at last location
+ </text>
+ <combo_box
+ control_name="NextLoginLocation"
+ follows="left|top"
+ label="My favorite places"
+ height="26"
+ max_chars="128"
+ combo_editor.font="SansSerifMedium"
+ left_pad="20"
+ bottom_delta="0"
+ name="start_location_combo"
+ width="175"
+ combo_button.scale_image="true">
+ <combo_box.item
+ label="My home"
+ name="MyHome"
+ value="home" />
+ </combo_box>
+ <button
+ follows="left|top"
+ image_unselected="PushButton_Login"
+ image_pressed="PushButton_Login_Pressed"
+ image_hover="PushButton_Login_Over"
+ label="Log In"
+ label_color="White"
+ font="SansSerifMedium"
+ name="connect_favorite_btn"
+ left_pad="8"
+ width="80"
+ enabled="false"
+ height="26"
+ bottom_delta="0" />
+ <line_editor
+ follows="left|top"
+ width="170"
+ height="26"
+ left_pad="40"
+ text_pad_left="8"
+ name="location_edit"
+ label="Type a location"
+ font="SansSerifMedium"
+ select_on_focus="true"
+ commit_on_focus_lost="false"
+ bottom_delta="0" />
+ <button
+ follows="left|top"
+ image_unselected="PushButton_Login"
+ image_pressed="PushButton_Login_Pressed"
+ image_hover="PushButton_Login_Over"
+ label="Log In"
+ enabled="false"
+ label_color="White"
+ font="SansSerifMedium"
+ name="connect_location_btn"
+ left_pad="8"
+ width="80"
+ height="26"
+ bottom_delta="0" />
+ <combo_box
+ allow_text_entry="false"
+ font="SansSerifTiny"
+ follows="left|top"
+ height="26"
+ max_chars="128"
+ label="Select grid"
+ left_pad="40"
+ bottom_delta="0"
+ layout="topleft"
+ top_pad="2"
+ name="server_combo"
+ width="128" />
</layout_panel>
<layout_panel
- tab_stop="false"
- follows="right|bottom"
- name="links"
- width="210"
- min_width="100"
- height="80">
- <text
- follows="right|bottom"
- font="SansSerif"
- font.style="BOLD"
- font.size="Large"
- halign="right"
- height="16"
- name="create_account_text"
- top="8"
- right="-15"
- width="200">
- CREATE YOUR ACCOUNT
- </text>
- <button
- follows="right|bottom"
- top="35"
- right="-15"
- height="23"
- image_unselected="PushButton_On"
- image_selected="PushButton_On_Selected"
- label="Start now"
- label_color="White"
- layout="topleft"
- left_pad="10"
- name="create_new_account_btn"
- width="90" />
- </layout_panel>
+ height="172"
+ auto_resize="true"
+ name="ui_elastic_pad_right"
+ width="32" />
</layout_stack>
+ <web_browser
+ tab_stop="false"
+ trusted_content="true"
+ bg_opaque_color="Black"
+ border_visible="false"
+ follows="all"
+ left="0"
+ name="login_html"
+ start_url=""
+ top="154"
+ height="600"
+ width="1024" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml
new file mode 100644
index 0000000000..84753c55a3
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_login_first.xml
@@ -0,0 +1,265 @@
+<panel
+ follows="all"
+ height="768"
+ layout="topleft"
+ name="panel_login"
+ focus_root="true"
+ background_visible="true"
+ bg_opaque_color="0.16 0.16 0.16 1"
+ background_opaque="true"
+ width="1024">
+ <panel.string
+ name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <layout_stack
+ follows="left|right|top|bottom"
+ width="1024"
+ height="768"
+ left="0"
+ name="logo_stack"
+ orientation="vertical"
+ top="0">
+ <layout_panel
+ height="18"
+ auto_resize="false"
+ name="page_top"
+ width="1024" />
+ <!-- start of logo stack -->
+ <layout_panel
+ height="130"
+ min_height="10"
+ auto_resize="false"
+ name="parent_panel"
+ width="1024">
+ <layout_stack
+ follows="left|right|top|bottom"
+ height="100"
+ left="0"
+ name="logo_stack"
+ orientation="horizontal"
+ top="0"
+ width="1024">
+ <layout_panel
+ height="110"
+ min_height="10"
+ auto_resize="true"
+ name="logo_left"
+ width="300" />
+ <layout_panel
+ auto_resize="false"
+ follows="left|right|top"
+ name="logo_container"
+ width="225"
+ left="0"
+ top="0"
+ height="105">
+ <icon
+ height="94"
+ image_name="login_sl_logo"
+ left="0"
+ name="sl_logo"
+ top="0" />
+ </layout_panel>
+ <layout_panel
+ height="100"
+ name="logo_right"
+ auto_resize="true"
+ width="300" />
+ </layout_stack>
+ </layout_panel>
+ <!-- end of logo stack -->
+ <!-- start of widget stack -->
+ <layout_panel
+ height="100"
+ min_height="10"
+ auto_resize="false"
+ name="parent_panel2"
+ width="1024">
+ <layout_stack
+ follows="left|right|top|bottom"
+ height="80"
+ left="0"
+ name="widget_stack"
+ orientation="horizontal"
+ top="0"
+ width="1024">
+ <layout_panel
+ height="80"
+ min_height="10"
+ auto_resize="true"
+ name="widget_left"
+ width="200" />
+ <layout_panel
+ auto_resize="false"
+ follows="left|right|top"
+ name="widget_container"
+ width="532"
+ left="0"
+ top="0"
+ height="80">
+ <combo_box
+ allow_text_entry="true"
+ follows="left|bottom"
+ height="32"
+ left="0"
+ label="Username"
+ combo_editor.font="SansSerifLarge"
+ max_chars="128"
+ top="0"
+ commit_on_focus_lost="false"
+ combo_editor.prevalidate_callback="ascii"
+ tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
+ name="username_combo"
+ width="232">
+ <combo_box.combo_editor
+ text_pad_left="8" />
+ <combo_box.combo_button
+ visible ="false"/>
+ <combo_box.drop_down_button
+ visible ="false"/>
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ width="200"
+ height="32"
+ left="220"
+ max_length_bytes="16"
+ name="password_edit"
+ label="Password"
+ text_pad_left="8"
+ font="SansSerifLarge"
+ is_password="true"
+ select_on_focus="true"
+ commit_on_focus_lost="false"
+ top="0" />
+ <button
+ follows="left|top"
+ image_unselected="PushButton_Login"
+ image_pressed="PushButton_Login_Pressed"
+ image_hover="PushButton_Login_Over"
+ label="Log In"
+ label_color="White"
+ font="SansSerifLarge"
+ name="connect_btn"
+ left="432"
+ width="100"
+ height="32"
+ top="0" />
+ <check_box
+ control_name="RememberPassword"
+ follows="left|top"
+ font="SansSerifLarge"
+ left="0"
+ top="32"
+ height="24"
+ label="Remember me"
+ check_button.bottom="3"
+ name="remember_check"
+ width="145" />
+ <text
+ follows="left|top"
+ font="SansSerifLarge"
+ text_color="EmphasisColor"
+ height="16"
+ name="forgot_password_text"
+ left="216"
+ top="34"
+ width="200">
+ Forgotten password
+ </text>
+ </layout_panel>
+ <layout_panel
+ height="100"
+ name="widget_right"
+ auto_resize="true"
+ width="200" />
+ </layout_stack>
+ </layout_panel>
+ <!-- end of widget stack -->
+ <!-- start of images stack -->
+ <layout_panel
+ height="500"
+ min_height="10"
+ auto_resize="false"
+ name="parent_panel3"
+ width="1024">
+ <layout_stack
+ follows="left|right|top|bottom"
+ height="500"
+ left="0"
+ name="images_stack"
+ orientation="horizontal"
+ top="0"
+ width="1024">
+ <layout_panel
+ height="500"
+ min_height="10"
+ auto_resize="true"
+ name="images_left"
+ width="96" />
+ <layout_panel
+ auto_resize="false"
+ follows="left|right|top"
+ name="images_container"
+ width="832"
+ left="0"
+ top="0"
+ height="500">
+ <icon
+ height="400"
+ width="400"
+ image_name="first_login_image_left"
+ left="0"
+ name="image_left"
+ top="0" />
+ <icon
+ height="400"
+ width="400"
+ image_name="first_login_image_right"
+ left_pad="32"
+ name="image_right"
+ top="0" />
+ <text
+ follows="left|top"
+ font="SansSerifLarge"
+ text_color="White"
+ height="64"
+ name="image_caption_left"
+ left="0"
+ halign="center"
+ top="408"
+ word_wrap="true"
+ width="400">
+ Your first step is Learning Island. Find the exit portal!
+ </text>
+ <text
+ follows="left|top"
+ font="SansSerifLarge"
+ text_color="White"
+ height="64"
+ name="image_caption_right"
+ left="432"
+ halign="center"
+ top="408"
+ word_wrap="true"
+ width="400">
+ Then explore Social Island and meet other new residents!
+ </text>
+ </layout_panel>
+ <layout_panel
+ height="100"
+ name="images_right"
+ auto_resize="true"
+ width="96" />
+ </layout_stack>
+ </layout_panel>
+ <!-- end of images stack -->
+ <layout_panel
+ height="400"
+ min_height="10"
+ auto_resize="true"
+ name="page_bottom"
+ width="1024" />
+ </layout_stack>
+</panel>
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 ea0f7d8593..9da044ab64 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -179,46 +179,29 @@
left_pad="2"
name="rating_icon_adult"
width="18"/>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="15"
- layout="topleft"
- left="30"
- name="start_location_textbox"
- top_pad="8"
- width="394">
- Start location:
- </text>
- <combo_box
- control_name="LoginLocation"
- follows="left|top"
- height="23"
- layout="topleft"
- name="start_location_combo"
- left="50"
- width="200">
- <combo_box.item
- label="My Last Location"
- name="MyLastLocation"
- value="last" />
- <combo_box.item
- label="My Home"
- name="MyHome"
- value="home" />
- </combo_box>
- <check_box
- control_name="ShowStartLocation"
- height="16"
- initial_value="true"
- label="Show on login"
- layout="topleft"
- left_pad="5"
- name="show_location_checkbox"
- top_delta="5"
- width="256" />
- <text
+ <check_box
+ control_name="ShowFavoritesOnLogin"
+ enabled="false"
+ height="16"
+ layout="topleft"
+ label="Show favorite locations on login screen"
+ left="30"
+ name="favorites_on_login_check"
+ top_pad="10"
+ width="350" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left="52"
+ name="favorites_check_extra_text"
+ top_pad="0"
+ width="400">
+ (Others using this computer will also see them)
+ </text>
+ <text
type="string"
length="1"
follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index d7ffb73dda..323da2be38 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -74,17 +74,6 @@
name="auto_disengage_mic_check"
top_pad="10"
width="350" />
- <check_box
- control_name="ShowFavoritesOnLogin"
- enabled="false"
- height="16"
- layout="topleft"
- label="Show my Favorite Landmarks at Login (via &apos;Start At&apos; drop-down menu)"
- left="30"
- name="favorites_on_login_check"
- top_pad="10"
- width="350" />
-
<button
follows="left|bottom"
height="23"
diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
index 82d620d1e6..65f9a143e9 100755
--- a/indra/newview/skins/default/xui/en/widgets/combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
@@ -7,7 +7,7 @@
<combo_box.combo_button name="Combobox Button"
hover_glow_amount="0.15"
font="SansSerifSmall"
- scale_image="false"
+ scale_image="true"
image_unselected="ComboButton_Off"
image_selected="ComboButton_Selected"
image_disabled="ComboButton_Disabled" />
diff --git a/indra/newview/skins/default/xui/es/floater_big_preview.xml b/indra/newview/skins/default/xui/es/floater_big_preview.xml
new file mode 100644
index 0000000000..b112243d7a
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="VISTA PREVIA"/>
diff --git a/indra/newview/skins/default/xui/es/floater_facebook.xml b/indra/newview/skins/default/xui/es/floater_facebook.xml
new file mode 100644
index 0000000000..3b0e05b193
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="PUBLICAR EN FACEBOOK">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="ESTADO" name="panel_facebook_status"/>
+ <panel label="FOTO" name="panel_facebook_photo"/>
+ <panel label="ESTOY AQUÍ" name="panel_facebook_place"/>
+ <panel label="AMIGOS" name="panel_facebook_friends"/>
+ <panel label="CUENTA" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Error
+ </text>
+ <text name="connection_loading_text">
+ Cargando...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_flickr.xml b/indra/newview/skins/default/xui/es/floater_flickr.xml
new file mode 100644
index 0000000000..7f95d948fe
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="SUBIR A FLICKR">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="FOTO" name="panel_flickr_photo"/>
+ <panel label="CUENTA" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Error
+ </text>
+ <text name="connection_loading_text">
+ Cargando...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_perms_default.xml b/indra/newview/skins/default/xui/es/floater_perms_default.xml
new file mode 100644
index 0000000000..71c3f239ea
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="PERMISOS DE CREACIÓN PREDETERMINADOS">
+ <panel label="Permisos predeterminados" name="default permissions"/>
+ <button label="OK" label_selected="OK" name="ok"/>
+ <button label="Cancelar" label_selected="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml
index dc5d430375..fe37f125b8 100755
--- a/indra/newview/skins/default/xui/es/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/es/floater_report_abuse.xml
@@ -44,7 +44,7 @@
<combo_box.item label="Edad &gt; Residente adulto en Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Edad &gt; Residente menor de edad fuera de Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Ataque &gt; Sandbox de combate / Zona no segura" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Ataque &gt; Zona segura" name="Assault__Safe_area"/>
+ <combo_box.item label="Atacar &gt; Disparar o empujar a otro residente en una zona segura" name="Assault__Safe_area"/>
<combo_box.item label="Ataque &gt; Sandbox de prueba de armas" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Comercio &gt; Error en la entrega de productos o servicios" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="Indiscreción &gt; Información del mundo real" name="Disclosure__Real_world_information"/>
@@ -58,25 +58,25 @@
<combo_box.item label="Fraude &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Fraude &gt; Terreno" name="Fraud__Land"/>
<combo_box.item label="Fraude &gt; Esquemas piramidales o cadenas de cartas" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="Fraude &gt; US$" name="Fraud__US$"/>
+ <combo_box.item label="Fraude &gt; L$ o USD" name="Fraud__US$"/>
<combo_box.item label="Acoso &gt; Anuncios múltiples / Spam visual" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="Acoso &gt; Difamación de individuos o grupos" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="Acoso &gt; Impedir el movimiento" name="Harassment__Impeding_movement"/>
<combo_box.item label="Acoso &gt; Acoso sexual" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="Acoso &gt; Incitar a, o pedir, que otros violen las Condiciones del Servicio" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Acosar &gt; Molestar deliberadamente a alguien concreto" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="Acoso &gt; Abuso verbal" name="Harassment__Verbal_abuse"/>
<combo_box.item label="Indecencia &gt; En general, contenido o conducta ofensivos" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="Indecencia &gt; Nombre inapropiado del avatar" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="Indecencia &gt; Contenido o conducta inapropiada en una región General" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Indecencia &gt; Conducta o contenido inapropiado para la calificación de una región" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="Indecencia &gt; Contenido o conducta inapropiada en una región Moderado" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="Infracción de la propiedad intelectual &gt; Eliminación de contenidos" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="Infracción de la propiedad intelectual &gt; CopyBot o Exploit (programa malicioso) de permisos" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="Intolerancia" name="Intolerance"/>
<combo_box.item label="Terreno &gt; Abuso de los recursos de un sandbox" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="Terreno &gt; Invasión &gt; Objetos/Texturas" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Terreno &gt; Invasión &gt; Objetos o texturas" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Terreno &gt; Invasión &gt; Partículas" name="Land__Encroachment__Particles"/>
<combo_box.item label="Terreno &gt; Invasión &gt; Árboles/Plantas" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Apuestas/Juego" name="Wagering_gambling"/>
+ <combo_box.item label="Apostar" name="Wagering_gambling"/>
<combo_box.item label="Otra" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/es/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/es/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..fe808dea1b
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="COLORES DE SCRIPT">
+ <text name="color_pickers_label">
+ Elige los colores que desees:
+ </text>
+ <text name="text_label">
+ Texto
+ </text>
+ <text name="cursor_label">
+ Cursor
+ </text>
+ <text name="background_label">
+ Fondo
+ </text>
+ <text name="datatype_label">
+ Tipos de datos
+ </text>
+ <text name="event_label">
+ Eventos
+ </text>
+ <text name="string_literal_label">
+ Literales de cadena
+ </text>
+ <text name="constant_label">
+ Constante
+ </text>
+ <text name="flow_control_label">
+ Control de flujo
+ </text>
+ <text name="function_label">
+ Función
+ </text>
+ <text name="comment_label">
+ Comentar
+ </text>
+ <script_editor name="Script Preview">
+ /* Un ejemplo de script */
+default
+{
+ state_entry()
+ {
+ // Comment
+ string greeting = &quot;Hola&quot;;
+ llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml
index 23078b3a55..5e02bc52b7 100755
--- a/indra/newview/skins/default/xui/es/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="VISTA PREVIA DE LA FOTO">
+<floater name="Snapshot" title="FOTO">
<floater.string name="unknown">
desconocido
</floater.string>
@@ -61,5 +61,11 @@
<check_box label="HUDs" name="hud_check"/>
<check_box label="Congelar la toma (pantalla completa)" name="freeze_frame_check"/>
<check_box label="Actualizar automáticamente" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ Filtro:
+ </text>
+ <combo_box name="filters_combobox" tool_tip="Filtros de imagen">
+ <combo_box.item label="Sin filtro" name="NoFilter"/>
+ </combo_box>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_stats.xml b/indra/newview/skins/default/xui/es/floater_stats.xml
index 7ecf5fafae..d1c5e867db 100755
--- a/indra/newview/skins/default/xui/es/floater_stats.xml
+++ b/indra/newview/skins/default/xui/es/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="Renderización" name="render">
<stat_bar label="KTris por fotograma" name="ktrisframe"/>
<stat_bar label="KTris por segundo" name="ktrissec"/>
- <stat_bar label="Objetos en total" name="objs"/>
+ <stat_bar label="Objetos en total" name="totalobjs"/>
+ <stat_bar label="Objetos en caché" name="cachedobjs"/>
<stat_bar label="Objetos nuevos" name="newobjs"/>
<stat_bar label="Índice de aciertos de caché de objetos" name="object_cache_hits"/>
<stat_bar label="Consultas de oclusión realizadas" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 32baa5bb7d..159619decc 100755
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -57,7 +57,7 @@
<check_box label="Editar las partes enlazadas" name="checkbox edit linked parts"/>
<button label="Enlazar" name="link_btn"/>
<button label="Desenlazar" name="unlink_btn" width="95"/>
- <check_box label="" name="checkbox uniform"/>
+ <check_box label="Estirar ambos lados" name="checkbox uniform"/>
<text label="Estirar ambos lados" name="checkbox uniform label">
Estirar ambos lados
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_twitter.xml b/indra/newview/skins/default/xui/es/floater_twitter.xml
new file mode 100644
index 0000000000..050ee1a391
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="TWITTER">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="REDACTAR" name="panel_twitter_photo"/>
+ <panel label="CUENTA" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Error
+ </text>
+ <text name="connection_loading_text">
+ Cargando...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/menu_conversation.xml b/indra/newview/skins/default/xui/es/menu_conversation.xml
index b63711589d..5bcf249226 100644
--- a/indra/newview/skins/default/xui/es/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/es/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="Silenciar a todos" name="ModerateVoiceMute"/>
<menu_item_call label="Quitar el silencio a todos" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="Expulsar a miembro" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml
index e75c7283af..0de9907660 100755
--- a/indra/newview/skins/default/xui/es/menu_object.xml
+++ b/indra/newview/skins/default/xui/es/menu_object.xml
@@ -21,6 +21,7 @@
<context_menu label="Gestionar" name="Remove">
<menu_item_call label="Denunciar una infracción" name="Report Abuse..."/>
<menu_item_call label="Ignorar" name="Object Mute"/>
+ <menu_item_call label="No ignorar" name="Object Unmute"/>
<menu_item_call label="Devolver" name="Return..."/>
</context_menu>
<menu_item_call label="Tomar" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index d5208f3d8f..d2117f08b6 100755
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -35,6 +35,9 @@
<menu_item_check label="Chat..." name="Nearby Chat"/>
<menu_item_check label="Hablar" name="Speak"/>
<menu_item_check label="Registro de conversación..." name="Conversation Log..."/>
+ <menu_item_call label="Facebook..." name="Facebook"/>
+ <menu_item_call label="Twitter..." name="Twitter"/>
+ <menu_item_call label="Flickr..." name="Flickr"/>
<menu label="Transformación de voz" name="VoiceMorphing">
<menu_item_check label="Sin transformación de voz" name="NoVoiceMorphing"/>
<menu_item_check label="Probar..." name="Preview"/>
@@ -149,7 +152,8 @@
<menu_item_check label="Ajustar a la cuadrícula" name="Snap to Grid"/>
<menu_item_call label="Ajustar a la cuadrícula los ejes X e Y" name="Snap Object XY to Grid"/>
<menu_item_call label="Usar lo seleccionado como cuadrícula" name="Use Selection for Grid"/>
- <menu_item_call label="Opciones de la cuadrícula" name="Grid Options"/>
+ <menu_item_call label="Opciones de la cuadrícula..." name="Grid Options"/>
+ <menu_item_call label="Definir permisos predeterminados..." name="Set default permissions"/>
</menu>
<menu label="Subir" name="Upload">
<menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/>
@@ -157,7 +161,6 @@
<menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Modelo..." name="Upload Model"/>
<menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/>
- <menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>
</menu>
<menu_item_call label="Deshacer" name="Undo"/>
<menu_item_call label="Rehacer" name="Redo"/>
@@ -287,6 +290,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="Partículas" name="Particles"/>
<menu_item_check label="Articulaciones" name="Joints"/>
<menu_item_check label="Vectores de viento" name="Wind Vectors"/>
<menu_item_check label="Complejidad del renderizado" name="rendercomplexity"/>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index ae421cdfd0..01407dc69e 100755
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -206,6 +206,22 @@ No podrás removérseles de ese rol, sino que deberán renunciar a él por sí m
¿Añadir esta capacidad a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ Vas a agregar la capacidad &apos;[ACTION_NAME]&apos; al rol &apos;[ROLE_NAME]&apos;.
+
+ *ATENCIÓN*
+Cualquier miembro de un rol que tenga esta capacidad también recibirá las capacidades &apos;[ACTION_NAME_2]&apos; y &apos;[ACTION_NAME_3]&apos;
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ Vas a quitar la capacidad &apos;[ACTION_NAME]&apos; del rol &apos;[ROLE_NAME]&apos;.
+
+ *ATENCIÓN*
+Al quitar esta capacidad NO se quitan las capacidades &apos;[ACTION_NAME_2]&apos; y &apos;[ACTION_NAME_3]&apos;.
+
+Si no quieres que este rol siga teniendo dichas capacidades, deshabilítalas inmediatamente.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
Estás a punto de expulsar a [AVATAR_NAME] del grupo.
<usetemplate ignoretext="Confirmar la expulsión de un miembro del grupo" name="okcancelignore" notext="Cancelar" yestext="Expulsar"/>
@@ -1585,6 +1601,14 @@ Consulta [[INFO_URL] Información sobre esta actualización].
No es posible abandonar el grupo. No puedes abandonarlo porque eres su último propietario. Antes tienes que asignar el papel de propietario a otro miembro.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
+ <notification name="GroupDepartError">
+ No se puede abandonar el grupo: [reason].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GroupDepart">
+ Has abandonado el grupo [group_name].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
¿Quieres realmente expulsar a todos los residentes de la cuadrícula?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los Residentes"/>
@@ -2468,6 +2492,12 @@ Inténtalo seleccionando un trozo más pequeño de terreno.
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4035,6 +4065,10 @@ Prueba a seleccionar un terreno más pequeño.
No se pueden mover los archivos. Ruta anterior restaurada.
<usetemplate ignoretext="No se pueden mover los archivos. Ruta anterior restaurada." name="okignore" yestext="OK"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ Ha ocurrido un problema al guardar los permisos predeterminados por el siguiente motivo: [REASON]. Intenta configurar los permisos predeterminados más adelante.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
El archivo de historial de chat todavía está realizando la operación anterior. Repite la operación dentro de unos minutos o inicia un chat con otra persona.
<usetemplate name="okbutton" yestext="OK"/>
diff --git a/indra/newview/skins/default/xui/es/panel_facebook_account.xml b/indra/newview/skins/default/xui/es/panel_facebook_account.xml
new file mode 100644
index 0000000000..2b6d407ad7
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="Estás conectado a Facebook como:"/>
+ <string name="facebook_disconnected" value="No conectado a Facebook"/>
+ <text name="account_caption_label">
+ No conectado a Facebook.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Conectar..." name="connect_btn"/>
+ <button label="Desconectar" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprende a publicar en Facebook]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_facebook_friends.xml b/indra/newview/skins/default/xui/es/panel_facebook_friends.xml
new file mode 100644
index 0000000000..6913e87aba
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="Actualmente no tienes amigos en Facebook que también sean residentes de Second Life. Invita a tus amigos de Facebook a que se unan a Second Life."/>
+ <string name="facebook_friends_no_connected" value="Actualmente no estás conectado a Facebook. Selecciona la pestaña Cuenta para conectarte y habilitar esta función."/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="Amigos de SL"/>
+ <accordion_tab name="tab_suggested_friends" title="Agregar estas personas como amigos de SL"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ No conectado a Facebook.
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_facebook_photo.xml b/indra/newview/skins/default/xui/es/panel_facebook_photo.xml
new file mode 100644
index 0000000000..f9e7265d34
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Resolución de imagen">
+ <combo_box.item label="Ventana actual" name="CurrentWindow"/>
+ <combo_box.item label="640 × 480" name="640x480"/>
+ <combo_box.item label="800 × 600" name="800x600"/>
+ <combo_box.item label="1024 × 768" name="1024x768"/>
+ <combo_box.item label="1200 × 630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtros de imagen">
+ <combo_box.item label="Sin filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/>
+ <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/>
+ <text name="caption_label">
+ Comentario (opcional):
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Publicar" name="post_photo_btn"/>
+ <button label="Cancelar" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_facebook_place.xml b/indra/newview/skins/default/xui/es/panel_facebook_place.xml
new file mode 100644
index 0000000000..639825818a
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ Cuenta algo del lugar donde te encuentras:
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="Publicar" name="post_place_btn"/>
+ <button label="Cancelar" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_facebook_status.xml b/indra/newview/skins/default/xui/es/panel_facebook_status.xml
new file mode 100644
index 0000000000..dfaf4089fc
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ ¿En qué estás pensando?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="Publicar" name="post_status_btn"/>
+ <button label="Cancelar" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_flickr_account.xml b/indra/newview/skins/default/xui/es/panel_flickr_account.xml
new file mode 100644
index 0000000000..7dcf5b5595
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="Estás conectado a Flickr como:"/>
+ <string name="flickr_disconnected" value="No conectado a Flickr"/>
+ <text name="account_caption_label">
+ No estás conectado a Flickr.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Conectar..." name="connect_btn"/>
+ <button label="Desconectar" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Aprende a publicar en Flickr]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_flickr_photo.xml b/indra/newview/skins/default/xui/es/panel_flickr_photo.xml
new file mode 100644
index 0000000000..465e80667b
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_flickr_photo.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Resolución de imagen">
+ <combo_box.item label="Ventana actual" name="CurrentWindow"/>
+ <combo_box.item label="640 × 480" name="640x480"/>
+ <combo_box.item label="800 × 600" name="800x600"/>
+ <combo_box.item label="1024 × 768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtros de imagen">
+ <combo_box.item label="Sin filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/>
+ <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/>
+ <text name="title_label">
+ Título:
+ </text>
+ <text name="description_label">
+ Descripción:
+ </text>
+ <check_box initial_value="true" label="Incluir la ubicación de SL al final de la descripción" name="add_location_cb"/>
+ <text name="tags_label">
+ Etiquetas:
+ </text>
+ <text name="tags_help_label">
+ Separa las etiquetas con espacios
+Usa &quot;&quot; para las etiquetas con varias palabras
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Calificación de contenido de Flickr">
+ <combo_box.item label="Calificación segura de Flickr" name="SafeRating"/>
+ <combo_box.item label="Calificación moderada de Flickr" name="ModerateRating"/>
+ <combo_box.item label="Calificación restringida de Flickr" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Subir" name="post_photo_btn"/>
+ <button label="Cancelar" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..2d308a43c3
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Expulsar residentes" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (cargando...)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ Las expulsiones del grupo no se han enviado: has seleccionado demasiados residentes. Solo se permiten 100 expulsiones del grupo por solicitud.
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ La expulsión del grupo no se ha enviado: no tienes la capacidad &apos;Administrar la lista de expulsados&apos;.
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ La expulsión del grupo no se ha enviado: tu grupo ha alcanzado el límite máximo permitido de expulsiones.
+ </panel.string>
+ <panel.string name="partial_ban">
+ No se han enviado algunas expulsiones del grupo:
+[REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ Las expulsiones del grupo no se enviaron:
+[REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - Los siguientes residentes ya han sido expulsados: [RESIDENTS].
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - Se ha alcanzado el límite de expulsiones. Los agentes siguientes no se han expulsado: [RESIDENTS].
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - No te puedes expulsar a ti mismo del grupo.
+ </panel.string>
+ <text name="help_text">
+ Puedes seleccionar varios residentes para su expulsión del grupo. Para empezar, pulsa &apos;Abrir el selector de residentes&apos;.
+ </text>
+ <button label="Abrir el selector de residentes" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="Para seleccionar varios residentes, pulsa sus nombres mientras mantienes apretada la tecla Ctrl"/>
+ <button label="Quitar seleccionados de la lista" name="remove_button" tool_tip="Quita los residentes seleccionados de la lista de expulsados"/>
+ <button label="Expulsar residentes" name="ban_button"/>
+ <button label="Cancelar" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ Expulsión de grupo
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_invite.xml b/indra/newview/skins/default/xui/es/panel_group_invite.xml
index 319e9d0f1b..8ddeb5a1de 100755
--- a/indra/newview/skins/default/xui/es/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_invite.xml
@@ -22,7 +22,7 @@
Elegir qué rol asignarles:
</text>
<combo_box name="role_name" tool_tip="Elige el rol de entre la lista de aquellos que estás autorizado a asignar"/>
- <button label="Enviar las invitaciones" name="ok_button"/>
+ <button label="Enviar invitaciones" name="invite_button"/>
<button label="Cancelar" name="cancel_button"/>
<string name="GroupInvitation">
Invitar al grupo
diff --git a/indra/newview/skins/default/xui/es/panel_group_roles.xml b/indra/newview/skins/default/xui/es/panel_group_roles.xml
index ced40cca43..54a5566600 100755
--- a/indra/newview/skins/default/xui/es/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_roles.xml
@@ -24,13 +24,14 @@ Seleccione varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada u
</name_list>
<button label="Invitar" name="member_invite"/>
<button label="Expulsar" name="member_eject"/>
+ <button label="Expulsar miembro(s)" name="member_ban"/>
</panel>
<panel label="ROLES" name="roles_sub_tab">
<panel.string name="help_text">
Los roles tienen una etiqueta propia y unas capacidades que se
-permiten ejercer a sus miembros. Los miembros pueden
-tener más de un rol. Un grupo puede tener hasta 10 roles,
-incluyendo el de Todos y el de Propietarios.
+ permiten ejercer a sus miembros. Los miembros pueden
+ tener más de un rol. Un grupo puede tener hasta 10 roles,
+ incluidos los roles Todos y Propietarios.
</panel.string>
<panel.string name="cant_delete_role">
Los roles de &apos;Todos&apos; y &apos;Propietarios&apos; son especiales, y no pueden eliminarse.
@@ -49,7 +50,8 @@ incluyendo el de Todos y el de Propietarios.
</panel>
<panel height="148" label="CAPACIDADES" name="actions_sub_tab" tool_tip="Puedes ver una descripción de la capacidad y qué miembros y roles la tienen.">
<panel.string name="help_text">
- Las capacidades permiten a los miembros que tienen ese rol el hacer tareas específicas dentro de este grupo. Hay una gran variedad de capacidades.
+ Las capacidades permiten a los miembros con roles hacer
+ cosas concretas en el grupo. Las hay de muchos tipos.
</panel.string>
<filter_editor label="Filtrar las capacidades" name="filter_input"/>
<scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Elige una capacidad para verla más en detalle">
@@ -57,6 +59,21 @@ incluyendo el de Todos y el de Propietarios.
<scroll_list.columns label="" name="action"/>
</scroll_list>
</panel>
+ <panel label="RESIDENTES EXPULSADOS" name="banlist_sub_tab" tool_tip="Muestra los residentes expulsados de este grupo.">
+ <panel.string name="help_text">
+ Los residentes que figuren en la lista de expulsados no podrán unirse al grupo.
+ </panel.string>
+ <panel.string name="ban_count_template">
+ Número de expulsados: [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="Residente" name="name"/>
+ <name_list.columns label="Fecha de expulsión" name="ban_date"/>
+ </name_list>
+ <button label="Expulsar residente(s)" name="ban_create" tool_tip="Expulsa residentes del grupo"/>
+ <button label="Anular expulsión" name="ban_delete" tool_tip="Readmite en el grupo a los residentes seleccionados"/>
+ <button name="ban_refresh" tool_tip="Actualiza la lista de expulsados"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml
index 1d7f077fe7..253d0800e1 100755
--- a/indra/newview/skins/default/xui/es/panel_login.xml
+++ b/indra/newview/skins/default/xui/es/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php?lang=es
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- INICIAR SESIÓN
- </text>
- <text name="username_text">
- Nombre de usuario:
- </text>
- <combo_box name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/>
- <text name="password_text">
- Contraseña:
- </text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- Empezar en:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Mi última posición" name="MyLastLocation"/>
- <combo_box.item label="Mi Base" name="MyHome"/>
- <combo_box.item label="&lt;Escribe el nombre de la región&gt;" name="Typeregionname"/>
- </combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- ¿Necesitas ayuda para conectarte?
- </text>
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="Nombre de usuario" name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/>
+ <line_editor label="Contraseña" name="password_edit"/>
+ <check_box label="Recordarme" name="remember_check"/>
<text name="forgot_password_text">
- ¿Olvidaste el nombre de usuario o la contraseña?
+ Contraseña olvidada
</text>
<button label="Iniciar sesión" name="connect_btn"/>
- <check_box label="Recordar la contraseña" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- CREA TU CUENTA
+ <text name="At_My_Last_Location_Label">
+ en mi última posición
</text>
- <button label="Iniciar ahora" name="create_new_account_btn"/>
+ <combo_box label="Mis lugares favoritos" name="start_location_combo">
+ <combo_box.item label="Mi Base" name="MyHome"/>
+ </combo_box>
+ <button label="Iniciar sesión" name="connect_favorite_btn"/>
+ <line_editor label="Especifica una ubicación" name="location_edit"/>
+ <button label="Iniciar sesión" name="connect_location_btn"/>
+ <combo_box label="Seleccionar cuadrícula" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_login_first.xml b/indra/newview/skins/default/xui/es/panel_login_first.xml
new file mode 100644
index 0000000000..7787c6526f
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php?lang=es
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="Nombre de usuario" name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/>
+ <line_editor label="Contraseña" name="password_edit"/>
+ <button label="Iniciar sesión" name="connect_btn"/>
+ <check_box label="Recordarme" name="remember_check"/>
+ <text name="forgot_password_text">
+ Contraseña olvidada
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ Tu primer destino es la Isla de aprendizaje. ¡Encuentra el portal de salida!
+ </text>
+ <text name="image_caption_right">
+ A continuación, puedes explorar la Isla social y hablar con otros residentes nuevos.
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
index 620a95de4d..2599d951d7 100755
--- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="Mostrar la selección de cuadrícula al iniciar sesión" name="show_grid_selection_check"/>
<check_box label="Mostrar el menú Avanzado" name="show_advanced_menu_check"/>
<check_box label="Mostrar el menú Develop" name="show_develop_menu_check"/>
+ <button label="Permisos de creación predeterminados" name="default_creation_permissions"/>
</panel>
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 98b0081da9..e68faf6e99 100755
--- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
@@ -30,14 +30,10 @@
<combo_box.item label="General y Moderado" name="Desired_Mature"/>
<combo_box.item label="General" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- Localización inicial:
+ <check_box label="Mostrar los lugares favoritos en la pantalla de inicio de sesión" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (También los verán los demás usuarios de este equipo)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Mi última posición" name="MyLastLocation" tool_tip="Por defecto, iniciar sesión en mi última posición."/>
- <combo_box.item label="Mi Base" name="MyHome" tool_tip="Por defecto, iniciar sesión en mi Base."/>
- </combo_box>
- <check_box initial_value="true" label="Mostrar en la pantalla de conexión" name="show_location_checkbox"/>
<text name="name_tags_textbox">
Etiquetas de los nombres:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
index fe312e3587..db98ee088e 100755
--- a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
@@ -7,11 +7,11 @@
<text name="cache_size_label_l">
(Localizaciones, imágenes, web, historial de búsqueda)
</text>
- <check_box label="Mostrarme información de perfil en los resultados de la búsqueda" name="online_searchresults"/>
+ <check_box label="Mostrar datos de mi perfil en los resultados de la búsqueda" name="online_searchresults"/>
<check_box label="Sólo saben si estoy conectado mis amigos y grupos" name="online_visibility"/>
<check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/>
<check_box label="Desconectar el micrófono cuando finalicen las llamadas" name="auto_disengage_mic_check"/>
- <check_box label="Mostrar mis Hitos favoritos al Inicio de sesión (menú desplegable &quot;Empezar &#10;en&quot;)" name="favorites_on_login_check" top_pad="15"/>
+ <check_box label="Mostrar mis Hitos favoritos al Inicio de sesión (menú desplegable &quot;Empezar en&quot;)" name="favorites_on_login_check" top_pad="15"/>
<text name="Logs:">
Registros de chat:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_script_ed.xml b/indra/newview/skins/default/xui/es/panel_script_ed.xml
index 87314820a6..89e9304693 100755
--- a/indra/newview/skins/default/xui/es/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/es/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="Deshacer todos los cambios" name="Revert All Changes"/>
<menu_item_call label="Cargar desde archivo..." name="LoadFromFile"/>
<menu_item_call label="Guardar en archivo..." name="SaveToFile"/>
+ <menu_item_call label="Colores..." name="Colors"/>
</menu>
<menu label="Editar" name="Edit">
<menu_item_call label="Deshacer" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="Ayuda de palabras clave..." name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
Cargando...
- </text_editor>
+ </script_editor>
<combo_box label="Insertar..." name="Insert..."/>
<button label="Guardar" label_selected="Guardar" name="Save_btn"/>
<button label="Editar..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml
index 2b2584f66c..f4bfc0e0b5 100755
--- a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml
@@ -4,4 +4,13 @@
<button label="Correo-e" name="save_to_email_btn"/>
<button label="Guardar en Mi inventario ([AMOUNT] L$)" name="save_to_inventory_btn"/>
<button label="Guardar en mi ordenador" name="save_to_computer_btn"/>
+ <text name="send_to_facebook_textbox">
+ Enviar a: [secondlife:/// Facebook]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// Twitter]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml
index 10b37b6880..b5917319e0 100755
--- a/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="Mostrar la información del ítem"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_twitter_account.xml b/indra/newview/skins/default/xui/es/panel_twitter_account.xml
new file mode 100644
index 0000000000..f51af64b05
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="Estás conectado a Twitter como:"/>
+ <string name="twitter_disconnected" value="No conectado a Twitter"/>
+ <text name="account_caption_label">
+ No estás conectado a Twitter.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Conectar..." name="connect_btn"/>
+ <button label="Desconectar" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Aprende a publicar en Twitter]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_twitter_photo.xml b/indra/newview/skins/default/xui/es/panel_twitter_photo.xml
new file mode 100644
index 0000000000..be1896b33b
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ ¿Qué está ocurriendo?
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="Incluir ubicación de SL" name="add_location_cb"/>
+ <check_box initial_value="true" label="Incluir una foto" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Resolución de imagen">
+ <combo_box.item label="Ventana actual" name="CurrentWindow"/>
+ <combo_box.item label="640 × 480" name="640x480"/>
+ <combo_box.item label="800 × 600" name="800x600"/>
+ <combo_box.item label="1024 × 768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtros de imagen">
+ <combo_box.item label="Sin filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/>
+ <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Tuitear" name="post_photo_btn"/>
+ <button label="Cancelar" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/role_actions.xml b/indra/newview/skins/default/xui/es/role_actions.xml
index 902ed4df52..5e0c21992d 100755
--- a/indra/newview/skins/default/xui/es/role_actions.xml
+++ b/indra/newview/skins/default/xui/es/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="Estas capacidades incluyen poderes para añadir o quitar miembros del grupo, y para pemitir que se sumen nuevos miembros sin necesidad de invitación." name="Membership">
<action description="Invitar personas al grupo" longdescription="Invitar a gente a este grupo usando el botón &apos;Invitar&apos; en la sección Roles &gt; pestaña Miembros." name="member invite" value="1"/>
<action description="Expulsar a miembros del grupo" longdescription="Expulsar a miembros de este grupo usando el botón &apos;Expulsar&apos; en la sección Roles &gt; pestaña Miembros. Un propietario puede expulsar a cualquiera, excepto a otro propietario. Si no eres un propietario, un miembro puede ser expulsado única y exclusivamente si está en el rol de Cualquiera y NO en otros roles. Para quitar roles a los miembros, tienes que tener la capacidad de &apos;Quitar roles a los miembros&apos;." name="member eject" value="2"/>
+ <action description="Administra la lista de expulsados" longdescription="Permite que el miembro del grupo expulse a residentes de este grupo o los readmita." name="allow ban" value="51"/>
<action description="Cambiar &apos;Inscripción abierta&apos; y &apos;Cuota de inscripción&apos;" longdescription="En la sección General, cambiar la &apos;Inscripción abierta&apos; -que permite entrar al grupo sin invitación- y la &apos;Cuota de inscripción&apos;." name="member options" value="3"/>
</action_set>
<action_set description="Estas habilidades incluyen el poder añadir, quitar y cambiar roles, asignarlos a miembros, y darles capacidades." name="Roles">
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 544a70028b..bd339513b3 100755
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -326,6 +326,75 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="TestingDisconnect">
Probando la desconexión del visor
</string>
+ <string name="SocialFlickrConnecting">
+ Conectándose a Flickr...
+ </string>
+ <string name="SocialFlickrPosting">
+ Publicando...
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Desconectándose de Flickr...
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ Problema con la conexión a Flickr
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ Problema al publicar en Flickr
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ Problema con la desconexión de Flickr
+ </string>
+ <string name="SocialTwitterConnecting">
+ Conectándose a Twitter...
+ </string>
+ <string name="SocialTwitterPosting">
+ Publicando...
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ Desconectándose de Twitter...
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ Problema con la conexión a Twitter
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ Problema al publicar en Twitter
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ Problema con la desconexión de Twitter
+ </string>
+ <string name="BlackAndWhite">
+ Blanco y negro
+ </string>
+ <string name="Colors1970">
+ Colores de los 70
+ </string>
+ <string name="Intense">
+ Intenso
+ </string>
+ <string name="Newspaper">
+ Periódico
+ </string>
+ <string name="Sepia">
+ Sepia
+ </string>
+ <string name="Spotlight">
+ Foco
+ </string>
+ <string name="Video">
+ Vídeo
+ </string>
+ <string name="Autocontrast">
+ Contraste automático
+ </string>
+ <string name="LensFlare">
+ Destello de lente
+ </string>
+ <string name="Miniature">
+ Miniatura
+ </string>
+ <string name="Toycamera">
+ Cámara de juguete
+ </string>
<string name="TooltipPerson">
Persona
</string>
@@ -871,6 +940,12 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="use_texture">
Usar textura
</string>
+ <string name="manip_hint1">
+ Pasa el cursor del ratón sobre la regla
+ </string>
+ <string name="manip_hint2">
+ para ajustar a la cuadrícula
+ </string>
<string name="texture_loading">
Cargando...
</string>
@@ -3993,6 +4068,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="share_alert">
Arrastra los ítems desde el invenbtario hasta aquí
</string>
+ <string name="flickr_post_success">
+ Has publicado en Flickr.
+ </string>
+ <string name="twitter_post_success">
+ Has publicado en Twitter.
+ </string>
<string name="no_session_message">
(La sesión de MI no existe)
</string>
@@ -4449,6 +4530,9 @@ Denuncia de infracción
<string name="LocalEstimateUSD">
[AMOUNT] US$
</string>
+ <string name="Group Ban">
+ Expulsión de grupo
+ </string>
<string name="Membership">
Membresía
</string>
@@ -4871,6 +4955,12 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="Command_Destinations_Label">
Destinos
</string>
+ <string name="Command_Facebook_Label">
+ Facebook
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
Gestos
</string>
@@ -4919,6 +5009,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="Command_Speak_Label">
Hablar
</string>
+ <string name="Command_Twitter_Label">
+ Twitter
+ </string>
<string name="Command_View_Label">
Controles de la cámara
</string>
@@ -4949,6 +5042,12 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="Command_Destinations_Tooltip">
Destinos de interés
</string>
+ <string name="Command_Facebook_Tooltip">
+ Publicar en Facebook
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ Subir a Flickr
+ </string>
<string name="Command_Gestures_Tooltip">
Gestos para tu avatar
</string>
@@ -4997,6 +5096,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="Command_Speak_Tooltip">
Utiliza el micrófono para hablar con las personas próximas
</string>
+ <string name="Command_Twitter_Tooltip">
+ Twitter
+ </string>
<string name="Command_View_Tooltip">
Cambiando el ángulo de la cámara
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_big_preview.xml b/indra/newview/skins/default/xui/fr/floater_big_preview.xml
new file mode 100644
index 0000000000..0c09a4c188
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="APERÇU"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_facebook.xml b/indra/newview/skins/default/xui/fr/floater_facebook.xml
new file mode 100644
index 0000000000..12a3c9ae61
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="PUBLIER SUR FACEBOOK">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="STATUT" name="panel_facebook_status"/>
+ <panel label="PHOTO" name="panel_facebook_photo"/>
+ <panel label="INDIQUER VOTRE PRÉSENCE" name="panel_facebook_place"/>
+ <panel label="AMIS" name="panel_facebook_friends"/>
+ <panel label="COMPTE" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Erreur
+ </text>
+ <text name="connection_loading_text">
+ Chargement...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_flickr.xml b/indra/newview/skins/default/xui/fr/floater_flickr.xml
new file mode 100644
index 0000000000..0432ae9459
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="CHARGER DANS FLICKR">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="PHOTO" name="panel_flickr_photo"/>
+ <panel label="COMPTE" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Erreur
+ </text>
+ <text name="connection_loading_text">
+ Chargement...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_perms_default.xml b/indra/newview/skins/default/xui/fr/floater_perms_default.xml
new file mode 100644
index 0000000000..005daf7ec1
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="PERMISSIONS DE CRÉATION PAR DÉFAUT">
+ <panel label="Permissions par défaut" name="default permissions"/>
+ <button label="OK" label_selected="OK" name="ok"/>
+ <button label="Annuler" label_selected="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
index 78c35dc303..153be444e5 100755
--- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
@@ -44,7 +44,7 @@
<combo_box.item label="Âge &gt; Résident adulte sur Second Life pour adolescents" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Âge &gt; Résident mineur en dehors de Second Life pour adolescents" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Assaut &gt; Bac à sable utilisé pour des combats/zone non sécurisée" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Assaut &gt; Zone sécurisée" name="Assault__Safe_area"/>
+ <combo_box.item label="Assaut &gt; Tirer sur une personne avec une arme, pousser ou bousculer un résident dans une zone « sécurisée »" name="Assault__Safe_area"/>
<combo_box.item label="Assaut &gt; Bac à sable pour tests d&apos;armes à feu" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Commerce &gt; Incapacité à fournir un produit ou service" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="Divulgation &gt; Informations sur la vie réelle" name="Disclosure__Real_world_information"/>
@@ -58,25 +58,25 @@
<combo_box.item label="Fraude &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Fraude &gt; Terrain" name="Fraud__Land"/>
<combo_box.item label="Fraude &gt; Vente pyramidale ou lettre-chaîne" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="Fraude &gt; US$" name="Fraud__US$"/>
+ <combo_box.item label="Fraude &gt; L$ ou US$" name="Fraud__US$"/>
<combo_box.item label="Harcèlement &gt; Spam visuel" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="Harcèlement &gt; Diffamation envers des individus ou des groupes" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="Harcèlement &gt; Immobilisation" name="Harassment__Impeding_movement"/>
<combo_box.item label="Harcèlement &gt; Harcèlement sexuel" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="Harcèlement &gt; Incitation à enfreindre les Conditions d&apos;utilisation" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Harcèlement &gt; Comportement ciblé fait pour déranger" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="Harcèlement &gt; Abus verbal" name="Harassment__Verbal_abuse"/>
<combo_box.item label="Indécence &gt; Contenu ou comportement offensifs" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="Indécence &gt; Nom d&apos;avatar inapproprié" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="Indécence &gt; Contenu ou conduite inappropriés dans une région PG" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Indécence &gt; Contenu ou conduite inappropriés pour la catégorie de région" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="Indécence &gt; Contenu ou conduite inappropriés dans une région modérée" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="Violation de droits de propriété intellectuelle &gt; Suppression de contenu" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="Violation de droits de propriété intellectuelle &gt; CopyBot ou exploitation abusive des droits" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="Intolérance" name="Intolerance"/>
<combo_box.item label="Terrain &gt; Utilisation abusive des ressources du bac à sable" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="Terrain &gt; Empiètement &gt; Objets/textures" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Terrain &gt; Empiètement &gt; Objets ou textures" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Terrain &gt; Empiètement &gt; Particules" name="Land__Encroachment__Particles"/>
<combo_box.item label="Terrain &gt; Empiètement &gt; Arbres/plantes" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Paris/jeux d&apos;argent" name="Wagering_gambling"/>
+ <combo_box.item label="Paris ou jeux d&apos;argent" name="Wagering_gambling"/>
<combo_box.item label="Autre" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/fr/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/fr/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..d1e3de5f95
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="COULEURS DE SCRIPT">
+ <text name="color_pickers_label">
+ Choisissez les couleurs :
+ </text>
+ <text name="text_label">
+ Texte
+ </text>
+ <text name="cursor_label">
+ Curseur
+ </text>
+ <text name="background_label">
+ Arrière-plan
+ </text>
+ <text name="datatype_label">
+ Types de données
+ </text>
+ <text name="event_label">
+ Événements
+ </text>
+ <text name="string_literal_label">
+ Littéraux de chaîne
+ </text>
+ <text name="constant_label">
+ Constante
+ </text>
+ <text name="flow_control_label">
+ Contrôle du flux
+ </text>
+ <text name="function_label">
+ Fonction
+ </text>
+ <text name="comment_label">
+ Commentaire
+ </text>
+ <script_editor name="Script Preview">
+ /* Un exemple de script */
+default
+{
+ state_entry()
+ {
+ // Comment
+ string greeting = &quot;Bonjour&quot;;
+ llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index 9244051edc..ab2256e356 100755
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="APERÇU DE LA PHOTO">
+<floater name="Snapshot" title="PHOTO">
<floater.string name="unknown">
inconnu
</floater.string>
@@ -61,5 +61,11 @@
<check_box label="HUD" name="hud_check"/>
<check_box label="Arrêt sur image (plein écran)" name="freeze_frame_check"/>
<check_box label="Actualisation automatique" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ Filtre :
+ </text>
+ <combo_box name="filters_combobox" tool_tip="Filtres d&apos;image">
+ <combo_box.item label="Aucun filtre" name="NoFilter"/>
+ </combo_box>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml
index 5cad6258ec..fae17e3608 100755
--- a/indra/newview/skins/default/xui/fr/floater_stats.xml
+++ b/indra/newview/skins/default/xui/fr/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="Rendu" name="render">
<stat_bar label="KTris par image" name="ktrisframe"/>
<stat_bar label="KTris par s" name="ktrissec"/>
- <stat_bar label="Objets totaux" name="objs"/>
+ <stat_bar label="Total des objets" name="totalobjs"/>
+ <stat_bar label="Objets en cache" name="cachedobjs"/>
<stat_bar label="Nouveaux objets" name="newobjs"/>
<stat_bar label="Taux de réussite du cache des objets" name="object_cache_hits"/>
<stat_bar label="Requêtes d&apos;occlusion effectuées" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 421e14d51b..b254a178f9 100755
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -72,7 +72,7 @@
<check_box label="Modification liée" name="checkbox edit linked parts"/>
<button label="Lien" name="link_btn"/>
<button label="Annuler le lien" name="unlink_btn"/>
- <check_box label="" name="checkbox uniform"/>
+ <check_box label="Étirer les deux côtés" name="checkbox uniform"/>
<text label="Étirer les deux côtés" name="checkbox uniform label">
Étirer les deux côtés
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_twitter.xml b/indra/newview/skins/default/xui/fr/floater_twitter.xml
new file mode 100644
index 0000000000..9ca2b0d48d
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="TWITTER">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="COMPOSER" name="panel_twitter_photo"/>
+ <panel label="COMPTE" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Erreur
+ </text>
+ <text name="connection_loading_text">
+ Chargement...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_conversation.xml b/indra/newview/skins/default/xui/fr/menu_conversation.xml
index 09109f4555..be110777c0 100644
--- a/indra/newview/skins/default/xui/fr/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/fr/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="Ignorer les autres" name="ModerateVoiceMute"/>
<menu_item_call label="Ne plus ignorer les autres" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="Bannir le membre" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml
index d7b69e495a..27e801d959 100755
--- a/indra/newview/skins/default/xui/fr/menu_object.xml
+++ b/indra/newview/skins/default/xui/fr/menu_object.xml
@@ -21,6 +21,7 @@
<context_menu label="Gérer" name="Remove">
<menu_item_call label="Signaler une infraction" name="Report Abuse..."/>
<menu_item_call label="Ignorer" name="Object Mute"/>
+ <menu_item_call label="Ne plus ignorer" name="Object Unmute"/>
<menu_item_call label="Retour" name="Return..."/>
</context_menu>
<menu_item_call label="Prendre" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 4ff834420e..6e36d19ba9 100755
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -36,6 +36,9 @@
<menu_item_check label="Chat près de moi..." name="Nearby Chat"/>
<menu_item_check label="Parler" name="Speak"/>
<menu_item_check label="Journal des conversations..." name="Conversation Log..."/>
+ <menu_item_call label="Facebook..." name="Facebook"/>
+ <menu_item_call label="Twitter..." name="Twitter"/>
+ <menu_item_call label="Flickr..." name="Flickr"/>
<menu label="Effet de voix" name="VoiceMorphing">
<menu_item_check label="Aucun effet de voix" name="NoVoiceMorphing"/>
<menu_item_check label="Aperçu..." name="Preview"/>
@@ -150,7 +153,8 @@
<menu_item_check label="Fixer sur la grille" name="Snap to Grid"/>
<menu_item_call label="Fixer les coordonnées XY de l&apos;objet sur la grille" name="Snap Object XY to Grid"/>
<menu_item_call label="Utiliser la sélection pour la grille" name="Use Selection for Grid"/>
- <menu_item_call label="Options de la grille" name="Grid Options"/>
+ <menu_item_call label="Options de la grille..." name="Grid Options"/>
+ <menu_item_call label="Définir les permissions par défaut..." name="Set default permissions"/>
</menu>
<menu label="Charger" name="Upload">
<menu_item_call label="Image ([COST] L$)..." name="Upload Image"/>
@@ -158,7 +162,6 @@
<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Modèle..." name="Upload Model"/>
<menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/>
- <menu_item_call label="Définir les droits de chargement par défaut" name="perm prefs"/>
</menu>
<menu_item_call label="Annuler" name="Undo"/>
<menu_item_call label="Refaire" name="Redo"/>
@@ -304,6 +307,7 @@
<menu_item_check label="Infos sur le niveau de détail" name="LOD Info"/>
<menu_item_check label="File d&apos;attente pour la construction" name="Build Queue"/>
<menu_item_check label="Lumières" name="Lights"/>
+ <menu_item_check label="Particules" name="Particles"/>
<menu_item_check label="Squelette de collision" name="Collision Skeleton"/>
<menu_item_check label="Articulations" name="Joints"/>
<menu_item_check label="Rayons" name="Raycast"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index af46d34b61..2325c8e34d 100755
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -209,6 +209,22 @@ Ajouter ce pouvoir à « [ROLE_NAME] » ?
Ajouter ce pouvoir à « [ROLE_NAME] » ?
<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+
+ *AVERTISSEMENT*
+Tout membre ayant un rôle doté de ce pouvoir disposera aussi des pouvoirs « [ACTION_NAME_2] » et « [ACTION_NAME_3] ».
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ Vous êtes sur le point de supprimer le pouvoir « [ACTION_NAME] » du rôle « [ROLE_NAME] ».
+
+ *AVERTISSEMENT*
+En supprimant ce pouvoir, vous ne supprimez PAS les pouvoirs « [ACTION_NAME_2] » et « [ACTION_NAME_3] ».
+
+Si vous ne voulez plus que ce rôle dispose de ces pouvoirs, désactivez-les immédiatement.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
Vous allez expulser [AVATAR_NAME] du groupe.
<usetemplate ignoretext="Confirmer l&apos;expulsion d&apos;un membre du groupe" name="okcancelignore" notext="Annuler" yestext="Expulser"/>
@@ -1576,6 +1592,14 @@ Quitter le groupe ?
Impossible de quitter le groupe. Vous ne pouvez pas quitter le groupe car vous en êtes le dernier propriétaire. Vous devez d&apos;abord affecter le rôle de propriétaire à un autre membre.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
+ <notification name="GroupDepartError">
+ Impossible de quitter le groupe : [reason].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GroupDepart">
+ Vous avez quitté le groupe [group_name].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Souhaitez-vous vraiment éjecter tous les résidents de la grille ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous les résidents"/>
@@ -2460,6 +2484,12 @@ Veuillez sélectionner un terrain plus petit.
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4036,6 +4066,10 @@ Veuillez sélectionner un terrain plus petit.
Impossible de déplacer les fichiers. Chemin précédent rétabli.
<usetemplate ignoretext="Impossible de déplacer les fichiers. Chemin précédent rétabli." name="okignore" yestext="OK"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ Une erreur est survenue lors de l&apos;enregistrement des droits par défaut, suite au problème suivant : [REASON]. Réessayez de définir les droits par défaut ultérieurement.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
Le fichier d&apos;historique des chats est occupé à traiter l&apos;opération précédente. Réessayez dans quelques minutes ou choisissez une autre personne pour le chat.
<usetemplate name="okbutton" yestext="OK"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_account.xml b/indra/newview/skins/default/xui/fr/panel_facebook_account.xml
new file mode 100644
index 0000000000..6406ae4ae7
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="Vous êtes connecté(e) à Facebook en tant que :"/>
+ <string name="facebook_disconnected" value="Pas connecté(e) à Facebook"/>
+ <text name="account_caption_label">
+ Pas connecté(e) à Facebook.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Connexion..." name="connect_btn"/>
+ <button label="Déconnexion" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Apprenez comment publier sur Facebook]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml b/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml
new file mode 100644
index 0000000000..3ac0ce229c
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="Vous n&apos;avez actuellement aucun ami Facebook qui est également résident de Second Life. Invitez vos amis Facebook à rejoindre Second Life !"/>
+ <string name="facebook_friends_no_connected" value="Vous n&apos;êtes pas connecté(e) à Facebook. Allez à l&apos;onglet Compte pour vous connecter et activer cette fonctionnalité."/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="Amis SL"/>
+ <accordion_tab name="tab_suggested_friends" title="Ajouter ces personnes en tant qu&apos;amis SL"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ Pas connecté(e) à Facebook.
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml b/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml
new file mode 100644
index 0000000000..c5b09c4bcc
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Résolution d’image">
+ <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/>
+ <combo_box.item label="640 x 480" name="640x480"/>
+ <combo_box.item label="800 x 600" name="800x600"/>
+ <combo_box.item label="1 024 x 768" name="1024x768"/>
+ <combo_box.item label="1 200 x 630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtres d&apos;image">
+ <combo_box.item label="Aucun filtre" name="NoFilter"/>
+ </combo_box>
+ <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/>
+ <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l&apos;aperçu"/>
+ <text name="caption_label">
+ Commentaire (facultatif) :
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Publier" name="post_photo_btn"/>
+ <button label="Annuler" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_place.xml b/indra/newview/skins/default/xui/fr/panel_facebook_place.xml
new file mode 100644
index 0000000000..0eaea66ad4
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ Dites quelque chose au sujet du lieu où vous vous trouvez :
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="Publier" name="post_place_btn"/>
+ <button label="Annuler" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_status.xml b/indra/newview/skins/default/xui/fr/panel_facebook_status.xml
new file mode 100644
index 0000000000..260378978b
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ À quoi pensez-vous ?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="Publier" name="post_status_btn"/>
+ <button label="Annuler" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_flickr_account.xml b/indra/newview/skins/default/xui/fr/panel_flickr_account.xml
new file mode 100644
index 0000000000..7082223b14
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="Vous êtes connecté(e) à Flickr en tant que :"/>
+ <string name="flickr_disconnected" value="Pas connecté(e) à Flickr"/>
+ <text name="account_caption_label">
+ Pas connecté(e) à Flickr.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Connexion..." name="connect_btn"/>
+ <button label="Déconnexion" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Apprenez comment publier sur Flickr]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml b/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml
new file mode 100644
index 0000000000..63738a773a
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Résolution d’image">
+ <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/>
+ <combo_box.item label="640 x 480" name="640x480"/>
+ <combo_box.item label="800 x 600" name="800x600"/>
+ <combo_box.item label="1 024 x 768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtres d&apos;image">
+ <combo_box.item label="Aucun filtre" name="NoFilter"/>
+ </combo_box>
+ <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/>
+ <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l&apos;aperçu"/>
+ <text name="title_label">
+ Titre :
+ </text>
+ <text name="description_label">
+ Description :
+ </text>
+ <check_box initial_value="true" label="Inclure l&apos;emplacement SL à la fin de la description" name="add_location_cb"/>
+ <text name="tags_label">
+ Balises :
+ </text>
+ <text name="tags_help_label">
+ Séparer les balises par des espaces
+Utiliser &quot;&quot; pour les balises contenant plusieurs mots
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Catégorie de contenu Flickr">
+ <combo_box.item label="Catégorie de contenu Flickr sûr" name="SafeRating"/>
+ <combo_box.item label="Catégorie de contenu Flickr modéré" name="ModerateRating"/>
+ <combo_box.item label="Catégorie de contenu Flickr réservé aux adultes" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Charger" name="post_photo_btn"/>
+ <button label="Annuler" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/fr/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..ee5b949995
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_group_bulk_ban.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Bannir des résidents" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (en cours de chargement...)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ Bannissements de groupe non envoyés : trop de résidents sélectionnés. Les bannissements de groupe sont limités à 100 par demande.
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ Bannissement de groupe non envoyé : vous ne disposez pas du pouvoir Gérer la liste des résidents bannis.
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ Bannissement de groupe non envoyé : votre groupe a atteint la limite des bannissements autorisés.
+ </panel.string>
+ <panel.string name="partial_ban">
+ Certains bannissements de groupe n&apos;ont pas été envoyés :
+[REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ Les bannissements de groupe n&apos;ont pas été envoyés :
+[REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - Le ou les résidents suivants sont déjà bannis : [RESIDENTS].
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - Limite de bannissements atteinte, les agents suivants ne sont pas bannis : [RESIDENTS].
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - Vous ne pouvez pas vous bannir vous-même d&apos;un groupe.
+ </panel.string>
+ <text name="help_text">
+ Vous pouvez sélectionner plusieurs résidents à bannir de votre groupe. Cliquez sur Choisir un résident pour commencer.
+ </text>
+ <button label="Choisir un résident" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="Pour sélectionner plusieurs résidents, maintenez la touche Ctrl enfoncée et cliquez sur leurs noms"/>
+ <button label="Supprimer la sélection de la liste" name="remove_button" tool_tip="Supprime les résidents sélectionnés ci-dessus de la liste des résidents bannis"/>
+ <button label="Bannir des résidents" name="ban_button"/>
+ <button label="Annuler" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ Bannissement de groupe
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
index d792439220..5851856a03 100755
--- a/indra/newview/skins/default/xui/fr/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
@@ -22,7 +22,7 @@
Assignez-leur un rôle :
</text>
<combo_box name="role_name" tool_tip="Choisissez dans la liste de rôles que vous êtes autorisé(e) à attribuer aux membres"/>
- <button label="Envoyer les invitations" name="ok_button"/>
+ <button label="Envoyer des invitations" name="invite_button"/>
<button label="Annuler" name="cancel_button"/>
<string name="GroupInvitation">
Invitations au groupe
diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
index 71ee70d68b..3e66190c8d 100755
--- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
@@ -24,13 +24,14 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to
</name_list>
<button label="Inviter" name="member_invite"/>
<button label="Expulser" name="member_eject"/>
+ <button label="Bannir un ou plusieurs membres" name="member_ban"/>
</panel>
<panel label="RÔLES" name="roles_sub_tab">
<panel.string name="help_text">
Chaque rôle possède un titre et des
-pouvoirs. Les membres peuvent avoir
-un ou plusieurs rôles. Un groupe peut avoir jusqu&apos;à 10 rôles,
-notamment les rôles Tous et Propriétaire.
+ pouvoirs. Les membres peuvent avoir
+ un ou plusieurs rôles. Un groupe peut avoir jusqu’à 10 rôles,
+ notamment les rôles Tous et Propriétaire.
</panel.string>
<panel.string name="cant_delete_role">
Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés.
@@ -55,13 +56,29 @@ notamment les rôles Tous et Propriétaire.
</panel>
<panel height="148" label="POUVOIRS" name="actions_sub_tab" tool_tip="Vous pouvez afficher une description du pouvoir et voir quels membres et rôles peuvent s&apos;en servir.">
<panel.string name="help_text">
- Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
+ Les pouvoirs déterminent les facultés de chaque membre
+ dans le groupe. Il existe une vaste gamme de pouvoirs.
</panel.string>
<filter_editor label="Filtrer les pouvoirs" name="filter_input"/>
<scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Sélectionnez un pouvoir pour en savoir plus">
<scroll_list.columns label="" name="action"/>
</scroll_list>
</panel>
+ <panel label="RÉSIDENTS BANNIS" name="banlist_sub_tab" tool_tip="Affiche les résidents bannis de ce groupe.">
+ <panel.string name="help_text">
+ Les résidents figurant sur la liste des résidents bannis ne peuvent pas rejoindre le groupe.
+ </panel.string>
+ <panel.string name="ban_count_template">
+ Nombre de résidents bannis : [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="Résident(e)" name="name"/>
+ <name_list.columns label="Date de bannissement" name="ban_date"/>
+ </name_list>
+ <button label="Bannir un ou plusieurs résidents" name="ban_create" tool_tip="Bannir des résidents de votre groupe"/>
+ <button label="Annuler le bannissement d&apos;un ou plusieurs membres" name="ban_delete" tool_tip="Annuler le bannissement de certains résidents de votre groupe"/>
+ <button name="ban_refresh" tool_tip="Actualiser la liste des résidents bannis"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index c8a1fe8751..b39920fe13 100755
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php?lang=fr
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- CONNEXION
- </text>
- <text name="username_text">
- Nom d&apos;utilisateur :
- </text>
- <combo_box name="username_combo" tool_tip="Nom d&apos;utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/>
- <text name="password_text">
- Mot de passe :
- </text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- Lieu de départ :
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Dernier emplacement" name="MyLastLocation"/>
- <combo_box.item label="Domicile" name="MyHome"/>
- <combo_box.item label="&lt;Nom de la région&gt;" name="Typeregionname"/>
- </combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- Besoin d&apos;aide ?
- </text>
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="Nom d&apos;utilisateur" name="username_combo" tool_tip="Nom d&apos;utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/>
+ <line_editor label="Mot de passe" name="password_edit"/>
+ <check_box label="Mémoriser mes informations" name="remember_check"/>
<text name="forgot_password_text">
- Nom d&apos;utilisateur ou mot de passe oublié ?
+ Mot de passe oublié
</text>
<button label="Connexion" name="connect_btn"/>
- <check_box label="Enregistrer" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- CRÉER VOTRE COMPTE
+ <text name="At_My_Last_Location_Label" font="SansSerifSmall" width="140">
+ au dernier emplacement
</text>
- <button label="Commencer" name="create_new_account_btn"/>
+ <combo_box label="Mes lieux préférés" name="start_location_combo">
+ <combo_box.item label="Domicile" name="MyHome"/>
+ </combo_box>
+ <button label="Connexion" name="connect_favorite_btn"/>
+ <line_editor label="Tapez un emplacement" name="location_edit"/>
+ <button label="Connexion" name="connect_location_btn"/>
+ <combo_box label="Sélectionner la grille" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_login_first.xml b/indra/newview/skins/default/xui/fr/panel_login_first.xml
new file mode 100644
index 0000000000..9534ac7b83
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php?lang=fr
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="Nom d&apos;utilisateur" name="username_combo" tool_tip="Nom d&apos;utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/>
+ <line_editor label="Mot de passe" name="password_edit"/>
+ <button label="Connexion" name="connect_btn"/>
+ <check_box label="Mémoriser mes informations" name="remember_check" font="SansSerifSmall"/>
+ <text name="forgot_password_text">
+ Mot de passe oublié
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ Votre première étape est Learning Island. Trouvez le portail de sortie.
+ </text>
+ <text name="image_caption_right">
+ Puis explorez Social Island et faites la connaissance d&apos;autres résidents.
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
index 3f3d0f51f4..67bcfb0879 100755
--- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="Liste de sélection de grille affichée à la connexion" name="show_grid_selection_check"/>
<check_box label="Menu Avancé affiché" name="show_advanced_menu_check"/>
<check_box label="Menu Développeurs affiché" name="show_develop_menu_check"/>
+ <button label="Permissions de création par défaut" name="default_creation_permissions"/>
</panel>
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 533c392d6b..11b1bd9b87 100755
--- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
@@ -30,14 +30,10 @@
<combo_box.item label="Général et Modéré" name="Desired_Mature"/>
<combo_box.item label="Général" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- Lieu de départ :
+ <check_box label="Afficher les lieux préférés sur l&apos;écran de connexion" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (Les autres personnes utilisant cet ordinateur les verront aussi.)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Dernier emplacement" name="MyLastLocation" tool_tip="Par défaut, choisir mon dernier emplacement comme lieu de départ."/>
- <combo_box.item label="Domicile" name="MyHome" tool_tip="Par défaut, choisir mon domicile comme lieu de départ."/>
- </combo_box>
- <check_box initial_value="true" label="Afficher à la connexion" name="show_location_checkbox"/>
<text name="name_tags_textbox">
Affichage des noms :
</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
index a89676d119..0a78a1bb93 100755
--- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
@@ -3,11 +3,11 @@
<panel.string name="log_in_to_change">
se connecter pour changer
</panel.string>
- <button label="Vider l'historique" name="clear_cache" tool_tip="Effacer le cache de l&apos;image de connexion, du dernier lieu, de l&apos;historique des téléportations, Web et de texture."/>
+ <button label="Vider l&apos;historique" name="clear_cache" tool_tip="Effacer le cache de l&apos;image de connexion, du dernier lieu, de l&apos;historique des téléportations, Web et de texture."/>
<text name="cache_size_label_l">
(endroits, images, web, historique des recherches)
</text>
- <check_box label="Afficher mon profil d&apos;infos dans les résultats de recherche" name="online_searchresults"/>
+ <check_box label="Afficher mon profil dans les résultats de recherche" name="online_searchresults"/>
<check_box label="Seuls mes amis et groupes voient quand je suis en ligne" name="online_visibility"/>
<check_box label="Seuls mes amis et groupes peuvent m&apos;appeler ou m&apos;envoyer un IM" name="voice_call_friends_only_check"/>
<check_box label="Fermer le micro à la fin d&apos;un appel" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
index 38e5cbe1f1..0a33463cbb 100755
--- a/indra/newview/skins/default/xui/fr/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="Annuler tous les changements" name="Revert All Changes"/>
<menu_item_call label="Charger depuis un fichier..." name="LoadFromFile"/>
<menu_item_call label="Enregistrer sous..." name="SaveToFile"/>
+ <menu_item_call label="Couleurs..." name="Colors"/>
</menu>
<menu label="Modifier" name="Edit">
<menu_item_call label="Annuler" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="Aide par mots-clés..." name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
Chargement...
- </text_editor>
+ </script_editor>
<combo_box label="Insérer..." name="Insert..."/>
<button label="Enregistrer" label_selected="Enregistrer" name="Save_btn"/>
<button label="Modifier..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml
index befe1b3bc6..bb858d5d23 100755
--- a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml
@@ -4,4 +4,13 @@
<button label="Envoyer par e-mail" name="save_to_email_btn"/>
<button label="Enreg. dans l&apos;inventaire ([AMOUNT] L$)" name="save_to_inventory_btn"/>
<button label="Enreg. sur l&apos;ordinateur" name="save_to_computer_btn"/>
+ <text name="send_to_facebook_textbox">
+ Envoyer à : [secondlife:/// Facebook]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// Twitter]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml
index 21eb7ff62c..b3b528d448 100755
--- a/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
<text name="region" value="..."/>
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="Afficher les infos de l&apos;objet"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_twitter_account.xml b/indra/newview/skins/default/xui/fr/panel_twitter_account.xml
new file mode 100644
index 0000000000..ed2208c69f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="Vous êtes connecté(e) à Twitter en tant que :"/>
+ <string name="twitter_disconnected" value="Pas connecté(e) à Twitter"/>
+ <text name="account_caption_label">
+ Pas connecté(e) à Twitter.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Connexion..." name="connect_btn"/>
+ <button label="Déconnexion" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Apprenez comment publier sur Twitter]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml b/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml
new file mode 100644
index 0000000000..2d3888f4c2
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ Que se passe-t-il ?
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="Inclure l&apos;emplacement SL" name="add_location_cb"/>
+ <check_box initial_value="true" label="Inclure une photo" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Résolution d’image">
+ <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/>
+ <combo_box.item label="640 x 480" name="640x480"/>
+ <combo_box.item label="800 x 600" name="800x600"/>
+ <combo_box.item label="1 024 x 768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtres d&apos;image">
+ <combo_box.item label="Aucun filtre" name="NoFilter"/>
+ </combo_box>
+ <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/>
+ <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l&apos;aperçu"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Envoyer tweet" name="post_photo_btn"/>
+ <button label="Annuler" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml
index 2a68ca0ddb..25920da4c3 100755
--- a/indra/newview/skins/default/xui/fr/role_actions.xml
+++ b/indra/newview/skins/default/xui/fr/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="Ces pouvoirs permettent d&apos;ajouter et de supprimer des membres du groupe et permettent aux nouveaux membres de rejoindre le groupe sans recevoir d&apos;invitation." name="Membership">
<action description="Inviter des membres dans ce groupe" longdescription="Invitez des personnes à rejoindre ce groupe en utilisant le bouton Inviter dans l&apos;onglet Membres de la section Rôles." name="member invite" value="1"/>
<action description="Expulser des membres du groupe" longdescription="Expulsez des personnes de ce groupe en utilisant le bouton Expulser dans l&apos;onglet Membres de la section Rôles. Un propriétaire peut expulser tout le monde à l&apos;exception des autres propriétaires. Si vous n&apos;êtes pas propriétaire, vous pouvez expulser un membre d&apos;un groupe uniquement si il n&apos;a que le rôle Tous et AUCUN autre rôle. Pour supprimer des membres des rôles, vous devez disposer du pouvoir correspondant." name="member eject" value="2"/>
+ <action description="Gérer la liste des résidents bannis" longdescription="Permet au membre du groupe de bannir / d&apos;annuler le bannissement des résidents de ce groupe." name="allow ban" value="51"/>
<action description="Activer Inscription libre et modifier les frais d&apos;inscription" longdescription="Activez Inscription libre pour permettre aux nouveaux membres de s&apos;inscrire sans invitation, et changez les frais d&apos;inscription dans la section Général." name="member options" value="3"/>
</action_set>
<action_set description="Ces pouvoirs permettent d&apos;ajouter, de supprimer et de modifier les rôles dans le groupe et d&apos;y assigner des membres et des pouvoirs." name="Roles">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index bca134eef3..b3ce171633 100755
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -335,6 +335,75 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="TestingDisconnect">
Test de déconnexion du client
</string>
+ <string name="SocialFlickrConnecting">
+ Connexion à Flickr...
+ </string>
+ <string name="SocialFlickrPosting">
+ Publication…
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Déconnexion de Flickr...
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ Un problème est survenu lors de la connexion à Flickr.
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ Un problème est survenu lors de la publication sur Flickr.
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ Un problème est survenu lors de la déconnexion de Flickr.
+ </string>
+ <string name="SocialTwitterConnecting">
+ Connexion à Twitter...
+ </string>
+ <string name="SocialTwitterPosting">
+ Publication…
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ Déconnexion de Twitter...
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ Un problème est survenu lors de la connexion à Twitter.
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ Un problème est survenu lors de la publication sur Twitter.
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ Un problème est survenu lors de la déconnexion de Twitter.
+ </string>
+ <string name="BlackAndWhite">
+ Noir et blanc
+ </string>
+ <string name="Colors1970">
+ Couleurs des années 1970
+ </string>
+ <string name="Intense">
+ Intense
+ </string>
+ <string name="Newspaper">
+ Presse
+ </string>
+ <string name="Sepia">
+ Sépia
+ </string>
+ <string name="Spotlight">
+ Projecteur
+ </string>
+ <string name="Video">
+ Vidéo
+ </string>
+ <string name="Autocontrast">
+ Contraste automatique
+ </string>
+ <string name="LensFlare">
+ Halo
+ </string>
+ <string name="Miniature">
+ Miniature
+ </string>
+ <string name="Toycamera">
+ Toy Camera
+ </string>
<string name="TooltipPerson">
Personne
</string>
@@ -886,6 +955,12 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="use_texture">
Utiliser la texture
</string>
+ <string name="manip_hint1">
+ Faites glisser le curseur sur l&apos;axe
+ </string>
+ <string name="manip_hint2">
+ pour le fixer sur la grille
+ </string>
<string name="texture_loading">
Chargement...
</string>
@@ -4083,6 +4158,12 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
<string name="share_alert">
Faire glisser les objets de l&apos;inventaire ici
</string>
+ <string name="flickr_post_success">
+ Vous avez publié sur Flickr.
+ </string>
+ <string name="twitter_post_success">
+ Vous avez publié sur Twitter.
+ </string>
<string name="no_session_message">
(Session IM inexistante)
</string>
@@ -4539,6 +4620,9 @@ du rapport d&apos;infraction
<string name="LocalEstimateUSD">
[AMOUNT] US$
</string>
+ <string name="Group Ban">
+ Bannissement de groupe
+ </string>
<string name="Membership">
Inscription
</string>
@@ -4961,6 +5045,12 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
<string name="Command_Destinations_Label">
Destinations
</string>
+ <string name="Command_Facebook_Label">
+ Facebook
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
Gestes
</string>
@@ -5009,6 +5099,9 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
<string name="Command_Speak_Label">
Parler
</string>
+ <string name="Command_Twitter_Label">
+ Twitter
+ </string>
<string name="Command_View_Label">
Caméra
</string>
@@ -5039,6 +5132,12 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
<string name="Command_Destinations_Tooltip">
Destinations intéressantes
</string>
+ <string name="Command_Facebook_Tooltip">
+ Publier sur Facebook
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ Charger sur Flickr
+ </string>
<string name="Command_Gestures_Tooltip">
Gestes de votre avatar
</string>
@@ -5087,6 +5186,9 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
<string name="Command_Speak_Tooltip">
Parler aux personnes près de vous en utilisant votre micro
</string>
+ <string name="Command_Twitter_Tooltip">
+ Twitter
+ </string>
<string name="Command_View_Tooltip">
Changer l&apos;angle de la caméra
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_big_preview.xml b/indra/newview/skins/default/xui/it/floater_big_preview.xml
new file mode 100644
index 0000000000..7bc50a6d39
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="ANTEPRIMA"/>
diff --git a/indra/newview/skins/default/xui/it/floater_facebook.xml b/indra/newview/skins/default/xui/it/floater_facebook.xml
new file mode 100644
index 0000000000..89d58f4e67
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="PUBBLICA SU FACEBOOK">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="STATO" name="panel_facebook_status"/>
+ <panel label="FOTO" name="panel_facebook_photo"/>
+ <panel label="REGISTRATI" name="panel_facebook_place"/>
+ <panel label="AMICI" name="panel_facebook_friends"/>
+ <panel label="ACCOUNT" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Errore
+ </text>
+ <text name="connection_loading_text">
+ Caricamento...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_flickr.xml b/indra/newview/skins/default/xui/it/floater_flickr.xml
new file mode 100644
index 0000000000..c19eb337af
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="CARICA SU FLICKR">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="FOTO" name="panel_flickr_photo"/>
+ <panel label="ACCOUNT" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Errore
+ </text>
+ <text name="connection_loading_text">
+ Caricamento...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_perms_default.xml b/indra/newview/skins/default/xui/it/floater_perms_default.xml
new file mode 100644
index 0000000000..3d1fd94b69
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="DIRITTI DI CREAZIONE PREDEFINITI">
+ <panel label="Diritti predefiniti" name="default permissions"/>
+ <button label="OK" label_selected="OK" name="ok"/>
+ <button label="Annulla" label_selected="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
index eeba54b0ca..728d089205 100755
--- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
@@ -44,7 +44,7 @@
<combo_box.item label="Età &gt; Residente adulto in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Età &gt; Residente minorenne fuori da Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Assalto &gt; sandbox da combattimento / area pericolosa" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Assalto &gt; Area sicura" name="Assault__Safe_area"/>
+ <combo_box.item label="Assalto &gt; Colpire, spingere o urtare un altro residente in un&apos;area Sicura" name="Assault__Safe_area"/>
<combo_box.item label="Assalto &gt; Test di armi in sandbox" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Commercio &gt; Problema nella consegna di un prodotto o servizio" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="Divulgazione &gt; Informazioni del mondo reale" name="Disclosure__Real_world_information"/>
@@ -58,25 +58,25 @@
<combo_box.item label="Truffa &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Truffa &gt; Terreno" name="Fraud__Land"/>
<combo_box.item label="Truffa &gt; Multilivello o catena di Sant&apos;Antonio" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="Truffa &gt; Dollari US$" name="Fraud__US$"/>
+ <combo_box.item label="Frode &gt; L$ o USD $" name="Fraud__US$"/>
<combo_box.item label="Molestie &gt; Territori adibiti a pubblicità / spam visivo" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="Molestie &gt; Diffamazione di individui o gruppi" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="Molestie &gt; Impedimento di movimenti" name="Harassment__Impeding_movement"/>
<combo_box.item label="Molestie &gt; Molestie sessuali" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="Molestie &gt; Sollecitare/incitare altri a violare i Termini di Servizio" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Molestia &gt; Comportamento mirato a disturbare" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="Molestie &gt; Abusi verbali" name="Harassment__Verbal_abuse"/>
<combo_box.item label="Indecenza &gt; Condotta o contenuti largamente offensivi" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="Indecenza &gt; Nome di un avatar inappropriato" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="Indecenza &gt; Contenuto o condotta inappropriata in una regione con accesso Generale" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Indecenza &gt; Comportamenti o contenuti non appropriati per la categoria di accesso della regione" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="Indecenza &gt; Contenuto o condotta inappropriata in una regione con accesso Moderato" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="Violazione della proprietà intellettuale &gt; Rimozione contenuti" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="Violazione della proprietà intellettuale &gt; CopyBot o sblocco di permessi" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="Intolleranza" name="Intolerance"/>
<combo_box.item label="Terreno &gt; Abuso delle risorse di una sandbox" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="Terreno &gt; Invasione &gt; Oggetti/textures" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Terreno &gt; Invasione &gt; Oggetti o texture" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Terreno &gt; Invasione &gt; Particelle" name="Land__Encroachment__Particles"/>
<combo_box.item label="Terreno &gt; Invasione &gt; Alberi/piante" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Chiedere l&apos;elemosina/gioco d&apos;azzardo" name="Wagering_gambling"/>
+ <combo_box.item label="Scommesse o gioco d&apos;azzardo" name="Wagering_gambling"/>
<combo_box.item label="Altro" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/it/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/it/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..4f95ef88b1
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="COLORI SCRIPT">
+ <text name="color_pickers_label">
+ Seleziona i colori desiderati:
+ </text>
+ <text name="text_label">
+ Testo
+ </text>
+ <text name="cursor_label">
+ Cursore
+ </text>
+ <text name="background_label">
+ Sfondo
+ </text>
+ <text name="datatype_label">
+ Tipi di dati
+ </text>
+ <text name="event_label">
+ Eventi
+ </text>
+ <text name="string_literal_label">
+ Espressioni letterali stringa
+ </text>
+ <text name="constant_label">
+ Costante
+ </text>
+ <text name="flow_control_label">
+ Controllo di flusso
+ </text>
+ <text name="function_label">
+ Funzione
+ </text>
+ <text name="comment_label">
+ Commento
+ </text>
+ <script_editor name="Script Preview">
+ /* Uno script di esempio */
+default
+{
+ state_entry()
+ {
+ // Comment
+ string greeting = &quot;Salve&quot;;
+ llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml
index bff6081bdf..16289ac7af 100755
--- a/indra/newview/skins/default/xui/it/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="ANTEPRIMA FOTOGRAFIA">
+<floater name="Snapshot" title="ISTANTANEA">
<floater.string name="unknown">
sconosciuto
</floater.string>
@@ -61,5 +61,11 @@
<check_box label="HUD" name="hud_check"/>
<check_box label="Congela il frame (tutto schermo)" name="freeze_frame_check"/>
<check_box label="Aggiornamento automatico" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ Filtro:
+ </text>
+ <combo_box name="filters_combobox" tool_tip="Filtri immagini">
+ <combo_box.item label="Nessun filtro" name="NoFilter"/>
+ </combo_box>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_stats.xml b/indra/newview/skins/default/xui/it/floater_stats.xml
index 1d850516b7..7516af957e 100755
--- a/indra/newview/skins/default/xui/it/floater_stats.xml
+++ b/indra/newview/skins/default/xui/it/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="Render" name="render">
<stat_bar label="KTris per fotogramma" name="ktrisframe"/>
<stat_bar label="KTris per secondo" name="ktrissec"/>
- <stat_bar label="Totale oggetti" name="objs"/>
+ <stat_bar label="Totale oggetti" name="totalobjs"/>
+ <stat_bar label="Oggetti nella cache" name="cachedobjs"/>
<stat_bar label="Nuovi oggetti" name="newobjs"/>
<stat_bar label="Hit rate della cache per l&apos;oggetto" name="object_cache_hits"/>
<stat_bar label="Occlusion query eseguite" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 468f284ccb..efd1ea808a 100755
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -72,7 +72,7 @@
<check_box label="Modifica parti collegate" name="checkbox edit linked parts"/>
<button label="Collegamento" name="link_btn"/>
<button label="Scollega" name="unlink_btn"/>
- <check_box label="" name="checkbox uniform"/>
+ <check_box label="Allunga entrambi i lati" name="checkbox uniform"/>
<text label="Allunga entrambi i lati" name="checkbox uniform label">
Allunga entrambi i lati
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_twitter.xml b/indra/newview/skins/default/xui/it/floater_twitter.xml
new file mode 100644
index 0000000000..c903705e69
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="TWITTER">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="COMPONI" name="panel_twitter_photo"/>
+ <panel label="ACCOUNT" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Errore
+ </text>
+ <text name="connection_loading_text">
+ Caricamento...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/menu_conversation.xml b/indra/newview/skins/default/xui/it/menu_conversation.xml
index 24486f2af2..d4b8d66785 100644
--- a/indra/newview/skins/default/xui/it/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/it/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="Disattiva audio di tutti" name="ModerateVoiceMute"/>
<menu_item_call label="Riattiva audio di tutti" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="Espelli membro" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml
index 9bcc0879d2..537cc2dd8e 100755
--- a/indra/newview/skins/default/xui/it/menu_object.xml
+++ b/indra/newview/skins/default/xui/it/menu_object.xml
@@ -21,6 +21,7 @@
<context_menu label="Gestisci" name="Remove">
<menu_item_call label="Segnala abuso" name="Report Abuse..."/>
<menu_item_call label="Blocca" name="Object Mute"/>
+ <menu_item_call label="Sblocca" name="Object Unmute"/>
<menu_item_call label="Restituisci" name="Return..."/>
</context_menu>
<menu_item_call label="Prendi" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 3e6589927d..f535a53e66 100755
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -36,6 +36,9 @@
<menu_item_check label="Chat nei dintorni..." name="Nearby Chat"/>
<menu_item_check label="Parla" name="Speak"/>
<menu_item_check label="Registro conversazioni..." name="Conversation Log..."/>
+ <menu_item_call label="Facebook..." name="Facebook"/>
+ <menu_item_call label="Twitter..." name="Twitter"/>
+ <menu_item_call label="Flickr..." name="Flickr"/>
<menu label="Manipolazione voce" name="VoiceMorphing">
<menu_item_check label="Nessuna manipolazione voce" name="NoVoiceMorphing"/>
<menu_item_check label="Anteprima..." name="Preview"/>
@@ -150,7 +153,8 @@
<menu_item_check label="Posiziona nella griglia" name="Snap to Grid"/>
<menu_item_call label="Posiziona coordinate XY dell&apos;oggetto sulla griglia" name="Snap Object XY to Grid"/>
<menu_item_call label="Usa la selezione per la griglia" name="Use Selection for Grid"/>
- <menu_item_call label="Opzioni della griglia" name="Grid Options"/>
+ <menu_item_call label="Opzioni della griglia..." name="Grid Options"/>
+ <menu_item_call label="Imposta diritti predefiniti..." name="Set default permissions"/>
</menu>
<menu label="Carica sul server" name="Upload">
<menu_item_call label="Immagine ([COST] L$)..." name="Upload Image"/>
@@ -158,7 +162,6 @@
<menu_item_call label="Animazione ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Modella..." name="Upload Model"/>
<menu_item_call label="In blocco ([COST] L$ per file)..." name="Bulk Upload"/>
- <menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/>
</menu>
<menu_item_call label="Annulla" name="Undo"/>
<menu_item_call label="Ripeti" name="Redo"/>
@@ -288,6 +291,7 @@
<menu_item_check label="Aggiorna tipo" name="Update Type"/>
<menu_item_check label="Info livello dettaglio" name="LOD Info"/>
<menu_item_check label="Crea coda" name="Build Queue"/>
+ <menu_item_check label="Particelle" name="Particles"/>
<menu_item_check label="Giunti" name="Joints"/>
<menu_item_check label="Vettori vento" name="Wind Vectors"/>
<menu_item_check label="Complessità rendering" name="rendercomplexity"/>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 45c89ecd7a..11211e01fe 100755
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -210,6 +210,22 @@ Aggiungi questo potere a &apos;[ROLE_NAME]&apos;?
Aggiungi questo potere a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ Stai per aggiungere l&apos;abilità &apos;[ACTION_NAME]&apos; al ruolo &apos;[ROLE_NAME]&apos;.
+
+ *AVVISO*
+A tutti i membri che in un ruolo hanno questa abilità verranno concesse anche le abilità &apos;[ACTION_NAME_2]&apos; e &apos;[ACTION_NAME_3]&apos;
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ Stai rimuovendo l&apos;abilità &apos;[ACTION_NAME]&apos; dal ruolo &apos;[ROLE_NAME]&apos;.
+
+ *AVVISO*
+Rimuovendo questa abilità, NON rimuovi le abilità &apos;[ACTION_NAME_2]&apos; e &apos;[ACTION_NAME_3]&apos;.
+
+Se non desideri che queste abilità siano assegnate a questo ruolo, disattivale immediatamente.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
Stai per espellere [AVATAR_NAME] dal gruppo.
<usetemplate ignoretext="Conferma l&apos;espulsione di un partecipante dal gruppo" name="okcancelignore" notext="Annulla" yestext="Espelli"/>
@@ -1580,6 +1596,14 @@ Lasciare il gruppo?
Impossibile abbandonare il gruppo. Non puoi abbandonare il gruppo perché sei l&apos;ultimo proprietario del gruppo. Devi prima assegnare a un altro membro il ruolo di proprietario.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
+ <notification name="GroupDepartError">
+ Impossibile abbandonare il gruppo: [reason].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GroupDepart">
+ Hai abbandonato il gruppo [group_name].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Vuoi veramente espellere tutti i residenti dalla griglia?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti i residenti"/>
@@ -2465,6 +2489,12 @@ Prova a selezionare una parte di terreno più piccola.
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4042,6 +4072,10 @@ Prova a selezionare un pezzo di terreno più piccolo.
Impossibile spostare i file. Il percorso precedente è stato ripristinato.
<usetemplate ignoretext="Impossibile spostare i file. Il percorso precedente è stato ripristinato." name="okignore" yestext="OK"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ Si è verificato un problema nel salvare i diritti predefiniti per il motivo seguente: [REASON]. Riprova più tardi.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
Il file della cronologia del file sta ancora eseguendo l&apos;operazione precedente. Riprova nuovamente tra qualche minuto oppure chatta con un&apos;altra persona.
<usetemplate name="okbutton" yestext="OK"/>
diff --git a/indra/newview/skins/default/xui/it/panel_facebook_account.xml b/indra/newview/skins/default/xui/it/panel_facebook_account.xml
new file mode 100644
index 0000000000..e887e7e4dc
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="Sei in collegamento con Facebook come:"/>
+ <string name="facebook_disconnected" value="Non in collegamento con Facebook"/>
+ <text name="account_caption_label">
+ Non in collegamento con Facebook.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Collegamento..." name="connect_btn"/>
+ <button label="Interrompi collegamento" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Come pubblicare su Facebook]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_facebook_friends.xml b/indra/newview/skins/default/xui/it/panel_facebook_friends.xml
new file mode 100644
index 0000000000..917dbec4d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="Attualmente non hai amici su Facebook che sono anche residenti in Second Life. Invita i tuoi amici di Facebook a partecipare a Second Life!"/>
+ <string name="facebook_friends_no_connected" value="Attualmente non sei in collegamento con Facebook. Accedi alla scheda Account per collegarti e attivare questa funzionalità."/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="Amici SL"/>
+ <accordion_tab name="tab_suggested_friends" title="Aggiungi queste persone come amici SL"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ Non in collegamento con Facebook.
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_facebook_photo.xml b/indra/newview/skins/default/xui/it/panel_facebook_photo.xml
new file mode 100644
index 0000000000..20ec7f0a70
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini">
+ <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1200x630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtri immagini">
+ <combo_box.item label="Nessun filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/>
+ <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l&apos;anteprima"/>
+ <text name="caption_label">
+ Commento (facoltativo):
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Pubblica" name="post_photo_btn"/>
+ <button label="Annulla" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_facebook_place.xml b/indra/newview/skins/default/xui/it/panel_facebook_place.xml
new file mode 100644
index 0000000000..297f0caccc
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ Racconta dove ti trovi:
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="Pubblica" name="post_place_btn"/>
+ <button label="Annulla" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_facebook_status.xml b/indra/newview/skins/default/xui/it/panel_facebook_status.xml
new file mode 100644
index 0000000000..d373fb0717
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ A cosa stai pensando?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="Pubblica" name="post_status_btn"/>
+ <button label="Annulla" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_flickr_account.xml b/indra/newview/skins/default/xui/it/panel_flickr_account.xml
new file mode 100644
index 0000000000..573754a68e
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="Sei in collegamento con Flickr come:"/>
+ <string name="flickr_disconnected" value="Non in collegamento con Flickr"/>
+ <text name="account_caption_label">
+ Non in collegamento con Flickr.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Collegamento..." name="connect_btn"/>
+ <button label="Interrompi collegamento" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Come pubblicare su Flickr]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_flickr_photo.xml b/indra/newview/skins/default/xui/it/panel_flickr_photo.xml
new file mode 100644
index 0000000000..064c302b14
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_flickr_photo.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini">
+ <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtri immagini">
+ <combo_box.item label="Nessun filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/>
+ <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l&apos;anteprima"/>
+ <text name="title_label">
+ Titolo:
+ </text>
+ <text name="description_label">
+ Descrizione:
+ </text>
+ <check_box initial_value="true" label="Includi l&apos;ubicazione SL al termine della descrizione" name="add_location_cb"/>
+ <text name="tags_label">
+ Tag:
+ </text>
+ <text name="tags_help_label">
+ Separa tag con spazi
+Usa &quot;&quot; per tag con più di una parola
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Categoria del contenuto di Flickr">
+ <combo_box.item label="Categoria Flickr Sicuro" name="SafeRating"/>
+ <combo_box.item label="Categoria Flickr Moderato" name="ModerateRating"/>
+ <combo_box.item label="Categoria Flickr Censurato" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Carica" name="post_photo_btn"/>
+ <button label="Annulla" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/it/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..f4aab7991d
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_group_bulk_ban.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Espelli residenti" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (caricamento...)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ Espulsioni di gruppo non inviate: troppi residenti selezionati Le espulsioni di gruppo possono includere un massimo di 100 persone per ciascuna richiesta.
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ Espulsione di gruppo non inviata: non hai l&apos;abilità &apos;Gestisci lista espulsi&apos;.
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ Espulsione di gruppo non inviata: il gruppo ha raggiunto il numero massimo di espulsioni consentite.
+ </panel.string>
+ <panel.string name="partial_ban">
+ Alcune espulsioni di gruppo non sono state inviate:
+[REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ Le espulsioni di gruppo non sono state inviate:
+[REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - I residenti seguenti sono già stati espulsi: [RESIDENTS].
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - È stato raggiunto il numero massimo di espulsioni; i seguenti agenti non sono stati espulsi: [RESIDENTS].
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - Non puoi espellerti dal gruppo.
+ </panel.string>
+ <text name="help_text">
+ Puoi selezionare più residenti da espellere dal gruppo. Per iniziare, fai clic su &apos;Apri il selettore di residenti&apos;.
+ </text>
+ <button label="Apri il selettore di residenti" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="Tieni premuto Ctrl e fai clic sui nomi dei residenti per selezionare più nomi"/>
+ <button label="Rimuovi i selezionati dalla lista" name="remove_button" tool_tip="Rimuove i residenti selezionati dalla lista espulsi"/>
+ <button label="Espelli residenti" name="ban_button"/>
+ <button label="Annulla" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ Espulsione di gruppo
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_invite.xml b/indra/newview/skins/default/xui/it/panel_group_invite.xml
index 1b57eba3f0..01edb7391a 100755
--- a/indra/newview/skins/default/xui/it/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_invite.xml
@@ -22,7 +22,7 @@
Scegli che ruolo assegnare loro:
</text>
<combo_box name="role_name" tool_tip="Scegli dall&apos;elenco dei ruoli ai quali ti è consentito assegnare i membri"/>
- <button label="Manda gli inviti" name="ok_button"/>
+ <button label="Invia inviti" name="invite_button"/>
<button label="Annulla" name="cancel_button"/>
<string name="GroupInvitation">
Invito di gruppo
diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml
index 79e9cd73d2..4d414d47ce 100755
--- a/indra/newview/skins/default/xui/it/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml
@@ -25,13 +25,14 @@ cliccando sui loro nomi.
</name_list>
<button label="Invita" name="member_invite"/>
<button label="Espelli" name="member_eject"/>
+ <button label="Espelli membri" name="member_ban"/>
</panel>
<panel label="RUOLI" name="roles_sub_tab">
<panel.string name="help_text">
I ruoli hanno un titolo con un elenco di abilità permesse
-che i membri possono eseguire. I membri possono avere
-uno o più ruoli. Un gruppo può avere fino a 10 ruoli,
-fra cui il ruolo base o &quot;Tutti&quot; e il ruolo del Proprietario, ovvero il capogruppo.
+ che i membri possono eseguire. I membri possono avere
+ uno o più ruoli. Un gruppo può avere fino a 10 ruoli,
+ fra cui il ruolo &apos;Tutti&apos; e il ruolo &apos;Proprietario&apos;, ovvero il capogruppo.
</panel.string>
<panel.string name="cant_delete_role">
I ruoli &apos;Tutti&apos; e &apos;Proprietari&apos; sono speciali e non possono essere eliminati.
@@ -50,12 +51,27 @@ fra cui il ruolo base o &quot;Tutti&quot; e il ruolo del Proprietario, ovvero il
</panel>
<panel height="148" label="ABILITÀ" name="actions_sub_tab" tool_tip="Puoi vedere la descrizione dell&apos;abilità e quali ruoli o membri possono eseguirla.">
<panel.string name="help_text">
- Le abilità permettono ai membri nei ruoli di fare cose specifiche
-in questo gruppo. C&apos;è una vasta gamma di abilità.
+ Le abilità consentono ai membri nei ruoli di eseguire specifiche
+ attività nel gruppo. Ci sono vari tipi di abilità.
</panel.string>
<filter_editor label="Filtra Abilità" name="filter_input"/>
<scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Seleziona un&apos;abilità per vedere maggiori dettagli."/>
</panel>
+ <panel label="RESIDENTI ESPULSI" name="banlist_sub_tab" tool_tip="Visualizza i residenti espulsi dal gruppo.">
+ <panel.string name="help_text">
+ Nessun residente incluso nella lista espulsi potrà iscriversi al gruppo.
+ </panel.string>
+ <panel.string name="ban_count_template">
+ Numero espulsi: [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="Residente" name="name"/>
+ <name_list.columns label="Data espulsione" name="ban_date"/>
+ </name_list>
+ <button label="Espelli residenti" name="ban_create" tool_tip="Espelli residenti dal gruppo"/>
+ <button label="Annulla espulsioni" name="ban_delete" tool_tip="Annulla l&apos;espulsione dal gruppo per i residenti selezionati"/>
+ <button name="ban_refresh" tool_tip="Aggiorna la lista espulsi"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml
index 2afde40940..1ce38ac40c 100755
--- a/indra/newview/skins/default/xui/it/panel_login.xml
+++ b/indra/newview/skins/default/xui/it/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php?lang=it
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- ACCEDI
- </text>
- <text name="username_text">
- Nome utente:
- </text>
- <combo_box name="username_combo" tool_tip="Il nome utente che hai scelto durante la registrazione, come robby12 o Stella Soleggiato"/>
- <text name="password_text">
- Password:
- </text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- Inizia da:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="La mia ultima ubicazione" name="MyLastLocation"/>
- <combo_box.item label="Casa mia" name="MyHome"/>
- <combo_box.item label="&lt;Scrivi nome regione&gt;" name="Typeregionname"/>
- </combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- Ti serve aiuto con la fase di accesso?
- </text>
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="Nome utente" name="username_combo" tool_tip="Il nome utente che hai scelto durante la registrazione, come roby12 o Stella Solare"/>
+ <line_editor label="Password" name="password_edit"/>
+ <check_box label="Ricordami" name="remember_check"/>
<text name="forgot_password_text">
- Hai dimenticato il nome utente o la password?
+ Password dimenticata
</text>
<button label="Accedi" name="connect_btn"/>
- <check_box label="Ricorda password" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- CREA IL TUO ACCOUNT
+ <text name="At_My_Last_Location_Label">
+ all&apos;ultima ubicazione
</text>
- <button label="Inizia adesso" name="create_new_account_btn"/>
+ <combo_box label="I miei luoghi preferiti" name="start_location_combo">
+ <combo_box.item label="Casa mia" name="MyHome"/>
+ </combo_box>
+ <button label="Accedi" name="connect_favorite_btn"/>
+ <line_editor label="Digita un&apos;ubicazione" name="location_edit"/>
+ <button label="Accedi" name="connect_location_btn"/>
+ <combo_box label="Seleziona griglia" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_login_first.xml b/indra/newview/skins/default/xui/it/panel_login_first.xml
new file mode 100644
index 0000000000..6f120a17fc
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php?lang=it
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="Nome utente" name="username_combo" tool_tip="Il nome utente che hai scelto durante la registrazione, come roby12 o Stella Solare"/>
+ <line_editor label="Password" name="password_edit"/>
+ <button label="Accedi" name="connect_btn"/>
+ <check_box label="Ricordami" name="remember_check"/>
+ <text name="forgot_password_text">
+ Password dimenticata
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ Il primo passo è a Learning Island. Trova il portale di uscita!
+ </text>
+ <text name="image_caption_right">
+ Quindi esplora Social Island e incontra altri nuovi residenti.
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
index 224780f234..ccca27cbfd 100755
--- a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="Mostra selezione griglia all&apos;accesso" name="show_grid_selection_check"/>
<check_box label="Mostra menu Avanzato" name="show_advanced_menu_check"/>
<check_box label="Mostra menu Sviluppatore" name="show_develop_menu_check"/>
+ <button label="Diritti di creazione predefiniti" name="default_creation_permissions"/>
</panel>
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 45cc06c2ea..ef999d03c0 100755
--- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
@@ -30,14 +30,10 @@
<combo_box.item label="Generale e Moderato" name="Desired_Mature"/>
<combo_box.item label="Generale" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- Luogo di partenza:
+ <check_box label="Mostra le ubicazioni preferite sulla schermata di accesso" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (Le vedranno anche gli altri utenti che usano questo computer)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Ultimo luogo visitato" name="MyLastLocation" tool_tip="Vai automaticamente all&apos;ultimo luogo visitato quando effettui l&apos;accesso."/>
- <combo_box.item label="Casa mia" name="MyHome" tool_tip="Vai automaticamente a casa quando effettui l&apos;accesso"/>
- </combo_box>
- <check_box initial_value="true" label="Mostra con il login" name="show_location_checkbox"/>
<text name="name_tags_textbox">
Nome:
</text>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
index 241ed8f162..2a73b66c9e 100755
--- a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
<text name="cache_size_label_l">
(Luoghi, immagini, web, cronologia ricerche)
</text>
- <check_box label="Mostra il mio profilo info nei risultati di ricerca" name="online_searchresults"/>
+ <check_box label="Mostra il mio profilo nei risultati delle ricerche" name="online_searchresults"/>
<check_box label="Solo amici e gruppi mi vedono online" name="online_visibility"/>
<check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/>
<check_box label="Spegnere il microfono alla chiusura delle chiamate" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/it/panel_script_ed.xml b/indra/newview/skins/default/xui/it/panel_script_ed.xml
index feee8b1927..3cbdadbac8 100755
--- a/indra/newview/skins/default/xui/it/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/it/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="Annulla tutte le modifiche" name="Revert All Changes"/>
<menu_item_call label="Carica da file..." name="LoadFromFile"/>
<menu_item_call label="Salva su file..." name="SaveToFile"/>
+ <menu_item_call label="Colori..." name="Colors"/>
</menu>
<menu label="Modifica" name="Edit">
<menu_item_call label="Annulla" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="Aiuto con parole chiave..." name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
Caricamento in corso...
- </text_editor>
+ </script_editor>
<combo_box label="Inserisci..." name="Insert..."/>
<button label="Salva" label_selected="Salva" name="Save_btn"/>
<button label="Modifica..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml
index f2d42c5197..a043e5add6 100755
--- a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml
@@ -4,4 +4,13 @@
<button label="E-mail" name="save_to_email_btn"/>
<button label="Salva nell&apos;inventario (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="Salva sul mio computer" name="save_to_computer_btn"/>
+ <text name="send_to_facebook_textbox">
+ Invia a: [secondlife:/// Facebook]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// Twitter]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml
index 2ba4baacaf..050298ffcf 100755
--- a/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="Mostra informazioni dell&apos;oggetto"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_twitter_account.xml b/indra/newview/skins/default/xui/it/panel_twitter_account.xml
new file mode 100644
index 0000000000..7eb3968f75
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="Sei in collegamento con Twitter come:"/>
+ <string name="twitter_disconnected" value="Non in collegamento con Twitter"/>
+ <text name="account_caption_label">
+ Non in collegamento con Twitter.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Collegamento..." name="connect_btn"/>
+ <button label="Interrompi collegamento" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Come pubblicare su Twitter]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_twitter_photo.xml b/indra/newview/skins/default/xui/it/panel_twitter_photo.xml
new file mode 100644
index 0000000000..740ec3961f
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ Cosa sta succedendo?
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="Includi l&apos;ubicazione in SL" name="add_location_cb"/>
+ <check_box initial_value="true" label="Includi una foto" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini">
+ <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtri immagini">
+ <combo_box.item label="Nessun filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/>
+ <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l&apos;anteprima"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Tweetta" name="post_photo_btn"/>
+ <button label="Annulla" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml
index 3ccb674ed0..80d65a9c74 100755
--- a/indra/newview/skins/default/xui/it/role_actions.xml
+++ b/indra/newview/skins/default/xui/it/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="Queste abilità permettono di aggiungere e rimuovere membri dal gruppo e consentono ai nuovi membri di aderire al gruppo senza invito." name="Membership">
<action description="Invita persone in questo gruppo" longdescription="Invita persone in questo gruppo usando il pulsante Invita nella sezione Ruoli &gt; scheda membri." name="member invite" value="1"/>
<action description="Espelli membri da questo gruppo" longdescription="Espelli membri dal gruppo usando il pulsante Espelli nella sezione Ruoli &gt; scheda membri. Un proprietario può espellere chiunque tranne un altro proprietario. Se non sei un proprietario, un membro può essere espulso da un gruppo soltanto qualora abbia soltanto il ruolo Tutti, e nessun altro ruolo. Per rimuovere membri dai ruoli, devi avere l&apos;Abilità corrispondente." name="member eject" value="2"/>
+ <action description="Gestisci lista espulsi" longdescription="Consenti ai membri del gruppo di espellere / riammettere i residenti nel gruppo." name="allow ban" value="51"/>
<action description="Seleziona Iscrizione libera e modifica la Quota d&apos;iscrizione" longdescription="Seleziona Iscrizione libera per permettere ai nuovi membri di aderire senza invito e modifica la quota d&apos;iscrizione nella scheda Generale." name="member options" value="3"/>
</action_set>
<action_set description="Queste Abilità permettono di aggiungere, rimuovere, cambiare i ruoli del gruppo, aggiungere e rimuovere membri dai ruoli, nonché assegnare abilità ai ruoli." name="Roles">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 3835907f01..17ce8aaf5e 100755
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -332,6 +332,75 @@ Prova ad accedere nuovamente tra un minuto.
<string name="TestingDisconnect">
Verifica scollegamento viewer
</string>
+ <string name="SocialFlickrConnecting">
+ Collegamento a Flickr...
+ </string>
+ <string name="SocialFlickrPosting">
+ Caricamento post...
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Interruzione del collegamento con Flickr...
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ Problema nel collegamento a Flickr
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ Problema nel caricamento post su Flickr
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ Problema nell&apos;interruzione del collegamento da Flickr
+ </string>
+ <string name="SocialTwitterConnecting">
+ Collegamento a Twitter...
+ </string>
+ <string name="SocialTwitterPosting">
+ Caricamento post...
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ Interruzione del collegamento con Twitter...
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ Problema nel collegamento a Twitter
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ Problema nel caricamento post su Twitter
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ Problema nell&apos;interruzione del collegamento da Twitter
+ </string>
+ <string name="BlackAndWhite">
+ Bianco e nero
+ </string>
+ <string name="Colors1970">
+ Colori anni &apos;70
+ </string>
+ <string name="Intense">
+ Intenso
+ </string>
+ <string name="Newspaper">
+ Giornale
+ </string>
+ <string name="Sepia">
+ Seppia
+ </string>
+ <string name="Spotlight">
+ Faretto
+ </string>
+ <string name="Video">
+ Video
+ </string>
+ <string name="Autocontrast">
+ Auto contrasto
+ </string>
+ <string name="LensFlare">
+ Bagliore
+ </string>
+ <string name="Miniature">
+ Miniatura
+ </string>
+ <string name="Toycamera">
+ Toy camera
+ </string>
<string name="TooltipPerson">
Persona
</string>
@@ -880,6 +949,12 @@ Prova ad accedere nuovamente tra un minuto.
<string name="use_texture">
Usa texture
</string>
+ <string name="manip_hint1">
+ Sposta il cursore sul righello
+ </string>
+ <string name="manip_hint2">
+ per bloccare sulla griglia
+ </string>
<string name="texture_loading">
Caricamento in corso...
</string>
@@ -3996,6 +4071,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="conference-title-incoming">
Chiamata in conferenza con [AGENT_NAME]
</string>
+ <string name="flickr_post_success">
+ Hai pubblicato su Flickr.
+ </string>
+ <string name="twitter_post_success">
+ Hai pubblicato su Twitter.
+ </string>
<string name="no_session_message">
(La sessione IM non esiste)
</string>
@@ -4452,6 +4533,9 @@ Segnala abuso
<string name="LocalEstimateUSD">
US$ [AMOUNT]
</string>
+ <string name="Group Ban">
+ Espulsione di gruppo
+ </string>
<string name="Membership">
Abbonamento
</string>
@@ -4874,6 +4958,12 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Command_Destinations_Label">
Destinazioni
</string>
+ <string name="Command_Facebook_Label">
+ Facebook
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
Gesture
</string>
@@ -4922,6 +5012,9 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Command_Speak_Label">
Parla
</string>
+ <string name="Command_Twitter_Label">
+ Twitter
+ </string>
<string name="Command_View_Label">
Controlli fotocamera
</string>
@@ -4952,6 +5045,12 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Command_Destinations_Tooltip">
Destinazioni interessanti
</string>
+ <string name="Command_Facebook_Tooltip">
+ Pubblica su Facebook
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ Carica su Flickr
+ </string>
<string name="Command_Gestures_Tooltip">
Gesti per il tuo avatar
</string>
@@ -5000,6 +5099,9 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Command_Speak_Tooltip">
Parla con persone vicine usando il microfono
</string>
+ <string name="Command_Twitter_Tooltip">
+ Twitter
+ </string>
<string name="Command_View_Tooltip">
Modifica angolo fotocamera
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_big_preview.xml b/indra/newview/skins/default/xui/ja/floater_big_preview.xml
new file mode 100644
index 0000000000..bb55db7a13
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="プレビュー"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_facebook.xml b/indra/newview/skins/default/xui/ja/floater_facebook.xml
new file mode 100644
index 0000000000..d99841f0de
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="FACEBOOK に投稿">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="ステータス" name="panel_facebook_status"/>
+ <panel label="写真" name="panel_facebook_photo"/>
+ <panel label="チェックイン" name="panel_facebook_place"/>
+ <panel label="フレンド" name="panel_facebook_friends"/>
+ <panel label="アカウント" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ エラー
+ </text>
+ <text name="connection_loading_text">
+ ロード中...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_flickr.xml b/indra/newview/skins/default/xui/ja/floater_flickr.xml
new file mode 100644
index 0000000000..e406d17d37
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="FLICKR にアップロード">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="写真" name="panel_flickr_photo"/>
+ <panel label="アカウント" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ エラー
+ </text>
+ <text name="connection_loading_text">
+ ロード中...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_perms_default.xml b/indra/newview/skins/default/xui/ja/floater_perms_default.xml
new file mode 100644
index 0000000000..1eac6b9e35
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="デフォルトの作成権限">
+ <panel label="デフォルト権限" name="default permissions"/>
+ <button label="OK" label_selected="OK" name="ok"/>
+ <button label="取り消し" label_selected="取り消し" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
index dc34441535..9021be5dda 100755
--- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
@@ -44,7 +44,7 @@
<combo_box.item label="年齢 &gt; 成人の住人が Teen Second Life にいる" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="年齢 &gt; 未成年の住人がTeen Second Life の外にいる" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="攻撃>コンバット・サンドボックス/危険なエリア" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="攻撃>安全なエリア" name="Assault__Safe_area"/>
+ <combo_box.item label="攻撃 &gt; 安全エリアで他の住人を銃撃、プッシュ、または突き飛ばす" name="Assault__Safe_area"/>
<combo_box.item label="攻撃>武器テスト用サンドボックス" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="商取引>製品またはサービスの提供が行われない" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="開示>リアルワールドの情報" name="Disclosure__Real_world_information"/>
@@ -58,25 +58,25 @@
<combo_box.item label="詐欺> L$" name="Fraud__L$"/>
<combo_box.item label="詐欺>土地" name="Fraud__Land"/>
<combo_box.item label="詐欺>マルチ商法またはチェーンメール" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="詐欺> US$" name="Fraud__US$"/>
+ <combo_box.item label="詐欺 &gt; リンデンドルまたは米ドル" name="Fraud__US$"/>
<combo_box.item label="嫌がらせ>広告委託/視覚的なスパム" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="嫌がらせ>個人またはグループの中傷" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="嫌がらせ>移動の妨害" name="Harassment__Impeding_movement"/>
<combo_box.item label="嫌がらせ>性的な嫌がらせ" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="嫌がらせ>利用規約(ToS)に違反する行為を行うよう他者を勧誘/扇動" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="ハラスメント &gt; 対象者を定めて嫌がらせを目的とした行為" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="嫌がらせ>暴言" name="Harassment__Verbal_abuse"/>
<combo_box.item label="わいせつ>著しく不快であると見なされるコンテンツまたは行為" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="わいせつ>不適切なアバター名" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="わいせつ>PG地域での不適切なコンテンツまたは行為" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="わいせつ &gt; 地域(リージョン)のレーティング区分に対して不適切なコンテンツまたは行為" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="わいせつ &gt; 「Moderate」指定の地域での不適切なコンテンツまたは行為" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="知的財産の侵害>コンテンツの撤去" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="知的財産の侵害>コピーBot及び権限の悪用" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="不寛容" name="Intolerance"/>
<combo_box.item label="土地>サンドボックスのリソースの乱用" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="土地>不法侵入>オブジェクト/テクスチャー" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="土地 &gt; 不法侵入 &gt; オブジェクトまたはテクスチャ" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="土地>不法侵入>パーティクル" name="Land__Encroachment__Particles"/>
<combo_box.item label="土地>不法侵入>樹木/植物" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="賭け/ギャンブル" name="Wagering_gambling"/>
+ <combo_box.item label="賭けまたはギャンブル" name="Wagering_gambling"/>
<combo_box.item label="その他" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/ja/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/ja/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..3a90e673ae
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="スクリプトの色">
+ <text name="color_pickers_label">
+ 希望の色を選択:
+ </text>
+ <text name="text_label">
+ テキスト
+ </text>
+ <text name="cursor_label">
+ カーソル
+ </text>
+ <text name="background_label">
+ 背景
+ </text>
+ <text name="datatype_label">
+ データ型
+ </text>
+ <text name="event_label">
+ イベント
+ </text>
+ <text name="string_literal_label">
+ 文字列リテラル
+ </text>
+ <text name="constant_label">
+ 定数
+ </text>
+ <text name="flow_control_label">
+ フロー制御
+ </text>
+ <text name="function_label">
+ 関数
+ </text>
+ <text name="comment_label">
+ コメント
+ </text>
+ <script_editor name="Script Preview">
+ /* サンプル スクリプト */
+default
+{
+state_entry()
+ {
+// コメント
+string greeting = &quot;こんにちは&quot;;
+llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
index f145a2e8b8..7d0fb27932 100755
--- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="スナップショットのプレビュー">
+<floater name="Snapshot" title="スナップショット">
<floater.string name="unknown">
不明
</floater.string>
@@ -61,5 +61,11 @@
<check_box label="HUD" name="hud_check"/>
<check_box label="画面全体を静止" name="freeze_frame_check"/>
<check_box label="自動更新" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ フィルター:
+ </text>
+ <combo_box name="filters_combobox" tool_tip="画像フィルター">
+ <combo_box.item label="フィルターなし" name="NoFilter"/>
+ </combo_box>
</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 2b3b51f3b7..3bc343639b 100755
--- a/indra/newview/skins/default/xui/ja/floater_stats.xml
+++ b/indra/newview/skins/default/xui/ja/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="描画" name="render">
<stat_bar label="KTris (フレームごと)" name="ktrisframe"/>
<stat_bar label="KTris (秒ごと)" name="ktrissec"/>
- <stat_bar label="オブジェクト合計" name="objs"/>
+ <stat_bar label="オブジェクト合計" name="totalobjs"/>
+ <stat_bar label="キャッシュされたオブジェクト" name="cachedobjs"/>
<stat_bar label="新規オブジェクト" name="newobjs"/>
<stat_bar label="オブジェクトキャッシュヒット率" name="object_cache_hits"/>
<stat_bar label="閉鎖クエリ実行" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index 5511433ae3..eeaa361649 100755
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -72,7 +72,7 @@
<check_box label="リンク部分を編集" name="checkbox edit linked parts"/>
<button label="リンク" name="link_btn"/>
<button label="リンクを外す" name="unlink_btn"/>
- <check_box label="" name="checkbox uniform"/>
+ <check_box label="両側を引き伸ばす" name="checkbox uniform"/>
<text label="両側を延ばす" name="checkbox uniform label">
両側を延ばす
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_twitter.xml b/indra/newview/skins/default/xui/ja/floater_twitter.xml
new file mode 100644
index 0000000000..7cd71df800
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="TWITTER">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="作成" name="panel_twitter_photo"/>
+ <panel label="アカウント" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ エラー
+ </text>
+ <text name="connection_loading_text">
+ ロード中...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/menu_conversation.xml b/indra/newview/skins/default/xui/ja/menu_conversation.xml
index 66940471da..0de6a5f22f 100644
--- a/indra/newview/skins/default/xui/ja/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/ja/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="全員の音声をミュートする" name="ModerateVoiceMute"/>
<menu_item_call label="全員のミュートを解除する" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="メンバーを立入禁止" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml
index 39c32bc41e..ae02edefe2 100755
--- a/indra/newview/skins/default/xui/ja/menu_object.xml
+++ b/indra/newview/skins/default/xui/ja/menu_object.xml
@@ -21,6 +21,7 @@
<context_menu label="管理" name="Remove">
<menu_item_call label="嫌がらせの報告" name="Report Abuse..."/>
<menu_item_call label="ブロック" name="Object Mute"/>
+ <menu_item_call label="ブロック解除" name="Object Unmute"/>
<menu_item_call label="返却" name="Return..."/>
</context_menu>
<menu_item_call label="取る" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index b151915ae4..4e6c6808c6 100755
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -36,6 +36,9 @@
<menu_item_check label="近くのチャット..." name="Nearby Chat"/>
<menu_item_check label="話す" name="Speak"/>
<menu_item_check label="会話ログ..." name="Conversation Log..."/>
+ <menu_item_call label="Facebook..." name="Facebook"/>
+ <menu_item_call label="Twitter..." name="Twitter"/>
+ <menu_item_call label="Flickr..." name="Flickr"/>
<menu label="ボイスモーフィング" name="VoiceMorphing">
<menu_item_check label="ボイスモーフィングなし" name="NoVoiceMorphing"/>
<menu_item_check label="プレビュー..." name="Preview"/>
@@ -150,7 +153,8 @@
<menu_item_check label="グリッドポイントにスナップする" name="Snap to Grid"/>
<menu_item_call label="オブジェクトの XY 軸をグリッドにスナップする" name="Snap Object XY to Grid"/>
<menu_item_call label="選択をグリッドに使用する" name="Use Selection for Grid"/>
- <menu_item_call label="グリッドオプション" name="Grid Options"/>
+ <menu_item_call label="グリッドオプション..." name="Grid Options"/>
+ <menu_item_call label="デフォルト権限の設定..." name="Set default permissions"/>
</menu>
<menu label="アップロード" name="Upload">
<menu_item_call label="画像(L$[COST])..." name="Upload Image"/>
@@ -158,7 +162,6 @@
<menu_item_call label="アニメーション(L$[COST])..." name="Upload Animation"/>
<menu_item_call label="モデル" name="Upload Model"/>
<menu_item_call label="一括 (ファイルにつきL$[COST])..." name="Bulk Upload"/>
- <menu_item_call label="デフォルトのアップロード権限を設定" name="perm prefs"/>
</menu>
<menu_item_call label="元に戻す" name="Undo"/>
<menu_item_call label="やり直し" name="Redo"/>
@@ -304,6 +307,7 @@
<menu_item_check label="LOD 情報" name="LOD Info"/>
<menu_item_check label="制作キュー" name="Build Queue"/>
<menu_item_check label="光" name="Lights"/>
+ <menu_item_check label="パーティクル" name="Particles"/>
<menu_item_check label="骨組みの衝突判定" name="Collision Skeleton"/>
<menu_item_check label="ジョイント" name="Joints"/>
<menu_item_check label="レイキャスト" name="Raycast"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 518f82daaf..1d52b42039 100755
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -221,6 +221,22 @@
この能力を [ROLE_NAME] に割り当てますか?
<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ 役割 &apos;[ROLE_NAME]&apos; に能力 &apos;[ACTION_NAME]&apos; を追加しようとしています。
+
+*警告*
+この能力を持つ役割のメンバーにも能力 &apos;[ACTION_NAME_2]&apos; と &apos;[ACTION_NAME_3]&apos; が許可されます
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ 役割 &apos;[ROLE_NAME]&apos; から能力 &apos;[ACTION_NAME]&apos; を削除しようとしています。
+
+*警告*
+この能力を削除しても能力 &apos;[ACTION_NAME_2]&apos; と &apos;[ACTION_NAME_3]&apos; は削除されません。
+
+これらの能力をこの役割に許可しない場合は、すぐに削除してください!
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
[AVATAR_NAME] をグループから追放しようとしています。
<usetemplate ignoretext="グループからの参加者の追放を確認します" name="okcancelignore" notext="取り消し" yestext="追放"/>
@@ -1614,6 +1630,14 @@ http://secondlife.com/download から最新バージョンをダウンロード
グループを抜けることができません。グループの最後のオーナーであるため、グループを抜けることができません。最初に、別のメンバーをオーナーの役割に割り当ててください。
<usetemplate name="okbutton" yestext="OK"/>
</notification>
+ <notification name="GroupDepartError">
+ グループを抜けることができません: [reason]。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GroupDepart">
+ グループ [group_name] を抜けました。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
本当に住人全員をグリッドから追い出しますか?
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="住人全員を追い出す"/>
@@ -2507,6 +2531,12 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4076,6 +4106,10 @@ M キーを押して変更します。
ファイルを移動できません。以前のパスがリストアされました。
<usetemplate ignoretext="ファイルを移動できません。以前のパスがリストアされました。" name="okignore" yestext="OK"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ 次の理由により、デフォルト権限を保存するときに問題がありました: [REASON]。後でデフォルト権限を設定してください。
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
チャット履歴ファイルが前の操作でビジーです。2、3 分経ってからもう一度試すか、別の人とのチャットを選択してください。
<usetemplate name="okbutton" yestext="OK"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_account.xml b/indra/newview/skins/default/xui/ja/panel_facebook_account.xml
new file mode 100644
index 0000000000..5269e5a2da
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="次のユーザーとして Facebook に接続:"/>
+ <string name="facebook_disconnected" value="Facebook に接続していません"/>
+ <text name="account_caption_label">
+ Facebook に接続していません。
+ </text>
+ <panel name="panel_buttons">
+ <button label="接続..." name="connect_btn"/>
+ <button label="切断" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook への投稿について]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml b/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml
new file mode 100644
index 0000000000..18ae4f9295
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="Second Life の住人にもなっている Facebook の友だちがいません。今すぐ Facebook の友だちに Second Life に参加してもらいましょう!"/>
+ <string name="facebook_friends_no_connected" value="現在 Facebook に接続されていません。「アカウント」タブに進んで、この機能を有効にしてください。"/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="SL の友だち"/>
+ <accordion_tab name="tab_suggested_friends" title="これらの人を SL の友だちとして追加"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ Facebook に接続していません。
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml b/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml
new file mode 100644
index 0000000000..f6d920bd5e
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="画像解像度">
+ <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1200x630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="画像フィルター">
+ <combo_box.item label="フィルターなし" name="NoFilter"/>
+ </combo_box>
+ <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/>
+ <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/>
+ <text name="caption_label">
+ コメント (オプション):
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="投稿" name="post_photo_btn"/>
+ <button label="取り消し" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_place.xml b/indra/newview/skins/default/xui/ja/panel_facebook_place.xml
new file mode 100644
index 0000000000..e29f69101f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ 自分がいる場所について何か言ってください:
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="投稿" name="post_place_btn"/>
+ <button label="取り消し" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_status.xml b/indra/newview/skins/default/xui/ja/panel_facebook_status.xml
new file mode 100644
index 0000000000..84e5ae0474
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ 今、何を考えている?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="投稿" name="post_status_btn"/>
+ <button label="取り消し" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_flickr_account.xml b/indra/newview/skins/default/xui/ja/panel_flickr_account.xml
new file mode 100644
index 0000000000..bd2e96d58c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="次のユーザーとして Flickr に接続:"/>
+ <string name="flickr_disconnected" value="Flickr に接続していない"/>
+ <text name="account_caption_label">
+ Flickr に接続していません。
+ </text>
+ <panel name="panel_buttons">
+ <button label="接続..." name="connect_btn"/>
+ <button label="切断" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Flickr への投稿について]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml b/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml
new file mode 100644
index 0000000000..0deadad91d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="画像解像度">
+ <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="画像フィルター">
+ <combo_box.item label="フィルターなし" name="NoFilter"/>
+ </combo_box>
+ <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/>
+ <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/>
+ <text name="title_label">
+ タイトル:
+ </text>
+ <text name="description_label">
+ 説明:
+ </text>
+ <check_box initial_value="true" label="SL の場所を説明の最後に含める" name="add_location_cb"/>
+ <text name="tags_label">
+ タグ:
+ </text>
+ <text name="tags_help_label">
+ タグをスペースで区切る
+複数単語のタグに &quot;&quot; を使用
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Flickr コンテンツのレーティング区分">
+ <combo_box.item label="Flickr レーティング区分「Safe」" name="SafeRating"/>
+ <combo_box.item label="Flickr レーティング区分「Moderate」" name="ModerateRating"/>
+ <combo_box.item label="Flickr レーティング区分「Restricted」" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="アップロード" name="post_photo_btn"/>
+ <button label="取り消し" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/ja/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..343db03030
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_group_bulk_ban.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="住人を立入禁止" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (ロード中...)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ グループへの立入禁止が送信されていません: 選択した住人が多すぎます。グループへの立入禁止の数は 1 リクエスト当たり 100 人に制限されています。
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ グループへの立入禁止が送信されていません: 「立入禁止リストの管理」の能力がありません。
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ グループへの立入禁止が送信されていません: グループへの立入禁止の登録許容数に達しました。
+ </panel.string>
+ <panel.string name="partial_ban">
+ グループへの立入禁止の一部が送信されませんでした: [REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ グループへの立入禁止が送信されませんでした: [REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - 次の住民は既に立入禁止にされています: [RESIDENTS]。
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - 立入禁止の許容値に達しました。次のエージェントは立入禁止にされません: [RESIDENTS]。
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - グループから自分自身を立入禁止にすることはできません。
+ </panel.string>
+ <text name="help_text">
+ グループから一度に複数の住人を立入禁止にすることができます。「リストから住人を選択」をクリックしてください。
+ </text>
+ <button label="リストから住人を選択" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="Ctrl キーを押しながら複数の住人をクリックできます"/>
+ <button label="選択した住人をリストから削除" name="remove_button" tool_tip="立入禁止リストから上で選択した住人を削除します"/>
+ <button label="住人を立入禁止" name="ban_button"/>
+ <button label="取り消し" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ グループへの立入禁止
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_invite.xml b/indra/newview/skins/default/xui/ja/panel_group_invite.xml
index cc9ebc405b..2639454a01 100755
--- a/indra/newview/skins/default/xui/ja/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_invite.xml
@@ -22,7 +22,7 @@
割り当て先の役割を選択:
</text>
<combo_box name="role_name" tool_tip="メンバーに割り当てたい役割をリストから選んください"/>
- <button label="招待を送信" name="ok_button"/>
+ <button label="招待状を送信" name="invite_button"/>
<button label="取り消し" name="cancel_button"/>
<string name="GroupInvitation">
グループへの招待
diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
index 8ca63988c3..0e231b5b4f 100755
--- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
@@ -25,12 +25,13 @@ Ctrl キーを押しながらメンバー名をクリックすると
</name_list>
<button label="招待" name="member_invite"/>
<button label="追放" name="member_eject"/>
+ <button label="メンバーの立入禁止" name="member_ban"/>
</panel>
<panel label="役割" name="roles_sub_tab">
<panel.string name="help_text">
役割には、タイトルと許可された能力が
-割り当てられています。 メンバーは
-1つ以上の役割を持つことができます。 グループで使える役割は10つまでで、
+割り当てられています。メンバーは
+1つ以上の役割を持つことができます。グループで使える役割は10つまでで、
「全員(Everyone)」と「オーナー(Owner)」がそれに含まれています。
</panel.string>
<panel.string name="cant_delete_role">
@@ -56,14 +57,29 @@ Ctrl キーを押しながらメンバー名をクリックすると
</panel>
<panel label="能力" name="actions_sub_tab" tool_tip="能力の説明文には、どの役割・メンバーがその能力を持つかが書かれています。">
<panel.string name="help_text">
- このグループ内で役割を与えられているメンバーが実行できる操作は、
-能力によって決まります。 さまざまな能力が用意されています。
+ 役割に含まれたメンバーに、このグループで特定の
+活動を行うことを許可する能力。さまざまな能力が提供されます。
</panel.string>
<filter_editor label="能力を選別" name="filter_input"/>
<scroll_list name="action_list" tool_tip="詳細を見るには、能力を選んでください。">
<scroll_list.columns label="" name="action"/>
</scroll_list>
</panel>
+ <panel label="立入禁止にされた住人" name="banlist_sub_tab" tool_tip="このグループから立ち入り禁止にされた住人を表示します。">
+ <panel.string name="help_text">
+ 立入禁止リストに登録された住人はグループに参加できません。
+ </panel.string>
+ <panel.string name="ban_count_template">
+ 立入禁止の人数: [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="住人" name="name"/>
+ <name_list.columns label="立入禁止にされた日付" name="ban_date"/>
+ </name_list>
+ <button label="住人の立入禁止" name="ban_create" tool_tip="グループから住人を立入禁止にする"/>
+ <button label="立入禁止の解除" name="ban_delete" tool_tip="選択した住人のグループへの立ち入り禁止を解除"/>
+ <button name="ban_refresh" tool_tip="立入禁止リストの更新"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml
index 396d9e65b1..c5d5330eb4 100755
--- a/indra/newview/skins/default/xui/ja/panel_login.xml
+++ b/indra/newview/skins/default/xui/ja/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php?lang=ja
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- ログイン
- </text>
- <text name="username_text">
- ユーザーネーム:
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="ユーザー名" name="username_combo" tool_tip="登録時に自分で選んだユーザー名(例:bobsmith12、Steller Sunshineなど)"/>
+ <line_editor label="パスワード" name="password_edit"/>
+ <check_box label="記憶する" name="remember_check"/>
+ <text name="forgot_password_text">
+ パスワードを忘れた場合
</text>
- <combo_box name="username_combo" tool_tip="登録時に自分で選んだユーザー名(例:bobsmith12、Steller Sunshineなど)"/>
- <text name="password_text">
- パスワード:
+ <button label="ログイン" name="connect_btn"/>
+ <text name="At_My_Last_Location_Label">
+ 前回の場所
</text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- 開始地点:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="最後にログアウトした場所" name="MyLastLocation"/>
+ <combo_box label="お気に入りの場所" name="start_location_combo">
<combo_box.item label="ホーム" name="MyHome"/>
- <combo_box.item label="<地域名を入力>" name="Typeregionname"/>
</combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- ログインの方法
- </text>
- <text name="forgot_password_text">
- ユーザー名またはパスワードをお忘れですか?
- </text>
- <button label="ログイン" left_pad="30" name="connect_btn" width="60"/>
- <check_box label="パスワードを記憶" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- アカウントを作成してください
- </text>
- <button label="今すぐ開始" name="create_new_account_btn"/>
+ <button label="ログイン" name="connect_favorite_btn"/>
+ <line_editor label="場所を入力" name="location_edit"/>
+ <button label="ログイン" name="connect_location_btn"/>
+ <combo_box label="グリッドを選択" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_login_first.xml b/indra/newview/skins/default/xui/ja/panel_login_first.xml
new file mode 100644
index 0000000000..d350e2f9a2
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php?lang=ja
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="ユーザー名" name="username_combo" tool_tip="登録時に自分で選んだユーザー名(例:bobsmith12、Steller Sunshineなど)"/>
+ <line_editor label="パスワード" name="password_edit"/>
+ <button label="ログイン" name="connect_btn"/>
+ <check_box label="記憶する" name="remember_check"/>
+ <text name="forgot_password_text">
+ パスワードを忘れた場合
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ 最初のステップは、アイランドについて学ぶことです。さあ、アイランド探検の入口を見つけてください!
+ </text>
+ <text name="image_caption_right">
+ ソーシャル アイランドを探検して、他の新しい住人を探してください!
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
index dcaa23fee5..6e8797ec5e 100755
--- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="ログイン時にグリッド選択を表示" name="show_grid_selection_check"/>
<check_box label="アドバンスメニューを表示" name="show_advanced_menu_check"/>
<check_box label="デベロッパーメニューを表示" name="show_develop_menu_check"/>
+ <button label="デフォルト作成許可" name="default_creation_permissions"/>
</panel>
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 d70af7e099..39bc05c845 100755
--- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
@@ -30,14 +30,10 @@
<combo_box.item label="General と Moderate" name="Desired_Mature"/>
<combo_box.item label="General" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- ログイン位置:
+ <check_box label="ログイン画面にお気に入りの場所を表示" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (このコンピュータを使用する他の人にも表示されます)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="最後にログアウトした場所" name="MyLastLocation" tool_tip="常に最後にいた場所にログイン"/>
- <combo_box.item label="ホーム" name="MyHome" tool_tip="常にホーム(自宅)にログイン"/>
- </combo_box>
- <check_box initial_value="true" label="ログイン画面に表示する" name="show_location_checkbox"/>
<text name="name_tags_textbox">
名前の表示:
</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
index 3787f390e4..2db6a688f3 100755
--- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
<text name="cache_size_label_l">
(位置、画像、web、検索履歴)
</text>
- <check_box label="検索結果に自分のプロフィール情報を表示する" name="online_searchresults"/>
+ <check_box label="プロフィールを検索結果に表示する" name="online_searchresults"/>
<check_box label="私のオンライン状態を確認できるのは、フレンドとグループだけ" name="online_visibility"/>
<check_box label="フレンドとグループ以外からはコールと IM を受信しない" name="voice_call_friends_only_check"/>
<check_box label="コールが終了したら自動的にマイクのスイッチを切る" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
index b6d51085eb..3aa20d0a3c 100755
--- a/indra/newview/skins/default/xui/ja/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="変更を元に戻す" name="Revert All Changes"/>
<menu_item_call label="ファイルからロード..." name="LoadFromFile"/>
<menu_item_call label="ファイルに保存..." name="SaveToFile"/>
+ <menu_item_call label="色..." name="Colors"/>
</menu>
<menu label="編集" name="Edit">
<menu_item_call label="元に戻す" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="キーワードヘルプ..." name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
ローディング...
- </text_editor>
+ </script_editor>
<combo_box label="挿入..." name="Insert..."/>
<button label="保存" label_selected="保存" name="Save_btn"/>
<button label="編集..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
index c3b1cd91e7..6ce492476b 100755
--- a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
@@ -1,7 +1,16 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_options">
<button label="プロフィールフィードに投稿する" name="save_to_profile_btn"/>
<button label="メール" name="save_to_email_btn"/>
<button label="インベントリに保存(L$[Amount])" name="save_to_inventory_btn"/>
<button label="コンピューターに保存" name="save_to_computer_btn"/>
+ <text name="send_to_facebook_textbox">
+ 宛先: [secondlife:/// Facebook]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// Twitter]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml
index c570cd5696..0340bfe754 100755
--- a/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
<text name="region" value="..."/>
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="アイテム情報を表示"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_twitter_account.xml b/indra/newview/skins/default/xui/ja/panel_twitter_account.xml
new file mode 100644
index 0000000000..b140b7463f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="次のユーザーとして Twitter に接続:"/>
+ <string name="twitter_disconnected" value="Twitter に接続していない"/>
+ <text name="account_caption_label">
+ Twitter に接続していません。
+ </text>
+ <panel name="panel_buttons">
+ <button label="接続..." name="connect_btn"/>
+ <button label="切断" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Twitter への投稿について]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml b/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml
new file mode 100644
index 0000000000..8e67d8fd19
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ 何が起きているのでしょうか?
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="SL の場所を含む" name="add_location_cb"/>
+ <check_box initial_value="true" label="写真を掲載する" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="画像解像度">
+ <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="画像フィルター">
+ <combo_box.item label="フィルターなし" name="NoFilter"/>
+ </combo_box>
+ <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/>
+ <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="ツイート" name="post_photo_btn"/>
+ <button label="取り消し" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/role_actions.xml b/indra/newview/skins/default/xui/ja/role_actions.xml
index 5c2e18df03..e64460470c 100755
--- a/indra/newview/skins/default/xui/ja/role_actions.xml
+++ b/indra/newview/skins/default/xui/ja/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="これらの能力には、グループメンバーを追加、排除し、招待状なしに新メンバーの参加を認める権限が含まれます。" name="Membership">
<action description="このグループに人を招待" longdescription="「役割」セクションの「メンバー」タブ内にある「招待」ボタンを押して、このグループにメンバーを招待します。" name="member invite" value="1"/>
<action description="メンバーをこのグループから追放" longdescription="「役割」セクションの「メンバー」タブ内にある「追放」ボタンを押して、このグループからメンバーを追放します。 「オーナー」は、他の「オーナー」以外は誰でも追放できます。 「オーナー」ではない人が「全員(Everyone)」にしか役割がない場合、メンバーはグループから追放されることがあります。 「役割」からメンバーを削除するには、「役割からメンバーを削除」の能力が与えられている必要があります。" name="member eject" value="2"/>
+ <action description="立入禁止リストの管理" longdescription="グループのメンバーに、このグループから住人を立入禁止/立入禁止解除できるようにします。" name="allow ban" value="51"/>
<action description="「自由参加」と「入会費」の切り替え" longdescription="「自由参加」に切り替えると、招待されなくても新しいメンバーが入会できます。「入会費」は「一般」セクションで変更します。" name="member options" value="3"/>
</action_set>
<action_set description="これらの能力には、グループ内の役割を追加、削除、変更し、役割にメンバーを追加、削除し、さらに役割へ能力を割り当てる権限が含まれます。" name="Roles">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 88fb652399..d046e11571 100755
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -334,6 +334,75 @@ support@secondlife.com にお問い合わせください。
<string name="TestingDisconnect">
ビューワの接続を切るテスト中
</string>
+ <string name="SocialFlickrConnecting">
+ Flickr に接続中...
+ </string>
+ <string name="SocialFlickrPosting">
+ 投稿中...
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Flickr から切断中...
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ Flickr への接続時のエラー
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ Flickr への投稿時のエラー
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ Flickr からの切断時のエラー
+ </string>
+ <string name="SocialTwitterConnecting">
+ Twitter に接続中...
+ </string>
+ <string name="SocialTwitterPosting">
+ 投稿中...
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ Twitter から切断中...
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ Twitter への接続時のエラー
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ Twitter への投稿時のエラー
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ Twitter からの切断時のエラー
+ </string>
+ <string name="BlackAndWhite">
+ 白黒
+ </string>
+ <string name="Colors1970">
+ 1970 年代のカラー
+ </string>
+ <string name="Intense">
+ 強調
+ </string>
+ <string name="Newspaper">
+ 新聞紙
+ </string>
+ <string name="Sepia">
+ セピア
+ </string>
+ <string name="Spotlight">
+ スポットライト
+ </string>
+ <string name="Video">
+ ビデオ
+ </string>
+ <string name="Autocontrast">
+ オートコントラスト
+ </string>
+ <string name="LensFlare">
+ レンズフレア
+ </string>
+ <string name="Miniature">
+ ミニチュア
+ </string>
+ <string name="Toycamera">
+ おもちゃのカメラ
+ </string>
<string name="TooltipPerson">
</string>
@@ -885,6 +954,12 @@ support@secondlife.com にお問い合わせください。
<string name="use_texture">
テクスチャを使用
</string>
+ <string name="manip_hint1">
+ マウスカーソルをルーラに合わせて
+ </string>
+ <string name="manip_hint2">
+ グリッドにスナップ
+ </string>
<string name="texture_loading">
ローディング...
</string>
@@ -4082,6 +4157,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="share_alert">
インベントリからここにアイテムをドラッグします
</string>
+ <string name="flickr_post_success">
+ Flickr に投稿しました。
+ </string>
+ <string name="twitter_post_success">
+ Twitter に投稿しました。
+ </string>
<string name="no_session_message">
(IM セッションが存在しません)
</string>
@@ -4538,6 +4619,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="LocalEstimateUSD">
US$ [AMOUNT]
</string>
+ <string name="Group Ban">
+ グループへの立入禁止
+ </string>
<string name="Membership">
会員
</string>
@@ -4960,6 +5044,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="Command_Destinations_Label">
行き先
</string>
+ <string name="Command_Facebook_Label">
+ Facebook
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
ジェスチャー
</string>
@@ -5008,6 +5098,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="Command_Speak_Label">
話す
</string>
+ <string name="Command_Twitter_Label">
+ Twitter
+ </string>
<string name="Command_View_Label">
カメラコントロール
</string>
@@ -5038,6 +5131,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="Command_Destinations_Tooltip">
行ってみたい場所
</string>
+ <string name="Command_Facebook_Tooltip">
+ Facebook へ投稿
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ Flickr にアップロード
+ </string>
<string name="Command_Gestures_Tooltip">
アバターのジェスチャー
</string>
@@ -5086,6 +5185,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="Command_Speak_Tooltip">
マイクを使って近くの人と話す
</string>
+ <string name="Command_Twitter_Tooltip">
+ Twitter
+ </string>
<string name="Command_View_Tooltip">
カメラの角度を変更
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_big_preview.xml b/indra/newview/skins/default/xui/pt/floater_big_preview.xml
new file mode 100644
index 0000000000..76ca176689
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="VISUALIZAR"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_facebook.xml b/indra/newview/skins/default/xui/pt/floater_facebook.xml
new file mode 100644
index 0000000000..c211d75e9b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="PUBLICAR NO FACEBOOK">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="STATUS" name="panel_facebook_status"/>
+ <panel label="FOTO" name="panel_facebook_photo"/>
+ <panel label="FAZER CHECK IN" name="panel_facebook_place"/>
+ <panel label="AMIGOS" name="panel_facebook_friends"/>
+ <panel label="CONTA" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Erro
+ </text>
+ <text name="connection_loading_text">
+ Carregando...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_flickr.xml b/indra/newview/skins/default/xui/pt/floater_flickr.xml
new file mode 100644
index 0000000000..67d2295e41
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="CARREGAR NO FLICKR">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="FOTO" name="panel_flickr_photo"/>
+ <panel label="CONTA" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Erro
+ </text>
+ <text name="connection_loading_text">
+ Carregando...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_perms_default.xml b/indra/newview/skins/default/xui/pt/floater_perms_default.xml
new file mode 100644
index 0000000000..762f8320c4
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="PERMISSÕES DE CRIAÇÃO PADRÃO">
+ <panel label="Permissões padrão" name="default permissions"/>
+ <button label="OK" label_selected="OK" name="ok"/>
+ <button label="Cancelar" label_selected="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
index 08413a9231..e6d9961d0b 100755
--- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
@@ -44,7 +44,7 @@
<combo_box.item label="Idade &gt; Residente adulto ou adolescente" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Idade &gt; Residente menor de idade, fora do Second Life teen" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Assalto &gt; Sandbox de combate / área não segura" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Assalto &gt; Área segura" name="Assault__Safe_area"/>
+ <combo_box.item label="Agressões &gt; Atirar, empurrar ou bater em outro residente em uma área segura" name="Assault__Safe_area"/>
<combo_box.item label="Assalto &gt; Testando armas em sandbox" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Comércio &gt; Falha em enviar produto ou serviço" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="Revelar &gt; Informação do mundo real" name="Disclosure__Real_world_information"/>
@@ -58,25 +58,25 @@
<combo_box.item label="Fraude &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Fraude &gt; Terra" name="Fraud__Land"/>
<combo_box.item label="Fraude &gt; Esquema de pirâmide ou cartas encadeadas" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="Fraude &gt; R$" name="Fraud__US$"/>
+ <combo_box.item label="Fraude &gt; L$ ou US$" name="Fraud__US$"/>
<combo_box.item label="Perturbação &gt; Fazendas de Anúncios / spam visual" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="Perturbação &gt; Difamação de indivíduos ou grupos" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="Perturbação &gt; Impedindo movimentos" name="Harassment__Impeding_movement"/>
<combo_box.item label="Perturbação &gt; Perturbação sexual" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="Perturbação &gt; Solicitando/incitando outros a violarem o ToS" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Assédio &gt; Comportamento direcionado destinado à perturbação" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="Perturbação &gt; Abuso verbal" name="Harassment__Verbal_abuse"/>
<combo_box.item label="Indecência &gt; Conteúdo ou conduta amplamente ofensivos" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="Indecência &gt; Nome de avatar inapropriado" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="Indecência &gt; Conduta ou conteúdo inapropriados numa região PG" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Indecência &gt; Conteúdo ou conduta inapropriada para a classificação da região" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="Indecência &gt; Conduta ou conteúdo inapropriados numa região Mature" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="Violação de propriedade intelectual &gt; Remoção de Conteúdo" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="Violação de Propriedade intelectual &gt; Cópia Ilegal ou Aproveitar-se de Permissões" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="Intolerância" name="Intolerance"/>
<combo_box.item label="Terra &gt; Abuso dos recursos da sandbox" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="Terra &gt; Invasão &gt; Objetos/texturas" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Terreno &gt; Invasão &gt; Objetos ou texturas" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Terra &gt; Invasão &gt; Partículas" name="Land__Encroachment__Particles"/>
<combo_box.item label="Terra &gt; Violação &gt; Árvores/plantas" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Apostas/jogos de azar" name="Wagering_gambling"/>
+ <combo_box.item label="Apostas ou jogos de azar" name="Wagering_gambling"/>
<combo_box.item label="Outro" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/pt/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/pt/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..ae4ac7b8df
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="CORES DE SCRIPT">
+ <text name="color_pickers_label">
+ Escolha as cores desejadas:
+ </text>
+ <text name="text_label">
+ Texto
+ </text>
+ <text name="cursor_label">
+ Cursor
+ </text>
+ <text name="background_label">
+ Segundo plano
+ </text>
+ <text name="datatype_label">
+ Tipos de dados
+ </text>
+ <text name="event_label">
+ Eventos
+ </text>
+ <text name="string_literal_label">
+ Sequência literal
+ </text>
+ <text name="constant_label">
+ Constante
+ </text>
+ <text name="flow_control_label">
+ Controle de fluxo
+ </text>
+ <text name="function_label">
+ Função
+ </text>
+ <text name="comment_label">
+ Comentário
+ </text>
+ <script_editor name="Script Preview">
+ /* Um script de exemplo */
+default
+{
+ state_entry()
+ {
+ // Comment
+ string greeting = &quot;Olá&quot;;
+ llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
index 4110e69068..3dd7f69d50 100755
--- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="VISUALIZAR FOTO">
+<floater name="Snapshot" title="FOTO">
<floater.string name="unknown">
desconhecido
</floater.string>
@@ -61,5 +61,11 @@
<check_box label="HUDs" name="hud_check"/>
<check_box label="Gerar quadro (tela inteira)" name="freeze_frame_check"/>
<check_box label="Atualização automática" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ Filtro:
+ </text>
+ <combo_box name="filters_combobox" tool_tip="Filtros de imagem">
+ <combo_box.item label="Sem filtro" name="NoFilter"/>
+ </combo_box>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_stats.xml b/indra/newview/skins/default/xui/pt/floater_stats.xml
index ef3307f54a..f41fe17778 100755
--- a/indra/newview/skins/default/xui/pt/floater_stats.xml
+++ b/indra/newview/skins/default/xui/pt/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="Render" name="render">
<stat_bar label="KTris por quadro" name="ktrisframe"/>
<stat_bar label="KTris por segundo" name="ktrissec"/>
- <stat_bar label="Total Objects" name="objs"/>
+ <stat_bar label="Objetos totais" name="totalobjs"/>
+ <stat_bar label="Objetos em cache" name="cachedobjs"/>
<stat_bar label="New Objects" name="newobjs"/>
<stat_bar label="Taxa de acertos do cache do objeto" name="object_cache_hits"/>
<stat_bar label="Consultas de oclusão realizadas" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index 66c14cdecf..356063a94f 100755
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -72,7 +72,7 @@
<check_box label="Editar partes linkadas" name="checkbox edit linked parts"/>
<button label="Link" name="link_btn"/>
<button label="Desconectar links" name="unlink_btn"/>
- <check_box label="" name="checkbox uniform"/>
+ <check_box label="Esticar ambos lados" name="checkbox uniform"/>
<text label="Esticar ambos lados" name="checkbox uniform label">
Esticar ambos lados
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_twitter.xml b/indra/newview/skins/default/xui/pt/floater_twitter.xml
new file mode 100644
index 0000000000..4d7f9e323c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="TWITTER">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="REDIGIR" name="panel_twitter_photo"/>
+ <panel label="CONTA" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Erro
+ </text>
+ <text name="connection_loading_text">
+ Carregando...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/menu_conversation.xml b/indra/newview/skins/default/xui/pt/menu_conversation.xml
index 2dd150a61e..d594f3313f 100644
--- a/indra/newview/skins/default/xui/pt/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/pt/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="Silenciar todos" name="ModerateVoiceMute"/>
<menu_item_call label="Desfazer silenciar para todos" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="Banir membro" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml
index a552a5de5a..47b08a170c 100755
--- a/indra/newview/skins/default/xui/pt/menu_object.xml
+++ b/indra/newview/skins/default/xui/pt/menu_object.xml
@@ -21,6 +21,7 @@
<context_menu label="Gerenciar" name="Remove">
<menu_item_call label="Denunciar abuso" name="Report Abuse..."/>
<menu_item_call label="Bloquear" name="Object Mute"/>
+ <menu_item_call label="Desbloquear" name="Object Unmute"/>
<menu_item_call label="Devolver" name="Return..."/>
</context_menu>
<menu_item_call label="Pegar" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index d106c47c64..a761cfa177 100755
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -36,6 +36,9 @@
<menu_item_check label="Bate-papo local..." name="Nearby Chat"/>
<menu_item_check label="Falar" name="Speak"/>
<menu_item_check label="Registro de conversas..." name="Conversation Log..."/>
+ <menu_item_call label="Facebook..." name="Facebook"/>
+ <menu_item_call label="Twitter..." name="Twitter"/>
+ <menu_item_call label="Flickr..." name="Flickr"/>
<menu label="Distorção de voz" name="VoiceMorphing">
<menu_item_check label="Não distorcer voz" name="NoVoiceMorphing"/>
<menu_item_check label="Visualizar..." name="Preview"/>
@@ -150,7 +153,8 @@
<menu_item_check label="Encaixar em grade" name="Snap to Grid"/>
<menu_item_call label="Encaixar objeto XY em grade" name="Snap Object XY to Grid"/>
<menu_item_call label="Usar seleção em grade" name="Use Selection for Grid"/>
- <menu_item_call label="Opções de grade" name="Grid Options"/>
+ <menu_item_call label="Opções de grade..." name="Grid Options"/>
+ <menu_item_call label="Definir permissões padrão..." name="Set default permissions"/>
</menu>
<menu label="Upload" name="Upload">
<menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/>
@@ -158,7 +162,6 @@
<menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/>
<menu_item_call label="Modelar..." name="Upload Model"/>
<menu_item_call label="Volume (L$[COST] por arquivo)..." name="Bulk Upload"/>
- <menu_item_call label="Autorizações de upload padrão" name="perm prefs"/>
</menu>
<menu_item_call label="Desfazer" name="Undo"/>
<menu_item_call label="Repetir" name="Redo"/>
@@ -288,6 +291,7 @@
<menu_item_check label="Tipo de atualização" name="Update Type"/>
<menu_item_check label="Dados LOD" name="LOD Info"/>
<menu_item_check label="Fila de construção" name="Build Queue"/>
+ <menu_item_check label="Partículas" name="Particles"/>
<menu_item_check label="Junções" name="Joints"/>
<menu_item_check label="Vetores de vento" name="Wind Vectors"/>
<menu_item_check label="Renderizar complexidade" name="rendercomplexity"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 4e6b0765cb..00c0b13670 100755
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -209,6 +209,22 @@ Qualquer membro numa função com esta habilidade, pode atribuir a sí mesmo --
Adicionar esta habilidade a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ Você está prestes a adicionar a função &apos;[ACTION_NAME]&apos; ao cargo &apos;[ROLE_NAME]&apos;.
+
+ *AVISO*
+Qualquer membro em um cargo com essa função também terá as funções &apos;[ACTION_NAME_2]&apos; e &apos;[ACTION_NAME_3]&apos;
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ Você está removendo a função &apos;[ACTION_NAME]&apos; do cargo &apos;[ROLE_NAME]&apos;.
+
+ *AVISO*
+Remover essa função NÃO removerá as funções &apos;[ACTION_NAME_2]&apos; e &apos;[ACTION_NAME_3]&apos;.
+
+Se você não quiser que essas funções sejam concedidas a esse cargo, desative-as imediatamente.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
Você está prestes a expulsar [AVATAR_NAME] do grupo.
<usetemplate ignoretext="Confirmar expulsão de um participante do grupo" name="okcancelignore" notext="Cancelar" yestext="Expulsar"/>
@@ -1570,6 +1586,14 @@ consulte a informação [[INFO_URL] sobre essa atualização]
Não foi possível deixar o grupo. Você não pode deixar o grupo pois é o último proprietário dele. Primeiramente, atribua outro membro à função de proprietário.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
+ <notification name="GroupDepartError">
+ Não foi possível deixar o grupo: [reason].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GroupDepart">
+ Você deixou o grupo [group_name].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Tem CERTEZA de que deseja expulsar todos os residentes do grid?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Chutar todos"/>
@@ -2451,6 +2475,12 @@ Selecione só um objeto.
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4024,6 +4054,10 @@ Tente selecionar uma quantidade menor de terreno.
Não foi possível mover arquivos. Caminho anterior restaurado.
<usetemplate ignoretext="Não foi possível mover arquivos. Caminho anterior restaurado." name="okignore" yestext="OK"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ Ocorreu um problema ao salvar as permissões padrão devido ao seguinte motivo: [REASON]. Tente definir as permissões padrão mais tarde.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
O arquivo de histórico de bate-papo está ocupado com uma operação anterior. Tente novamente em alguns minutos ou selecione outra pessoa para bater papo.
<usetemplate name="okbutton" yestext="OK"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_account.xml b/indra/newview/skins/default/xui/pt/panel_facebook_account.xml
new file mode 100644
index 0000000000..b449e7959d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="Você está conectado ao Facebook como:"/>
+ <string name="facebook_disconnected" value="Não conectado ao Facebook"/>
+ <text name="account_caption_label">
+ Não conectado ao Facebook.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Conectar..." name="connect_btn"/>
+ <button label="Desconectar" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprenda a publicar no Facebook]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml b/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml
new file mode 100644
index 0000000000..9cb7a8b7d1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="No momento, você não tem amigos do Facebook que também são residentes do Second Life. Convide seus amigos do Facebook para ingressar no Second Life hoje mesmo!"/>
+ <string name="facebook_friends_no_connected" value="No momento, você não está conectado ao Facebook. Vá para a aba Conta para se conectar e ativar esse recurso."/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="Amigos do SL"/>
+ <accordion_tab name="tab_suggested_friends" title="Adicionar essas pessoas como amigos do SL"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ Não conectado ao Facebook.
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml b/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml
new file mode 100644
index 0000000000..22615e0769
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Resolução da imagem">
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1200x630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtros de imagem">
+ <combo_box.item label="Sem filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/>
+ <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/>
+ <text name="caption_label">
+ Comentário (opcional):
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Postar" name="post_photo_btn"/>
+ <button label="Cancelar" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_place.xml b/indra/newview/skins/default/xui/pt/panel_facebook_place.xml
new file mode 100644
index 0000000000..97596d64c6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ Diga algo sobre onde você está:
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="Postar" name="post_place_btn"/>
+ <button label="Cancelar" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_status.xml b/indra/newview/skins/default/xui/pt/panel_facebook_status.xml
new file mode 100644
index 0000000000..251580666e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ No que você está pensando?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="Postar" name="post_status_btn"/>
+ <button label="Cancelar" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_flickr_account.xml b/indra/newview/skins/default/xui/pt/panel_flickr_account.xml
new file mode 100644
index 0000000000..ed240b0013
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="Você está conectado ao Flickr como:"/>
+ <string name="flickr_disconnected" value="Não conectado ao Flickr"/>
+ <text name="account_caption_label">
+ Não conectado ao Flickr.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Conectar..." name="connect_btn"/>
+ <button label="Desconectar" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Aprenda a publicar no Flickr]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml b/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml
new file mode 100644
index 0000000000..77d8afb47c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Resolução da imagem">
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtros de imagem">
+ <combo_box.item label="Sem filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/>
+ <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/>
+ <text name="title_label">
+ Título:
+ </text>
+ <text name="description_label">
+ Descrição:
+ </text>
+ <check_box initial_value="true" label="Incluir localização do SL no final da descrição" name="add_location_cb"/>
+ <text name="tags_label">
+ Tags:
+ </text>
+ <text name="tags_help_label">
+ Separe as tags com espaços
+Use &quot;&quot; para tags com várias palavras
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Classificação de conteúdo do Flickr">
+ <combo_box.item label="Classificação segura do Flickr" name="SafeRating"/>
+ <combo_box.item label="Classificação moderada do Flickr" name="ModerateRating"/>
+ <combo_box.item label="Classificação restrita do Flickr" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Enviar" name="post_photo_btn"/>
+ <button label="Cancelar" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/pt/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..20cc2fe6e6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group_bulk_ban.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Banir residentes" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (carregando...)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ Os bloqueios do grupo não foram enviados: muitos residentes selecionados. Os banimentos do grupo são limitados a 100 por solicitação.
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ O banimento do grupo não foi enviado: você não tem a função &quot;Gerenciar lista de banidos&quot;.
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ O banimento do grupo não foi enviado: seu grupo atingiu o limite de banimentos.
+ </panel.string>
+ <panel.string name="partial_ban">
+ Alguns banimentos do grupo não foram enviados:
+[REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ Os banimentos do grupo não foram enviados:
+[REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - O(s) seguinte(s) residente(s) já estão banidos: [RESIDENTS].
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - Limite de banimentos atingido, os seguintes agentes não foram banidos: [RESIDENTS].
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - Você não pode banir a si próprio.
+ </panel.string>
+ <text name="help_text">
+ Selecione um ou mais residentes para banir do grupo. Clique em &quot;Abrir seletor de residentes&quot; para começar.
+ </text>
+ <button label="Abrir seletor de residentes" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="Pressione Ctrl enquanto clica nos nomes dos residentes"/>
+ <button label="Remover selecionados da lista" name="remove_button" tool_tip="Exclui os residentes selecionados acima da lista de bloqueios"/>
+ <button label="Banir residentes" name="ban_button"/>
+ <button label="Cancelar" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ Banimento do grupo
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_invite.xml b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
index de057481de..08bd4a3b6b 100755
--- a/indra/newview/skins/default/xui/pt/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
@@ -22,7 +22,7 @@
Escolha que Função atribuir a eles:
</text>
<combo_box name="role_name" tool_tip="Selecione o cargo da lista de cargos que você pode designar a membros"/>
- <button label="Mandar convites" name="ok_button"/>
+ <button label="Enviar convites" name="invite_button"/>
<button label="Cancelar" name="cancel_button"/>
<string name="GroupInvitation">
Convite
diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
index 84d275a8f2..162c4743ec 100755
--- a/indra/newview/skins/default/xui/pt/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
@@ -23,12 +23,14 @@
</name_list>
<button label="Convidar" name="member_invite"/>
<button label="Ejetar" name="member_eject"/>
+ <button label="Banir membro(s)" name="member_ban"/>
</panel>
<panel label="CARGOS" name="roles_sub_tab">
<panel.string name="help_text">
- Cada cargo tem um nome e uma lista das funções que membros designados podem desempenhar.
- Os membros podem ter um ou mais cargos.
- Cada grupo pode ter 10 cargos, incluindo Membro e Dono do Grupo.
+ Os cargos têm um título e uma lista de funções permitidas
+ que os membros podem realizar. Os membros podem pertencer a
+ um ou mais cargos. Um grupo pode ter até 10 cargos,
+ inclusive Todos e Proprietário.
</panel.string>
<panel.string name="cant_delete_role">
As funções &apos;Todos&apos; e &apos;Owners&apos; são especiais e não podem ser apagadas.
@@ -47,12 +49,27 @@
</panel>
<panel height="148" label="FUNÇÕES" name="actions_sub_tab" tool_tip="Você pode ver a descrição de uma função e quais cargos e membros podem desempenhá-la.">
<panel.string name="help_text">
- As habilidades permitem que os membros nas funções façam coisas específicas dentro do grupo.
-Há uma grande variedade de habilidades.
+ As funções permitem que os membros em cargos realizem
+ tarefas específicas neste grupo. Existem diversas funções.
</panel.string>
<filter_editor label="Filtrar por função" name="filter_input"/>
<scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Selecione uma função para ver mais detalhes"/>
</panel>
+ <panel label="RESIDENTES BANIDOS" name="banlist_sub_tab" tool_tip="Visualizar os residentes banidos deste grupo.">
+ <panel.string name="help_text">
+ Qualquer residente na lista de banidos não poderá entrar no grupo.
+ </panel.string>
+ <panel.string name="ban_count_template">
+ Número de banimentos: [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="Residente" name="name"/>
+ <name_list.columns label="Data do banimento" name="ban_date"/>
+ </name_list>
+ <button label="Banir residente(s)" name="ban_create" tool_tip="Banir residentes do seu grupo"/>
+ <button label="Cancelar banimento(s)" name="ban_delete" tool_tip="Cancelar o banimento de residentes selecionados do seu grupo"/>
+ <button name="ban_refresh" tool_tip="Atualizar a lista de banidos"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml
index d7e9fa76ea..8ac3e57c4c 100755
--- a/indra/newview/skins/default/xui/pt/panel_login.xml
+++ b/indra/newview/skins/default/xui/pt/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php?lang=pt
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- LOGIN
- </text>
- <text name="username_text">
- Nome de usuário:
- </text>
- <combo_box name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 or Magia Solar"/>
- <text name="password_text">
- Senha:
- </text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- Começar em:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Última posição" name="MyLastLocation"/>
- <combo_box.item label="Minha casa" name="MyHome"/>
- <combo_box.item label="&lt;Digite o nome da região&gt;" name="Typeregionname"/>
- </combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- Precisa de ajuda com o login?
- </text>
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="Nome de usuário" name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 ou Magia Solar"/>
+ <line_editor label="Senha" name="password_edit"/>
+ <check_box label="Lembrar-me" name="remember_check"/>
<text name="forgot_password_text">
- Esqueceu seu nome ou senha?
+ Senha esquecida
</text>
<button label="Login" name="connect_btn"/>
- <check_box label="Lembrar senha" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- CRIE SUA CONTA
+ <text name="At_My_Last_Location_Label">
+ no último local
</text>
- <button label="Comece agora" name="create_new_account_btn"/>
+ <combo_box label="Meus locais favoritos" name="start_location_combo">
+ <combo_box.item label="Minha casa" name="MyHome"/>
+ </combo_box>
+ <button label="Login" name="connect_favorite_btn"/>
+ <line_editor label="Digite um local" name="location_edit"/>
+ <button label="Login" name="connect_location_btn"/>
+ <combo_box label="Selecionar grade" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_login_first.xml b/indra/newview/skins/default/xui/pt/panel_login_first.xml
new file mode 100644
index 0000000000..6e4ef65bea
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php?lang=pt
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="Nome de usuário" name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 ou Magia Solar"/>
+ <line_editor label="Senha" name="password_edit"/>
+ <button label="Login" name="connect_btn"/>
+ <check_box label="Lembrar-me" name="remember_check"/>
+ <text name="forgot_password_text">
+ Senha esquecida
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ Sua primeira parada é a Ilha da Educação. Encontre o portal de saída!
+ </text>
+ <text name="image_caption_right">
+ Em seguida, explore a Ilha Social e encontre novos residentes!
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
index c72928fc35..3ea592a957 100755
--- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="Mostrar grade selecionada ao entrar" name="show_grid_selection_check"/>
<check_box label="Exibir menu avançado" name="show_advanced_menu_check"/>
<check_box label="Exibir menu desenvolvedor" name="show_develop_menu_check"/>
+ <button label="Permissões de criação padrão" name="default_creation_permissions"/>
</panel>
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 8a0495f9bb..68fbd049b1 100755
--- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
@@ -30,14 +30,10 @@
<combo_box.item label="Geral e Moderado" name="Desired_Mature"/>
<combo_box.item label="Geral" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- Posição inicial:
+ <check_box label="Mostrar locais favoritos na tela de logon" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (Outras pessoas que usarem esse computador também poderão vê-los)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Última localização" name="MyLastLocation" tool_tip="Voltar ao lugar onde estava antes."/>
- <combo_box.item label="Meu início" name="MyHome" tool_tip="Voltar ao meu início."/>
- </combo_box>
- <check_box initial_value="true" label="Mostrar ao entrar" name="show_location_checkbox"/>
<text name="name_tags_textbox">
Mostrar nomes:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
index 8ca05c948a..78323fc47d 100755
--- a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
<text name="cache_size_label_l">
(Locações, imagens, web, histórico de busca)
</text>
- <check_box label="Mostrar meu perfil info em resultados de busca" name="online_searchresults"/>
+ <check_box label="Exibir meu perfil em resultados de Pesquisa" name="online_searchresults"/>
<check_box label="Apenas amigos e grupos sabem que estou online" name="online_visibility"/>
<check_box label="Apenas amigos e grupos podem me chamar ou enviar MI" name="voice_call_friends_only_check"/>
<check_box label="Desligar o microfone quando terminar chamadas" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_script_ed.xml b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
index 39bb5edc75..c546adcf8b 100755
--- a/indra/newview/skins/default/xui/pt/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="Reverter todas as alterações" name="Revert All Changes"/>
<menu_item_call label="Carregar do arquivo..." name="LoadFromFile"/>
<menu_item_call label="Salvar para o arquivo..." name="SaveToFile"/>
+ <menu_item_call label="Cores..." name="Colors"/>
</menu>
<menu label="Editar" name="Edit">
<menu_item_call label="desfazer" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="ajuda palavra- chave..." name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
Carregando...
- </text_editor>
+ </script_editor>
<combo_box label="Inserir..." name="Insert..."/>
<button label="Salvar" label_selected="Salvar" name="Save_btn"/>
<button label="Editar..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml
index 7f1452e992..bce44d2ed6 100755
--- a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml
@@ -4,4 +4,13 @@
<button label="E-mail" name="save_to_email_btn"/>
<button label="Salvar em Meu inventário (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="Salvar no meu PC" name="save_to_computer_btn"/>
+ <text name="send_to_facebook_textbox">
+ Enviar para: [secondlife:/// Facebook]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// Twitter]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml
index 65f80fddd2..5d8a024754 100755
--- a/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="Mostrar dados do item"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_twitter_account.xml b/indra/newview/skins/default/xui/pt/panel_twitter_account.xml
new file mode 100644
index 0000000000..32ab437786
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="Você está conectado ao Twitter como:"/>
+ <string name="twitter_disconnected" value="Não conectado ao Twitter"/>
+ <text name="account_caption_label">
+ Não conectado ao Twitter.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Conectar..." name="connect_btn"/>
+ <button label="Desconectar" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Aprenda a publicar no Twitter]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml b/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml
new file mode 100644
index 0000000000..3958d5f0f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ Próximas etapas?
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="Incluir localização do SL" name="add_location_cb"/>
+ <check_box initial_value="true" label="Incluir uma foto" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Resolução da imagem">
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Filtros de imagem">
+ <combo_box.item label="Sem filtro" name="NoFilter"/>
+ </combo_box>
+ <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/>
+ <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Enviar tweet" name="post_photo_btn"/>
+ <button label="Cancelar" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml
index e45a3bd21f..90e2264940 100755
--- a/indra/newview/skins/default/xui/pt/role_actions.xml
+++ b/indra/newview/skins/default/xui/pt/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="Esta habilidades incluem poderes de adicionar ou remover membros do grupo e permitir que novos membros se juntem sem um convite." name="Membership">
<action description="Convidar pessoas para este grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Convidar&apos; para convidar pessoas para entrar no grupo." name="member invite" value="1"/>
<action description="Expulsar membros deste grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Ejetar&apos; para tirar pessoas do grupo. Proprietários podem expulsar qualquer pessoa, menos outro proprietário. Se você não é Proprietário, um membro só pode ser expulso se tiver cargo &apos;Todos&apos; e nenhum outro cargo. Para destituir um membro de seu cargo, você precisa ter a função &apos;Destituir membro com cargo&apos;." name="member eject" value="2"/>
+ <action description="Gerenciar lista de banidos" longdescription="Permite que membros do grupo banam residentes ou revoguem o banimento neste grupo." name="allow ban" value="51"/>
<action description="Alterna entre &apos;Inscrições abertas&apos; e &apos;Taxa de associação&apos;." longdescription="Ative &apos;Inscrições abertas&apos; para que novos membros entrem no grupo sem convite, mude a &apos;Taxa de associação&apos; na seção Geral." name="member options" value="3"/>
</action_set>
<action_set description="Estas habilidades incluem poderes de adicionar, remover e mudar funções do grupo; adicionar e remover membros em funções e designar habilidades a funções." name="Roles">
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index a5a3f04f78..577143b0dc 100755
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -287,6 +287,75 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="TestingDisconnect">
Teste de desconexão
</string>
+ <string name="SocialFlickrConnecting">
+ Conectando ao Flickr...
+ </string>
+ <string name="SocialFlickrPosting">
+ Publicando...
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Desconectando do Flickr...
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ Problema ao conectar ao Flickr
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ Problema ao publicar no Flickr
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ Problema ao desconectar do Flickr
+ </string>
+ <string name="SocialTwitterConnecting">
+ Conectando ao Twitter...
+ </string>
+ <string name="SocialTwitterPosting">
+ Publicando...
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ Desconectando do Twitter...
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ Problema ao conectar ao Twitter
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ Problema ao publicar no Twitter
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ Problema ao desconectar do Twitter
+ </string>
+ <string name="BlackAndWhite">
+ Preto e branco
+ </string>
+ <string name="Colors1970">
+ Cores dos anos 1970
+ </string>
+ <string name="Intense">
+ Intenso
+ </string>
+ <string name="Newspaper">
+ Retícula
+ </string>
+ <string name="Sepia">
+ Sépia
+ </string>
+ <string name="Spotlight">
+ Destaque
+ </string>
+ <string name="Video">
+ Vídeo
+ </string>
+ <string name="Autocontrast">
+ Autocontraste
+ </string>
+ <string name="LensFlare">
+ Reflexo de flash
+ </string>
+ <string name="Miniature">
+ Miniatura
+ </string>
+ <string name="Toycamera">
+ Câmera de brinquedo
+ </string>
<string name="TooltipPerson">
Pessoa
</string>
@@ -835,6 +904,12 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="use_texture">
Usar textura
</string>
+ <string name="manip_hint1">
+ Mova o cursor do mouse sobre a regra
+ </string>
+ <string name="manip_hint2">
+ para ajustar à grade
+ </string>
<string name="texture_loading">
Carregando...
</string>
@@ -3953,6 +4028,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="inventory_item_offered-im">
Oferta de item de inventário
</string>
+ <string name="flickr_post_success">
+ Você publicou no Flickr.
+ </string>
+ <string name="twitter_post_success">
+ Você publicou no Twitter.
+ </string>
<string name="no_session_message">
(Sessão de MI inexistente)
</string>
@@ -4409,6 +4490,9 @@ Denunciar abuso
<string name="LocalEstimateUSD">
US$ [AMOUNT]
</string>
+ <string name="Group Ban">
+ Banimento do grupo
+ </string>
<string name="Membership">
Plano
</string>
@@ -4831,6 +4915,12 @@ Tente colocar o caminho do editor entre aspas.
<string name="Command_Destinations_Label">
Destinos
</string>
+ <string name="Command_Facebook_Label">
+ Facebook
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
Gestos
</string>
@@ -4879,6 +4969,9 @@ Tente colocar o caminho do editor entre aspas.
<string name="Command_Speak_Label">
Falar
</string>
+ <string name="Command_Twitter_Label">
+ Twitter
+ </string>
<string name="Command_View_Label">
Controles da câmera
</string>
@@ -4909,6 +5002,12 @@ Tente colocar o caminho do editor entre aspas.
<string name="Command_Destinations_Tooltip">
Destinos de interesse
</string>
+ <string name="Command_Facebook_Tooltip">
+ Publicar no Facebook
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ Carregar no Flickr
+ </string>
<string name="Command_Gestures_Tooltip">
Gestos para seu avatar
</string>
@@ -4957,6 +5056,9 @@ Tente colocar o caminho do editor entre aspas.
<string name="Command_Speak_Tooltip">
Fale com pessoas próximas usando seu microfone
</string>
+ <string name="Command_Twitter_Tooltip">
+ Twitter
+ </string>
<string name="Command_View_Tooltip">
Alterar o ângulo da câmera
</string>
diff --git a/indra/newview/skins/default/xui/ru/floater_big_preview.xml b/indra/newview/skins/default/xui/ru/floater_big_preview.xml
new file mode 100644
index 0000000000..cdacebadef
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="ПРОСМОТР"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_facebook.xml b/indra/newview/skins/default/xui/ru/floater_facebook.xml
new file mode 100644
index 0000000000..20b9e4e151
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="ОПУБЛИКОВАТЬ В FACEBOOK">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="СТАТУС" name="panel_facebook_status"/>
+ <panel label="ФОТО" name="panel_facebook_photo"/>
+ <panel label="ВХОД" name="panel_facebook_place"/>
+ <panel label="ДРУЗЬЯ" name="panel_facebook_friends"/>
+ <panel label="АККАУНТ" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Ошибка
+ </text>
+ <text name="connection_loading_text">
+ Загрузка...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_flickr.xml b/indra/newview/skins/default/xui/ru/floater_flickr.xml
new file mode 100644
index 0000000000..4f020399fb
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="ЗАГРУЗИТЬ НА FLICKR">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="ФОТО" name="panel_flickr_photo"/>
+ <panel label="АККАУНТ" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Ошибка
+ </text>
+ <text name="connection_loading_text">
+ Загрузка...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_perms_default.xml b/indra/newview/skins/default/xui/ru/floater_perms_default.xml
new file mode 100644
index 0000000000..3a88788712
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="СТАНДАРТНЫЕ РАЗРЕШЕНИЯ НА СОЗДАНИЕ">
+ <panel label="Стандартные разрешения" name="default permissions"/>
+ <button label="OK" label_selected="OK" name="ok"/>
+ <button label="Отмена" label_selected="Отмена" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml
index 6fdbdacadc..abbdeca180 100755
--- a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml
@@ -35,7 +35,7 @@
<combo_box.item label="Возраст &gt; Взрослый житель в Second Life для подростков" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Возраст &gt; Малолетний житель в Second Life для подростков" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Нападение &gt; Боевая «песочница»/небезопасная область" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Нападение &gt; Безопасная область" name="Assault__Safe_area"/>
+ <combo_box.item label="Нападение &gt; Стрельба, нанесение ударов или толкание другого жителя в безопасной области" name="Assault__Safe_area"/>
<combo_box.item label="Нападение &gt; «Песочница» испытания оружия" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Коммерция &gt; Не удалось доставить продукт или услугу" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="Раскрытие &gt; Информация о реальном мире" name="Disclosure__Real_world_information"/>
@@ -49,25 +49,25 @@
<combo_box.item label="Мошенничество &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Мошенничество &gt; Земля" name="Fraud__Land"/>
<combo_box.item label="Мошенничество &gt; «Пирамида» или «письмо счастья»" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="Мошенничество &gt; US$" name="Fraud__US$"/>
+ <combo_box.item label="Мошенничество &gt; Линден-доллары (L$) или доллары США" name="Fraud__US$"/>
<combo_box.item label="Беспокойство &gt; Рекламная ферма/видимый спам" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="Беспокойство &gt; Клевета на отдельных лиц или группы" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="Беспокойство &gt; Препятствие движению" name="Harassment__Impeding_movement"/>
<combo_box.item label="Беспокойство &gt; Сексуальное домогательство" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="Беспокойство &gt; Подстрекательство
/призыв к нарушению лицензионного соглашения" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Преследование &gt; Намеренное поведение с целью нарушить привычный образ жизни" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="Беспокойство &gt; Оскорбление словом" name="Harassment__Verbal_abuse"/>
<combo_box.item label="Непристойность &gt; Откровенно оскорбительное содержимое или поведение" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="Непристойность &gt; Некорректное имя аватара" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="Непристойность &gt; Некорректное содержимое или поведение в регионе PG" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Непристойность &gt; Некорректное для рейтинга данного региона содержимое или поведение" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="Непристойность &gt; Некорректное содержимое или поведение в регионе Moderate" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="Нарушение прав интеллектуальной собственности &gt; Удаление содержимого" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="Нарушение прав интеллектуальной собственности &gt; CopyBot или нарушение разрешений" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="Нетерпимость" name="Intolerance"/>
<combo_box.item label="Земля &gt; Злоупотребление ресурсами «песочницы»" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="Земля &gt; Посягательство &gt; Объекты/текстуры" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Земля &gt; Посягательство &gt; Объекты или текстуры" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Земля &gt; Посягательство &gt; Частицы" name="Land__Encroachment__Particles"/>
<combo_box.item label="Земля &gt; Посягательство &gt; Деревья/растения" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Пари/азартные игры" name="Wagering_gambling"/>
+ <combo_box.item label="Пари или азартные игры" name="Wagering_gambling"/>
<combo_box.item label="Другое" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/ru/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/ru/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..666827927f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="ЦВЕТА СКРИПТА">
+ <text name="color_pickers_label">
+ Выберите желаемые цвета:
+ </text>
+ <text name="text_label">
+ Текст
+ </text>
+ <text name="cursor_label">
+ Курсор
+ </text>
+ <text name="background_label">
+ Фон
+ </text>
+ <text name="datatype_label">
+ Типы данных
+ </text>
+ <text name="event_label">
+ События
+ </text>
+ <text name="string_literal_label">
+ Строковые литералы
+ </text>
+ <text name="constant_label">
+ Константа
+ </text>
+ <text name="flow_control_label">
+ Управление выполнением
+ </text>
+ <text name="function_label">
+ Функция
+ </text>
+ <text name="comment_label">
+ Комментарий
+ </text>
+ <script_editor name="Script Preview">
+ /* Пример скрипта */
+default
+{
+ state_entry()
+ {
+ // Комментарий
+ string greeting = &quot;Hello&quot;;
+ llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_snapshot.xml b/indra/newview/skins/default/xui/ru/floater_snapshot.xml
index 7e88630b32..8933f94c0b 100755
--- a/indra/newview/skins/default/xui/ru/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ru/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="ПРОСМОТР СНИМКА">
+<floater name="Snapshot" title="СНИМОК">
<floater.string name="unknown">
неизвестно
</floater.string>
@@ -61,5 +61,11 @@
<check_box label="Данные в игре" name="hud_check"/>
<check_box label="Стоп-кадр (полноэкранный)" name="freeze_frame_check"/>
<check_box label="Автообновление" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ Фильтр:
+ </text>
+ <combo_box name="filters_combobox" tool_tip="Фильтры изображений">
+ <combo_box.item label="Без фильтра" name="NoFilter"/>
+ </combo_box>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_stats.xml b/indra/newview/skins/default/xui/ru/floater_stats.xml
index 33a14adca9..10e9f5a7f4 100755
--- a/indra/newview/skins/default/xui/ru/floater_stats.xml
+++ b/indra/newview/skins/default/xui/ru/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="Отрисовка" name="render">
<stat_bar label="Треугольников на кадр" name="ktrisframe"/>
<stat_bar label="Треугольников в секунду" name="ktrissec"/>
- <stat_bar label="Всего объектов" name="objs"/>
+ <stat_bar label="Всего объектов" name="totalobjs"/>
+ <stat_bar label="Кэшированных объектов" name="cachedobjs"/>
<stat_bar label="Новых объектов" name="newobjs"/>
<stat_bar label="Частота попаданий в кэш объектов" name="object_cache_hits"/>
<stat_bar label="Выполненные запросы на смыкание" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml
index 35921d147f..a67745534c 100755
--- a/indra/newview/skins/default/xui/ru/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ru/floater_tools.xml
@@ -73,9 +73,7 @@
<check_box label="Редактировать объединенные" name="checkbox edit linked parts"/>
<button label="Объединить" name="link_btn"/>
<button label="Разъединить" name="unlink_btn"/>
- <text label="Растяжка обеих сторон" name="checkbox uniform label">
- Растяжка обеих сторон
- </text>
+ <check_box label="Растянуть с обеих сторон" name="checkbox uniform"/>
<check_box initial_value="true" label="Растягивать текстуры" name="checkbox stretch textures"/>
<check_box initial_value="true" label="Привязка" name="checkbox snap to grid"/>
<combo_box name="combobox grid mode" tool_tip="Выберите тип линейки сетки для размещения объекта">
@@ -410,82 +408,7 @@
<spinner label="Плотность в 100 кг/м^3" name="Physics Density"/>
<spinner label="Восстанавливаемость" name="Physics Restitution"/>
</panel>
- <panel label="Текстура" name="Texture">
- <panel.string name="string repeats per meter">
- Повторений на метр
- </panel.string>
- <panel.string name="string repeats per face">
- Повторений на грань
- </panel.string>
- <texture_picker label="Текстура" name="texture control" tool_tip="Щелкните для выбора изображения"/>
- <color_swatch label="Цвет" name="colorswatch" tool_tip="Щелкните для выбора цвета"/>
- <text name="color trans">
- Прозрачность %
- </text>
- <text name="glow label">
- Свечение
- </text>
- <check_box label="Собств. яркость" name="checkbox fullbright"/>
- <text name="tex gen">
- Наложение
- </text>
- <combo_box name="combobox texgen">
- <combo_box.item label="По умолчанию" name="Default"/>
- <combo_box.item label="На плоскость" name="Planar"/>
- </combo_box>
- <text name="label shininess">
- Блеск
- </text>
- <combo_box name="combobox shininess">
- <combo_box.item label="Нет" name="None"/>
- <combo_box.item label="Низко" name="Low"/>
- <combo_box.item label="Средний" name="Medium"/>
- <combo_box.item label="Высоко" name="High"/>
- </combo_box>
- <text name="label bumpiness">
- Рельефность
- </text>
- <combo_box name="combobox bumpiness">
- <combo_box.item label="Нет" name="None"/>
- <combo_box.item label="Яркость" name="Brightness"/>
- <combo_box.item label="По темному" name="Darkness"/>
- <combo_box.item label="дерево" name="woodgrain"/>
- <combo_box.item label="кора" name="bark"/>
- <combo_box.item label="кирпич" name="bricks"/>
- <combo_box.item label="шахматная доска" name="checker"/>
- <combo_box.item label="бетон" name="concrete"/>
- <combo_box.item label="старая плитка" name="crustytile"/>
- <combo_box.item label="тесаный камень" name="cutstone"/>
- <combo_box.item label="диски" name="discs"/>
- <combo_box.item label="гравий" name="gravel"/>
- <combo_box.item label="чашка Петри" name="petridish"/>
- <combo_box.item label="сайдинг" name="siding"/>
- <combo_box.item label="каменная плитка" name="stonetile"/>
- <combo_box.item label="штукатурка" name="stucco"/>
- <combo_box.item label="присоска" name="suction"/>
- <combo_box.item label="переплетение" name="weave"/>
- </combo_box>
- <spinner label="По горизонтали (U)" name="TexScaleU"/>
- <check_box label="Разворот" name="checkbox flip s"/>
- <spinner label="По вертикали (V)" name="TexScaleV"/>
- <check_box label="Разворот" name="checkbox flip t"/>
- <spinner label="Вращение˚" name="TexRot"/>
- <button label="Применить" label_selected="Применить" name="button apply"/>
- <text name="tex offset">
- Сдвиг текстуры
- </text>
- <spinner label="По горизонтали (U)" name="TexOffsetU"/>
- <spinner label="По вертикали (V)" name="TexOffsetV"/>
- <panel name="Add_Media">
- <text name="media_tex">
- Медиа
- </text>
- <button name="add_media" tool_tip="Добавить медиа"/>
- <button name="delete_media" tool_tip="Удалить медиа-текстуру"/>
- <button name="edit_media" tool_tip="Редактировать медиа"/>
- <button label="Выровнять" label_selected="Выровнять медиа" name="button align" tool_tip="Масштабирование медиа-текстуры (сначала нужно загрузить)"/>
- </panel>
- </panel>
+ <panel label="Текстура" name="Texture"/>
<panel label="Контент" name="Contents">
<button label="Создать скрипт" label_selected="Создать скрипт" name="button new script"/>
<button label="Разрешения" name="button permissions"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_twitter.xml b/indra/newview/skins/default/xui/ru/floater_twitter.xml
new file mode 100644
index 0000000000..748092ff1f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="TWITTER">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="НАПИСАТЬ" name="panel_twitter_photo"/>
+ <panel label="АККАУНТ" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Ошибка
+ </text>
+ <text name="connection_loading_text">
+ Загрузка...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/menu_conversation.xml b/indra/newview/skins/default/xui/ru/menu_conversation.xml
index 4d1240db98..c9df8b6844 100644
--- a/indra/newview/skins/default/xui/ru/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/ru/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="Заглушить всех" name="ModerateVoiceMute"/>
<menu_item_call label="Позволить говорить всем" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="Заблокировать участника" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_object.xml b/indra/newview/skins/default/xui/ru/menu_object.xml
index 056dab74c1..5f31941b2b 100755
--- a/indra/newview/skins/default/xui/ru/menu_object.xml
+++ b/indra/newview/skins/default/xui/ru/menu_object.xml
@@ -19,6 +19,7 @@
<context_menu label="Управление" name="Remove">
<menu_item_call label="Жалоба" name="Report Abuse..."/>
<menu_item_call label="Заблокировать" name="Object Mute"/>
+ <menu_item_call label="Разблокировать" name="Object Unmute"/>
<menu_item_call label="Возврат" name="Return..."/>
</context_menu>
<menu_item_call label="Взять" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 38c31b27b6..fad1ea51e0 100755
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -34,6 +34,9 @@
<menu_item_check label="Локальный чат..." name="Nearby Chat"/>
<menu_item_check label="Говорить" name="Speak"/>
<menu_item_check label="Журнал разговора..." name="Conversation Log..."/>
+ <menu_item_call label="Facebook..." name="Facebook"/>
+ <menu_item_call label="Twitter..." name="Twitter"/>
+ <menu_item_call label="Flickr..." name="Flickr"/>
<menu label="Изменение голоса" name="VoiceMorphing">
<menu_item_check label="Без изменения голоса" name="NoVoiceMorphing"/>
<menu_item_check label="Просмотр..." name="Preview"/>
@@ -147,7 +150,8 @@
<menu_item_check label="Привязка к сетке" name="Snap to Grid"/>
<menu_item_call label="Сдвиг к ближайшему узлу XY сетки" name="Snap Object XY to Grid"/>
<menu_item_call label="Использовать выбранное для сетки" name="Use Selection for Grid"/>
- <menu_item_call label="Параметры сетки" name="Grid Options"/>
+ <menu_item_call label="Параметры сетки..." name="Grid Options"/>
+ <menu_item_call label="Установить стандартные разрешения..." name="Set default permissions"/>
</menu>
<menu label="Передача" name="Upload">
<menu_item_call label="Изображение (L$[COST])..." name="Upload Image"/>
@@ -155,7 +159,6 @@
<menu_item_call label="Анимация (L$[COST])..." name="Upload Animation"/>
<menu_item_call label="Модель..." name="Upload Model"/>
<menu_item_call label="Все сразу (L$[COST] за файл)..." name="Bulk Upload"/>
- <menu_item_call label="Установить разрешения на передачу по умолчанию" name="perm prefs"/>
</menu>
<menu_item_call label="Отменить" name="Undo"/>
<menu_item_call label="Вернуть" name="Redo"/>
@@ -295,6 +298,7 @@
<menu_item_check label="Данные об уровнях детализации" name="LOD Info"/>
<menu_item_check label="Очередь построителя" name="Build Queue"/>
<menu_item_check label="Освещение" name="Lights"/>
+ <menu_item_check label="Частицы" name="Particles"/>
<menu_item_check label="Каркас столкновений" name="Collision Skeleton"/>
<menu_item_check label="Суставы" name="Joints"/>
<menu_item_check label="Лучи" name="Raycast"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index 336a97f35a..c312bcbef4 100755
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -210,6 +210,22 @@
Добавить эту способность к роли «[ROLE_NAME]»?
<usetemplate name="okcancelbuttons" notext="Нет" yestext="Да"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ Вы собираетесь добавить способность «[ACTION_NAME]» к роли «[ROLE_NAME]».
+
+ *ПРЕДУПРЕЖДЕНИЕ*
+Любой участник в роли с этой способностью также получает способности «[ACTION_NAME_2]» и «[ACTION_NAME_3]»
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ Вы удаляете способность «[ACTION_NAME]» для роли «[ROLE_NAME]».
+
+ *ПРЕДУПРЕЖДЕНИЕ*
+При удалении этой способности НЕ БУДУТ удалены способности «[ACTION_NAME_2]» и «[ACTION_NAME_3]».
+
+Если вам больше не нужны эти способности для данной роли, немедленно отключите их!
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
Вы собираетесь исключить [AVATAR_NAME] из группы.
<usetemplate ignoretext="Подтвердите исключение участника из группы" name="okcancelignore" notext="Отмена" yestext="Выкинуть"/>
@@ -1579,6 +1595,14 @@ http://secondlife.com/download.
Невозможно покинуть группу. Вы не можете покинуть группу, так как вы ее последний владелец. Сначала назначьте владельцем другого участника.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
+ <notification name="GroupDepartError">
+ Невозможно покинуть группу: [reason].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GroupDepart">
+ Вы покинули группу [group_name].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ConfirmKick">
Вы ДЕЙСТВИТЕЛЬНО хотите выбросить всех жителей с сетки?
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Выбросить всех жителей"/>
@@ -2460,6 +2484,12 @@ http://secondlife.com/download.
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4036,6 +4066,10 @@ http://secondlife.com/download.
Невозможно переместить файлы. Восстановлен прежний путь.
<usetemplate ignoretext="Невозможно переместить файлы. Восстановлен прежний путь." name="okignore" yestext="OK"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ Ошибка при сохранении стандартных разрешений по следующей причине: [REASON]. Попробуйте задать стандартные разрешения через некоторое время.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
Файл журнала чата занят предыдущей операцией. Повторите попытку через несколько минут или выберите чат с другим лицом.
<usetemplate name="okbutton" yestext="OK"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_account.xml b/indra/newview/skins/default/xui/ru/panel_facebook_account.xml
new file mode 100644
index 0000000000..22b4e46897
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="Вы подключились к Facebook как:"/>
+ <string name="facebook_disconnected" value="Не подключено к Facebook"/>
+ <text name="account_caption_label">
+ Не подключено к Facebook.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Подключение..." name="connect_btn"/>
+ <button label="Отключить" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 О публикации в Facebook]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml b/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml
new file mode 100644
index 0000000000..518452953d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="Сейчас у вас нет друзей по Facebook, которые также были бы жителями Second Life. Предложите своим друзьям по Facebook присоединиться к Second Life!"/>
+ <string name="facebook_friends_no_connected" value="Сейчас вы не подключены к Facebook. Перейдите на вкладку «Аккаунт», чтобы подключиться и включить эту функцию."/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="Друзья по SL"/>
+ <accordion_tab name="tab_suggested_friends" title="Добавить этих людей как друзей по SL"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ Не подключено к Facebook.
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml b/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml
new file mode 100644
index 0000000000..783294be86
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Разрешение изображения">
+ <combo_box.item label="Текущее окно" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1200x630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Фильтры изображений">
+ <combo_box.item label="Без фильтра" name="NoFilter"/>
+ </combo_box>
+ <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/>
+ <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/>
+ <text name="caption_label">
+ Комментарий (не обязательно):
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Опубликовать" name="post_photo_btn"/>
+ <button label="Отмена" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_place.xml b/indra/newview/skins/default/xui/ru/panel_facebook_place.xml
new file mode 100644
index 0000000000..913d327e92
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ Напишите о том, где вы:
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="Опубликовать" name="post_place_btn"/>
+ <button label="Отмена" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_status.xml b/indra/newview/skins/default/xui/ru/panel_facebook_status.xml
new file mode 100644
index 0000000000..a59f132a01
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ О чем вы думаете?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="Опубликовать" name="post_status_btn"/>
+ <button label="Отмена" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_flickr_account.xml b/indra/newview/skins/default/xui/ru/panel_flickr_account.xml
new file mode 100644
index 0000000000..9f70bf8042
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="Вы подключились к Flickr как:"/>
+ <string name="flickr_disconnected" value="Не подключено к Flickr"/>
+ <text name="account_caption_label">
+ Не подключено к Flickr.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Подключение..." name="connect_btn"/>
+ <button label="Отключить" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 О публикации в Flickr]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml b/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml
new file mode 100644
index 0000000000..0c93e28911
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Разрешение изображения">
+ <combo_box.item label="Текущее окно" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Фильтры изображений">
+ <combo_box.item label="Без фильтра" name="NoFilter"/>
+ </combo_box>
+ <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/>
+ <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/>
+ <text name="title_label">
+ Название:
+ </text>
+ <text name="description_label">
+ Описание:
+ </text>
+ <check_box initial_value="true" label="Добавить в конец описания расположение в SL" name="add_location_cb"/>
+ <text name="tags_label">
+ Теги:
+ </text>
+ <text name="tags_help_label">
+ Разделяйте теги пробелами. Теги из нескольких слов заключайте в кавычки.
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Рейтинг контента Flickr">
+ <combo_box.item label="Безопасный рейтинг Flickr" name="SafeRating"/>
+ <combo_box.item label="Умеренный рейтинг Flickr" name="ModerateRating"/>
+ <combo_box.item label="Ограниченный рейтинг Flickr" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Передать" name="post_photo_btn"/>
+ <button label="Отмена" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/ru/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..e1fcb17f67
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_group_bulk_ban.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Заблокировать жителей" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (загрузка…)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ Групповая блокировка не отправлена: выбрано слишком много жителей. Групповая блокировка может охватывать не более 100 пользователей за один запрос.
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ Групповая блокировка не отправлена: у вас нет способности «Управление списком заблокированных пользователей».
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ Групповая блокировка не отправлена: в вашей группе достигнуто предельное количество блокировок.
+ </panel.string>
+ <panel.string name="partial_ban">
+ Некоторые групповые блокировки не отправлены: [REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ Групповые блокировки не отправлены: [REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - Следующие жители уже заблокированы: [RESIDENTS].
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - Достигнут лимит блокировок, следующие агенты не заблокированы: [RESIDENTS].
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - Вы не можете заблокировать себе доступ в группу.
+ </panel.string>
+ <text name="help_text">
+ Можно заблокировать доступ в группу для нескольких жителей. Для этого щелкните «Выбрать жителей».
+ </text>
+ <button label="Выбрать жителей" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="Чтобы выбрать нескольких жителей, нажмите и удерживайте клавишу CTRL, а затем щелкните их имена"/>
+ <button label="Удалить выбранных из списка" name="remove_button" tool_tip="Удаление выбранных жителей из списка заблокированных пользователей"/>
+ <button label="Заблокировать жителей" name="ban_button"/>
+ <button label="Отмена" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ Групповая блокировка
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_group_invite.xml b/indra/newview/skins/default/xui/ru/panel_group_invite.xml
index 68dac5cd7e..46424c168b 100755
--- a/indra/newview/skins/default/xui/ru/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_invite.xml
@@ -22,7 +22,7 @@
Выберите назначаемую им роль:
</text>
<combo_box name="role_name" tool_tip="Выберите в списке роли, которые вы можете назначать участникам"/>
- <button label="Отправить приглашения" name="ok_button"/>
+ <button label="Отправить приглашения" name="invite_button"/>
<button label="Отмена" name="cancel_button"/>
<string name="GroupInvitation">
Групповое приглашение
diff --git a/indra/newview/skins/default/xui/ru/panel_group_roles.xml b/indra/newview/skins/default/xui/ru/panel_group_roles.xml
index b497cc5583..88af469fbd 100755
--- a/indra/newview/skins/default/xui/ru/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_roles.xml
@@ -25,13 +25,14 @@
</name_list>
<button label="Пригласить" name="member_invite"/>
<button label="Выкинуть" name="member_eject"/>
+ <button label="Заблокировать участников" name="member_ban"/>
</panel>
<panel label="РОЛИ" name="roles_sub_tab">
<panel.string name="help_text">
У ролей есть название и список способностей,
-доступных участникам. У участников может быть
-одна или несколько ролей. У группы может быть до 10 ролей,
-в том числе роли «Все» и «Владелец».
+ доступных участникам. У участников может быть
+ одна или несколько ролей. У группы может быть до 10 ролей,
+ в том числе роли «Все» и «Владелец».
</panel.string>
<panel.string name="cant_delete_role">
Роли «Все» и «Владелец» являются особыми и не могут быть удалены.
@@ -48,11 +49,26 @@
<panel label="СПОСОБНОСТИ" name="actions_sub_tab" tool_tip="Можно просмотреть описание способности, а также какие участники и роли ею обладают.">
<panel.string name="help_text">
Способности позволяют участникам, которым назначены соответствующие роли, выполнять особые
-действия в группе. Имеется широкий выбор способностей.
+ действия в группе. Имеется широкий выбор способностей.
</panel.string>
<filter_editor label="Фильтр способностей" name="filter_input"/>
<scroll_list name="action_list" tool_tip="Выберите способность, чтобы просмотреть данные о ней"/>
</panel>
+ <panel label="ЗАБЛОКИРОВАННЫЕ ЖИТЕЛИ" name="banlist_sub_tab" tool_tip="Просмотреть заблокированных жителей из этой группы.">
+ <panel.string name="help_text">
+ Любой житель из списка заблокированных пользователей не сможет присоединиться к группе.
+ </panel.string>
+ <panel.string name="ban_count_template">
+ Кол-во заблокированных: [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="Житель" name="name"/>
+ <name_list.columns label="Дата блокировки" name="ban_date"/>
+ </name_list>
+ <button label="Заблокировать жителей" name="ban_create" tool_tip="Заблокировать жителей из вашей группы"/>
+ <button label="Разблокировать" name="ban_delete" tool_tip="Разблокировать выбранных жителей из вашей группы"/>
+ <button name="ban_refresh" tool_tip="Обновить список заблокированных пользователей"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/ru/panel_login.xml b/indra/newview/skins/default/xui/ru/panel_login.xml
index f0877731c6..a19304f2fd 100755
--- a/indra/newview/skins/default/xui/ru/panel_login.xml
+++ b/indra/newview/skins/default/xui/ru/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- ВОЙТИ
- </text>
- <text name="username_text">
- Имя пользователя:
- </text>
- <combo_box name="username_combo" tool_tip="Имя пользователя, которое вы выбрали при регистрации, например, «bobsmith12» или «Steller Sunshine»"/>
- <text name="password_text">
- Пароль:
- </text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- Место старта:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Последнее местоположение" name="MyLastLocation"/>
- <combo_box.item label="Мой дом" name="MyHome"/>
- <combo_box.item label="&lt;Введите название региона&gt;" name="Typeregionname"/>
- </combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- Нужна помощь при входе?
- </text>
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="Имя пользователя" name="username_combo" tool_tip="Имя пользователя, которое вы выбрали при регистрации, например, «bobsmith12» или «Steller Sunshine»"/>
+ <line_editor label="Пароль" name="password_edit"/>
+ <check_box label="Запомнить меня" name="remember_check"/>
<text name="forgot_password_text">
- Забыли имя или пароль?
+ Забыли пароль?
</text>
<button label="Войти" name="connect_btn"/>
- <check_box label="Запомнить пароль" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- СОЗДАЙТЕ СВОЙ АККАУНТ
+ <text name="At_My_Last_Location_Label" font="SansSerifSmall">
+ В последнее место
</text>
- <button label="Начать" name="create_new_account_btn"/>
+ <combo_box label="Мои любимые места" name="start_location_combo">
+ <combo_box.item label="Мой дом" name="MyHome"/>
+ </combo_box>
+ <button label="Войти" name="connect_favorite_btn"/>
+ <line_editor label="Введите местоположение" name="location_edit" font="SansSerifSmall" />
+ <button label="Войти" name="connect_location_btn"/>
+ <combo_box label="Выберите сетку" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_login_first.xml b/indra/newview/skins/default/xui/ru/panel_login_first.xml
new file mode 100644
index 0000000000..bb4875373a
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="Имя пользователя" name="username_combo" tool_tip="Имя пользователя, которое вы выбрали при регистрации, например, «bobsmith12» или «Steller Sunshine»"/>
+ <line_editor label="Пароль" name="password_edit"/>
+ <button label="Войти" name="connect_btn"/>
+ <check_box label="Запомнить меня" name="remember_check"/>
+ <text name="forgot_password_text">
+ Забытый пароль
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ Ваш первый шаг – Учебный остров. Найдите портал выхода!
+ </text>
+ <text name="image_caption_right">
+ Затем исследуйте Социальный остров и познакомьтесь с другими новичками!
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml
index 7d8ee96924..90743646fd 100755
--- a/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="Выбор сетки при входе" name="show_grid_selection_check"/>
<check_box label="Показывать расширенное меню" name="show_advanced_menu_check"/>
<check_box label="Показывать меню разработчика" name="show_develop_menu_check"/>
+ <button label="Стандартные разрешения на создание" name="default_creation_permissions"/>
</panel>
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 62617caed3..b15d0e3abf 100755
--- a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml
@@ -29,14 +29,10 @@
<combo_box.item label="Общий и умеренный" name="Desired_Mature"/>
<combo_box.item label="Общий" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- Место старта:
+ <check_box label="Показывать любимые места на экране входа" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (Другие пользователи этого компьютера также увидят их)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Мое последнее место" name="MyLastLocation"/>
- <combo_box.item label="Мой дом" name="MyHome"/>
- </combo_box>
- <check_box initial_value="true" label="Показывать на экране входа" name="show_location_checkbox"/>
<text name="name_tags_textbox">
Теги имен:
</text>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml
index ed6bed439c..0a5974eed1 100755
--- a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
<text name="cache_size_label_l">
(Места, картинки, страницы, журнал поиска)
</text>
- <check_box label="Показывать информацию моего профиля в результатах поиска" name="online_searchresults"/>
+ <check_box label="Показывать данные моего профиля в результатах поиска" name="online_searchresults"/>
<check_box label="Только друзья и группы видят, когда я на связи" name="online_visibility"/>
<check_box label="Только друзья и группы могут звонить мне и отправлять IM" name="voice_call_friends_only_check"/>
<check_box label="Отключать микрофон по окончании разговора" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_script_ed.xml b/indra/newview/skins/default/xui/ru/panel_script_ed.xml
index a9e5d9ef10..54a1eaab75 100755
--- a/indra/newview/skins/default/xui/ru/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/ru/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="Отменить все изменения" name="Revert All Changes"/>
<menu_item_call label="Загрузить из файла..." name="LoadFromFile"/>
<menu_item_call label="Сохранить в файл..." name="SaveToFile"/>
+ <menu_item_call label="Цвета..." name="Colors"/>
</menu>
<menu label="Изменить" name="Edit">
<menu_item_call label="Отменить" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="Справка по ключевым словам..." name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
Загрузка...
- </text_editor>
+ </script_editor>
<combo_box label="Вставить..." name="Insert..."/>
<button label="Сохранить" label_selected="Сохранить" name="Save_btn"/>
<button label="Изменить..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml
index 250a76cd21..8cd69951ca 100755
--- a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml
@@ -4,4 +4,13 @@
<button label="Отправить по почте" name="save_to_email_btn"/>
<button label="Сохранить в моем инвентаре (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="Сохранить на моем компьютере" name="save_to_computer_btn"/>
+ <text name="send_to_facebook_textbox">
+ Отправить: [secondlife:/// Facebook]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// Twitter]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml
index 90fb720068..fdcaa843ec 100755
--- a/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
<text name="region" value="..."/>
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="Показать информацию"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_twitter_account.xml b/indra/newview/skins/default/xui/ru/panel_twitter_account.xml
new file mode 100644
index 0000000000..140554f5c6
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="Вы подключились к Twitter как:"/>
+ <string name="twitter_disconnected" value="Не подключено к Twitter"/>
+ <text name="account_caption_label">
+ Не подключено к Twitter.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Подключение..." name="connect_btn"/>
+ <button label="Отключить" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 О публикации в Twitter]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml b/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml
new file mode 100644
index 0000000000..564d02411d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ Что случилось?
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="Включить расположение в SL" name="add_location_cb"/>
+ <check_box initial_value="true" label="Включить фото" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Разрешение изображения">
+ <combo_box.item label="Текущее окно" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Фильтры изображений">
+ <combo_box.item label="Без фильтра" name="NoFilter"/>
+ </combo_box>
+ <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/>
+ <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Твит" name="post_photo_btn"/>
+ <button label="Отмена" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/role_actions.xml b/indra/newview/skins/default/xui/ru/role_actions.xml
index 3f31ecfa10..a4ac7411a3 100755
--- a/indra/newview/skins/default/xui/ru/role_actions.xml
+++ b/indra/newview/skins/default/xui/ru/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="Эти способности позволяют добавлять и удалять участников группы, а также вступать в группы без приглашения." name="Membership">
<action description="Приглашение людей в эту группу" longdescription="Пригласите людей в группу с помощью кнопки «Пригласить» в разделе «Роли» на вкладке «Участники»." name="member invite" value="1"/>
<action description="Удаление участников из группы" longdescription="Удалите участников из группы с помощью кнопки «Выкинуть» в разделе «Роли» на вкладке «Участники». Владелец может удалять всех, кроме другого владельца. Если вы не владелец, то удалить участника из группы можно только в том случае, если ему назначена ТОЛЬКО роль «Все». Чтобы удалять участников из ролей, необходима способность «Удаление участников из ролей»." name="member eject" value="2"/>
+ <action description="Управление списком заблокированных пользователей" longdescription="Разрешить участнику группы блокировать/разблокировать жителей из этой группы." name="allow ban" value="51"/>
<action description="Включение-отключение свободного вступления и изменение платы за вступление" longdescription="Включение-отключение свободного вступления, что обеспечит вступление новых участников без приглашения, а также изменение платы за вступление в разделе «Общие»." name="member options" value="3"/>
</action_set>
<action_set description="Эти способности позволяют добавлять, удалять и изменять роли группы, добавлять и удалять участников ролей, а также назначать ролям способности." name="Roles">
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index be5a8d95eb..b7daab33a9 100755
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -335,6 +335,75 @@ support@secondlife.com.
<string name="TestingDisconnect">
Тестирование отключения клиента
</string>
+ <string name="SocialFlickrConnecting">
+ Подключение к Flickr...
+ </string>
+ <string name="SocialFlickrPosting">
+ Публикация...
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Отключение от Flickr...
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ Неполадка при подключении к Flickr
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ Неполадка при публикации в Flickr
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ Неполадка при отключении от Flickr
+ </string>
+ <string name="SocialTwitterConnecting">
+ Подключение к Twitter...
+ </string>
+ <string name="SocialTwitterPosting">
+ Публикация...
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ Отключение от Twitter...
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ Неполадка при подключении к Twitter
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ Неполадка при публикации в Twitter
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ Неполадка при отключении от Twitter
+ </string>
+ <string name="BlackAndWhite">
+ Черно-белый
+ </string>
+ <string name="Colors1970">
+ Цвета 1970-х
+ </string>
+ <string name="Intense">
+ Интенсивный
+ </string>
+ <string name="Newspaper">
+ Газета
+ </string>
+ <string name="Sepia">
+ Сепия
+ </string>
+ <string name="Spotlight">
+ Прожектор
+ </string>
+ <string name="Video">
+ Видео
+ </string>
+ <string name="Autocontrast">
+ Автоконтраст
+ </string>
+ <string name="LensFlare">
+ Блик
+ </string>
+ <string name="Miniature">
+ Миниатюра
+ </string>
+ <string name="Toycamera">
+ Игрушечная камера
+ </string>
<string name="TooltipPerson">
Человек
</string>
@@ -883,6 +952,12 @@ support@secondlife.com.
<string name="use_texture">
Использовать текстуру
</string>
+ <string name="manip_hint1">
+ Наведите указатель мыши на линейку
+ </string>
+ <string name="manip_hint2">
+ для привязки к сетке
+ </string>
<string name="texture_loading">
Загрузка...
</string>
@@ -4077,6 +4152,12 @@ support@secondlife.com.
<string name="share_alert">
Перетаскивайте вещи из инвентаря сюда
</string>
+ <string name="flickr_post_success">
+ Вы опубликовали сообщение в Flickr.
+ </string>
+ <string name="twitter_post_success">
+ Вы опубликовали сообщение в Twitter.
+ </string>
<string name="no_session_message">
(Сеанс IM не существует)
</string>
@@ -4533,6 +4614,9 @@ support@secondlife.com.
<string name="LocalEstimateUSD">
[AMOUNT] US$
</string>
+ <string name="Group Ban">
+ Групповая блокировка
+ </string>
<string name="Membership">
Членство
</string>
@@ -4967,6 +5051,12 @@ support@secondlife.com.
<string name="Command_Destinations_Label">
Пункты
</string>
+ <string name="Command_Facebook_Label">
+ Facebook
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
Жесты
</string>
@@ -5015,6 +5105,9 @@ support@secondlife.com.
<string name="Command_Speak_Label">
Говорить
</string>
+ <string name="Command_Twitter_Label">
+ Twitter
+ </string>
<string name="Command_View_Label">
Управление камерой
</string>
@@ -5045,6 +5138,12 @@ support@secondlife.com.
<string name="Command_Destinations_Tooltip">
Интересные места
</string>
+ <string name="Command_Facebook_Tooltip">
+ Опубликовать в Facebook
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ Загрузить на Flickr
+ </string>
<string name="Command_Gestures_Tooltip">
Жесты для аватара
</string>
@@ -5093,6 +5192,9 @@ support@secondlife.com.
<string name="Command_Speak_Tooltip">
Говорите с людьми вокруг вас с помощью микрофона
</string>
+ <string name="Command_Twitter_Tooltip">
+ Twitter
+ </string>
<string name="Command_View_Tooltip">
Изменение угла камеры
</string>
diff --git a/indra/newview/skins/default/xui/tr/floater_big_preview.xml b/indra/newview/skins/default/xui/tr/floater_big_preview.xml
new file mode 100644
index 0000000000..c99a71d3c2
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="ÖNİZLEME"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_facebook.xml b/indra/newview/skins/default/xui/tr/floater_facebook.xml
new file mode 100644
index 0000000000..87f69fc731
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="FACEBOOK&apos;TA YAYINLA">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="DURUM" name="panel_facebook_status"/>
+ <panel label="FOTOĞRAF" name="panel_facebook_photo"/>
+ <panel label="KONUMA GİRİŞ YAPIN" name="panel_facebook_place"/>
+ <panel label="ARKADAŞLAR" name="panel_facebook_friends"/>
+ <panel label="HESAP" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Hata
+ </text>
+ <text name="connection_loading_text">
+ Yükleniyor...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_flickr.xml b/indra/newview/skins/default/xui/tr/floater_flickr.xml
new file mode 100644
index 0000000000..4fa6770673
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="FLICKR&apos;A YÜKLE">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="FOTOĞRAF" name="panel_flickr_photo"/>
+ <panel label="HESAP" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Hata
+ </text>
+ <text name="connection_loading_text">
+ Yükleniyor...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_perms_default.xml b/indra/newview/skins/default/xui/tr/floater_perms_default.xml
new file mode 100644
index 0000000000..2f371c056c
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="VARSAYILAN OLUŞTURMA İZİNLERİ">
+ <panel label="Varsayılan İzinler" name="default permissions"/>
+ <button label="Tamam" label_selected="Tamam" name="ok"/>
+ <button label="İptal" label_selected="İptal" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
index c5765883c4..ea598a5669 100755
--- a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
@@ -35,7 +35,7 @@
<combo_box.item label="Yaş &gt; 18 Yaş Altı Second Life&apos;ında Yetişkin Sakin" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Yaş &gt; 18 Yaş Altı Second Life&apos;ı dışında Reşit Olmayan Sakin" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Saldırı &gt; Çarpışma koruma alanı / güvensiz alan" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Saldırı &gt; Güvenli alan" name="Assault__Safe_area"/>
+ <combo_box.item label="Şiddet &gt; Güvenli bir Alanda başka bir LS Sakinini ateşli silahla vurmak ya da itip kakmak" name="Assault__Safe_area"/>
<combo_box.item label="Saldırı &gt; Silah test güvenli alanı" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Ticaret &gt; Ürün veya hizmet verilemedi" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="İfşa &gt; Gerçek dünya bilgileri" name="Disclosure__Real_world_information"/>
@@ -49,25 +49,25 @@
<combo_box.item label="Dolandırıcılık &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Dolandırıcılık &gt; Arazi" name="Fraud__Land"/>
<combo_box.item label="Dolandırıcılık &gt; Piramid planı veya zincirleme mektup" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="Dolandırıcılık &gt; US$" name="Fraud__US$"/>
+ <combo_box.item label="Dolandırıcılık &gt; L$ veya USD $" name="Fraud__US$"/>
<combo_box.item label="Taciz &gt; reklam çiftlikleri / görsel spam" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="Taciz &gt; Kişi ya da grupları aşağılama" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="Taciz &gt; Tehditkâr hareket" name="Harassment__Impeding_movement"/>
<combo_box.item label="Taciz &gt; Cinsel taciz" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="Taciz &gt; Başkalarını Hizmet Koşullarını ihlal etmeye kışkırtma/teşvik" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Taciz &gt; Birini rahatsız etmeye yönelik kasti hareket" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="Taciz &gt; Sözlü istismar" name="Harassment__Verbal_abuse"/>
<combo_box.item label="Uygunsuzluk &gt; Genel anlamda rahatsız edici içerik veya davranış" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="Uygunsuzluk &gt; Uygunsuz avatar adı" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="Uygunsuzluk &gt; PG bölgesinde rahatsız edici içerik veya davranış" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Uygunsuzluk &gt; Bölge Seviyesine uygun olmayan rahatsız edici içerik veya davranış" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="Uygunsuzluk &gt; Orta bölgede rahatsız edici içerik veya davranış" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="Fikri mülkiyet ihlali &gt; İçerik Silme" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="Fikri mülkiyet ihlali &gt; CopyBot veya İzinlerin Kötüye Kullanılması" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="Tahammülsüzlük" name="Intolerance"/>
<combo_box.item label="Arazi &gt; Koruma alanı kaynaklarının istismarı" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="Arazi &gt; Tecavvüz &gt; Nesneler/dokular" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Arazi &gt; Tecavüz &gt; Nesneler veya dokular" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Arazi &gt; Tecavvüz &gt; Parçacıklar" name="Land__Encroachment__Particles"/>
<combo_box.item label="Arazi &gt; Tecavvüz &gt; Ağaçlar/bitkiler" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Bahis oynatma/kumar" name="Wagering_gambling"/>
+ <combo_box.item label="Bahis veya Kumar" name="Wagering_gambling"/>
<combo_box.item label="Diğer" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/tr/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/tr/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..2d0d8d580a
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="YAZI RENKLERİ">
+ <text name="color_pickers_label">
+ İstediğiniz renkleri seçin:
+ </text>
+ <text name="text_label">
+ Metin
+ </text>
+ <text name="cursor_label">
+ İmleç
+ </text>
+ <text name="background_label">
+ Arka Plan
+ </text>
+ <text name="datatype_label">
+ Veri Türleri
+ </text>
+ <text name="event_label">
+ Etkinlikler
+ </text>
+ <text name="string_literal_label">
+ Dize Değişmezleri
+ </text>
+ <text name="constant_label">
+ Sabit
+ </text>
+ <text name="flow_control_label">
+ Akış Denetimi
+ </text>
+ <text name="function_label">
+ İşlev
+ </text>
+ <text name="comment_label">
+ Yorum
+ </text>
+ <script_editor name="Script Preview">
+ /* Örnek yazı */
+default
+{
+ state_entry()
+ {
+ // Yorum
+ string greeting = &quot;Merhaba&quot;;
+ llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_snapshot.xml b/indra/newview/skins/default/xui/tr/floater_snapshot.xml
index fa51f15d16..3f588522eb 100755
--- a/indra/newview/skins/default/xui/tr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/tr/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="ANLIK GÖRÜNTÜ ÖNİZLEME">
+<floater name="Snapshot" title="ANLIK GÖRÜNTÜ">
<floater.string name="unknown">
bilinmiyor
</floater.string>
@@ -61,5 +61,11 @@
<check_box label="BÜG&apos;ler" name="hud_check"/>
<check_box label="Kare dondur (tam ekran)" name="freeze_frame_check"/>
<check_box label="Otomatik yenile" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ Filtre:
+ </text>
+ <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri">
+ <combo_box.item label="Filtre Yok" name="NoFilter"/>
+ </combo_box>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_stats.xml b/indra/newview/skins/default/xui/tr/floater_stats.xml
index 2c0c33737f..1ae42ad382 100755
--- a/indra/newview/skins/default/xui/tr/floater_stats.xml
+++ b/indra/newview/skins/default/xui/tr/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="İşle" name="render">
<stat_bar label="Çerçeve Başına Üçgenler" name="ktrisframe"/>
<stat_bar label="Saniye Başına Üçgenler" name="ktrissec"/>
- <stat_bar label="Toplam Nesne" name="objs"/>
+ <stat_bar label="Toplam Nesne" name="totalobjs"/>
+ <stat_bar label="Önbelleğe Alınan Nesne" name="cachedobjs"/>
<stat_bar label="Yeni Nesne" name="newobjs"/>
<stat_bar label="Nesne Önbellek İsabet Oranı" name="object_cache_hits"/>
<stat_bar label="Gerçekleştirilen Gölgeleme Sorguları" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_tools.xml b/indra/newview/skins/default/xui/tr/floater_tools.xml
index 39a3569efa..56df06f83b 100755
--- a/indra/newview/skins/default/xui/tr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/tr/floater_tools.xml
@@ -73,9 +73,7 @@
<check_box label="Bağlantılıları düzenle" name="checkbox edit linked parts"/>
<button label="Bağla" name="link_btn"/>
<button label="Bağlantıyı Kopar" name="unlink_btn"/>
- <text label="Her İki Tarafı Uzat" name="checkbox uniform label">
- Her İki Tarafı Uzat
- </text>
+ <check_box label="Her İki Tarafı Uzat" name="checkbox uniform"/>
<check_box initial_value="true" label="Dokuları Uzat" name="checkbox stretch textures"/>
<check_box initial_value="true" label="Yasla" name="checkbox snap to grid"/>
<combo_box name="combobox grid mode" tool_tip="Nesneyi konumlandırmak için ağ cetvelini seçin">
@@ -410,82 +408,7 @@
<spinner label="100 kg/m3 cinsinden yoğunluk" name="Physics Density"/>
<spinner label="Restitüsyon" name="Physics Restitution"/>
</panel>
- <panel label="Doku" name="Texture">
- <panel.string name="string repeats per meter">
- Metrede Kaç Kez Tekrarlandığı
- </panel.string>
- <panel.string name="string repeats per face">
- Bir Yüzde Kaç Kez Tekrarlandığı
- </panel.string>
- <texture_picker label="Doku" name="texture control" tool_tip="Bir resim seçmek için tıklayın"/>
- <color_swatch label="Renk" name="colorswatch" tool_tip="Renk seçiciyi açmak için tıklayın"/>
- <text name="color trans">
- Saydamlık %
- </text>
- <text name="glow label">
- Parıltı
- </text>
- <check_box label="Tam Parlak" name="checkbox fullbright"/>
- <text name="tex gen">
- Eşleştirme
- </text>
- <combo_box name="combobox texgen">
- <combo_box.item label="Varsayılan" name="Default"/>
- <combo_box.item label="Planar" name="Planar"/>
- </combo_box>
- <text name="label shininess">
- Parıldama
- </text>
- <combo_box name="combobox shininess">
- <combo_box.item label="Hiçbiri" name="None"/>
- <combo_box.item label="Düşük" name="Low"/>
- <combo_box.item label="Orta" name="Medium"/>
- <combo_box.item label="Yüksek" name="High"/>
- </combo_box>
- <text name="label bumpiness">
- Yumruluk
- </text>
- <combo_box name="combobox bumpiness">
- <combo_box.item label="Hiçbiri" name="None"/>
- <combo_box.item label="Parlaklık" name="Brightness"/>
- <combo_box.item label="Koyuluk" name="Darkness"/>
- <combo_box.item label="damarlı ahşap" name="woodgrain"/>
- <combo_box.item label="ağaç kabuğu" name="bark"/>
- <combo_box.item label="tuğlalar" name="bricks"/>
- <combo_box.item label="dama tahtası" name="checker"/>
- <combo_box.item label="beton" name="concrete"/>
- <combo_box.item label="sert çini" name="crustytile"/>
- <combo_box.item label="kesilmiş taş" name="cutstone"/>
- <combo_box.item label="diskler" name="discs"/>
- <combo_box.item label="çakıl" name="gravel"/>
- <combo_box.item label="petri kabı" name="petridish"/>
- <combo_box.item label="dış kaplama" name="siding"/>
- <combo_box.item label="taş çini" name="stonetile"/>
- <combo_box.item label="stükko" name="stucco"/>
- <combo_box.item label="vakum" name="suction"/>
- <combo_box.item label="örgü" name="weave"/>
- </combo_box>
- <spinner label="Yatay (U)" name="TexScaleU"/>
- <check_box label="Çevir" name="checkbox flip s"/>
- <spinner label="Dikey (V)" name="TexScaleV"/>
- <check_box label="Çevir" name="checkbox flip t"/>
- <spinner label="Döndürme*" name="TexRot"/>
- <button label="Uygula" label_selected="Uygula" name="button apply"/>
- <text name="tex offset">
- Doku Dengeleyicisi
- </text>
- <spinner label="Yatay (U)" name="TexOffsetU"/>
- <spinner label="Dikey (V)" name="TexOffsetV"/>
- <panel name="Add_Media">
- <text name="media_tex">
- Ortam
- </text>
- <button name="add_media" tool_tip="Ortam Ekle"/>
- <button name="delete_media" tool_tip="Bu ortam dokusunu sil"/>
- <button name="edit_media" tool_tip="Bu Ortamı Düzenle"/>
- <button label="Hizala" label_selected="Ortamı Hizala" name="button align" tool_tip="Ortam dokusunu hizala (önce yüklenmelidir)"/>
- </panel>
- </panel>
+ <panel label="Doku" name="Texture"/>
<panel label="İçerik" name="Contents">
<button label="Yeni Komut Dosyası" label_selected="Yeni Komut Dosyası" name="button new script"/>
<button label="İzinler" name="button permissions"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_twitter.xml b/indra/newview/skins/default/xui/tr/floater_twitter.xml
new file mode 100644
index 0000000000..3060bd1c84
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="TWITTER">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="OLUŞTUR" name="panel_twitter_photo"/>
+ <panel label="HESAP" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ Hata
+ </text>
+ <text name="connection_loading_text">
+ Yükleniyor...
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/menu_conversation.xml b/indra/newview/skins/default/xui/tr/menu_conversation.xml
index c2773cdc26..68c9af15b5 100644
--- a/indra/newview/skins/default/xui/tr/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/tr/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="Herkesi engelle" name="ModerateVoiceMute"/>
<menu_item_call label="Herkesin engellemesini kaldır" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="Üyeyi yasakla" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_object.xml b/indra/newview/skins/default/xui/tr/menu_object.xml
index 2f8b5c0362..cfc9515d8f 100755
--- a/indra/newview/skins/default/xui/tr/menu_object.xml
+++ b/indra/newview/skins/default/xui/tr/menu_object.xml
@@ -19,6 +19,7 @@
<context_menu label="Yönet" name="Remove">
<menu_item_call label="Kötüye Kullanımı Bildir" name="Report Abuse..."/>
<menu_item_call label="Engelle" name="Object Mute"/>
+ <menu_item_call label="Engellemeyi Kaldır" name="Object Unmute"/>
<menu_item_call label="İade Et" name="Return..."/>
</context_menu>
<menu_item_call label="Al" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index eabea0cc67..23e2903e03 100755
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -34,6 +34,9 @@
<menu_item_check label="Yakındaki Sohbet..." name="Nearby Chat"/>
<menu_item_check label="Konuş" name="Speak"/>
<menu_item_check label="Sohbet Günlüğü..." name="Conversation Log..."/>
+ <menu_item_call label="Facebook..." name="Facebook"/>
+ <menu_item_call label="Twitter..." name="Twitter"/>
+ <menu_item_call label="Flickr..." name="Flickr"/>
<menu label="Ses şekillendirme" name="VoiceMorphing">
<menu_item_check label="Ses şekillendirme yok" name="NoVoiceMorphing"/>
<menu_item_check label="Önizleme..." name="Preview"/>
@@ -148,7 +151,8 @@
<menu_item_check label="Ağa Uydur" name="Snap to Grid"/>
<menu_item_call label="XY Nesnesini Ağa Uydur" name="Snap Object XY to Grid"/>
<menu_item_call label="Ağ İçin Seçimi Kullan" name="Use Selection for Grid"/>
- <menu_item_call label="Ağ Seçenekleri" name="Grid Options"/>
+ <menu_item_call label="Ağ Seçenekleri..." name="Grid Options"/>
+ <menu_item_call label="Varsayılan İzinleri Ayarla..." name="Set default permissions"/>
</menu>
<menu label="Karşıya Yükle" name="Upload">
<menu_item_call label="Görüntü (L$[COST])..." name="Upload Image"/>
@@ -156,7 +160,6 @@
<menu_item_call label="Animasyon (L$[COST])..." name="Upload Animation"/>
<menu_item_call label="Model..." name="Upload Model"/>
<menu_item_call label="Toplu (dosya başına L$[COST])..." name="Bulk Upload"/>
- <menu_item_call label="Varsayılan Karşıya Yükleme İzinlerini Ayarla" name="perm prefs"/>
</menu>
<menu_item_call label="Geri Al" name="Undo"/>
<menu_item_call label="Yinele" name="Redo"/>
@@ -302,6 +305,7 @@
<menu_item_check label="Ayrıntı Seviyesi Bilgisi" name="LOD Info"/>
<menu_item_check label="İnşa Kuyruğu" name="Build Queue"/>
<menu_item_check label="Işıklar" name="Lights"/>
+ <menu_item_check label="Parçacıklar" name="Particles"/>
<menu_item_check label="Çarpışma İskeleti" name="Collision Skeleton"/>
<menu_item_check label="Eklemler" name="Joints"/>
<menu_item_check label="Işın Yayını" name="Raycast"/>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index a58abca3ac..2364bd5acf 100755
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -210,6 +210,22 @@ Bu Yetenek &apos;[ROLE_NAME]&apos; rolüne eklensin mi?
Bu Yetenek &apos;[ROLE_NAME]&apos; rolüne eklensin mi?
<usetemplate name="okcancelbuttons" notext="Hayır" yestext="Evet"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ &quot;[ROLE_NAME]&quot; rolüne &quot;[ACTION_NAME]&quot; yeteneğini eklemek üzeresiniz.
+
+ *UYARI*
+Bu Yeteneğe sahip bir Roldeki Üyeler &quot;[ACTION_NAME_2]&quot; ve &quot;[ACTION_NAME_3]&quot; yeteneklerine de sahip olacak.
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ &quot;[ROLE_NAME]&quot; rolünden &quot;[ACTION_NAME]&quot; yeteneğini kaldırıyorsunuz.
+
+ *UYARI*
+Bu yeteneğin kaldırılması &quot;[ACTION_NAME_2]&quot; ve &quot;[ACTION_NAME_3]&quot; yeteneklerini kaldırmaz.
+
+Bu yeteneklerin artık bu rolde bulunmasını istemiyorsanız, onları hemen devre dışı bırakın!
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
Gruptan [AVATAR_NAME] adlı üyeyi çıkarmak üzeresiniz.
<usetemplate ignoretext="Gruptan bir katılımcının çıkarılmasını doğrulayın" name="okcancelignore" notext="İptal" yestext="Çıkar"/>
@@ -1579,6 +1595,14 @@ Gruptan ayrılmak istiyor musunuz?
Gruptan ayrılınamıyor. Gruptan ayrılamazsınız çünkü grubun son sahibisiniz. Lütfen önce sahip rolüne başka bir üye atayın.
<usetemplate name="okbutton" yestext="Tamam"/>
</notification>
+ <notification name="GroupDepartError">
+ Gruptan ayrılma işlemi yapılamıyor: [reason].
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
+ <notification name="GroupDepart">
+ [group_name] grubundan ayrıldınız.
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
<notification name="ConfirmKick">
Tüm Sakinleri GERÇEKTEN ağ dışına çıkarmak istiyor musunuz?
<usetemplate name="okcancelbuttons" notext="İptal Et" yestext="Tüm Sakinleri Çıkar"/>
@@ -2460,6 +2484,12 @@ Daha küçük bir arazi parçası seçmeyi deneyin.
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4030,6 +4060,10 @@ Daha küçük bir arazi parçası seçmeyi deneyin.
Dosyalar taşınamıyor. Önceki yol geri yüklendi.
<usetemplate ignoretext="Dosyalar taşınamıyor. Önceki yol geri yüklendi." name="okignore" yestext="Tamam"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ Aşağıdaki nedenden dolayı, varsayılan izinler kaydedilirken bir sorun oluştu: [REASON]. Varsayılan izinleri ayarlamayı lütfen daha sonra tekrar deneyin.
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
Sohbet geçmişi dosyası önceki işlemi gerçekleştirmekle meşgul. Lütfen bir kaç dakika sonra tekrar deneyin veya başka bir kişiyle sohbet etmeyi deneyin.
<usetemplate name="okbutton" yestext="Tamam"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_account.xml b/indra/newview/skins/default/xui/tr/panel_facebook_account.xml
new file mode 100644
index 0000000000..e2d2b193a6
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="Facebook&apos;a şu kimlikle bağlandınız:"/>
+ <string name="facebook_disconnected" value="Facebook&apos;a bağlanılmadı"/>
+ <text name="account_caption_label">
+ Facebook&apos;a bağlanılmadı.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Bağlan..." name="connect_btn"/>
+ <button label="Bağlantıyı kes" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook&apos;ta içerik yayınlama hakkında bilgi edinin]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml b/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml
new file mode 100644
index 0000000000..0a6b9ac600
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="Şu an için aynı zamanda bir Second Life sakini olan hiçbir Facebook arkadaşınız yok. Facebook arkadaşlarınızı bugün Second Life&apos;a katılmaya davet edin!"/>
+ <string name="facebook_friends_no_connected" value="Şu anda Facebook&apos;a bağlı değilsiniz. Bağlanmak ve bu özelliği etkinleştirmek için lütfen Hesap sekmesine gidin."/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="SL arkadaşları"/>
+ <accordion_tab name="tab_suggested_friends" title="Bu kişileri SL arkadaşları olarak ekle"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ Facebook&apos;a bağlanılmadı.
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml b/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml
new file mode 100644
index 0000000000..64732c5fc7
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü">
+ <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1200x630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri">
+ <combo_box.item label="Filtre Yok" name="NoFilter"/>
+ </combo_box>
+ <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/>
+ <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/>
+ <text name="caption_label">
+ Yorum (isteğe bağlı):
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Yayınla" name="post_photo_btn"/>
+ <button label="İptal" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_place.xml b/indra/newview/skins/default/xui/tr/panel_facebook_place.xml
new file mode 100644
index 0000000000..54c392c9d8
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ Bulunduğunuz yer hakkında bir şeyler söyleyin:
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="Yayınla" name="post_place_btn"/>
+ <button label="İptal" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_status.xml b/indra/newview/skins/default/xui/tr/panel_facebook_status.xml
new file mode 100644
index 0000000000..9b95fe3a35
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ Ne düşünüyorsunuz?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="Yayınla" name="post_status_btn"/>
+ <button label="İptal" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_flickr_account.xml b/indra/newview/skins/default/xui/tr/panel_flickr_account.xml
new file mode 100644
index 0000000000..57b940d5f1
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="Flickr&apos;a şu kimlikle bağlandınız:"/>
+ <string name="flickr_disconnected" value="Flickr&apos;la bağlantı kurulmadı"/>
+ <text name="account_caption_label">
+ Flickr&apos;la bağlantı kurulmadı.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Bağlan..." name="connect_btn"/>
+ <button label="Bağlantıyı kes" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Flickr&apos;da içerik yayınlama hakkında bilgi edinin]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml b/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml
new file mode 100644
index 0000000000..9ebc70c67c
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü">
+ <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri">
+ <combo_box.item label="Filtre Yok" name="NoFilter"/>
+ </combo_box>
+ <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/>
+ <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/>
+ <text name="title_label">
+ Başlık:
+ </text>
+ <text name="description_label">
+ Açıklama:
+ </text>
+ <check_box initial_value="true" label="Açıklamanın sonuna SL konumunu ekle" name="add_location_cb"/>
+ <text name="tags_label">
+ Etiketler:
+ </text>
+ <text name="tags_help_label">
+ Etiketleri boşlukla ayır
+Birden çok kelime içeren etiketler için &quot;&quot; kullan
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Filckr içerik seviyesi">
+ <combo_box.item label="Güvenli Flickr seviyesi" name="SafeRating"/>
+ <combo_box.item label="Orta Flickr seviyesi" name="ModerateRating"/>
+ <combo_box.item label="Kısıtlı Flickr seviyesi" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Karşıya Yükle" name="post_photo_btn"/>
+ <button label="İptal" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/tr/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..214cd15ec4
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_group_bulk_ban.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Sakinleri Yasakla" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (yükleniyor...)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ Grup yasaklama talepleri gönderilmedi: çok fazla Sakin seçilmiş. Her talepte en fazla 100 kişiye grup giriş yasağı koyabilirsiniz.
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ Gruptan yasaklama talebi gönderilmedi: &quot;Yasaklı listesini yönetme&quot; yetkisine sahip değilsiniz.
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ Gruptan yasaklama talebi gönderilmedi: grubunuz izin verilen yasaklama limitine ulaştı.
+ </panel.string>
+ <panel.string name="partial_ban">
+ Gruptan yasaklama taleplerinin bazıları gönderilmedi:
+[REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ Gruptan yasaklama talepleri gönderilmedi:
+[REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - Aşağıdaki sakinler zaten yasaklı: [RESIDENTS].
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - Yasaklama limitine ulaşıldığı için aşağıdaki kişiler yasaklanmadı: [RESIDENTS].
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - Kendinizi bir grubun yasaklı listesine ekleyemezsiniz.
+ </panel.string>
+ <text name="help_text">
+ Birden fazla Sakin seçip grubunuza girişlerini yasaklayabilirsiniz. Başlamak için &quot;Sakin Seçiciyi Aç&quot; üzerine tıklayın.
+ </text>
+ <button label="Sakin Seçiciyi Aç" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="Ctrl tuşunu basılı tutun ve seçmek istediğiniz Sakinlerin adlarına tıklayın"/>
+ <button label="Seçilenleri Listeden Çıkar" name="remove_button" tool_tip="Yukarıda seçilen Sakinleri yasaklı listesinden çıkarır"/>
+ <button label="Sakinleri Yasakla" name="ban_button"/>
+ <button label="İptal" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ Gruptan Yasakla
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_group_invite.xml b/indra/newview/skins/default/xui/tr/panel_group_invite.xml
index 4ba5761edb..77c4db2cdc 100755
--- a/indra/newview/skins/default/xui/tr/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/tr/panel_group_invite.xml
@@ -22,7 +22,7 @@
Onları hala Role atayacağınızı seçin:
</text>
<combo_box name="role_name" tool_tip="Üyeleri atamanıza izin verilen Roller listesinden seçin"/>
- <button label="Davetiye Gönder" name="ok_button"/>
+ <button label="Davetiye Gönder" name="invite_button"/>
<button label="İptal" name="cancel_button"/>
<string name="GroupInvitation">
Grup Davetiyesi
diff --git a/indra/newview/skins/default/xui/tr/panel_group_roles.xml b/indra/newview/skins/default/xui/tr/panel_group_roles.xml
index ef8b093ddf..59a48bbdc2 100755
--- a/indra/newview/skins/default/xui/tr/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/tr/panel_group_roles.xml
@@ -24,12 +24,13 @@ Ctrl tuşuna basıp adlarına tıklayarak birden fazla Üye seçebilirsiniz.
</name_list>
<button label="Davet Et" name="member_invite"/>
<button label="Çıkar" name="member_eject"/>
+ <button label="Üyeyi/Üyeleri Yasakla" name="member_ban"/>
</panel>
<panel label="ROLLER" name="roles_sub_tab">
<panel.string name="help_text">
- Roller, birer başlığa ve Üyelerin gerçekleştirmesine izin verilen Yetenekler listesine sahiptir.
+ Rollerde, birer başlık ve Üyelerin gerçekleştirmesine izin verilen bir Yetenekler listesi vardır.
Bir Üye bir veya daha fazla sayıda Role ait olabilir.
- Bir grupta 10&apos;a kadar Rol olabilir, buna Herkes ve Sahip Rolü de dahildir.
+ Bir grupta, Herkes ve Sahip Rolü dahil, en fazla 10 Rol olabilir.
</panel.string>
<panel.string name="cant_delete_role">
&apos;Herkes&apos; ve &apos;Sahipler&apos; Rolleri özeldir, silinemez.
@@ -45,12 +46,27 @@ Ctrl tuşuna basıp adlarına tıklayarak birden fazla Üye seçebilirsiniz.
</panel>
<panel label="YETENEKLER" name="actions_sub_tab" tool_tip="Bir Yeteneğin Açıklamasını ve bu Yeteneğe hangi Rollerin ve Üyelerin sahip olabileceğini görebilirsiniz.">
<panel.string name="help_text">
- Yetenekler sayesinde Rollerle ilişkili Üyeler bu grup içerisinde belirli şeyler yapabilir.
+ Yetenekler sayesinde Rollerle İlişkili Üyeler bu grup içerisinde belirli şeyler yapabilir.
Yeteneklerin kapsamı oldukça geniştir.
</panel.string>
<filter_editor label="Yetenekleri Filtrele" name="filter_input"/>
<scroll_list name="action_list" tool_tip="Bir Yeteneği seçerek daha çok ayrıntı görebilirsiniz"/>
</panel>
+ <panel label="YASAKLI SAKİNLER" name="banlist_sub_tab" tool_tip="Bu gruba girişleri yasaklanan sakinleri görüntüle">
+ <panel.string name="help_text">
+ Yasaklı listesindeki sakinler gruba katılamaz.
+ </panel.string>
+ <panel.string name="ban_count_template">
+ Yasaklama sayısı: [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="Sakin" name="name"/>
+ <name_list.columns label="Yasaklama Tarihi" name="ban_date"/>
+ </name_list>
+ <button label="Sakini/Sakinleri Yasakla" name="ban_create" tool_tip="Grubunuzdaki sakinleri yasaklayın"/>
+ <button label="Yasaklamayı Kaldır" name="ban_delete" tool_tip="Seçilen sakinlerin gruba giriş yasağını kaldır"/>
+ <button name="ban_refresh" tool_tip="Yasaklı listesini yenile"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/tr/panel_login.xml b/indra/newview/skins/default/xui/tr/panel_login.xml
index 28d316e46b..ce1519be89 100755
--- a/indra/newview/skins/default/xui/tr/panel_login.xml
+++ b/indra/newview/skins/default/xui/tr/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- OTURUM AÇ
- </text>
- <text name="username_text">
- Kullanıcı Adı:
- </text>
- <combo_box name="username_combo" tool_tip="Kaydolduğunuzda seçtiğiniz kullanıcı adı, örn. mustafayalcin12 veya Faruk Gungoren"/>
- <text name="password_text">
- Parola:
- </text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- Buradan başla:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Son konumum" name="MyLastLocation"/>
- <combo_box.item label="Ana Konumum" name="MyHome"/>
- <combo_box.item label="&lt;Bölge adını girin&gt;" name="Typeregionname"/>
- </combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- Oturum açarken yardım mı gerekiyor?
- </text>
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="Kullanıcı Adı" name="username_combo" tool_tip="Kaydolduğunuzda seçtiğiniz kullanıcı adı, örn. mustafayalcin12 veya Faruk Gungoren"/>
+ <line_editor label="Parola" name="password_edit"/>
+ <check_box label="Beni hatırla" name="remember_check"/>
<text name="forgot_password_text">
- Kullanıcı adınızı veya parolanızı mı unuttunuz?
+ Parolamı unuttum
</text>
<button label="Oturum Aç" name="connect_btn"/>
- <check_box label="Parolayı hatırla" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- HESABINIZI OLUŞTURUN
+ <text name="At_My_Last_Location_Label">
+ son konumum
</text>
- <button label="Şimdi başla" name="create_new_account_btn"/>
+ <combo_box label="Sık kullandığım yerler" name="start_location_combo">
+ <combo_box.item label="Ana konumum" name="MyHome"/>
+ </combo_box>
+ <button label="Oturum Aç" name="connect_favorite_btn"/>
+ <line_editor label="Bir yer adı yazın" name="location_edit"/>
+ <button label="Oturum Aç" name="connect_location_btn"/>
+ <combo_box label="Ağ seç" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_login_first.xml b/indra/newview/skins/default/xui/tr/panel_login_first.xml
new file mode 100644
index 0000000000..622edd0a8d
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="Kullanıcı Adı" name="username_combo" tool_tip="Kaydolduğunuzda seçtiğiniz kullanıcı adı, örn. mustafayalcin12 veya Faruk Gungoren"/>
+ <line_editor label="Parola" name="password_edit"/>
+ <button label="Oturum Aç" name="connect_btn"/>
+ <check_box label="Beni hatırla" name="remember_check"/>
+ <text name="forgot_password_text">
+ Parolamı unuttum
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ Başlangıç yeriniz Eğitim Adası. Haydi çıkış portalını bulun!
+ </text>
+ <text name="image_caption_right">
+ Sonra da Sosyal Ada&apos;yı keşfe çıkın ve diğer LS sakinleriyle tanışın!
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml
index 770cdc6efd..82c7b87c9a 100755
--- a/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="Oturum açarken Ağ Seçimini göster" name="show_grid_selection_check"/>
<check_box label="Gelişmiş Menüyü Göster" name="show_advanced_menu_check"/>
<check_box label="Geliştirici Menüsünü Göster" name="show_develop_menu_check"/>
+ <button label="Varsayılan Oluşturma İzinleri" name="default_creation_permissions"/>
</panel>
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 1a13cf8f71..2c05e8a47a 100755
--- a/indra/newview/skins/default/xui/tr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_general.xml
@@ -29,14 +29,10 @@
<combo_box.item label="Genel ve Orta" name="Desired_Mature"/>
<combo_box.item label="Genel" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- Standart konum:
+ <check_box label="Sık kullanılan yerleri oturum açma ekranında göster" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (Bu bilgisayarı kullanan diğer kişiler de bunları görecek)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Son konumum" name="MyLastLocation"/>
- <combo_box.item label="Ana Konumum" name="MyHome"/>
- </combo_box>
- <check_box initial_value="true" label="Oturumu açarken göster" name="show_location_checkbox"/>
<text name="name_tags_textbox">
Ad etiketleri:
</text>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
index 285670a6ac..185d557567 100755
--- a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
<text name="cache_size_label_l">
(Konumlar, görüntüler, web, arama geçmişi)
</text>
- <check_box label="Arama sonuçlarında profil bilgilerini göster" name="online_searchresults"/>
+ <check_box label="Profil bilgilerimi Arama sonuçlarında göster" name="online_searchresults"/>
<check_box label="Çevrimiçi olduğumu sadece arkadaşlar ve gruplar bilsin" name="online_visibility"/>
<check_box label="Sadece arkadaşlar ve gruplar beni arasın veya Aİ göndersin" name="voice_call_friends_only_check"/>
<check_box label="Aramaları sonlandırırken mikrofonu kapat" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_script_ed.xml b/indra/newview/skins/default/xui/tr/panel_script_ed.xml
index 79cd86c3f0..83040d06e4 100755
--- a/indra/newview/skins/default/xui/tr/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/tr/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="Tüm Değişiklikleri Geri Çevir" name="Revert All Changes"/>
<menu_item_call label="Dosyadan yükle..." name="LoadFromFile"/>
<menu_item_call label="Dosyaya kaydet..." name="SaveToFile"/>
+ <menu_item_call label="Renkler..." name="Colors"/>
</menu>
<menu label="Düzenle" name="Edit">
<menu_item_call label="Geri Al" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="Anahtar Sözcük Yardımı..." name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
Yükleniyor...
- </text_editor>
+ </script_editor>
<combo_box label="Ekle..." name="Insert..."/>
<button label="Kaydet" label_selected="Kaydet" name="Save_btn"/>
<button label="Düzenle..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml
index fd2e85fce5..4bc1098ce9 100755
--- a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml
@@ -4,4 +4,13 @@
<button label="E-posta" name="save_to_email_btn"/>
<button label="Envanterime Kaydet (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="Bilgisayarıma Kaydet" name="save_to_computer_btn"/>
+ <text name="send_to_facebook_textbox">
+ Gönder: [secondlife:/// Facebook]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// Twitter]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml
index a3a5c70c7e..311cee53c6 100755
--- a/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
<text name="region" value="..."/>
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="Envanter bilgilerini göster"/>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_twitter_account.xml b/indra/newview/skins/default/xui/tr/panel_twitter_account.xml
new file mode 100644
index 0000000000..704027e1ba
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="Twitter&apos;a şu kimlikle bağlandınız:"/>
+ <string name="twitter_disconnected" value="Twitter&apos;la bağlantı kurulmadı"/>
+ <text name="account_caption_label">
+ Twitter&apos;la bağlantı kurulmadı.
+ </text>
+ <panel name="panel_buttons">
+ <button label="Bağlan..." name="connect_btn"/>
+ <button label="Bağlantıyı kes" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Tweet atma hakkında bilgi edinin]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml b/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml
new file mode 100644
index 0000000000..966e9b906d
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ Neler oluyor?
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="SL konumunu dahil et" name="add_location_cb"/>
+ <check_box initial_value="true" label="Fotoğraf ekle" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü">
+ <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri">
+ <combo_box.item label="Filtre Yok" name="NoFilter"/>
+ </combo_box>
+ <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/>
+ <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="Tweet" name="post_photo_btn"/>
+ <button label="İptal" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/role_actions.xml b/indra/newview/skins/default/xui/tr/role_actions.xml
index 76ca58c319..8f063122dc 100755
--- a/indra/newview/skins/default/xui/tr/role_actions.xml
+++ b/indra/newview/skins/default/xui/tr/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="Bu Yetenekler arasında gruba Üye ekleme ve çıkarma ile davetiye olmadan yeni Üyelerin katılmasına imkan tanıma yer alır." name="Membership">
<action description="Kişileri Bu Gruba Davet Et" longdescription="Roller bölümü &gt; Üyeler sekmesindeki &quot;Davet Et&quot; düğmesini kullanarak Kişileri Bu Gruba davet et" name="member invite" value="1"/>
<action description="Üyeleri Bu Gruptan Çıkar" longdescription="Roller bölümü &gt; Üyeler sekmesindeki &quot;Çıkar&quot; düğmesini kullanarak Üyeleri Bu Gruptan çıkar. Bir Sahip, başka bir Sahip dışında herkesi çıkartabilir. Eğer bir Sahip değilseniz, bir Üyenin bir gruptan çıkarılmasının tek yolu, Herkes Rolünde olmaları ve başka hiçbir Rolde OLMAMALARIDIR. Üyeleri Rollerden çıkarmak için, &quot;Üyeleri Rollerden Çıkar&quot; Yeteneğine sahip olmalısınız." name="member eject" value="2"/>
+ <action description="Yasaklı listesini yönet" longdescription="Grup üyelerinin, grupta sakinleri yasaklamalarına / bu yasaklamaları kaldırmalarına izin verir" name="allow ban" value="51"/>
<action description="&quot;Katılıma Açık&quot; için Aç/Kapa yapın ve &quot;Kayıt Ücretini&quot; değiştirin" longdescription="Yeni üyelerin davetiye olmadan katılmasına imkan tanımak amacıyla &quot;Katılıma Açık&quot; için Aç/Kapa yapın ve Genel bölümünde &quot;Kayıt Ücretini&quot; değiştirin" name="member options" value="3"/>
</action_set>
<action_set description="Bu Yetenekler arasında grup Rolleri ekleme, kaldırma ve değiştirme; Rollere Üye ekleme ve kaldırma ile Rollere Yetenek atama imkanları yer alır." name="Roles">
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index f575b9e608..c4fc76fe29 100755
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -335,6 +335,75 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="TestingDisconnect">
Görüntüleyici bağlantısının kesilmesi test ediliyor
</string>
+ <string name="SocialFlickrConnecting">
+ Flickr bağlantısı kuruluyor...
+ </string>
+ <string name="SocialFlickrPosting">
+ Yayınlanıyor...
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Flickr bağlantısı kesiliyor...
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ Flickr bağlantısı kurulurken sorun çıktı
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ Flickr&apos;da yayınlarken sorun çıktı
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ Flickr bağlantısı kesilirken sorun çıktı
+ </string>
+ <string name="SocialTwitterConnecting">
+ Twitter bağlantısı kuruluyor...
+ </string>
+ <string name="SocialTwitterPosting">
+ Yayınlanıyor...
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ Twitter bağlantısı kesiliyor...
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ Twitter bağlantısı kurulurken sorun çıktı
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ Twitter&apos;da yayınlarken sorun çıktı
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ Twitter bağlantısı kesilirken sorun çıktı
+ </string>
+ <string name="BlackAndWhite">
+ Siyah Beyaz
+ </string>
+ <string name="Colors1970">
+ 70&apos;lerin Renkleri
+ </string>
+ <string name="Intense">
+ Yoğun
+ </string>
+ <string name="Newspaper">
+ Gazete Baskısı
+ </string>
+ <string name="Sepia">
+ Sepya
+ </string>
+ <string name="Spotlight">
+ Spot Işıkları
+ </string>
+ <string name="Video">
+ Video
+ </string>
+ <string name="Autocontrast">
+ Otomatik Kontrast
+ </string>
+ <string name="LensFlare">
+ Mercek Parlaması
+ </string>
+ <string name="Miniature">
+ Minyatür
+ </string>
+ <string name="Toycamera">
+ Eğlence Kamerası
+ </string>
<string name="TooltipPerson">
Kişi
</string>
@@ -883,6 +952,12 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="use_texture">
Dokuyu kullan
</string>
+ <string name="manip_hint1">
+ Fare imlecini cetvelin üzerine getirerek
+ </string>
+ <string name="manip_hint2">
+ ağa uydur
+ </string>
<string name="texture_loading">
Yükleniyor...
</string>
@@ -4080,6 +4155,12 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
<string name="share_alert">
Envanterinizden buraya öğeler sürükleyin
</string>
+ <string name="flickr_post_success">
+ Flickr&apos;da yayınladınız.
+ </string>
+ <string name="twitter_post_success">
+ Twitter&apos;da yayınladınız.
+ </string>
<string name="no_session_message">
(Aİ Oturumu Mevcut Değil)
</string>
@@ -4534,6 +4615,9 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
<string name="LocalEstimateUSD">
US$ [AMOUNT]
</string>
+ <string name="Group Ban">
+ Gruptan Yasakla
+ </string>
<string name="Membership">
Üyelik
</string>
@@ -4968,6 +5052,12 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
<string name="Command_Destinations_Label">
Hedef Konum
</string>
+ <string name="Command_Facebook_Label">
+ Facebook
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
Mimikler
</string>
@@ -5016,6 +5106,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
<string name="Command_Speak_Label">
Konuş
</string>
+ <string name="Command_Twitter_Label">
+ Twitter
+ </string>
<string name="Command_View_Label">
Kamera denetimleri
</string>
@@ -5046,6 +5139,12 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
<string name="Command_Destinations_Tooltip">
İlgilendiğiniz hedef konumlar
</string>
+ <string name="Command_Facebook_Tooltip">
+ Facebook&apos;ta Yayınla
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ Flickr&apos;a yükle
+ </string>
<string name="Command_Gestures_Tooltip">
Avatarınız için mimikler
</string>
@@ -5094,6 +5193,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
<string name="Command_Speak_Tooltip">
Mikrofonunuzu kullanarak yakındaki kişilerle konuşun
</string>
+ <string name="Command_Twitter_Tooltip">
+ Twitter
+ </string>
<string name="Command_View_Tooltip">
Kamera açısını değiştirmek
</string>
diff --git a/indra/newview/skins/default/xui/zh/floater_big_preview.xml b/indra/newview/skins/default/xui/zh/floater_big_preview.xml
new file mode 100644
index 0000000000..ae68cd7ddf
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_big_preview.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_big_preview" title="預覽"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_facebook.xml b/indra/newview/skins/default/xui/zh/floater_facebook.xml
new file mode 100644
index 0000000000..9847db9124
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_facebook.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_facebook" title="發佈到臉書">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="狀態" name="panel_facebook_status"/>
+ <panel label="相片" name="panel_facebook_photo"/>
+ <panel label="打卡" name="panel_facebook_place"/>
+ <panel label="朋友" name="panel_facebook_friends"/>
+ <panel label="帳號" name="panel_facebook_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ 錯誤
+ </text>
+ <text name="connection_loading_text">
+ 載入中…
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_flickr.xml b/indra/newview/skins/default/xui/zh/floater_flickr.xml
new file mode 100644
index 0000000000..b02d02c7bb
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_flickr.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_flickr" title="上傳到 FLICKR">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="相片" name="panel_flickr_photo"/>
+ <panel label="帳號" name="panel_flickr_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ 錯誤
+ </text>
+ <text name="connection_loading_text">
+ 載入中…
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_perms_default.xml b/indra/newview/skins/default/xui/zh/floater_perms_default.xml
new file mode 100644
index 0000000000..78696be482
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_perms_default.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="perms default" title="預設的創建權限">
+ <panel label="預設的權限" name="default permissions"/>
+ <button label="確定" label_selected="確定" name="ok"/>
+ <button label="取消" label_selected="取消" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
index 8dbc216ab5..d4b5a2f990 100755
--- a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
@@ -35,7 +35,7 @@
<combo_box.item label="年齡 &gt; 成人居民出現在青少年專用第二人生" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="年齡 &gt; 未成年居民出現在青少年專用第二人生以外場所" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="攻擊 &gt; 戰鬥沙盤 / 不安全區域" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="攻擊 &gt; 安全區域" name="Assault__Safe_area"/>
+ <combo_box.item label="攻擊 &gt; 在安全地區射擊、推擠或推撞另一名居民" name="Assault__Safe_area"/>
<combo_box.item label="攻擊 &gt; 測試武器的沙盤" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="商業 &gt; 未送交產品或履行服務" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="揭露 &gt; 真實世界資訊" name="Disclosure__Real_world_information"/>
@@ -49,25 +49,25 @@
<combo_box.item label="詐欺 &gt; L$" name="Fraud__L$"/>
<combo_box.item label="詐欺 &gt; 土地" name="Fraud__Land"/>
<combo_box.item label="詐欺 &gt; 層壓式推銷或連環信" name="Fraud__Pyramid_scheme_or_chain_letter"/>
- <combo_box.item label="詐欺 &gt; 美金" name="Fraud__US$"/>
+ <combo_box.item label="詐欺 &gt; L$ 或美元" name="Fraud__US$"/>
<combo_box.item label="騷擾 &gt; 廣告農場 / 視覺轟炸" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="騷擾 &gt; 詆譭個人或群組" name="Harassment__Defaming_individuals_or_groups"/>
<combo_box.item label="騷擾 &gt; 阻撓移動" name="Harassment__Impeding_movement"/>
<combo_box.item label="騷擾 &gt; 性騷擾" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="騷擾 &gt; 鼓吹 / 教唆他人違反服務條款" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="騷擾 &gt; 意圖滋事的有針對性的行為" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="騷擾 &gt; 言語暴力" name="Harassment__Verbal_abuse"/>
<combo_box.item label="不雅 &gt; 令大多人不快的內容或行為" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="不雅 &gt; 冒犯人的化身名稱" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="不雅 &gt; 在一般普級地區出現冒犯人的內容或行為" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="失當 &gt; 對一地區的分級不恰當的的內容或行為" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="不雅 &gt; 在適度成人地區出現冒犯人的內容或行為" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="侵犯智產權 &gt; 移除內容" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="侵犯智產權 &gt; 複製機器程式碼 CopyBot 或濫用權限" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="不容異己" name="Intolerance"/>
<combo_box.item label="土地 &gt; 不當使用沙盤資源" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="土地 &gt; 侵佔 &gt; 物件 / 材質" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="土地 &gt; 侵佔 &gt; 物件或材質" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="土地 &gt; 侵佔 &gt; 粒子" name="Land__Encroachment__Particles"/>
<combo_box.item label="土地 &gt; 侵佔 &gt; 樹種 / 植物" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="下注 / 賭博" name="Wagering_gambling"/>
+ <combo_box.item label="下注或賭博" name="Wagering_gambling"/>
<combo_box.item label="其他" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/zh/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/zh/floater_script_ed_prefs.xml
new file mode 100644
index 0000000000..cca41cc96d
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_script_ed_prefs.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_script_colors" title="腳本文字色彩">
+ <text name="color_pickers_label">
+ 選擇所要的色彩:
+ </text>
+ <text name="text_label">
+ 文字
+ </text>
+ <text name="cursor_label">
+ 游標
+ </text>
+ <text name="background_label">
+ 背景
+ </text>
+ <text name="datatype_label">
+ 資料類型
+ </text>
+ <text name="event_label">
+ 活動
+ </text>
+ <text name="string_literal_label">
+ 字串常值
+ </text>
+ <text name="constant_label">
+ 常數
+ </text>
+ <text name="flow_control_label">
+ 流程控制
+ </text>
+ <text name="function_label">
+ 函式
+ </text>
+ <text name="comment_label">
+ 註解
+ </text>
+ <script_editor name="Script Preview">
+ /* 範例腳本 */
+default
+{
+ state_entry()
+ {
+ // 註解
+ string greeting = &quot;大家好&quot;;
+ llSay(PUBLIC_CHANNEL, greeting);
+ }
+}
+ </script_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_snapshot.xml b/indra/newview/skins/default/xui/zh/floater_snapshot.xml
index e86e20829f..a65227bbd4 100755
--- a/indra/newview/skins/default/xui/zh/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/zh/floater_snapshot.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="快照預覽">
+<floater name="Snapshot" title="快照">
<floater.string name="unknown">
未知
</floater.string>
@@ -61,5 +61,11 @@
<check_box label="擡頭顯示" name="hud_check"/>
<check_box label="將幀凍結(全螢幕)" name="freeze_frame_check"/>
<check_box label="自動刷新" name="auto_snapshot_check"/>
+ <text name="filter_list_label">
+ 濾鏡:
+ </text>
+ <combo_box name="filters_combobox" tool_tip="圖像濾鏡">
+ <combo_box.item label="不用濾鏡" name="NoFilter"/>
+ </combo_box>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_stats.xml b/indra/newview/skins/default/xui/zh/floater_stats.xml
index 282e61e73d..f06eb5e78f 100755
--- a/indra/newview/skins/default/xui/zh/floater_stats.xml
+++ b/indra/newview/skins/default/xui/zh/floater_stats.xml
@@ -12,7 +12,8 @@
<stat_view label="呈像" name="render">
<stat_bar label="KTris(每幀)" name="ktrisframe"/>
<stat_bar label="KTris(每秒)" name="ktrissec"/>
- <stat_bar label="物件總計" name="objs"/>
+ <stat_bar label="物件總計" name="totalobjs"/>
+ <stat_bar label="存入快取的物件" name="cachedobjs"/>
<stat_bar label="新物件" name="newobjs"/>
<stat_bar label="物件快取讀取率" name="object_cache_hits"/>
<stat_bar label="已執行遮蔽查詢" name="occlusion_queries"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml
index 7e6c972f40..175e2bf7a4 100755
--- a/indra/newview/skins/default/xui/zh/floater_tools.xml
+++ b/indra/newview/skins/default/xui/zh/floater_tools.xml
@@ -73,9 +73,7 @@
<check_box label="編輯聯結部分" name="checkbox edit linked parts"/>
<button label="聯結" name="link_btn"/>
<button label="取消聯結" name="unlink_btn"/>
- <text label="同時伸展兩側" name="checkbox uniform label">
- 同時伸展兩側
- </text>
+ <check_box label="同時伸展兩側" name="checkbox uniform"/>
<check_box initial_value="true" label="伸展材質" name="checkbox stretch textures"/>
<check_box initial_value="true" label="Snap" name="checkbox snap to grid"/>
<combo_box name="combobox grid mode" tool_tip="選擇物件定位參考的格線尺度類型">
@@ -410,82 +408,7 @@
<spinner label="密度(100 公斤 / 立方公尺)" name="Physics Density"/>
<spinner label="恢復" name="Physics Restitution"/>
</panel>
- <panel label="材質" name="Texture">
- <panel.string name="string repeats per meter">
- 每公尺重覆次數
- </panel.string>
- <panel.string name="string repeats per face">
- 每一面重覆次數
- </panel.string>
- <texture_picker label="材質" name="texture control" tool_tip="點按以挑選圖片"/>
- <color_swatch label="顏色" name="colorswatch" tool_tip="點按以開啟顏色挑選器"/>
- <text name="color trans">
- 透明度 %
- </text>
- <text name="glow label">
- 光暈
- </text>
- <check_box label="全亮" name="checkbox fullbright"/>
- <text name="tex gen">
- 映射方式
- </text>
- <combo_box name="combobox texgen">
- <combo_box.item label="預設" name="Default"/>
- <combo_box.item label="平面" name="Planar"/>
- </combo_box>
- <text name="label shininess">
- 光澤
- </text>
- <combo_box name="combobox shininess">
- <combo_box.item label="無" name="None"/>
- <combo_box.item label="低" name="Low"/>
- <combo_box.item label="中" name="Medium"/>
- <combo_box.item label="高" name="High"/>
- </combo_box>
- <text name="label bumpiness">
- 凹凸貼圖
- </text>
- <combo_box name="combobox bumpiness">
- <combo_box.item label="無" name="None"/>
- <combo_box.item label="亮度" name="Brightness"/>
- <combo_box.item label="暗度" name="Darkness"/>
- <combo_box.item label="木紋" name="woodgrain"/>
- <combo_box.item label="樹皮" name="bark"/>
- <combo_box.item label="磚" name="bricks"/>
- <combo_box.item label="格子" name="checker"/>
- <combo_box.item label="混凝土" name="concrete"/>
- <combo_box.item label="粗花磚" name="crustytile"/>
- <combo_box.item label="石磚" name="cutstone"/>
- <combo_box.item label="圓盤" name="discs"/>
- <combo_box.item label="碎石" name="gravel"/>
- <combo_box.item label="培養皿" name="petridish"/>
- <combo_box.item label="側邊片" name="siding"/>
- <combo_box.item label="石磚格" name="stonetile"/>
- <combo_box.item label="彩色沙岩" name="stucco"/>
- <combo_box.item label="吸附" name="suction"/>
- <combo_box.item label="編織" name="weave"/>
- </combo_box>
- <spinner label="水平(U)" name="TexScaleU"/>
- <check_box label="翻轉" name="checkbox flip s"/>
- <spinner label="垂直(V)" name="TexScaleV"/>
- <check_box label="翻轉" name="checkbox flip t"/>
- <spinner label="旋轉˚" name="TexRot"/>
- <button label="套用" label_selected="套用" name="button apply"/>
- <text name="tex offset">
- 材質位移
- </text>
- <spinner label="水平(U)" name="TexOffsetU"/>
- <spinner label="垂直(V)" name="TexOffsetV"/>
- <panel name="Add_Media">
- <text name="media_tex">
- 媒體
- </text>
- <button name="add_media" tool_tip="添加媒體"/>
- <button name="delete_media" tool_tip="刪除這個媒體材質"/>
- <button name="edit_media" tool_tip="編輯這個媒體"/>
- <button label="對齊" label_selected="對齊媒體" name="button align" tool_tip="對齊媒體材質(須先載入)"/>
- </panel>
- </panel>
+ <panel label="材質" name="Texture"/>
<panel label="內容" name="Contents">
<button label="新腳本" label_selected="新腳本" name="button new script"/>
<button label="權限" name="button permissions"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_twitter.xml b/indra/newview/skins/default/xui/zh/floater_twitter.xml
new file mode 100644
index 0000000000..0df68ba9be
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_twitter.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_twitter" title="推特">
+ <panel name="background">
+ <tab_container name="tabs">
+ <panel label="編撰" name="panel_twitter_photo"/>
+ <panel label="帳號" name="panel_twitter_account"/>
+ </tab_container>
+ <panel name="connection_status_panel">
+ <text name="connection_error_text">
+ 錯誤
+ </text>
+ <text name="connection_loading_text">
+ 載入中…
+ </text>
+ </panel>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/menu_conversation.xml b/indra/newview/skins/default/xui/zh/menu_conversation.xml
index adfeefc337..04538dfdee 100644
--- a/indra/newview/skins/default/xui/zh/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/zh/menu_conversation.xml
@@ -29,4 +29,5 @@
<menu_item_call label="所有人消音" name="ModerateVoiceMute"/>
<menu_item_call label="取消所有人的消音" name="ModerateVoiceUnmute"/>
</context_menu>
+ <menu_item_call label="封鎖居民" name="BanMember"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_object.xml b/indra/newview/skins/default/xui/zh/menu_object.xml
index f6657d876e..4e4e55e6f4 100755
--- a/indra/newview/skins/default/xui/zh/menu_object.xml
+++ b/indra/newview/skins/default/xui/zh/menu_object.xml
@@ -19,6 +19,7 @@
<context_menu label="管理" name="Remove">
<menu_item_call label="違規舉報" name="Report Abuse..."/>
<menu_item_call label="封鎖" name="Object Mute"/>
+ <menu_item_call label="解除封鎖" name="Object Unmute"/>
<menu_item_call label="退回" name="Return..."/>
</context_menu>
<menu_item_call label="取得" name="Pie Object Take"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index eb602d8e3b..46d46e901c 100755
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -34,6 +34,9 @@
<menu_item_check label="附近的聊天……" name="Nearby Chat"/>
<menu_item_check label="說話" name="Speak"/>
<menu_item_check label="交談記錄…" name="Conversation Log..."/>
+ <menu_item_call label="臉書…" name="Facebook"/>
+ <menu_item_call label="推特…" name="Twitter"/>
+ <menu_item_call label="Flickr…" name="Flickr"/>
<menu label="語音變聲" name="VoiceMorphing">
<menu_item_check label="沒有變聲效果" name="NoVoiceMorphing"/>
<menu_item_check label="預覽……" name="Preview"/>
@@ -148,7 +151,8 @@
<menu_item_check label="貼齊格線" name="Snap to Grid"/>
<menu_item_call label="貼齊物件 XY 軸到格線" name="Snap Object XY to Grid"/>
<menu_item_call label="以所選擇作為格線" name="Use Selection for Grid"/>
- <menu_item_call label="格線選項" name="Grid Options"/>
+ <menu_item_call label="格線選項…" name="Grid Options"/>
+ <menu_item_call label="設定預設權限…" name="Set default permissions"/>
</menu>
<menu label="上傳" name="Upload">
<menu_item_call label="圖像(L$[COST])..." name="Upload Image"/>
@@ -156,7 +160,6 @@
<menu_item_call label="動作(L$[COST])..." name="Upload Animation"/>
<menu_item_call label="模型…" name="Upload Model"/>
<menu_item_call label="批量(每檔案 L$[COST] )..." name="Bulk Upload"/>
- <menu_item_call label="設定預設上傳權限" name="perm prefs"/>
</menu>
<menu_item_call label="復原" name="Undo"/>
<menu_item_call label="重做" name="Redo"/>
@@ -302,6 +305,7 @@
<menu_item_check label="細節層次資訊" name="LOD Info"/>
<menu_item_check label="建製佇列" name="Build Queue"/>
<menu_item_check label="燈光" name="Lights"/>
+ <menu_item_check label="粒子效果" name="Particles"/>
<menu_item_check label="碰撞骨架" name="Collision Skeleton"/>
<menu_item_check label="接點" name="Joints"/>
<menu_item_check label="光線投射" name="Raycast"/>
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index 46cbaa60b1..bd05725e2b 100755
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -210,6 +210,22 @@
你仍要新增這項能力給「[ROLE_NAME]」?
<usetemplate name="okcancelbuttons" notext="否" yestext="是"/>
</notification>
+ <notification name="AssignBanAbilityWarning">
+ 你即將把「[ACTION_NAME]」能力增加給「[ROLE_NAME]」角色。
+
+ *警告*
+任何擔任帶有此能力的角色的成員,將連帶得到「[ACTION_NAME_2]」和「[ACTION_NAME_3]」能力。
+ <usetemplate name="okbutton" yestext="確定"/>
+ </notification>
+ <notification name="RemoveBanAbilityWarning">
+ 你即將剝除「[ROLE_NAME]」角色的「[ACTION_NAME]」能力。
+
+ *警告*
+剝除這個能力,將不連帶剝除「[ACTION_NAME_2]」和「[ACTION_NAME_3]」能力。
+
+如果你不希望讓這個角色繼續擁有這些能力,請立即取消它們!
+ <usetemplate name="okbutton" yestext="確定"/>
+ </notification>
<notification name="EjectGroupMemberWarning">
你即將把 [AVATAR_NAME] 踢出群組。
<usetemplate ignoretext="確定將某人踢出群組" name="okcancelignore" notext="取消" yestext="踢出"/>
@@ -1569,6 +1585,14 @@ SHA1 指紋:[MD5_DIGEST]
無法離開群組。 你是此群組僅存的所有人,不得離開群組。 請先把所有人職銜指派給另一人。
<usetemplate name="okbutton" yestext="確定"/>
</notification>
+ <notification name="GroupDepartError">
+ 無法離開群組:[reason]。
+ <usetemplate name="okbutton" yestext="確定"/>
+ </notification>
+ <notification name="GroupDepart">
+ 你已經離開[group_name]群組。
+ <usetemplate name="okbutton" yestext="確定"/>
+ </notification>
<notification name="ConfirmKick">
你確定要踢出這網格內的全部居民?
<usetemplate name="okcancelbuttons" notext="取消" yestext="踢出全部居民"/>
@@ -2450,6 +2474,12 @@ SHA1 指紋:[MD5_DIGEST]
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="FlickrConnect">
+ [MESSAGE]
+ </notification>
+ <notification name="TwitterConnect">
+ [MESSAGE]
+ </notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
@@ -4027,6 +4057,10 @@ SHA1 指紋:[MD5_DIGEST]
無法移動檔案。 已恢復前一個路徑。
<usetemplate ignoretext="無法移動檔案。 已恢復前一個路徑。" name="okignore" yestext="確定"/>
</notification>
+ <notification name="DefaultObjectPermissions">
+ 儲存預設權限時出問題,原因:[REASON]。 請稍後再嘗試儲存預設權限。
+ <usetemplate name="okbutton" yestext="確定"/>
+ </notification>
<notification name="ChatHistoryIsBusyAlert">
聊天紀錄檔案還在處理前一個動作。 請稍候再試,或請換一個聊天對象。
<usetemplate name="okbutton" yestext="確定"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_account.xml b/indra/newview/skins/default/xui/zh/panel_facebook_account.xml
new file mode 100644
index 0000000000..e8c31c69c5
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_facebook_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_account">
+ <string name="facebook_connected" value="已成功連通臉書,身分為:"/>
+ <string name="facebook_disconnected" value="未連通臉書"/>
+ <text name="account_caption_label">
+ 未連通臉書。
+ </text>
+ <panel name="panel_buttons">
+ <button label="連通…" name="connect_btn"/>
+ <button label="中斷" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 如何發佈到臉書]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_friends.xml b/indra/newview/skins/default/xui/zh/panel_facebook_friends.xml
new file mode 100644
index 0000000000..2cf3eb0cf5
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_facebook_friends.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_friends">
+ <string name="facebook_friends_empty" value="你的臉書朋友中,沒有同時也是第二人生居民的人。 今天就請你的臉書朋友加入第二人生!"/>
+ <string name="facebook_friends_no_connected" value="你目前尚未連結臉書。 請到「帳戶」頁籤開啟這項功能並進行連結。"/>
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_second_life_friends" title="第二人生的朋友"/>
+ <accordion_tab name="tab_suggested_friends" title="把這些人加為第二人生的朋友"/>
+ </accordion>
+ <text name="facebook_friends_status">
+ 未連通臉書。
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml b/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml
new file mode 100644
index 0000000000..d43fcf4665
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="圖像解析度">
+ <combo_box.item label="目前視窗" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1200x630" name="1200x630"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="圖像濾鏡">
+ <combo_box.item label="不用濾鏡" name="NoFilter"/>
+ </combo_box>
+ <button label="重新整理" name="new_snapshot_btn" tool_tip="點按即可刷新"/>
+ <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/>
+ <text name="caption_label">
+ 說明(可留空):
+ </text>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="發佈" name="post_photo_btn"/>
+ <button label="取消" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_place.xml b/indra/newview/skins/default/xui/zh/panel_facebook_place.xml
new file mode 100644
index 0000000000..27bd789af1
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_facebook_place.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_place">
+ <layout_stack name="stack_place">
+ <layout_panel name="place_detail_panel">
+ <text name="place_caption_label">
+ 描述一下你所在的地方:
+ </text>
+ </layout_panel>
+ <layout_panel name="place_map_panel">
+ <check_box initial_value="false" label="" name="add_place_view_cb"/>
+ </layout_panel>
+ <layout_panel name="place_button_panel">
+ <button label="發佈" name="post_place_btn"/>
+ <button label="取消" name="cancel_place_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_status.xml b/indra/newview/skins/default/xui/zh/panel_facebook_status.xml
new file mode 100644
index 0000000000..b947b49a4f
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_facebook_status.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_facebook_status">
+ <layout_stack name="stack_status">
+ <layout_panel name="status_detail_panel">
+ <text name="status_caption_label">
+ 你在想些什麼?
+ </text>
+ </layout_panel>
+ <layout_panel name="status_button_panel">
+ <button label="發佈" name="post_status_btn"/>
+ <button label="取消" name="cancel_status_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_flickr_account.xml b/indra/newview/skins/default/xui/zh/panel_flickr_account.xml
new file mode 100644
index 0000000000..63cd547cd0
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_flickr_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_account">
+ <string name="flickr_connected" value="你已成功連通 Flickr,身分為:"/>
+ <string name="flickr_disconnected" value="尚未連通 Flickr"/>
+ <text name="account_caption_label">
+ 尚未連通 Flickr。
+ </text>
+ <panel name="panel_buttons">
+ <button label="連通…" name="connect_btn"/>
+ <button label="中斷" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share/ta-p/2435609 瞭解如何發佈到 Flickr]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml b/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml
new file mode 100644
index 0000000000..75738abebc
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_flickr_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="圖像解析度">
+ <combo_box.item label="目前視窗" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="圖像濾鏡">
+ <combo_box.item label="不用濾鏡" name="NoFilter"/>
+ </combo_box>
+ <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/>
+ <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/>
+ <text name="title_label">
+ 標題:
+ </text>
+ <text name="description_label">
+ 描述:
+ </text>
+ <check_box initial_value="true" label="在描述結尾加上第二人生的地點" name="add_location_cb"/>
+ <text name="tags_label">
+ 標籤:
+ </text>
+ <text name="tags_help_label">
+ 不同標籤之間以半形空格分隔
+標籤若含空格,用 &quot;&quot; 半形符號括住
+ </text>
+ <combo_box name="rating_combobox" tool_tip="Flickr 內容分級">
+ <combo_box.item label="安全級 Flickr 內容" name="SafeRating"/>
+ <combo_box.item label="適中級 Flickr 內容" name="ModerateRating"/>
+ <combo_box.item label="限制級 Flickr 內容" name="RestrictedRating"/>
+ </combo_box>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="上傳" name="post_photo_btn"/>
+ <button label="取消" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/zh/panel_group_bulk_ban.xml
new file mode 100644
index 0000000000..dedc900939
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_group_bulk_ban.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="封鎖居民" name="bulk_ban_panel">
+ <panel.string name="loading">
+ (載入中...)
+ </panel.string>
+ <panel.string name="ban_selection_too_large">
+ 未送出群組禁入令:所選的居民人數太多。 群組禁入令每次以 100 人為上限。
+ </panel.string>
+ <panel.string name="ban_not_permitted">
+ 群組禁入令未送出:你沒有「管理禁入清單」的能力。
+ </panel.string>
+ <panel.string name="ban_limit_fail">
+ 群組禁入令未送出:你的群組已達允許禁入數目的上限。
+ </panel.string>
+ <panel.string name="partial_ban">
+ 部分群組禁入令未送出:
+[REASONS]
+ </panel.string>
+ <panel.string name="ban_failed">
+ 群組禁入令未送出:
+[REASONS]
+ </panel.string>
+ <panel.string name="residents_already_banned">
+ - 以下居民之前已遭禁:[RESIDENTS]。
+ </panel.string>
+ <panel.string name="ban_limit_reached">
+ - 已達禁入數目上限,以下用戶未能加禁:[RESIDENTS]。
+ </panel.string>
+ <panel.string name="cant_ban_yourself">
+ - 你不能把自己設為禁入群組。
+ </panel.string>
+ <text name="help_text">
+ 你可以選擇把多位居民設為禁入群組。 點按「開啟居民選擇工具」開始選擇。
+ </text>
+ <button label="開啟居民選擇工具" name="add_button"/>
+ <name_list name="banned_agent_list" tool_tip="按下 Ctrl 鍵同時點選居民的名字,即可選取多個人"/>
+ <button label="將所選的從名單移除" name="remove_button" tool_tip="將上面所選居民從禁入名單中移除"/>
+ <button label="封鎖居民" name="ban_button"/>
+ <button label="取消" name="cancel_button"/>
+ <string name="GroupBulkBan">
+ 對群組設禁
+ </string>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_invite.xml b/indra/newview/skins/default/xui/zh/panel_group_invite.xml
index 8921978b20..250bbaab6a 100755
--- a/indra/newview/skins/default/xui/zh/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_invite.xml
@@ -22,7 +22,7 @@
選擇指派給他們的角色:
</text>
<combo_box name="role_name" tool_tip="從角色清單選擇你有權指派給成員的角色:"/>
- <button label="送出邀請" name="ok_button"/>
+ <button label="送出邀請" name="invite_button"/>
<button label="取消" name="cancel_button"/>
<string name="GroupInvitation">
群組邀請
diff --git a/indra/newview/skins/default/xui/zh/panel_group_roles.xml b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
index 69ee8451de..b4b32c204a 100755
--- a/indra/newview/skins/default/xui/zh/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
@@ -25,12 +25,14 @@
</name_list>
<button label="邀請" name="member_invite"/>
<button label="踢出" name="member_eject"/>
+ <button label="禁絕成員" name="member_ban"/>
</panel>
<panel label="角色" name="roles_sub_tab">
<panel.string name="help_text">
- 一個角色具備職稱和該角色可使用的能力。
-一位成員可有一到多個角色。
-一個群組至多可有 10 個角色,包括「任何人」和「所有人」。
+ 一個角色具備職稱和該角色可使用的能力
+ 可供成員行使。 成員可以擔任
+ 一或多個角色。 一個群組最多可有 10 個角色,
+ 包括「任何人」和「擁有人」角色。
</panel.string>
<panel.string name="cant_delete_role">
「任何人」和「所有人」是特設角色,不得刪除。
@@ -46,12 +48,27 @@
</panel>
<panel label="能力" name="actions_sub_tab" tool_tip="你可察看關於某一能力的說明,並得知哪些角色和成員擁有該能力。">
<panel.string name="help_text">
- 「能力」可讓群組的成員透過角色行使一定的職權。
-能力的種類繁多。
+ 能力可讓成員在這個群組裡透過角色做
+ 一定的事。 能力的種類繁多。
</panel.string>
<filter_editor label="能力過濾器" name="filter_input"/>
<scroll_list name="action_list" tool_tip="請選取一個能力以察看詳情。"/>
</panel>
+ <panel label="遭禁的居民" name="banlist_sub_tab" tool_tip="檢視禁入本群組的居民名單">
+ <panel.string name="help_text">
+ 禁入名單上的任何居民將無法加入此群組。
+ </panel.string>
+ <panel.string name="ban_count_template">
+ 禁止數目: [COUNT]/[LIMIT]
+ </panel.string>
+ <name_list name="ban_list">
+ <name_list.columns label="居民" name="name"/>
+ <name_list.columns label="遭禁日期" name="ban_date"/>
+ </name_list>
+ <button label="禁絕成員" name="ban_create" tool_tip="禁止成員加入你的群組"/>
+ <button label="取消禁入" name="ban_delete" tool_tip="取消部分成員禁入你的群組"/>
+ <button name="ban_refresh" tool_tip="更新禁入清單"/>
+ </panel>
</tab_container>
<panel name="members_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/zh/panel_login.xml b/indra/newview/skins/default/xui/zh/panel_login.xml
index 672d9bb1a2..09a1af5cf8 100755
--- a/indra/newview/skins/default/xui/zh/panel_login.xml
+++ b/indra/newview/skins/default/xui/zh/panel_login.xml
@@ -1,46 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8"?>
<panel name="panel_login">
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php
</panel.string>
- <layout_stack name="login_widgets">
- <layout_panel name="login">
- <text name="log_in_text">
- 登入
- </text>
- <text name="username_text">
- 使用者名稱:
- </text>
- <combo_box name="username_combo" tool_tip="使用者名稱是你註冊時所挑選的,像是 bobsmith12 或 Steller Sunshine"/>
- <text name="password_text">
- 密碼:
- </text>
- </layout_panel>
- <layout_panel name="start_location_panel">
- <text name="start_location_text">
- 開始地點:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="我上一次位置" name="MyLastLocation"/>
- <combo_box.item label="我的家" name="MyHome"/>
- <combo_box.item label="&lt;請輸入地區名稱&gt;" name="Typeregionname"/>
- </combo_box>
- </layout_panel>
- <layout_panel name="links_login_panel">
- <text name="login_help">
- 登入時需要幫助?
- </text>
+ <layout_stack name="ui_stack">
+ <layout_panel name="ui_container">
+ <combo_box label="使用者名稱" name="username_combo" tool_tip="使用者名稱是你註冊時所挑選的,例如 bobsmith12 或 Steller Sunshine"/>
+ <line_editor label="密碼" name="password_edit"/>
+ <check_box label="記得我" name="remember_check"/>
<text name="forgot_password_text">
- 忘記你的使用者名稱或密碼?
+ 忘記密碼
</text>
<button label="登入" name="connect_btn"/>
- <check_box label="記住密碼:" name="remember_check"/>
- </layout_panel>
- <layout_panel name="links">
- <text name="create_account_text">
- 建立你的帳號
+ <text name="At_My_Last_Location_Label">
+ 到我上次去的地點
</text>
- <button label="現在就開始" name="create_new_account_btn"/>
+ <combo_box label="我的最愛" name="start_location_combo">
+ <combo_box.item label="我的家" name="MyHome"/>
+ </combo_box>
+ <button label="登入" name="connect_favorite_btn"/>
+ <line_editor label="鍵入一個地點" name="location_edit"/>
+ <button label="登入" name="connect_location_btn"/>
+ <combo_box label="選擇模擬世界" name="server_combo"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_login_first.xml b/indra/newview/skins/default/xui/zh/panel_login_first.xml
new file mode 100644
index 0000000000..a8af615b7c
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_login_first.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_login">
+ <panel.string name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <layout_stack name="logo_stack">
+ <layout_panel name="parent_panel2">
+ <layout_stack name="widget_stack">
+ <layout_panel name="widget_container">
+ <combo_box label="使用者名稱" name="username_combo" tool_tip="使用者名稱是你註冊時所挑選的,例如 bobsmith12 或 Steller Sunshine"/>
+ <line_editor label="密碼" name="password_edit"/>
+ <button label="登入" name="connect_btn"/>
+ <check_box label="記得我" name="remember_check"/>
+ <text name="forgot_password_text">
+ 忘記密碼
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="parent_panel3">
+ <layout_stack name="images_stack">
+ <layout_panel name="images_container">
+ <text name="image_caption_left">
+ 你在「學習島」的第一步。 找到離開的傳送門!
+ </text>
+ <text name="image_caption_right">
+ 接著,到「社交島」探索,認識新的居民朋友!
+ </text>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml
index 3a7d79e04b..170cdddb8c 100755
--- a/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml
@@ -28,4 +28,5 @@
<check_box label="登入時顯示網格選擇" name="show_grid_selection_check"/>
<check_box label="顯示進階選單" name="show_advanced_menu_check"/>
<check_box label="顯示開發選單" name="show_develop_menu_check"/>
+ <button label="預設的創建權限" name="default_creation_permissions"/>
</panel>
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 044edbed70..20335d82ae 100755
--- a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
@@ -29,14 +29,10 @@
<combo_box.item label="一般普級與適度成人" name="Desired_Mature"/>
<combo_box.item label="一般普級" name="Desired_PG"/>
</combo_box>
- <text name="start_location_textbox">
- 開始位置:
+ <check_box label="登入時顯示最愛的地點" name="favorites_on_login_check"/>
+ <text name="favorites_check_extra_text">
+ (使用此電腦的其他人也會看到)
</text>
- <combo_box name="start_location_combo">
- <combo_box.item label="我上一次位置" name="MyLastLocation"/>
- <combo_box.item label="我的家" name="MyHome"/>
- </combo_box>
- <check_box initial_value="true" label="登入時顯示" name="show_location_checkbox"/>
<text name="name_tags_textbox">
名稱標籤:
</text>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
index d768cacb94..aa2486e988 100755
--- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
@@ -7,7 +7,7 @@
<text name="cache_size_label_l">
(位置、圖像、網頁、搜尋的歷史紀錄)
</text>
- <check_box label="顯示在搜索結果我的個人資料信息" name="online_searchresults"/>
+ <check_box label="將我的個人小檔案顯示在搜尋結果中" name="online_searchresults"/>
<check_box label="只有我的朋友和群組知道我上線" name="online_visibility"/>
<check_box label="只有我的朋友和群組可以 IM 或與我通話。" name="voice_call_friends_only_check"/>
<check_box label="當通話結束時關閉麥克風" name="auto_disengage_mic_check"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_script_ed.xml b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
index 198e59be7b..c64982b397 100755
--- a/indra/newview/skins/default/xui/zh/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
@@ -24,6 +24,7 @@
<menu_item_call label="還原全部變更" name="Revert All Changes"/>
<menu_item_call label="從檔案載入…" name="LoadFromFile"/>
<menu_item_call label="存入檔案…" name="SaveToFile"/>
+ <menu_item_call label="顏色…" name="Colors"/>
</menu>
<menu label="編輯" name="Edit">
<menu_item_call label="復原" name="Undo"/>
@@ -41,9 +42,9 @@
<menu_item_call label="關鍵字幫助..." name="Keyword Help..."/>
</menu>
</menu_bar>
- <text_editor name="Script Editor">
+ <script_editor name="Script Editor">
載入中...
- </text_editor>
+ </script_editor>
<combo_box label="插入..." name="Insert..."/>
<button label="儲存" label_selected="儲存" name="Save_btn"/>
<button label="編輯..." name="Edit_btn"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml
index 82c2b10d8d..43d7280373 100755
--- a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml
@@ -4,4 +4,13 @@
<button label="電郵" name="save_to_email_btn"/>
<button label="儲存到我的收納區(L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="儲存到電腦上" name="save_to_computer_btn"/>
+ <text name="send_to_facebook_textbox">
+ [secondlife:/// 臉書(Facebook)]
+ </text>
+ <text name="send_to_twitter_textbox">
+ [secondlife:/// 推特(Twitter)]
+ </text>
+ <text name="send_to_flickr_textbox">
+ [secondlife:/// Flickr]
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml
index c251994906..93c02900e2 100755
--- a/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="teleport_history_item">
<text name="region" value="..."/>
+ <text name="timestamp" value="..."/>
<button name="profile_btn" tool_tip="顯示物品資訊"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_twitter_account.xml b/indra/newview/skins/default/xui/zh/panel_twitter_account.xml
new file mode 100644
index 0000000000..a8b57d7453
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_twitter_account.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_account">
+ <string name="twitter_connected" value="你已成功連通推特,身分為:"/>
+ <string name="twitter_disconnected" value="尚未連通推特。"/>
+ <text name="account_caption_label">
+ 尚未連通推特。
+ </text>
+ <panel name="panel_buttons">
+ <button label="連通…" name="connect_btn"/>
+ <button label="中斷" name="disconnect_btn"/>
+ <text name="account_learn_more_label">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share/ta-p/2435453 瞭解如何發佈到推特]
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml b/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml
new file mode 100644
index 0000000000..d015f4aa95
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<panel name="panel_twitter_photo">
+ <layout_stack name="stack_photo">
+ <layout_panel name="text_panel">
+ <text name="status_label">
+ 說一說你正在做什麼
+ </text>
+ <text name="status_counter_label">
+ 140
+ </text>
+ <check_box initial_value="true" label="加入所在位置" name="add_location_cb"/>
+ <check_box initial_value="true" label="附上照片" name="add_photo_cb"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <combo_box name="resolution_combobox" tool_tip="圖像解析度">
+ <combo_box.item label="目前視窗" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ </combo_box>
+ <combo_box name="filters_combobox" tool_tip="圖像濾鏡">
+ <combo_box.item label="不用濾鏡" name="NoFilter"/>
+ </combo_box>
+ <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/>
+ <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/>
+ </layout_panel>
+ <layout_panel name="photo_button_panel">
+ <button label="發到推特" name="post_photo_btn"/>
+ <button label="取消" name="cancel_photo_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml
index 9587981444..96f931f73f 100755
--- a/indra/newview/skins/default/xui/zh/role_actions.xml
+++ b/indra/newview/skins/default/xui/zh/role_actions.xml
@@ -3,6 +3,7 @@
<action_set description="這些能力包括新增或移除群組成員和允許新成員不受邀即可加入群組的等權力。" name="Membership">
<action description="邀請他人加入這個群組" longdescription="欲邀請他人加入這個群組,請按下角色欄下的成員頁籤中的「邀請」按鈕。" name="member invite" value="1"/>
<action description="將會員由這個群組中踢出" longdescription="欲將成員從群組踢出,請按下角色欄下的成員頁籤中的「踢出」按鈕。 所有人可踢出任何不具所有人角色的人。 如果你不是所有人,一位成員只在他僅屬於「任何人」角色且沒有其他角色的情況下被踢出群組。 欲卸除成員的角色,你必須有「卸除成員角色」的能力。" name="member eject" value="2"/>
+ <action description="管理禁入清單" longdescription="允許群組成員控制是否禁止或重新允許居民加入這個群組。" name="allow ban" value="51"/>
<action description="切換「免費自由加入」設定,更改「加入費」。" longdescription="切換「免費自由加入」設定,讓成員不受邀也可加入,並在基本設定欄更改「加入費」。" name="member options" value="3"/>
</action_set>
<action_set description="這些能力包括新增、移除、更改群組角色,新增或移除成員的角色,和為角色設定能力等權力。" name="Roles">
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 4e636e7816..ad2c331ee4 100755
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -330,6 +330,75 @@ http://secondlife.com/viewer-access-faq
<string name="TestingDisconnect">
測試瀏覽器斷線
</string>
+ <string name="SocialFlickrConnecting">
+ 連通 Flickr 中…
+ </string>
+ <string name="SocialFlickrPosting">
+ 發佈中…
+ </string>
+ <string name="SocialFlickrDisconnecting">
+ Flickr 連通中斷中…
+ </string>
+ <string name="SocialFlickrErrorConnecting">
+ 連通臉書時出問題
+ </string>
+ <string name="SocialFlickrErrorPosting">
+ 發佈到 Flickr 時出問題
+ </string>
+ <string name="SocialFlickrErrorDisconnecting">
+ 試圖中斷 Flickr 連通時出問題
+ </string>
+ <string name="SocialTwitterConnecting">
+ 連通推特中…
+ </string>
+ <string name="SocialTwitterPosting">
+ 發佈中…
+ </string>
+ <string name="SocialTwitterDisconnecting">
+ 推特連通中斷中…
+ </string>
+ <string name="SocialTwitterErrorConnecting">
+ 連通推特時出問題
+ </string>
+ <string name="SocialTwitterErrorPosting">
+ 發佈到推特時出問題
+ </string>
+ <string name="SocialTwitterErrorDisconnecting">
+ 試圖中斷推特連通時出問題
+ </string>
+ <string name="BlackAndWhite">
+ 黑白
+ </string>
+ <string name="Colors1970">
+ 1970年代色調
+ </string>
+ <string name="Intense">
+ 強烈感
+ </string>
+ <string name="Newspaper">
+ 黑白報紙
+ </string>
+ <string name="Sepia">
+ 懷舊
+ </string>
+ <string name="Spotlight">
+ 聚光焦點
+ </string>
+ <string name="Video">
+ 舊影片
+ </string>
+ <string name="Autocontrast">
+ 自動對比
+ </string>
+ <string name="LensFlare">
+ 光暈
+ </string>
+ <string name="Miniature">
+ 小模型移軸特效
+ </string>
+ <string name="Toycamera">
+ 玩具相機
+ </string>
<string name="TooltipPerson">
</string>
@@ -878,6 +947,12 @@ http://secondlife.com/viewer-access-faq
<string name="use_texture">
使用材質
</string>
+ <string name="manip_hint1">
+ 把滑鼠游標移到量尺上
+ </string>
+ <string name="manip_hint2">
+ 就可貼齊格線
+ </string>
<string name="texture_loading">
載入中...
</string>
@@ -4075,6 +4150,12 @@ http://secondlife.com/viewer-access-faq
<string name="share_alert">
將收納區物品拖曳到這裡
</string>
+ <string name="flickr_post_success">
+ 成功發佈到 Flickr。
+ </string>
+ <string name="twitter_post_success">
+ 已成功發佈到推特。
+ </string>
<string name="no_session_message">
(IM 會話不存在)
</string>
@@ -4531,6 +4612,9 @@ http://secondlife.com/viewer-access-faq
<string name="LocalEstimateUSD">
$ [AMOUNT] 美元
</string>
+ <string name="Group Ban">
+ 對群組設禁
+ </string>
<string name="Membership">
成員資格
</string>
@@ -4965,6 +5049,12 @@ http://secondlife.com/viewer-access-faq
<string name="Command_Destinations_Label">
目的地
</string>
+ <string name="Command_Facebook_Label">
+ 臉書
+ </string>
+ <string name="Command_Flickr_Label">
+ Flickr
+ </string>
<string name="Command_Gestures_Label">
姿勢
</string>
@@ -5013,6 +5103,9 @@ http://secondlife.com/viewer-access-faq
<string name="Command_Speak_Label">
說話
</string>
+ <string name="Command_Twitter_Label">
+ 推特
+ </string>
<string name="Command_View_Label">
攝影機控制
</string>
@@ -5043,6 +5136,12 @@ http://secondlife.com/viewer-access-faq
<string name="Command_Destinations_Tooltip">
你可能感興趣的目的地
</string>
+ <string name="Command_Facebook_Tooltip">
+ 發佈到臉書
+ </string>
+ <string name="Command_Flickr_Tooltip">
+ 上傳到 Flickr
+ </string>
<string name="Command_Gestures_Tooltip">
你化身可用的姿勢
</string>
@@ -5091,6 +5190,9 @@ http://secondlife.com/viewer-access-faq
<string name="Command_Speak_Tooltip">
用麥克風和附近人們交談
</string>
+ <string name="Command_Twitter_Tooltip">
+ 推特
+ </string>
<string name="Command_View_Tooltip">
調整攝影機角度
</string>
diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp
index 86229ad636..2bc0d5a086 100755
--- a/indra/newview/tests/llslurl_test.cpp
+++ b/indra/newview/tests/llslurl_test.cpp
@@ -6,7 +6,7 @@
*
* $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2014, 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
@@ -31,6 +31,15 @@
#include "../llslurl.h"
#include "../../llxml/llcontrol.h"
#include "llsdserialize.h"
+
+namespace
+{
+
+// Should not collide with other test programs creating temp files.
+static const char * const TEST_FILENAME("llslurl_test.xml");
+
+}
+
//----------------------------------------------------------------------------
// Mock objects for the dependencies of the code we're testing
@@ -143,11 +152,11 @@ namespace tut
template<> template<>
void slurlTestObject::test<1>()
{
- llofstream gridfile("grid_test.xml");
+ llofstream gridfile(TEST_FILENAME);
gridfile << gSampleGridFile;
gridfile.close();
- LLGridManager::getInstance()->initialize("grid_test.xml");
+ LLGridManager::getInstance()->initialize(TEST_FILENAME);
LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com");
@@ -260,11 +269,11 @@ namespace tut
template<> template<>
void slurlTestObject::test<2>()
{
- llofstream gridfile("grid_test.xml");
+ llofstream gridfile(TEST_FILENAME);
gridfile << gSampleGridFile;
gridfile.close();
- LLGridManager::getInstance()->initialize("grid_test.xml");
+ LLGridManager::getInstance()->initialize(TEST_FILENAME);
LLSLURL slurl = LLSLURL("my.grid.com", "my region");
ensure_equals("grid/region - type", slurl.getType(), LLSLURL::LOCATION);
@@ -293,11 +302,11 @@ namespace tut
template<> template<>
void slurlTestObject::test<3>()
{
- llofstream gridfile("grid_test.xml");
+ llofstream gridfile(TEST_FILENAME);
gridfile << gSampleGridFile;
gridfile.close();
- LLGridManager::getInstance()->initialize("grid_test.xml");
+ LLGridManager::getInstance()->initialize(TEST_FILENAME);
LLGridManager::getInstance()->setGridChoice("my.grid.com");
LLSLURL slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3");
diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp
index 7ad7947ca4..0eb0ab6500 100755
--- a/indra/newview/tests/llviewernetwork_test.cpp
+++ b/indra/newview/tests/llviewernetwork_test.cpp
@@ -6,7 +6,7 @@
*
* $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2014, 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
@@ -31,6 +31,13 @@
#include "../../llxml/llcontrol.h"
#include "llfile.h"
+namespace
+{
+
+// Should not collide with other test programs creating temp files.
+static const char * const TEST_FILENAME("llviewernetwork_test.xml");
+
+}
//----------------------------------------------------------------------------
// Mock objects for the dependencies of the code we're testing
@@ -143,7 +150,7 @@ namespace tut
{
viewerNetworkTest()
{
- LLFile::remove("grid_test.xml");
+ LLFile::remove(TEST_FILENAME);
gCmdLineLoginURI.clear();
gCmdLineGridChoice.clear();
gCmdLineHelperURI.clear();
@@ -152,7 +159,7 @@ namespace tut
}
~viewerNetworkTest()
{
- LLFile::remove("grid_test.xml");
+ LLFile::remove(TEST_FILENAME);
}
};
@@ -170,7 +177,7 @@ namespace tut
{
LLGridManager *manager = LLGridManager::getInstance();
// grid file doesn't exist
- manager->initialize("grid_test.xml");
+ manager->initialize(TEST_FILENAME);
// validate that some of the defaults are available.
std::map<std::string, std::string> known_grids = manager->getKnownGrids();
ensure_equals("Known grids is a string-string map of size 2", known_grids.size(), 2);
@@ -238,11 +245,11 @@ namespace tut
template<> template<>
void viewerNetworkTestObject::test<2>()
{
- llofstream gridfile("grid_test.xml");
+ llofstream gridfile(TEST_FILENAME);
gridfile << gSampleGridFile;
gridfile.close();
- LLGridManager::getInstance()->initialize("grid_test.xml");
+ LLGridManager::getInstance()->initialize(TEST_FILENAME);
std::map<std::string, std::string> known_grids = LLGridManager::getInstance()->getKnownGrids();
ensure_equals("adding a grid via a grid file increases known grid size",4,
known_grids.size());
@@ -369,11 +376,11 @@ namespace tut
void viewerNetworkTestObject::test<7>()
{
// adding a grid with simply a name will populate the values.
- llofstream gridfile("grid_test.xml");
+ llofstream gridfile(TEST_FILENAME);
gridfile << gSampleGridFile;
gridfile.close();
- LLGridManager::getInstance()->initialize("grid_test.xml");
+ LLGridManager::getInstance()->initialize(TEST_FILENAME);
LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com");
ensure_equals("getGridLabel",