Merge remote branch origin/master into zeitgeist
This commit is contained in:
commit
e4e6b26e15
3
.gitignore
vendored
3
.gitignore
vendored
@ -44,8 +44,9 @@ src/calendar-server/org.gnome.Shell.CalendarServer.service
|
||||
src/gnome-shell
|
||||
src/gnome-shell-calendar-server
|
||||
src/gnome-shell-extension-tool
|
||||
src/gnome-shell-real
|
||||
src/gnome-shell-jhbuild
|
||||
src/gnome-shell-perf-helper
|
||||
src/gnome-shell-real
|
||||
src/run-js-test
|
||||
src/test-recorder
|
||||
src/test-recorder.ogg
|
||||
|
18
configure.ac
18
configure.ac
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[2.91.91],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[2.91.92],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@ -71,13 +71,14 @@ LIBEDATASERVER_MIN_VERSION=1.2.0
|
||||
LIBEDATASERVERUI2_MIN_VERSION=1.2.0
|
||||
LIBEDATASERVERUI3_MIN_VERSION=2.91.6
|
||||
TELEPATHY_GLIB_MIN_VERSION=0.13.12
|
||||
TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
||||
POLKIT_MIN_VERSION=0.100
|
||||
|
||||
# Collect more than 20 libraries for a prize!
|
||||
PKG_CHECK_MODULES(GNOME_SHELL, gio-2.0 >= $GIO_MIN_VERSION
|
||||
gio-unix-2.0 dbus-glib-1 libxml-2.0
|
||||
gtk+-3.0 >= $GTK_MIN_VERSION
|
||||
libmutter-wm >= $MUTTER_MIN_VERSION
|
||||
libmutter >= $MUTTER_MIN_VERSION
|
||||
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||
libgnome-menu $recorder_modules gconf-2.0
|
||||
gdk-x11-3.0
|
||||
@ -87,6 +88,7 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-2.0 >= $GIO_MIN_VERSION
|
||||
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||
libcanberra
|
||||
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
|
||||
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
||||
polkit-agent-1 >= $POLKIT_MIN_VERSION)
|
||||
|
||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||
@ -96,6 +98,14 @@ AC_DEFINE_UNQUOTED([GJS_VERSION], ["$GJS_VERSION"], [The version of GJS we're li
|
||||
AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
|
||||
|
||||
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
|
||||
JHBUILD_TYPELIBDIR="$INTROSPECTION_TYPELIBDIR"
|
||||
# NM is the only typelib we use that we don't jhbuild
|
||||
PKG_CHECK_EXISTS([libnm-glib >= 0.8.995],
|
||||
[NM_TYPELIBDIR=`$PKG_CONFIG --variable=libdir libnm-glib`/girepository-1.0
|
||||
if test "$INTROSPECTION_TYPELIBDIR" != "$NM_TYPELIBDIR"; then
|
||||
JHBUILD_TYPELIBDIR="$JHBUILD_TYPELIBDIR:$NM_TYPELIBDIR"
|
||||
fi])
|
||||
AC_SUBST(JHBUILD_TYPELIBDIR)
|
||||
|
||||
saved_CFLAGS=$CFLAGS
|
||||
saved_LIBS=$LIBS
|
||||
@ -136,8 +146,8 @@ PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedatas
|
||||
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
||||
AC_SUBST(CALENDAR_SERVER_LIBS)
|
||||
|
||||
MUTTER_GIR_DIR=`$PKG_CONFIG --variable=girdir libmutter-wm`
|
||||
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir libmutter-wm`
|
||||
MUTTER_GIR_DIR=`$PKG_CONFIG --variable=girdir libmutter`
|
||||
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir libmutter`
|
||||
AC_SUBST(MUTTER_GIR_DIR)
|
||||
AC_SUBST(MUTTER_TYPELIB_DIR)
|
||||
|
||||
|
@ -24,7 +24,8 @@ dist_theme_DATA = \
|
||||
theme/calendar-today.svg \
|
||||
theme/close-window.svg \
|
||||
theme/close.svg \
|
||||
theme/corner-ripple.png \
|
||||
theme/corner-ripple-ltr.png \
|
||||
theme/corner-ripple-rtl.png \
|
||||
theme/dash-placeholder.svg \
|
||||
theme/filter-selected-ltr.svg \
|
||||
theme/filter-selected-rtl.svg \
|
||||
@ -49,6 +50,7 @@ dist_theme_DATA = \
|
||||
theme/separator-white.png \
|
||||
theme/single-view-active.svg \
|
||||
theme/single-view.svg \
|
||||
theme/source-button-border.svg \
|
||||
theme/toggle-off-us.svg \
|
||||
theme/toggle-off-intl.svg \
|
||||
theme/toggle-on-us.svg \
|
||||
|
@ -13,3 +13,4 @@ NoDisplay=true
|
||||
X-GNOME-Autostart-Phase=WindowManager
|
||||
X-GNOME-Provides=panel;windowmanager;
|
||||
X-GNOME-Autostart-Notify=true
|
||||
X-GNOME-AutoRestart=true
|
||||
|
@ -81,5 +81,20 @@
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/shell/windows/workspaces_only_on_primary</key>
|
||||
<applyto>/desktop/gnome/shell/windows/workspaces_only_on_primary</applyto>
|
||||
<owner>gnome-shell</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short>Workspaces only on primary monitor</short>
|
||||
<long>
|
||||
This key overrides /apps/mutter/general/workspaces_only_on_primary when
|
||||
running GNOME Shell.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
</schemalist>
|
||||
</gconfschemafile>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<schemalist>
|
||||
<schema id="org.gnome.shell" path="/apps/gnome-shell/"
|
||||
<schema id="org.gnome.shell" path="/org/gnome/shell/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="development-tools" type="b">
|
||||
<default>true</default>
|
||||
@ -54,7 +54,7 @@
|
||||
<child name="recorder" schema="org.gnome.shell.recorder"/>
|
||||
</schema>
|
||||
|
||||
<schema id="org.gnome.shell.calendar" path="/apps/gnome-shell/calendar/"
|
||||
<schema id="org.gnome.shell.calendar" path="/org/gnome/shell/calendar/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="show-weekdate" type="b">
|
||||
<default>false</default>
|
||||
@ -65,7 +65,7 @@
|
||||
</key>
|
||||
</schema>
|
||||
|
||||
<schema id="org.gnome.shell.clock" path="/apps/gnome-shell/clock/"
|
||||
<schema id="org.gnome.shell.clock" path="/org/gnome/shell/clock/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="show-seconds" type="b">
|
||||
<default>false</default>
|
||||
@ -83,7 +83,7 @@
|
||||
</key>
|
||||
</schema>
|
||||
|
||||
<schema id="org.gnome.shell.recorder" path="/apps/gnome-shell/recorder/"
|
||||
<schema id="org.gnome.shell.recorder" path="/org/gnome/shell/recorder/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="framerate" type="i">
|
||||
<default>15</default>
|
||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
BIN
data/theme/corner-ripple-rtl.png
Normal file
BIN
data/theme/corner-ripple-rtl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
@ -34,13 +34,6 @@ stage {
|
||||
color: rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
.label-real-shadow {
|
||||
background-gradient-direction: horizontal;
|
||||
background-gradient-start: rgba(0, 0, 0, 0);
|
||||
background-gradient-end: rgba(0, 0, 0, 255);
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
StScrollBar
|
||||
{
|
||||
padding: 0px;
|
||||
@ -82,10 +75,10 @@ StScrollBar StButton#vhandle:hover
|
||||
}
|
||||
|
||||
StTooltip StLabel {
|
||||
border: 1px solid rgba(79,111,173,1);
|
||||
border: 1px solid rgba(255,255,255,0.6);
|
||||
border-radius: 5px;
|
||||
padding: 4px;
|
||||
background-color: rgba(79,111,173,0.9);
|
||||
padding: 2px 12px;
|
||||
background-color: rgba(0,0,0,0.9);
|
||||
color: #ffffff;
|
||||
font-size: 0.8em;
|
||||
font-weight: normal;
|
||||
@ -105,7 +98,7 @@ StTooltip StLabel {
|
||||
|
||||
.popup-menu {
|
||||
color: #ffffff;
|
||||
font-size: 14px;
|
||||
font-size: 10.5pt;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
@ -160,6 +153,14 @@ StTooltip StLabel {
|
||||
spacing: .5em;
|
||||
}
|
||||
|
||||
.popup-inactive-menu-item {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.popup-subtitle-menu-item {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.popup-menu-icon {
|
||||
icon-size: 1.14em;
|
||||
}
|
||||
@ -190,6 +191,8 @@ StTooltip StLabel {
|
||||
color: #ffffff;
|
||||
background-color: black;
|
||||
border-image: url("panel-border.svg") 1;
|
||||
font-size: 10.5pt;
|
||||
height: 1.86em;
|
||||
}
|
||||
|
||||
#panelLeft, #panelCenter, #panelRight {
|
||||
@ -249,12 +252,16 @@ StTooltip StLabel {
|
||||
|
||||
.panel-button {
|
||||
padding: 0px 12px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
color: #ccc;
|
||||
transition-duration: 100;
|
||||
}
|
||||
|
||||
.panel-button:hover {
|
||||
color: white;
|
||||
text-shadow: black 0px 2px 2px;
|
||||
}
|
||||
|
||||
.panel-button:active,
|
||||
.panel-button:checked,
|
||||
.panel-button:focus {
|
||||
@ -317,7 +324,7 @@ StTooltip StLabel {
|
||||
background-color: rgba(0,0,0,0.6);
|
||||
}
|
||||
|
||||
.workspaces-view {
|
||||
.window-caption {
|
||||
color: white;
|
||||
spacing: 25px;
|
||||
}
|
||||
@ -346,13 +353,14 @@ StTooltip StLabel {
|
||||
|
||||
.workspace-thumbnail-indicator {
|
||||
outline: 2px solid white;
|
||||
border: 1px solid #888;
|
||||
}
|
||||
|
||||
.window-caption {
|
||||
background: rgba(0,0,0,0.8);
|
||||
border: 1px solid rgba(128,128,128,0.40);
|
||||
border-radius: 10px;
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
padding: 2px 8px;
|
||||
-shell-caption-spacing: 4px;
|
||||
}
|
||||
@ -372,7 +380,7 @@ StTooltip StLabel {
|
||||
|
||||
#dash {
|
||||
color: #5f5f5f;
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
padding: 4px 0px;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
border: 1px solid rgba(128, 128, 128, 0.4);
|
||||
@ -398,12 +406,12 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
#viewSelector {
|
||||
spacing: 16px;
|
||||
font-size: 16px;
|
||||
spacing: 1em;
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
#viewSelectorTabBar {
|
||||
padding: 16px;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
#searchArea {
|
||||
@ -451,8 +459,8 @@ StTooltip StLabel {
|
||||
.view-tab-title {
|
||||
color: #888a85;
|
||||
font-weight: bold;
|
||||
padding: 0px 12px;
|
||||
height: 24px;
|
||||
padding: 0px 0.75em;
|
||||
height: 1.5em;
|
||||
}
|
||||
|
||||
.view-tab-title:hover {
|
||||
@ -462,8 +470,7 @@ StTooltip StLabel {
|
||||
.view-tab-title:selected {
|
||||
color: #000000;
|
||||
background-color: #c2c7cd;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
border-radius: 0.25em;
|
||||
}
|
||||
|
||||
#searchResults {
|
||||
@ -526,7 +533,7 @@ StTooltip StLabel {
|
||||
|
||||
.dash-search-button-label {
|
||||
color: #cccccc;
|
||||
font-size: 16px;
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
/* Apps */
|
||||
@ -551,9 +558,9 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.app-filter {
|
||||
font-size: 14px;
|
||||
font-size: 10.5pt;
|
||||
font-weight: bold;
|
||||
height: 40px;
|
||||
height: 2.85em;
|
||||
color: #aaa;
|
||||
width: 200px;
|
||||
}
|
||||
@ -596,7 +603,7 @@ StTooltip StLabel {
|
||||
border-radius: 4px;
|
||||
padding: 3px;
|
||||
border: 1px rgba(0,0,0,0);
|
||||
font-size: 10px;
|
||||
font-size: 7.5pt;
|
||||
color: white;
|
||||
transition-duration: 100;
|
||||
text-align: center;
|
||||
@ -626,7 +633,7 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.app-well-menu {
|
||||
font-size: 12px
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
/* LookingGlass */
|
||||
@ -782,7 +789,7 @@ StTooltip StLabel {
|
||||
|
||||
.calendar-month-label {
|
||||
color: #666666;
|
||||
font-size: 10px;
|
||||
font-size: 7.5pt;
|
||||
padding: 2px;
|
||||
font-weight: bold;
|
||||
}
|
||||
@ -825,16 +832,16 @@ StTooltip StLabel {
|
||||
|
||||
.datemenu-date-label {
|
||||
padding: .4em 1.75em;
|
||||
font-size: 14px;
|
||||
font-size: 10.5pt;
|
||||
color: #cccccc;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.calendar-day-base {
|
||||
font-size: 10px;
|
||||
font-size: 7.5pt;
|
||||
text-align: center;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
width: 2.4em;
|
||||
height: 2.4em;
|
||||
}
|
||||
|
||||
.calendar-day-base:hover {
|
||||
@ -904,7 +911,7 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.events-day-header {
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
color: rgba(153, 153, 153, 1.0);
|
||||
padding-left: 0.3em;
|
||||
@ -916,7 +923,7 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.events-day-dayname {
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
color: rgba(153, 153, 153, 1.0);
|
||||
text-align: left;
|
||||
}
|
||||
@ -926,7 +933,7 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.events-day-time {
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
color: #fff;
|
||||
text-align: right;
|
||||
}
|
||||
@ -936,7 +943,7 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.events-day-task {
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
color: rgba(153, 153, 153, 1.0);
|
||||
}
|
||||
|
||||
@ -965,13 +972,13 @@ StTooltip StLabel {
|
||||
#message-tray {
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: rgba(0,0,0,0.01);
|
||||
background-gradient-end: rgba(0,0,0,0.95);
|
||||
background-gradient-end: rgba(0,0,0,0.82);
|
||||
height: 36px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#notification {
|
||||
font-size: 16px;
|
||||
font-size: 12pt;
|
||||
border-radius: 5px 5px 0px 0px;
|
||||
background: rgba(0,0,0,0.9);
|
||||
padding: 8px 8px 4px 8px;
|
||||
@ -1000,11 +1007,29 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.summary-boxpointer #summary-right-click-menu {
|
||||
font-size: 14px;
|
||||
font-size: 10.5pt;
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
|
||||
#summary-notification-stack-scrollview {
|
||||
max-height: 18em;
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
#summary-notification-stack-scrollview > .top-shadow, #summary-notification-stack-scrollview > .bottom-shadow {
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
#summary-notification-stack-scrollview:ltr {
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
#summary-notification-stack-scrollview:rtl {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
#notification-scrollview {
|
||||
max-height: 10em;
|
||||
}
|
||||
@ -1102,7 +1127,7 @@ StTooltip StLabel {
|
||||
.chat-meta-message {
|
||||
padding-left: 4px;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
font-size: 10.5pt;
|
||||
color: #bbbbbb;
|
||||
}
|
||||
|
||||
@ -1151,14 +1176,32 @@ StTooltip StLabel {
|
||||
padding: 2px 4px 0px 0px;
|
||||
}
|
||||
|
||||
.summary-source-button {
|
||||
color: #fff;
|
||||
text-shadow: black 0px 2px 2px;
|
||||
}
|
||||
|
||||
.summary-source-button:ltr {
|
||||
padding-left: 4px;
|
||||
padding-right: 16px;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
.summary-source-button:selected .summary-source {
|
||||
background-image: url("panel-button-highlight-narrow.svg");
|
||||
border-image: url("source-button-border.svg") 10 10 0 1;
|
||||
}
|
||||
|
||||
.summary-source-button:expanded:selected .summary-source {
|
||||
background-image: none;
|
||||
border-image: none;
|
||||
}
|
||||
|
||||
.summary-source-button:expanded:selected {
|
||||
background-image: url("panel-button-highlight-wide.svg");
|
||||
border-image: url("source-button-border.svg") 10 10 0 1;
|
||||
}
|
||||
|
||||
.summary-source-button:rtl {
|
||||
padding-right: 4px;
|
||||
padding-left: 16px;
|
||||
padding-left: 12px;
|
||||
}
|
||||
|
||||
.summary-source-button:last-child:ltr {
|
||||
@ -1169,8 +1212,13 @@ StTooltip StLabel {
|
||||
padding-left: 12px;
|
||||
}
|
||||
|
||||
.summary-source {
|
||||
padding-right: 4px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.source-title {
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
padding-left: 4px;
|
||||
}
|
||||
@ -1192,7 +1240,7 @@ StTooltip StLabel {
|
||||
border-radius: 24px;
|
||||
padding: 20px;
|
||||
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
color: white;
|
||||
}
|
||||
|
||||
@ -1251,7 +1299,11 @@ StTooltip StLabel {
|
||||
.ripple-box {
|
||||
width: 52px;
|
||||
height: 52px;
|
||||
background-image: url("corner-ripple.png");
|
||||
background-image: url("corner-ripple-ltr.png");
|
||||
}
|
||||
|
||||
.ripple-box:rtl {
|
||||
background-image: url("corner-ripple-rtl.png");
|
||||
}
|
||||
|
||||
.switcher-arrow {
|
||||
@ -1321,10 +1373,14 @@ StTooltip StLabel {
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
.modal-dialog-button-box {
|
||||
spacing: 21px;
|
||||
}
|
||||
|
||||
.modal-dialog-button {
|
||||
border: 1px solid #8b8b8b;
|
||||
border-radius: 18px;
|
||||
font-size: 14px;
|
||||
font-size: 10.5pt;
|
||||
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
@ -1357,12 +1413,12 @@ StTooltip StLabel {
|
||||
|
||||
/* Run Dialog */
|
||||
.run-dialog-label {
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.run-dialog-error-label {
|
||||
font-size: 12px;
|
||||
font-size: 9pt;
|
||||
color: white;
|
||||
}
|
||||
|
||||
@ -1372,9 +1428,9 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.run-dialog-entry {
|
||||
font-size: 14px;
|
||||
font-size: 10.5pt;
|
||||
font-weight: bold;
|
||||
width: 320px;
|
||||
width: 23em;
|
||||
color: white;
|
||||
}
|
||||
|
||||
@ -1392,6 +1448,10 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
/* End Session Dialog */
|
||||
.end-session-dialog {
|
||||
spacing: 42px;
|
||||
}
|
||||
|
||||
.end-session-dialog-subject {
|
||||
font-size: 12pt;
|
||||
font-weight: bold;
|
||||
@ -1410,13 +1470,11 @@ StTooltip StLabel {
|
||||
font-size: 10pt;
|
||||
color: white;
|
||||
padding-left: 17px;
|
||||
padding-right: 40px;
|
||||
width: 16em;
|
||||
width: 28em;
|
||||
}
|
||||
|
||||
.end-session-dialog-description:rtl {
|
||||
padding-right: 17px;
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
.end-session-dialog-logout-icon {
|
||||
@ -1435,16 +1493,23 @@ StTooltip StLabel {
|
||||
font-size: 10pt;
|
||||
max-height: 200px;
|
||||
padding-top: 42px;
|
||||
padding-bottom: 42px;
|
||||
padding-left: 17px;
|
||||
padding-left: 49px;
|
||||
padding-right: 32px;
|
||||
}
|
||||
|
||||
.end-session-dialog-app-list:rtl {
|
||||
padding-right: 17px;
|
||||
padding-right: 49px;
|
||||
padding-left: 32px;
|
||||
}
|
||||
|
||||
.end-session-dialog-app-list-item {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.end-session-dialog-app-list-item:hover {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.end-session-dialog-app-list-item:ltr {
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
74
data/theme/source-button-border.svg
Normal file
74
data/theme/source-button-border.svg
Normal file
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="21"
|
||||
height="10"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.0 r9654"
|
||||
sodipodi:docname="source-button-border.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#000000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="44.8"
|
||||
inkscape:cx="8.704132"
|
||||
inkscape:cy="5.7029946"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="1145"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
guidetolerance="10000"
|
||||
objecttolerance="10000">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3792"
|
||||
empspacing="10"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke-width:0.43599999;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect3796"
|
||||
width="19"
|
||||
height="2"
|
||||
x="1"
|
||||
y="8" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
@ -8,6 +8,7 @@ nobase_dist_js_DATA = \
|
||||
misc/format.js \
|
||||
misc/gnomeSession.js \
|
||||
misc/history.js \
|
||||
misc/modemManager.js \
|
||||
misc/params.js \
|
||||
misc/semantic.js \
|
||||
misc/util.js \
|
||||
@ -51,6 +52,7 @@ nobase_dist_js_DATA = \
|
||||
ui/statusMenu.js \
|
||||
ui/status/accessibility.js \
|
||||
ui/status/keyboard.js \
|
||||
ui/status/network.js \
|
||||
ui/status/power.js \
|
||||
ui/status/volume.js \
|
||||
ui/status/bluetooth.js \
|
||||
|
225
js/misc/modemManager.js
Normal file
225
js/misc/modemManager.js
Normal file
@ -0,0 +1,225 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
|
||||
// The following are not the complete interfaces, just the methods we need
|
||||
// (or may need in the future)
|
||||
|
||||
const ModemGsmNetworkInterface = {
|
||||
name: 'org.freedesktop.ModemManager.Modem.Gsm.Network',
|
||||
methods: [
|
||||
{ name: 'GetRegistrationInfo', inSignature: '', outSignature: 'uss' },
|
||||
{ name: 'GetSignalQuality', inSignature: '', outSignature: 'u' }
|
||||
],
|
||||
properties: [
|
||||
{ name: 'AccessTechnology', signature: 'u', access: 'read' }
|
||||
],
|
||||
signals: [
|
||||
{ name: 'SignalQuality', inSignature: 'u' },
|
||||
{ name: 'RegistrationInfo', inSignature: 'uss' }
|
||||
]
|
||||
};
|
||||
const ModemGsmNetworkProxy = DBus.makeProxyClass(ModemGsmNetworkInterface);
|
||||
|
||||
const ModemCdmaInterface = {
|
||||
name: 'org.freedesktop.ModemManager.Modem.Cdma',
|
||||
methods: [
|
||||
{ name: 'GetSignalQuality', inSignature: '', outSignature: 'u' },
|
||||
{ name: 'GetServingSystem', inSignature: '', outSignature: 'usu' }
|
||||
],
|
||||
signals: [
|
||||
{ name: 'SignalQuality', inSignature: 'u' }
|
||||
]
|
||||
};
|
||||
const ModemCdmaProxy = DBus.makeProxyClass(ModemCdmaInterface);
|
||||
|
||||
let _providersTable;
|
||||
function _getProvidersTable() {
|
||||
if (_providersTable)
|
||||
return _providersTable;
|
||||
let [providers, countryCodes] = Shell.mobile_providers_parse();
|
||||
return _providersTable = providers;
|
||||
}
|
||||
|
||||
function ModemGsm() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
ModemGsm.prototype = {
|
||||
_init: function(path) {
|
||||
this._proxy = new ModemGsmNetworkProxy(DBus.system, 'org.freedesktop.ModemManager', path);
|
||||
|
||||
this.signal_quality = 0;
|
||||
this.operator_name = null;
|
||||
|
||||
// Code is duplicated because the function have different signatures
|
||||
this._proxy.connect('SignalQuality', Lang.bind(this, function(proxy, quality) {
|
||||
this.signal_quality = quality;
|
||||
this.emit('notify::signal-quality');
|
||||
}));
|
||||
this._proxy.connect('RegistrationInfo', Lang.bind(this, function(proxy, status, code, name) {
|
||||
this.operator_name = this._findOperatorName(name, code);
|
||||
this.emit('notify::operator-name');
|
||||
}));
|
||||
this._proxy.GetRegistrationInfoRemote(Lang.bind(this, function(result, err) {
|
||||
if (err) {
|
||||
log(err);
|
||||
return;
|
||||
}
|
||||
|
||||
let [status, code, name] = result;
|
||||
this.operator_name = this._findOperatorName(name, code);
|
||||
this.emit('notify::operator-name');
|
||||
}));
|
||||
this._proxy.GetSignalQualityRemote(Lang.bind(this, function(result, err) {
|
||||
if (err) {
|
||||
// it will return an error if the device is not connected
|
||||
this.signal_quality = 0;
|
||||
} else {
|
||||
let [quality] = result;
|
||||
this.signal_quality = quality;
|
||||
}
|
||||
this.emit('notify::signal-quality');
|
||||
}));
|
||||
},
|
||||
|
||||
_findOperatorName: function(name, opCode) {
|
||||
if (name.length != 0 && (name.length > 6 || name.length < 5)) {
|
||||
// this looks like a valid name, i.e. not an MCCMNC (that some
|
||||
// devices return when not yet connected
|
||||
return name;
|
||||
}
|
||||
if (isNaN(parseInt(name))) {
|
||||
// name is definitely not a MCCMNC, so it may be a name
|
||||
// after all; return that
|
||||
return name;
|
||||
}
|
||||
|
||||
let needle;
|
||||
if (name.length == 0 && opCode)
|
||||
needle = opCode;
|
||||
else if (name.length == 6 || name.length == 5)
|
||||
needle = name;
|
||||
else // nothing to search
|
||||
return null;
|
||||
|
||||
return this._findProviderForMCCMNC(needle);
|
||||
},
|
||||
|
||||
_findProviderForMCCMNC: function(needle) {
|
||||
let table = _getProvidersTable();
|
||||
let needlemcc = needle.substring(0, 3);
|
||||
let needlemnc = needle.substring(3, needle.length);
|
||||
|
||||
let name2, name3;
|
||||
for (let iter in table) {
|
||||
let providers = table[iter];
|
||||
|
||||
// Search through each country's providers
|
||||
for (let i = 0; i < providers.length; i++) {
|
||||
let provider = providers[i];
|
||||
|
||||
// Search through MCC/MNC list
|
||||
let list = provider.get_gsm_mcc_mnc();
|
||||
for (let j = 0; j < list.length; j++) {
|
||||
let mccmnc = list[j];
|
||||
|
||||
// Match both 2-digit and 3-digit MNC; prefer a
|
||||
// 3-digit match if found, otherwise a 2-digit one.
|
||||
if (mccmnc.mcc != needlemcc)
|
||||
continue; // MCC was wrong
|
||||
|
||||
if (!name3 && needle.length == 6 && needlemnc == mccmnc.mnc)
|
||||
name3 = provider.name;
|
||||
|
||||
if (!name2 && needlemnc.substring(0, 2) == mccmnc.mnc.substring(0, 2))
|
||||
name2 = provider.name;
|
||||
|
||||
if (name2 && name3)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return name3 || name2 || null;
|
||||
}
|
||||
}
|
||||
Signals.addSignalMethods(ModemGsm.prototype);
|
||||
|
||||
function ModemCdma() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
ModemCdma.prototype = {
|
||||
_init: function(path) {
|
||||
this._proxy = new ModemCdmaProxy(DBus.system, 'org.freedesktop.ModemManager', path);
|
||||
|
||||
this.signal_quality = 0;
|
||||
this.operator_name = null;
|
||||
this._proxy.connect('SignalQuality', Lang.bind(this, function(proxy, quality) {
|
||||
this.signal_quality = quality;
|
||||
this.emit('notify::signal-quality');
|
||||
|
||||
// receiving this signal means the device got activated
|
||||
// and we can finally call GetServingSystem
|
||||
if (this.operator_name == null)
|
||||
this._refreshServingSystem();
|
||||
}));
|
||||
this._proxy.GetSignalQualityRemote(Lang.bind(this, function(result, err) {
|
||||
if (err) {
|
||||
// it will return an error if the device is not connected
|
||||
this.signal_quality = 0;
|
||||
} else {
|
||||
let [quality] = result;
|
||||
this.signal_quality = quality;
|
||||
}
|
||||
this.emit('notify::signal-quality');
|
||||
}));
|
||||
},
|
||||
|
||||
_refreshServingSystem: function() {
|
||||
this._proxy.GetServingSystemRemote(Lang.bind(this, function(result, err) {
|
||||
if (err) {
|
||||
// it will return an error if the device is not connected
|
||||
this.operator_name = null;
|
||||
} else {
|
||||
let [bandClass, band, id] = result;
|
||||
if (name.length > 0)
|
||||
this.operator_name = this._findProviderForSid(id);
|
||||
else
|
||||
this.operator_name = null;
|
||||
}
|
||||
this.emit('notify::operator-name');
|
||||
}));
|
||||
},
|
||||
|
||||
_findProviderForSid: function(sid) {
|
||||
if (sid == 0)
|
||||
return null;
|
||||
|
||||
let table = _getProvidersTable();
|
||||
|
||||
// Search through each country
|
||||
for (let iter in table) {
|
||||
let providers = table[iter];
|
||||
|
||||
// Search through each country's providers
|
||||
for (let i = 0; i < providers.length; i++) {
|
||||
let provider = providers[i];
|
||||
let cdma_sid = provider.get_cdma_sid();
|
||||
|
||||
// Search through CDMA SID list
|
||||
for (let j = 0; j < cdma_sid.length; j++) {
|
||||
if (cdma_sid[j] == sid)
|
||||
return provider.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(ModemCdma.prototype);
|
129
js/misc/util.js
129
js/misc/util.js
@ -6,7 +6,6 @@ const GLib = imports.gi.GLib;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
@ -56,20 +55,6 @@ function spawnCommandLine(command_line) {
|
||||
}
|
||||
}
|
||||
|
||||
// spawnDesktop:
|
||||
// @id: a desktop file ID
|
||||
//
|
||||
// Spawns the desktop file identified by @id using startup notification,
|
||||
// etc, handling any errors that occur when trying to find or start
|
||||
// the program.
|
||||
function spawnDesktop(id) {
|
||||
try {
|
||||
trySpawnDesktop(id);
|
||||
} catch (err) {
|
||||
_handleSpawnError(id, err);
|
||||
}
|
||||
}
|
||||
|
||||
// trySpawn:
|
||||
// @argv: an argv array
|
||||
//
|
||||
@ -117,41 +102,9 @@ function trySpawnCommandLine(command_line) {
|
||||
trySpawn(argv);
|
||||
}
|
||||
|
||||
// trySpawnDesktop:
|
||||
// @id: a desktop file ID
|
||||
//
|
||||
// Spawns the desktop file identified by @id using startup notification.
|
||||
// On error, throws an exception.
|
||||
function trySpawnDesktop(id) {
|
||||
let app;
|
||||
|
||||
// shell_app_system_load_from_desktop_file() will end up returning
|
||||
// a stupid error message if the desktop file doesn't exist, but
|
||||
// that's the only case it returns an error for, so we just
|
||||
// substitute our own error in instead
|
||||
try {
|
||||
app = Shell.AppSystem.get_default().load_from_desktop_file(id + '.desktop');
|
||||
} catch (err) {
|
||||
throw new Error(_("No such application"));
|
||||
}
|
||||
|
||||
try {
|
||||
app.launch();
|
||||
} catch(err) {
|
||||
// see trySpawn
|
||||
err.message = err.message.replace(/.*\((.+)\)/, '$1');
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
function _handleSpawnError(command, err) {
|
||||
let title = _("Execution of '%s' failed:").format(command);
|
||||
|
||||
let source = new MessageTray.SystemNotificationSource();
|
||||
Main.messageTray.add(source);
|
||||
let notification = new MessageTray.Notification(source, title, err.message);
|
||||
notification.setTransient(true);
|
||||
source.notify(notification);
|
||||
Main.notifyError(title, err.message);
|
||||
}
|
||||
|
||||
// killall:
|
||||
@ -178,3 +131,83 @@ function killall(processName) {
|
||||
logError(e, 'Failed to kill ' + processName);
|
||||
}
|
||||
}
|
||||
|
||||
// This was ported from network-manager-applet
|
||||
// Copyright 2007 - 2011 Red Hat, Inc.
|
||||
// Author: Dan Williams <dcbw@redhat.com>
|
||||
|
||||
const _IGNORED_WORDS = [
|
||||
'Semiconductor',
|
||||
'Components',
|
||||
'Corporation',
|
||||
'Communications',
|
||||
'Company',
|
||||
'Corp.',
|
||||
'Corp',
|
||||
'Co.',
|
||||
'Inc.',
|
||||
'Inc',
|
||||
'Incorporated',
|
||||
'Ltd.',
|
||||
'Limited.',
|
||||
'Intel?',
|
||||
'chipset',
|
||||
'adapter',
|
||||
'[hex]',
|
||||
'NDIS',
|
||||
'Module'
|
||||
];
|
||||
|
||||
const _IGNORED_PHRASES = [
|
||||
'Multiprotocol MAC/baseband processor',
|
||||
'Wireless LAN Controller',
|
||||
'Wireless LAN Adapter',
|
||||
'Wireless Adapter',
|
||||
'Network Connection',
|
||||
'Wireless Cardbus Adapter',
|
||||
'Wireless CardBus Adapter',
|
||||
'54 Mbps Wireless PC Card',
|
||||
'Wireless PC Card',
|
||||
'Wireless PC',
|
||||
'PC Card with XJACK(r) Antenna',
|
||||
'Wireless cardbus',
|
||||
'Wireless LAN PC Card',
|
||||
'Technology Group Ltd.',
|
||||
'Communication S.p.A.',
|
||||
'Business Mobile Networks BV',
|
||||
'Mobile Broadband Minicard Composite Device',
|
||||
'Mobile Communications AB',
|
||||
'(PC-Suite Mode)'
|
||||
];
|
||||
|
||||
function fixupPCIDescription(desc) {
|
||||
desc.replace(/[_,]/, ' ');
|
||||
|
||||
/* Attempt to shorten ID by ignoring certain phrases */
|
||||
for (let i = 0; i < _IGNORED_PHRASES.length; i++) {
|
||||
let item = _IGNORED_PHRASES[i];
|
||||
let pos = desc.indexOf(item);
|
||||
if (pos != -1) {
|
||||
let before = desc.substring(0, pos);
|
||||
let after = desc.substring(pos + item.length, desc.length);
|
||||
desc = before + after;
|
||||
}
|
||||
}
|
||||
|
||||
/* Attmept to shorten ID by ignoring certain individual words */
|
||||
let words = desc.split(' ');
|
||||
let out = [ ];
|
||||
for (let i = 0; i < words; i++) {
|
||||
let item = words[i];
|
||||
|
||||
// skip empty items (that come out from consecutive spaces)
|
||||
if (item.length == 0)
|
||||
continue;
|
||||
|
||||
if (_IGNORED_WORDS.indexOf(item) == -1) {
|
||||
out.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
return out.join(' ');
|
||||
}
|
||||
|
@ -376,7 +376,15 @@ AltTabPopup.prototype = {
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
_popModal: function() {
|
||||
if (this._haveModal) {
|
||||
Main.popModal(this.actor);
|
||||
this._haveModal = false;
|
||||
}
|
||||
},
|
||||
|
||||
destroy : function() {
|
||||
this._popModal();
|
||||
if (this.actor.visible) {
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
@ -392,8 +400,7 @@ AltTabPopup.prototype = {
|
||||
},
|
||||
|
||||
_onDestroy : function() {
|
||||
if (this._haveModal)
|
||||
Main.popModal(this.actor);
|
||||
this._popModal();
|
||||
|
||||
if (this._thumbnails)
|
||||
this._destroyThumbnails();
|
||||
|
@ -86,10 +86,14 @@ AlphabeticalView.prototype = {
|
||||
if (vfade)
|
||||
offset = vfade.fade_offset;
|
||||
|
||||
if (icon.y < value + offset)
|
||||
value = Math.max(0, icon.y - offset);
|
||||
else if (icon.y + icon.height > value + pageSize - offset)
|
||||
value = Math.min(upper, icon.y + icon.height + offset - pageSize);
|
||||
// If this gets called as part of a right-click, the actor
|
||||
// will be needs_allocation, and so "icon.y" would return 0
|
||||
let box = icon.get_allocation_box();
|
||||
|
||||
if (box.y1 < value + offset)
|
||||
value = Math.max(0, box.y1 - offset);
|
||||
else if (box.y2 > value + pageSize - offset)
|
||||
value = Math.min(upper, box.y2 + offset - pageSize);
|
||||
else
|
||||
return;
|
||||
|
||||
@ -412,6 +416,10 @@ AppWellIcon.prototype = {
|
||||
this._removeMenuTimeout();
|
||||
Main.overview.beginItemDrag(this);
|
||||
}));
|
||||
this._draggable.connect('drag-cancelled', Lang.bind(this,
|
||||
function () {
|
||||
Main.overview.cancelledItemDrag(this);
|
||||
}));
|
||||
this._draggable.connect('drag-end', Lang.bind(this,
|
||||
function () {
|
||||
Main.overview.endItemDrag(this);
|
||||
@ -505,6 +513,8 @@ AppWellIcon.prototype = {
|
||||
this._menuManager.addMenu(this._menu);
|
||||
}
|
||||
|
||||
this.actor.set_hover(true);
|
||||
this.actor.show_tooltip();
|
||||
this._menu.popup();
|
||||
|
||||
return false;
|
||||
@ -568,6 +578,9 @@ AppIconMenu.prototype = {
|
||||
|
||||
PopupMenu.PopupMenu.prototype._init.call(this, source.actor, 0.5, side, 0);
|
||||
|
||||
// We want to keep the item hovered while the menu is up
|
||||
this.blockSourceEvents = true;
|
||||
|
||||
this._source = source;
|
||||
|
||||
this.connect('activate', Lang.bind(this, this._onActivate));
|
||||
|
@ -36,8 +36,8 @@ Chrome.prototype = {
|
||||
|
||||
this._trackedActors = [];
|
||||
|
||||
global.gdk_screen.connect('monitors-changed',
|
||||
Lang.bind(this, this._monitorsChanged));
|
||||
global.screen.connect('monitors-changed',
|
||||
Lang.bind(this, this._monitorsChanged));
|
||||
global.screen.connect('restacked',
|
||||
Lang.bind(this, this._windowsRestacked));
|
||||
|
||||
@ -335,6 +335,11 @@ Chrome.prototype = {
|
||||
this._updateVisibility();
|
||||
this._queueUpdateRegions();
|
||||
}
|
||||
|
||||
// Figure out where the pointer is in case we lost track of
|
||||
// it during a grab. (In particular, if a trayicon popup menu
|
||||
// is dismissed, see if we need to close the message tray.)
|
||||
global.sync_pointer();
|
||||
},
|
||||
|
||||
_updateRegions: function() {
|
||||
|
@ -281,6 +281,7 @@ CtrlAltTabPopup.prototype = {
|
||||
},
|
||||
|
||||
_onDestroy : function() {
|
||||
this._popModal();
|
||||
if (this._keyPressEventId)
|
||||
this.actor.disconnect(this._keyPressEventId);
|
||||
if (this._keyReleaseEventId)
|
||||
|
@ -283,20 +283,37 @@ Dash.prototype = {
|
||||
Lang.bind(this, this._onDragBegin));
|
||||
Main.overview.connect('item-drag-end',
|
||||
Lang.bind(this, this._onDragEnd));
|
||||
Main.overview.connect('item-drag-cancelled',
|
||||
Lang.bind(this, this._onDragCancelled));
|
||||
Main.overview.connect('window-drag-begin',
|
||||
Lang.bind(this, this._onDragBegin));
|
||||
Main.overview.connect('window-drag-cancelled',
|
||||
Lang.bind(this, this._onDragCancelled));
|
||||
Main.overview.connect('window-drag-end',
|
||||
Lang.bind(this, this._onDragEnd));
|
||||
},
|
||||
|
||||
_onDragBegin: function() {
|
||||
this._dragCancelled = false;
|
||||
this._dragMonitor = {
|
||||
dragMotion: Lang.bind(this, this._onDragMotion)
|
||||
};
|
||||
DND.addDragMonitor(this._dragMonitor);
|
||||
},
|
||||
|
||||
_onDragCancelled: function() {
|
||||
this._dragCancelled = true;
|
||||
this._endDrag();
|
||||
},
|
||||
|
||||
_onDragEnd: function() {
|
||||
if (this._dragCancelled)
|
||||
return;
|
||||
|
||||
this._endDrag();
|
||||
},
|
||||
|
||||
_endDrag: function() {
|
||||
this._clearDragPlaceholder();
|
||||
if (this._favRemoveTarget) {
|
||||
this._favRemoveTarget.actor.hide();
|
||||
@ -372,6 +389,8 @@ Dash.prototype = {
|
||||
Lang.bind(this, function() {
|
||||
display.actor.opacity = 255;
|
||||
}));
|
||||
display.actor.set_tooltip_text(app.get_name());
|
||||
|
||||
let item = new DashItemContainer();
|
||||
item.setChild(display.actor);
|
||||
|
||||
|
@ -200,13 +200,13 @@ DateMenuButton.prototype = {
|
||||
|
||||
_onPreferencesActivate: function() {
|
||||
this.menu.close();
|
||||
Util.spawnDesktop('gnome-datetime-panel');
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-datetime-panel.desktop');
|
||||
app.activate(-1);
|
||||
},
|
||||
|
||||
_onOpenCalendarActivate: function() {
|
||||
this.menu.close();
|
||||
// TODO: pass '-c calendar' (to force the calendar at startup)
|
||||
// TODO: pass the selected day
|
||||
Util.spawnDesktop('evolution');
|
||||
},
|
||||
Util.spawn(['evolution', '-c', 'calendar']);
|
||||
}
|
||||
};
|
||||
|
@ -507,6 +507,9 @@ _Draggable.prototype = {
|
||||
if (!this._buttonDown)
|
||||
this._dragComplete();
|
||||
this.emit('drag-end', eventTime, false);
|
||||
if (!this._dragOrigParent)
|
||||
this._dragActor.destroy();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -66,16 +66,20 @@ const logoutDialogContent = {
|
||||
uninhibitedDescriptionWithUser: _("%s will be logged out automatically in %d seconds."),
|
||||
uninhibitedDescription: _("You will be logged out automatically in %d seconds."),
|
||||
endDescription: _("Logging out of the system."),
|
||||
confirmButtonText: _("Log Out"),
|
||||
confirmButtons: [{ signal: 'ConfirmedLogout',
|
||||
label: _("Log Out") }],
|
||||
iconStyleClass: 'end-session-dialog-logout-icon'
|
||||
};
|
||||
|
||||
const shutdownDialogContent = {
|
||||
subject: _("Shut Down"),
|
||||
inhibitedDescription: _("Click Shut Down to quit these applications and shut down the system."),
|
||||
uninhibitedDescription: _("The system will shut down automatically in %d seconds."),
|
||||
endDescription: _("Shutting down the system."),
|
||||
confirmButtonText: _("Shut Down"),
|
||||
subject: _("Power Off"),
|
||||
inhibitedDescription: _("Click Power Off to quit these applications and power off the system."),
|
||||
uninhibitedDescription: _("The system will power off automatically in %d seconds."),
|
||||
endDescription: _("Powering off the system."),
|
||||
confirmButtons: [{ signal: 'ConfirmedReboot',
|
||||
label: _("Restart") },
|
||||
{ signal: 'ConfirmedShutdown',
|
||||
label: _("Power Off") }],
|
||||
iconName: 'system-shutdown',
|
||||
iconStyleClass: 'end-session-dialog-shutdown-icon'
|
||||
};
|
||||
@ -85,7 +89,8 @@ const restartDialogContent = {
|
||||
inhibitedDescription: _("Click Restart to quit these applications and restart the system."),
|
||||
uninhibitedDescription: _("The system will restart automatically in %d seconds."),
|
||||
endDescription: _("Restarting the system."),
|
||||
confirmButtonText: _("Restart"),
|
||||
confirmButtons: [{ signal: 'ConfirmedReboot',
|
||||
label: _("Restart") }],
|
||||
iconName: 'system-shutdown',
|
||||
iconStyleClass: 'end-session-dialog-shutdown-icon'
|
||||
};
|
||||
@ -233,7 +238,7 @@ EndSessionDialog.prototype = {
|
||||
__proto__: ModalDialog.ModalDialog.prototype,
|
||||
|
||||
_init: function() {
|
||||
ModalDialog.ModalDialog.prototype._init.call(this);
|
||||
ModalDialog.ModalDialog.prototype._init.call(this, { styleClass: 'end-session-dialog' });
|
||||
|
||||
this._user = Gdm.UserManager.ref_default().get_user(GLib.get_user_name());
|
||||
|
||||
@ -288,12 +293,26 @@ EndSessionDialog.prototype = {
|
||||
this.contentLayout.add(scrollView,
|
||||
{ x_fill: true,
|
||||
y_fill: true });
|
||||
scrollView.hide();
|
||||
|
||||
this._applicationList = new St.BoxLayout({ vertical: true });
|
||||
scrollView.add_actor(this._applicationList,
|
||||
{ x_fill: true,
|
||||
y_fill: true,
|
||||
x_align: St.Align.START,
|
||||
y_align: St.Align.MIDDLE });
|
||||
|
||||
this._applicationList.connect('actor-added',
|
||||
Lang.bind(this, function() {
|
||||
if (this._applicationList.get_children().length == 1)
|
||||
scrollView.show();
|
||||
}));
|
||||
|
||||
this._applicationList.connect('actor-removed',
|
||||
Lang.bind(this, function() {
|
||||
if (this._applicationList.get_children().length == 0)
|
||||
scrollView.hide();
|
||||
}));
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
@ -392,18 +411,27 @@ EndSessionDialog.prototype = {
|
||||
return;
|
||||
|
||||
let dialogContent = DialogContent[this._type];
|
||||
let confirmButtonText = _("Confirm");
|
||||
let buttons = [{ action: Lang.bind(this, this.cancel),
|
||||
label: _("Cancel"),
|
||||
key: Clutter.Escape }];
|
||||
|
||||
if (dialogContent.confirmButtonText)
|
||||
confirmButtonText = dialogContent.confirmButtonText;
|
||||
for (let i = 0; i < dialogContent.confirmButtons.length; i++) {
|
||||
let signal = dialogContent.confirmButtons[i].signal;
|
||||
let label = dialogContent.confirmButtons[i].label;
|
||||
buttons.push({ action: Lang.bind(this, function() {
|
||||
this._confirm(signal);
|
||||
}),
|
||||
label: label });
|
||||
}
|
||||
|
||||
this.setButtons([{ label: _("Cancel"),
|
||||
action: Lang.bind(this, this.cancel),
|
||||
key: Clutter.Escape
|
||||
},
|
||||
{ label: confirmButtonText,
|
||||
action: Lang.bind(this, this._confirm)
|
||||
}]);
|
||||
this.setButtons(buttons);
|
||||
},
|
||||
|
||||
close: function() {
|
||||
ModalDialog.ModalDialog.prototype.close.call(this);
|
||||
DBus.session.emit_signal('/org/gnome/SessionManager/EndSessionDialog',
|
||||
'org.gnome.SessionManager.EndSessionDialog',
|
||||
'Closed', '', []);
|
||||
},
|
||||
|
||||
cancel: function() {
|
||||
@ -414,12 +442,12 @@ EndSessionDialog.prototype = {
|
||||
this.close(global.get_current_time());
|
||||
},
|
||||
|
||||
_confirm: function() {
|
||||
_confirm: function(signal) {
|
||||
this._fadeOutDialog();
|
||||
this._stopTimer();
|
||||
DBus.session.emit_signal('/org/gnome/SessionManager/EndSessionDialog',
|
||||
'org.gnome.SessionManager.EndSessionDialog',
|
||||
'Confirmed', '', []);
|
||||
signal, '', []);
|
||||
},
|
||||
|
||||
_onOpened: function() {
|
||||
@ -434,7 +462,11 @@ EndSessionDialog.prototype = {
|
||||
time: this._secondsLeft,
|
||||
transition: 'linear',
|
||||
onUpdate: Lang.bind(this, this._updateContent),
|
||||
onComplete: Lang.bind(this, this._confirm),
|
||||
onComplete: Lang.bind(this, function() {
|
||||
let dialogContent = DialogContent[this._type];
|
||||
let button = dialogContent.confirmButtons[dialogContent.confirmButtons.length - 1];
|
||||
this._confirm(button.signal);
|
||||
}),
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -281,8 +281,11 @@ IconGrid.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
childrenInRow: function(rowWidth) {
|
||||
return this._computeLayout(rowWidth)[0];
|
||||
},
|
||||
|
||||
_computeLayout: function (forWidth) {
|
||||
let children = this._grid.get_children();
|
||||
let nColumns = 0;
|
||||
let usedWidth = 0;
|
||||
while ((this._colLimit == null || nColumns < this._colLimit) &&
|
||||
|
108
js/ui/main.js
108
js/ui/main.js
@ -86,6 +86,9 @@ function start() {
|
||||
global.logError = _logError;
|
||||
global.log = _logDebug;
|
||||
|
||||
// Chain up async errors reported from C
|
||||
global.connect('notify-error', function (global, msg, detail) { notifyError(msg, detail); });
|
||||
|
||||
Gio.DesktopAppInfo.set_desktop_env('GNOME');
|
||||
|
||||
shellDBusService = new ShellDBus.GnomeShell();
|
||||
@ -133,6 +136,7 @@ function start() {
|
||||
|
||||
// Set up stage hierarchy to group all UI actors under one container.
|
||||
uiGroup = new Clutter.Group();
|
||||
St.set_ui_root(global.stage, uiGroup);
|
||||
global.window_group.reparent(uiGroup);
|
||||
global.overlay_group.reparent(uiGroup);
|
||||
global.stage.add_actor(uiGroup);
|
||||
@ -189,7 +193,7 @@ function start() {
|
||||
// Attempt to become a PolicyKit authentication agent
|
||||
PolkitAuthenticationAgent.init()
|
||||
|
||||
global.gdk_screen.connect('monitors-changed', _relayout);
|
||||
global.screen.connect('monitors-changed', _relayout);
|
||||
|
||||
ExtensionSystem.init();
|
||||
ExtensionSystem.loadExtensions();
|
||||
@ -216,7 +220,11 @@ function start() {
|
||||
}
|
||||
|
||||
global.screen.connect('notify::n-workspaces', _nWorkspacesChanged);
|
||||
Mainloop.idle_add(_nWorkspacesChanged);
|
||||
|
||||
global.screen.connect('window-entered-monitor', _windowEnteredMonitor);
|
||||
global.screen.connect('window-left-monitor', _windowLeftMonitor);
|
||||
|
||||
_nWorkspacesChanged();
|
||||
}
|
||||
|
||||
let _workspaces = [];
|
||||
@ -303,6 +311,20 @@ function _windowRemoved(workspace, window) {
|
||||
});
|
||||
}
|
||||
|
||||
function _windowLeftMonitor(metaScreen, monitorIndex, metaWin) {
|
||||
// If the window left the primary monitor, that
|
||||
// might make that workspace empty
|
||||
if (monitorIndex == global.get_primary_monitor_index())
|
||||
_queueCheckWorkspaces();
|
||||
}
|
||||
|
||||
function _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) {
|
||||
// If the window entered the primary monitor, that
|
||||
// might make that workspace non-empty
|
||||
if (monitorIndex == global.get_primary_monitor_index())
|
||||
_queueCheckWorkspaces();
|
||||
}
|
||||
|
||||
function _queueCheckWorkspaces() {
|
||||
if (_checkWorkspacesId == 0)
|
||||
_checkWorkspacesId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, _checkWorkspaces);
|
||||
@ -395,6 +417,27 @@ function loadTheme() {
|
||||
themeContext.set_theme (theme);
|
||||
}
|
||||
|
||||
/**
|
||||
* notifyError:
|
||||
* @msg: An error message
|
||||
* @details: Additional information
|
||||
*
|
||||
* See shell_global_notify_problem().
|
||||
*/
|
||||
function notifyError(msg, details) {
|
||||
// Also print to stderr so it's logged somewhere
|
||||
if (details)
|
||||
log("error: " + msg + ": " + details);
|
||||
else
|
||||
log("error: " + msg)
|
||||
|
||||
let source = new MessageTray.SystemNotificationSource();
|
||||
messageTray.add(source);
|
||||
let notification = new MessageTray.Notification(source, msg, details);
|
||||
notification.setTransient(true);
|
||||
source.notify(notification);
|
||||
}
|
||||
|
||||
/**
|
||||
* _log:
|
||||
* @category: string message type ('info', 'error')
|
||||
@ -438,28 +481,67 @@ function _getAndClearErrorStack() {
|
||||
|
||||
function _relayout() {
|
||||
let monitors = global.get_monitors();
|
||||
if (monitors.length != hotCorners.length) {
|
||||
// destroy old corners
|
||||
for (let i = 0; i < hotCorners.length; i++)
|
||||
hotCorners[i].destroy();
|
||||
hotCorners = [];
|
||||
for (let i = 0; i < monitors.length; i++)
|
||||
hotCorners[i] = new Panel.HotCorner();
|
||||
}
|
||||
// destroy old corners
|
||||
for (let i = 0; i < hotCorners.length; i++)
|
||||
hotCorners[i].destroy();
|
||||
hotCorners = [];
|
||||
|
||||
|
||||
let primary = global.get_primary_monitor();
|
||||
for (let i = 0; i < monitors.length; i++) {
|
||||
let monitor = monitors[i];
|
||||
let corner = hotCorners[i];
|
||||
let isPrimary = (monitor.x == primary.x &&
|
||||
monitor.y == primary.y &&
|
||||
monitor.width == primary.width &&
|
||||
monitor.height == primary.height);
|
||||
|
||||
let cornerX = monitor.x;
|
||||
let cornerY = monitor.y;
|
||||
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
|
||||
corner.actor.set_position(monitor.x + monitor.width, monitor.y);
|
||||
cornerX += monitor.width;
|
||||
|
||||
|
||||
let haveTopLeftCorner = true;
|
||||
|
||||
/* Check if we have a top left (right for RTL) corner.
|
||||
* I.e. if there is no monitor directly above or to the left(right) */
|
||||
let besideX;
|
||||
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
|
||||
besideX = monitor.x + 1;
|
||||
else
|
||||
corner.actor.set_position(monitor.x, monitor.y);
|
||||
besideX = cornerX - 1;
|
||||
let besideY = cornerY;
|
||||
let aboveX = cornerX;
|
||||
let aboveY = cornerY - 1;
|
||||
|
||||
for (let j = 0; j < monitors.length; j++) {
|
||||
if (i == j)
|
||||
continue;
|
||||
let otherMonitor = monitors[j];
|
||||
if (besideX >= otherMonitor.x &&
|
||||
besideX < otherMonitor.x + otherMonitor.width &&
|
||||
besideY >= otherMonitor.y &&
|
||||
besideY < otherMonitor.y + otherMonitor.height) {
|
||||
haveTopLeftCorner = false;
|
||||
break;
|
||||
}
|
||||
if (aboveX >= otherMonitor.x &&
|
||||
aboveX < otherMonitor.x + otherMonitor.width &&
|
||||
aboveY >= otherMonitor.y &&
|
||||
aboveY < otherMonitor.y + otherMonitor.height) {
|
||||
haveTopLeftCorner = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* We only want hot corners where there is a natural top-left
|
||||
* corner, and on the primary monitor */
|
||||
if (!isPrimary && !haveTopLeftCorner)
|
||||
continue;
|
||||
|
||||
let corner = new Panel.HotCorner();
|
||||
hotCorners.push(corner);
|
||||
corner.actor.set_position(cornerX, cornerY);
|
||||
if (isPrimary)
|
||||
panel.setHotCorner(corner);
|
||||
}
|
||||
|
@ -406,24 +406,23 @@ Notification.prototype = {
|
||||
this._bannerBodyMarkup = false;
|
||||
this._titleFitsInBannerMode = true;
|
||||
this._spacing = 0;
|
||||
this._scrollPolicy = Gtk.PolicyType.AUTOMATIC;
|
||||
|
||||
source.connect('destroy', Lang.bind(this,
|
||||
// Avoid passing 'source' as an argument to this.destroy()
|
||||
function () {
|
||||
this.destroy();
|
||||
function (source, reason) {
|
||||
this.destroy(reason);
|
||||
}));
|
||||
|
||||
this.actor = new St.Table({ name: 'notification',
|
||||
reactive: true });
|
||||
this.actor.connect('style-changed', Lang.bind(this, this._styleChanged));
|
||||
this.actor.connect('button-release-event', Lang.bind(this,
|
||||
function (actor, event) {
|
||||
if (!this._actionArea ||
|
||||
!this._actionArea.contains(event.get_source()))
|
||||
this._onClicked();
|
||||
}));
|
||||
this.actor = new St.Button();
|
||||
this.actor._delegate = this;
|
||||
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
this._table = new St.Table({ name: 'notification',
|
||||
reactive: true });
|
||||
this._table.connect('style-changed', Lang.bind(this, this._styleChanged));
|
||||
this.actor.set_child(this._table);
|
||||
|
||||
this._buttonFocusManager = St.FocusManager.get_for_stage(global.stage);
|
||||
|
||||
// The first line should have the title, followed by the
|
||||
@ -435,10 +434,10 @@ Notification.prototype = {
|
||||
this._bannerBox.connect('get-preferred-width', Lang.bind(this, this._bannerBoxGetPreferredWidth));
|
||||
this._bannerBox.connect('get-preferred-height', Lang.bind(this, this._bannerBoxGetPreferredHeight));
|
||||
this._bannerBox.connect('allocate', Lang.bind(this, this._bannerBoxAllocate));
|
||||
this.actor.add(this._bannerBox, { row: 0,
|
||||
col: 1,
|
||||
y_expand: false,
|
||||
y_fill: false });
|
||||
this._table.add(this._bannerBox, { row: 0,
|
||||
col: 1,
|
||||
y_expand: false,
|
||||
y_fill: false });
|
||||
|
||||
this._titleLabel = new St.Label();
|
||||
this._bannerBox.add_actor(this._titleLabel);
|
||||
@ -468,31 +467,39 @@ Notification.prototype = {
|
||||
|
||||
this._customContent = params.customContent;
|
||||
|
||||
let oldFocus = global.stage.key_focus;
|
||||
|
||||
if (this._icon)
|
||||
this._icon.destroy();
|
||||
// We always clear the content area if we don't have custom
|
||||
// content because it might contain the @banner that didn't
|
||||
// fit in the banner mode.
|
||||
if (this._scrollArea && (!this._customContent || params.clear)) {
|
||||
if (oldFocus && this._scrollArea.contains(oldFocus))
|
||||
this.actor.grab_key_focus();
|
||||
|
||||
this._scrollArea.destroy();
|
||||
this._scrollArea = null;
|
||||
this._contentArea = null;
|
||||
}
|
||||
if (this._actionArea && params.clear) {
|
||||
if (oldFocus && this._actionArea.contains(oldFocus))
|
||||
this.actor.grab_key_focus();
|
||||
|
||||
this._actionArea.destroy();
|
||||
this._actionArea = null;
|
||||
this._buttonBox = null;
|
||||
}
|
||||
if (!this._scrollArea && !this._actionArea)
|
||||
this.actor.remove_style_class_name('multi-line-notification');
|
||||
this._table.remove_style_class_name('multi-line-notification');
|
||||
|
||||
this._icon = params.icon || this.source.createNotificationIcon();
|
||||
this.actor.add(this._icon, { row: 0,
|
||||
col: 0,
|
||||
x_expand: false,
|
||||
y_expand: false,
|
||||
y_fill: false,
|
||||
y_align: St.Align.START });
|
||||
this._table.add(this._icon, { row: 0,
|
||||
col: 0,
|
||||
x_expand: false,
|
||||
y_expand: false,
|
||||
y_fill: false,
|
||||
y_align: St.Align.START });
|
||||
|
||||
title = title ? _fixMarkup(title.replace(/\n/g, ' '), params.titleMarkup) : '';
|
||||
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
|
||||
@ -518,13 +525,23 @@ Notification.prototype = {
|
||||
this._updated();
|
||||
},
|
||||
|
||||
setIconVisible: function(visible) {
|
||||
this._icon.visible = visible;
|
||||
},
|
||||
|
||||
enableScrolling: function(enableScrolling) {
|
||||
this._scrollPolicy = enableScrolling ? Gtk.PolicyType.AUTOMATIC : Gtk.PolicyType.NEVER;
|
||||
if (this._scrollArea)
|
||||
this._scrollArea.vscrollbar_policy = this._scrollPolicy;
|
||||
},
|
||||
|
||||
_createScrollArea: function() {
|
||||
this.actor.add_style_class_name('multi-line-notification');
|
||||
this._table.add_style_class_name('multi-line-notification');
|
||||
this._scrollArea = new St.ScrollView({ name: 'notification-scrollview',
|
||||
vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
|
||||
vscrollbar_policy: this._scrollPolicy,
|
||||
hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||
vfade: true });
|
||||
this.actor.add(this._scrollArea, { row: 1, col: 1 });
|
||||
this._table.add(this._scrollArea, { row: 1, col: 1 });
|
||||
this._contentArea = new St.BoxLayout({ name: 'notification-body',
|
||||
vertical: true });
|
||||
this._scrollArea.add_actor(this._contentArea);
|
||||
@ -603,8 +620,8 @@ Notification.prototype = {
|
||||
props.row = 2;
|
||||
props.col = 1;
|
||||
|
||||
this.actor.add_style_class_name('multi-line-notification');
|
||||
this.actor.add(this._actionArea, props);
|
||||
this._table.add_style_class_name('multi-line-notification');
|
||||
this._table.add(this._actionArea, props);
|
||||
this._updated();
|
||||
},
|
||||
|
||||
@ -665,7 +682,7 @@ Notification.prototype = {
|
||||
},
|
||||
|
||||
_styleChanged: function() {
|
||||
this._spacing = this.actor.get_theme_node().get_length('spacing-columns');
|
||||
this._spacing = this._table.get_theme_node().get_length('spacing-columns');
|
||||
},
|
||||
|
||||
_bannerBoxGetPreferredWidth: function(actor, forHeight, alloc) {
|
||||
@ -710,7 +727,7 @@ Notification.prototype = {
|
||||
// Make _bannerLabel visible if the entire notification
|
||||
// fits on one line, or if the notification is currently
|
||||
// unexpanded and only showing one line anyway.
|
||||
if (!this.expanded || (bannerFits && this.actor.row_count == 1))
|
||||
if (!this.expanded || (bannerFits && this._table.row_count == 1))
|
||||
this._bannerLabel.opacity = 255;
|
||||
}
|
||||
|
||||
@ -722,7 +739,7 @@ Notification.prototype = {
|
||||
function() {
|
||||
this._addBannerBody();
|
||||
if (!this._titleFitsInBannerMode)
|
||||
this.actor.add_style_class_name('multi-line-notification');
|
||||
this._table.add_style_class_name('multi-line-notification');
|
||||
this._updated();
|
||||
return false;
|
||||
}));
|
||||
@ -743,7 +760,7 @@ Notification.prototype = {
|
||||
this._titleLabel.clutter_text.line_wrap = true;
|
||||
this._titleLabel.clutter_text.line_wrap_mode = Pango.WrapMode.WORD_CHAR;
|
||||
this._titleLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
} else if (this.actor.row_count > 1 && this._bannerLabel.opacity != 0) {
|
||||
} else if (this._table.row_count > 1 && this._bannerLabel.opacity != 0) {
|
||||
// We always hide the banner if the notification has additional content.
|
||||
//
|
||||
// We don't need to wrap the banner that doesn't fit the way we wrap the
|
||||
@ -808,6 +825,7 @@ Notification.prototype = {
|
||||
destroy: function(reason) {
|
||||
this._destroyedReason = reason;
|
||||
this.actor.destroy();
|
||||
this.actor._delegate = null;
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(Notification.prototype);
|
||||
@ -822,9 +840,13 @@ Source.prototype = {
|
||||
_init: function(title) {
|
||||
this.title = title;
|
||||
this._iconBin = new St.Bin({ width: this.ICON_SIZE,
|
||||
height: this.ICON_SIZE });
|
||||
height: this.ICON_SIZE,
|
||||
x_fill: true,
|
||||
y_fill: true });
|
||||
this.isTransient = false;
|
||||
this.isChat = false;
|
||||
|
||||
this.notifications = [];
|
||||
},
|
||||
|
||||
setTransient: function(isTransient) {
|
||||
@ -844,30 +866,40 @@ Source.prototype = {
|
||||
return this._iconBin;
|
||||
},
|
||||
|
||||
notify: function(notification) {
|
||||
if (this.notification) {
|
||||
this.notification.disconnect(this._notificationClickedId);
|
||||
this.notification.disconnect(this._notificationDestroyedId);
|
||||
pushNotification: function(notification) {
|
||||
if (this.notifications.indexOf(notification) < 0) {
|
||||
this.notifications.push(notification);
|
||||
this.emit('notification-added', notification);
|
||||
}
|
||||
|
||||
this.notification = notification;
|
||||
|
||||
this._notificationClickedId = notification.connect('clicked', Lang.bind(this, this.open));
|
||||
this._notificationDestroyedId = notification.connect('destroy', Lang.bind(this,
|
||||
notification.connect('clicked', Lang.bind(this, this.open));
|
||||
notification.connect('destroy', Lang.bind(this,
|
||||
function () {
|
||||
if (this.notification == notification) {
|
||||
this.notification = null;
|
||||
this._notificationDestroyedId = 0;
|
||||
this._notificationClickedId = 0;
|
||||
this._notificationRemoved();
|
||||
}
|
||||
}));
|
||||
let index = this.notifications.indexOf(notification);
|
||||
if (index < 0)
|
||||
return;
|
||||
|
||||
this.notifications.splice(index, 1);
|
||||
if (this.notifications.length == 0)
|
||||
this._lastNotificationRemoved();
|
||||
}));
|
||||
},
|
||||
|
||||
notify: function(notification) {
|
||||
this.pushNotification(notification);
|
||||
this.emit('notify', notification);
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
this.emit('destroy');
|
||||
destroy: function(reason) {
|
||||
this.emit('destroy', reason);
|
||||
},
|
||||
|
||||
// A subclass can redefine this to "steal" clicks from the
|
||||
// summaryitem; Use Clutter.get_current_event() to get the
|
||||
// details, return true to prevent the default handling from
|
||||
// ocurring.
|
||||
handleSummaryClick: function() {
|
||||
return false;
|
||||
},
|
||||
|
||||
//// Protected methods ////
|
||||
@ -883,8 +915,14 @@ Source.prototype = {
|
||||
open: function(notification) {
|
||||
},
|
||||
|
||||
destroyNonResidentNotifications: function() {
|
||||
for (let i = this.notifications.length - 1; i >= 0; i--)
|
||||
if (!this.notifications[i].resident)
|
||||
this.notifications[i].destroy();
|
||||
},
|
||||
|
||||
// Default implementation is to destroy this source, but subclasses can override
|
||||
_notificationRemoved: function() {
|
||||
_lastNotificationRemoved: function() {
|
||||
this.destroy();
|
||||
}
|
||||
};
|
||||
@ -897,8 +935,12 @@ function SummaryItem(source) {
|
||||
SummaryItem.prototype = {
|
||||
_init: function(source) {
|
||||
this.source = source;
|
||||
this.source.connect('notification-added', Lang.bind(this, this._notificationAddedToSource));
|
||||
|
||||
this.actor = new St.Button({ style_class: 'summary-source-button',
|
||||
y_fill: true,
|
||||
reactive: true,
|
||||
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO | St.ButtonMask.THREE,
|
||||
track_hover: true });
|
||||
|
||||
this._sourceBox = new St.BoxLayout({ style_class: 'summary-source' });
|
||||
@ -913,9 +955,30 @@ SummaryItem.prototype = {
|
||||
this._sourceTitleBin.child = this._sourceTitle;
|
||||
this._sourceTitleBin.width = 0;
|
||||
|
||||
this._sourceBox.add_actor(this._sourceIcon);
|
||||
this._sourceBox.add_actor(this._sourceTitleBin, { expand: true });
|
||||
this._sourceBox.add(this._sourceIcon, { y_fill: false });
|
||||
this._sourceBox.add(this._sourceTitleBin, { expand: true, y_fill: false });
|
||||
this.actor.child = this._sourceBox;
|
||||
|
||||
this.notificationStackView = new St.ScrollView({ name: source.isChat ? '' : 'summary-notification-stack-scrollview',
|
||||
vscrollbar_policy: source.isChat ? Gtk.PolicyType.NEVER : Gtk.PolicyType.AUTOMATIC,
|
||||
hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||
vfade: true });
|
||||
this.notificationStack = new St.BoxLayout({ name: 'summary-notification-stack',
|
||||
vertical: true });
|
||||
this.notificationStackView.add_actor(this.notificationStack);
|
||||
this._notificationExpandedIds = [];
|
||||
this._notificationDoneDisplayingIds = [];
|
||||
this._notificationDestroyedIds = [];
|
||||
|
||||
this._oldMaxScrollAdjustment = 0;
|
||||
|
||||
this.notificationStackView.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
|
||||
let currentValue = adjustment.value + adjustment.page_size;
|
||||
if (currentValue == this._oldMaxScrollAdjustment)
|
||||
this.scrollTo(St.Side.BOTTOM);
|
||||
this._oldMaxScrollAdjustment = adjustment.upper;
|
||||
}));
|
||||
|
||||
this.rightClickMenu = new St.BoxLayout({ name: 'summary-right-click-menu',
|
||||
vertical: true });
|
||||
|
||||
@ -924,14 +987,14 @@ SummaryItem.prototype = {
|
||||
item = new PopupMenu.PopupMenuItem(_("Open"));
|
||||
item.connect('activate', Lang.bind(this, function() {
|
||||
source.open();
|
||||
this.emit('right-click-menu-done-displaying');
|
||||
this.emit('done-displaying-content');
|
||||
}));
|
||||
this.rightClickMenu.add(item.actor);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Remove"));
|
||||
item.connect('activate', Lang.bind(this, function() {
|
||||
source.destroy();
|
||||
this.emit('right-click-menu-done-displaying');
|
||||
this.emit('done-displaying-content');
|
||||
}));
|
||||
this.rightClickMenu.add(item.actor);
|
||||
|
||||
@ -961,6 +1024,87 @@ SummaryItem.prototype = {
|
||||
|
||||
setEllipsization: function(mode) {
|
||||
this._sourceTitle.clutter_text.ellipsize = mode;
|
||||
},
|
||||
|
||||
prepareNotificationStackForShowing: function() {
|
||||
if (this.notificationStack.get_children().length > 0)
|
||||
return;
|
||||
|
||||
for (let i = 0; i < this.source.notifications.length; i++) {
|
||||
this._appendNotificationToStack(this.source.notifications[i]);
|
||||
}
|
||||
},
|
||||
|
||||
doneShowingNotificationStack: function() {
|
||||
let notificationActors = this.notificationStack.get_children();
|
||||
for (let i = 0; i < notificationActors.length; i++) {
|
||||
notificationActors[i]._delegate.collapseCompleted();
|
||||
notificationActors[i]._delegate.disconnect(this._notificationExpandedIds[i]);
|
||||
notificationActors[i]._delegate.disconnect(this._notificationDoneDisplayingIds[i]);
|
||||
notificationActors[i]._delegate.disconnect(this._notificationDestroyedIds[i]);
|
||||
this.notificationStack.remove_actor(notificationActors[i]);
|
||||
notificationActors[i]._delegate.setIconVisible(true);
|
||||
notificationActors[i]._delegate.enableScrolling(true);
|
||||
}
|
||||
this._notificationExpandedIds = [];
|
||||
this._notificationDoneDisplayingIds = [];
|
||||
this._notificationDestroyedIds = [];
|
||||
},
|
||||
|
||||
_notificationAddedToSource: function(source, notification) {
|
||||
if (this.notificationStack.mapped)
|
||||
this._appendNotificationToStack(notification);
|
||||
},
|
||||
|
||||
_appendNotificationToStack: function(notification) {
|
||||
let notificationExpandedId = notification.connect('expanded', Lang.bind(this, this._contentUpdated));
|
||||
this._notificationExpandedIds.push(notificationExpandedId);
|
||||
let notificationDoneDisplayingId = notification.connect('done-displaying', Lang.bind(this, this._notificationDoneDisplaying));
|
||||
this._notificationDoneDisplayingIds.push(notificationDoneDisplayingId);
|
||||
let notificationDestroyedId = notification.connect('destroy', Lang.bind(this, this._notificationDestroyed));
|
||||
this._notificationDestroyedIds.push(notificationDestroyedId);
|
||||
if (!this.source.isChat)
|
||||
notification.enableScrolling(false);
|
||||
if (this.notificationStack.get_children().length > 0)
|
||||
notification.setIconVisible(false);
|
||||
this.notificationStack.add(notification.actor);
|
||||
notification.expand(false);
|
||||
},
|
||||
|
||||
// scrollTo:
|
||||
// @side: St.Side.TOP or St.Side.BOTTOM
|
||||
//
|
||||
// Scrolls the notifiction stack to the indicated edge
|
||||
scrollTo: function(side) {
|
||||
let adjustment = this.notificationStackView.vscroll.adjustment;
|
||||
if (side == St.Side.TOP)
|
||||
adjustment.value = adjustment.lower;
|
||||
else if (side == St.Side.BOTTOM)
|
||||
adjustment.value = adjustment.upper;
|
||||
},
|
||||
|
||||
_contentUpdated: function() {
|
||||
this.emit('content-updated');
|
||||
},
|
||||
|
||||
_notificationDoneDisplaying: function() {
|
||||
this.emit('done-displaying-content');
|
||||
},
|
||||
|
||||
_notificationDestroyed: function(notification) {
|
||||
let index = this.notificationStack.get_children().indexOf(notification.actor);
|
||||
if (index >= 0) {
|
||||
notification.disconnect(this._notificationExpandedIds[index]);
|
||||
this._notificationExpandedIds.splice(index, 1);
|
||||
notification.disconnect(this._notificationDoneDisplayingIds[index]);
|
||||
this._notificationDoneDisplayingIds.splice(index, 1);
|
||||
notification.disconnect(this._notificationDestroyedIds[index]);
|
||||
this._notificationDestroyedIds.splice(index, 1);
|
||||
this.notificationStack.remove_actor(notification.actor);
|
||||
this._contentUpdated();
|
||||
}
|
||||
if (this.notificationStack.get_children().length > 0)
|
||||
this.notificationStack.get_children()[0]._delegate.setIconVisible(true);
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(SummaryItem.prototype);
|
||||
@ -1009,14 +1153,15 @@ MessageTray.prototype = {
|
||||
this._summaryBoxPointer.actor.lower_bottom();
|
||||
this._summaryBoxPointer.actor.hide();
|
||||
|
||||
this._summaryNotification = null;
|
||||
this._summaryNotificationClickedId = 0;
|
||||
this._summaryRightClickMenuClickedId = 0;
|
||||
this._summaryBoxPointerItem = null;
|
||||
this._summaryBoxPointerContentUpdatedId = 0;
|
||||
this._summaryBoxPointerDoneDisplayingId = 0;
|
||||
this._clickedSummaryItem = null;
|
||||
this._clickedSummaryItemMouseButton = -1;
|
||||
this._clickedSummaryItemAllocationChangedId = 0;
|
||||
this._expandedSummaryItem = null;
|
||||
this._summaryItemTitleWidth = 0;
|
||||
this._pointerBarrier = 0;
|
||||
|
||||
// To simplify the summary item animation code, we pretend
|
||||
// that there's an invisible SummaryItem to the left of the
|
||||
@ -1051,18 +1196,17 @@ MessageTray.prototype = {
|
||||
this._notificationTimeoutId = 0;
|
||||
this._notificationExpandedId = 0;
|
||||
this._summaryBoxPointerState = State.HIDDEN;
|
||||
this._summaryNotificationTimeoutId = 0;
|
||||
this._summaryNotificationExpandedId = 0;
|
||||
this._summaryBoxPointerTimeoutId = 0;
|
||||
this._overviewVisible = Main.overview.visible;
|
||||
this._notificationRemoved = false;
|
||||
this._reNotifyWithSummaryNotificationAfterHide = false;
|
||||
this._reNotifyAfterHideNotification = null;
|
||||
|
||||
Main.chrome.addActor(this.actor, { affectsStruts: false,
|
||||
visibleInOverview: true });
|
||||
Main.chrome.trackActor(this._notificationBin);
|
||||
Main.chrome.trackActor(this._summaryBoxPointer.actor);
|
||||
|
||||
global.gdk_screen.connect('monitors-changed', Lang.bind(this, this._setSizePosition));
|
||||
global.screen.connect('monitors-changed', Lang.bind(this, this._setSizePosition));
|
||||
|
||||
this._setSizePosition();
|
||||
|
||||
@ -1106,6 +1250,15 @@ MessageTray.prototype = {
|
||||
this._notificationBin.width = primary.width;
|
||||
this._summaryBin.x = 0;
|
||||
this._summaryBin.width = primary.width;
|
||||
|
||||
if (this._pointerBarrier)
|
||||
global.destroy_pointer_barrier(this._pointerBarrier);
|
||||
this._pointerBarrier =
|
||||
global.create_pointer_barrier(primary.x + primary.width, primary.y + primary.height - this.actor.height,
|
||||
primary.x + primary.width, primary.y + primary.height,
|
||||
4 /* BarrierNegativeX */);
|
||||
|
||||
|
||||
},
|
||||
|
||||
contains: function(source) {
|
||||
@ -1161,9 +1314,9 @@ MessageTray.prototype = {
|
||||
this._onSummaryItemHoverChanged(summaryItem);
|
||||
}));
|
||||
|
||||
summaryItem.actor.connect('button-press-event', Lang.bind(this,
|
||||
function (actor, event) {
|
||||
this._onSummaryItemClicked(summaryItem, event);
|
||||
summaryItem.actor.connect('clicked', Lang.bind(this,
|
||||
function (actor, button) {
|
||||
this._onSummaryItemClicked(summaryItem, button);
|
||||
}));
|
||||
|
||||
source.connect('destroy', Lang.bind(this, this._onSourceDestroy));
|
||||
@ -1227,13 +1380,6 @@ MessageTray.prototype = {
|
||||
|
||||
if (needUpdate);
|
||||
this._updateState();
|
||||
|
||||
// remove all notifications with this source from the queue
|
||||
let newNotificationQueue = [];
|
||||
for (let i = this._notificationQueue.length - 1; i >= 0; i--) {
|
||||
if (this._notificationQueue[i].source == source)
|
||||
this._notificationQueue[i].destroy();
|
||||
}
|
||||
},
|
||||
|
||||
_onNotificationDestroy: function(notification) {
|
||||
@ -1262,14 +1408,18 @@ MessageTray.prototype = {
|
||||
},
|
||||
|
||||
_onNotify: function(source, notification) {
|
||||
if (notification == this._summaryNotification) {
|
||||
if (!this._summaryNotificationExpandedId)
|
||||
// We must be in the process of hiding the summary notification.
|
||||
// If the summary notification is updated while it is being
|
||||
// hidden, we show the update as a new notification. However,
|
||||
// we must first wait till the hide is complete and the
|
||||
// notification actor is not part of the stage.
|
||||
this._reNotifyWithSummaryNotificationAfterHide = true;
|
||||
if (this._summaryBoxPointerItem && this._summaryBoxPointerItem.source == source) {
|
||||
if (this._summaryBoxPointerState == State.HIDING)
|
||||
// We are in the process of hiding the summary box pointer.
|
||||
// If there is an update for one of the notifications or
|
||||
// a new notification to be added to the notification stack
|
||||
// while it is in the process of being hidden, we show it as
|
||||
// a new notification. However, we first wait till the hide
|
||||
// is complete. This is especially important if one of the
|
||||
// notifications in the stack was updated because we will
|
||||
// need to be able to re-parent its actor to a different
|
||||
// part of the stage.
|
||||
this._reNotifyAfterHideNotification = notification;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1308,12 +1458,18 @@ MessageTray.prototype = {
|
||||
// Turn off ellipsization for the previously expanded item that is
|
||||
// collapsing and for the item that is expanding because it looks
|
||||
// better that way.
|
||||
if (this._expandedSummaryItem)
|
||||
if (this._expandedSummaryItem) {
|
||||
// Ideally, we would remove 'expanded' pseudo class when the item
|
||||
// is done collapsing, but we don't track when that happens.
|
||||
this._expandedSummaryItem.actor.remove_style_pseudo_class('expanded');
|
||||
this._expandedSummaryItem.setEllipsization(Pango.EllipsizeMode.NONE);
|
||||
}
|
||||
|
||||
this._expandedSummaryItem = summaryItem;
|
||||
if (this._expandedSummaryItem)
|
||||
if (this._expandedSummaryItem) {
|
||||
this._expandedSummaryItem.actor.add_style_pseudo_class('expanded');
|
||||
this._expandedSummaryItem.setEllipsization(Pango.EllipsizeMode.NONE);
|
||||
}
|
||||
|
||||
// We tween on a "_expandedSummaryItemTitleWidth" pseudo-property
|
||||
// that represents the current title width of the
|
||||
@ -1335,6 +1491,8 @@ MessageTray.prototype = {
|
||||
},
|
||||
|
||||
set _expandedSummaryItemTitleWidth(expansion) {
|
||||
expansion = Math.round(expansion);
|
||||
|
||||
// Expand the expanding item to its new width
|
||||
if (this._expandedSummaryItem)
|
||||
this._expandedSummaryItem.setTitleWidth(expansion);
|
||||
@ -1365,11 +1523,32 @@ MessageTray.prototype = {
|
||||
if (this._summaryItems[i] == this._expandedSummaryItem)
|
||||
continue;
|
||||
|
||||
let width = this._summaryItems[i].getTitleWidth();
|
||||
this._summaryItems[i].setTitleWidth(width * shrinkage);
|
||||
let oldWidth = this._summaryItems[i].getTitleWidth();
|
||||
let newWidth = Math.floor(oldWidth * shrinkage);
|
||||
excess -= newWidth;
|
||||
this._summaryItems[i].setTitleWidth(newWidth);
|
||||
}
|
||||
if (this._expandedSummaryItem) {
|
||||
let oldWidth = this._imaginarySummaryItemTitleWidth;
|
||||
let newWidth = Math.floor(oldWidth * shrinkage);
|
||||
excess -= newWidth;
|
||||
this._imaginarySummaryItemTitleWidth = newWidth;
|
||||
}
|
||||
|
||||
// If the tray as a whole is fully-expanded, make sure the
|
||||
// left edge doesn't wobble during animation due to rounding.
|
||||
if (this._imaginarySummaryItemTitleWidth == 0 && excess != 0) {
|
||||
for (let i = 0; i < this._summaryItems.length; i++) {
|
||||
if (this._summaryItems[i] == this._expandedSummaryItem)
|
||||
continue;
|
||||
|
||||
let oldWidth = this._summaryItems[i].getTitleWidth();
|
||||
if (oldWidth != 0) {
|
||||
this._summaryItems[i].setTitleWidth (oldWidth + excess);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this._expandedSummaryItem)
|
||||
this._imaginarySummaryItemTitleWidth *= shrinkage;
|
||||
},
|
||||
|
||||
_expandSummaryItemCompleted: function() {
|
||||
@ -1377,13 +1556,14 @@ MessageTray.prototype = {
|
||||
this._expandedSummaryItem.setEllipsization(Pango.EllipsizeMode.END);
|
||||
},
|
||||
|
||||
_onSummaryItemClicked: function(summaryItem, event) {
|
||||
let clickedButton = event.get_button();
|
||||
if (!this._clickedSummaryItem ||
|
||||
this._clickedSummaryItem != summaryItem ||
|
||||
this._clickedSummaryItemMouseButton != clickedButton) {
|
||||
_onSummaryItemClicked: function(summaryItem, button) {
|
||||
if (summaryItem.source.handleSummaryClick())
|
||||
this._unsetClickedSummaryItem();
|
||||
else if (!this._clickedSummaryItem ||
|
||||
this._clickedSummaryItem != summaryItem ||
|
||||
this._clickedSummaryItemMouseButton != button) {
|
||||
this._clickedSummaryItem = summaryItem;
|
||||
this._clickedSummaryItemMouseButton = clickedButton;
|
||||
this._clickedSummaryItemMouseButton = button;
|
||||
} else {
|
||||
this._unsetClickedSummaryItem();
|
||||
}
|
||||
@ -1519,14 +1699,15 @@ MessageTray.prototype = {
|
||||
// at the present time.
|
||||
_updateState: function() {
|
||||
// Notifications
|
||||
let notificationsPending = this._notificationQueue.length > 0 &&
|
||||
(!this._busy || this._notificationQueue[0].urgency == Urgency.CRITICAL);
|
||||
let notificationUrgent = this._notificationQueue.length > 0 && this._notificationQueue[0].urgency == Urgency.CRITICAL;
|
||||
let notificationsPending = this._notificationQueue.length > 0 && (!this._busy || notificationUrgent);
|
||||
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
|
||||
let notificationExpanded = this._notificationBin.y < 0;
|
||||
let notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked) || this._notificationRemoved;
|
||||
let canShowNotification = notificationsPending && this._summaryState == State.HIDDEN;
|
||||
|
||||
if (this._notificationState == State.HIDDEN) {
|
||||
if (notificationsPending)
|
||||
if (canShowNotification)
|
||||
this._showNotification();
|
||||
} else if (this._notificationState == State.SHOWN) {
|
||||
if (notificationExpired)
|
||||
@ -1548,7 +1729,11 @@ MessageTray.prototype = {
|
||||
this._notificationState == State.SHOWN);
|
||||
let notificationsDone = !notificationsVisible && !notificationsPending;
|
||||
|
||||
if (this._summaryState == State.HIDDEN) {
|
||||
let summaryOptionalInOverview = this._overviewVisible && !this._locked && !summaryHovered;
|
||||
let mustHideSummary = (notificationsPending && (notificationUrgent || summaryOptionalInOverview))
|
||||
|| notificationsVisible;
|
||||
|
||||
if (this._summaryState == State.HIDDEN && !mustHideSummary) {
|
||||
if (this._backFromAway) {
|
||||
// Immediately set this to false, so that we don't schedule a timeout later
|
||||
this._backFromAway = false;
|
||||
@ -1560,7 +1745,7 @@ MessageTray.prototype = {
|
||||
this._showSummary(0);
|
||||
}
|
||||
} else if (this._summaryState == State.SHOWN) {
|
||||
if (!summaryPinned)
|
||||
if (!summaryPinned || mustHideSummary)
|
||||
this._hideSummary();
|
||||
else if (summaryVisibleWithNoHover && !summaryNotificationIsForExpandedSummaryItem)
|
||||
// If we are hiding the summary, we'll collapse the expanded summary item when we are done
|
||||
@ -1575,18 +1760,21 @@ MessageTray.prototype = {
|
||||
let summarySourceIsMainNotificationSource = (haveClickedSummaryItem && this._notification &&
|
||||
this._clickedSummaryItem.source == this._notification.source);
|
||||
let canShowSummaryBoxPointer = this._summaryState == State.SHOWN;
|
||||
let wrongSummaryNotification = (this._clickedSummaryItemMouseButton == 1 &&
|
||||
this._summaryNotification != this._clickedSummaryItem.source.notification);
|
||||
// We only have sources with empty notification stacks for legacy tray icons. Currently, we never attempt
|
||||
// to show notifications for legacy tray icons, but this would be necessary if we did.
|
||||
let requestedNotificationStackIsEmpty = (this._clickedSummaryItemMouseButton == 1 && this._clickedSummaryItem.source.notifications.length == 0);
|
||||
let wrongSummaryNotificationStack = (this._clickedSummaryItemMouseButton == 1 &&
|
||||
this._summaryBoxPointer.bin.child != this._clickedSummaryItem.notificationStackView);
|
||||
let wrongSummaryRightClickMenu = (this._clickedSummaryItemMouseButton == 3 &&
|
||||
this._summaryBoxPointer.bin.child != this._clickedSummaryItem.rightClickMenu);
|
||||
let wrongSummaryBoxPointer = (haveClickedSummaryItem &&
|
||||
(wrongSummaryNotification || wrongSummaryRightClickMenu));
|
||||
(wrongSummaryNotificationStack || wrongSummaryRightClickMenu));
|
||||
|
||||
if (this._summaryBoxPointerState == State.HIDDEN) {
|
||||
if (haveClickedSummaryItem && !summarySourceIsMainNotificationSource && canShowSummaryBoxPointer)
|
||||
if (haveClickedSummaryItem && !summarySourceIsMainNotificationSource && canShowSummaryBoxPointer && !requestedNotificationStackIsEmpty)
|
||||
this._showSummaryBoxPointer();
|
||||
} else if (this._summaryBoxPointerState == State.SHOWN) {
|
||||
if (!haveClickedSummaryItem || !canShowSummaryBoxPointer || wrongSummaryBoxPointer)
|
||||
if (!haveClickedSummaryItem || !canShowSummaryBoxPointer || wrongSummaryBoxPointer || mustHideSummary)
|
||||
this._hideSummaryBoxPointer();
|
||||
}
|
||||
|
||||
@ -1841,38 +2029,33 @@ MessageTray.prototype = {
|
||||
},
|
||||
|
||||
_hideSummaryCompleted: function() {
|
||||
this._expandedSummaryItem = null;
|
||||
this._expandedSummaryItemTitleWidth = this._summaryItemTitleWidth;
|
||||
this._setExpandedSummaryItem(null);
|
||||
},
|
||||
|
||||
_showSummaryBoxPointer: function() {
|
||||
this._summaryBoxPointerItem = this._clickedSummaryItem;
|
||||
this._summaryBoxPointerContentUpdatedId = this._summaryBoxPointerItem.connect('content-updated',
|
||||
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||
this._summaryBoxPointerDoneDisplayingId = this._summaryBoxPointerItem.connect('done-displaying-content',
|
||||
Lang.bind(this, this._escapeTray));
|
||||
if (this._clickedSummaryItemMouseButton == 1) {
|
||||
let clickedSummaryItemNotification = this._clickedSummaryItem.source.notification;
|
||||
let index = this._notificationQueue.indexOf(clickedSummaryItemNotification);
|
||||
if (index != -1)
|
||||
this._notificationQueue.splice(index, 1);
|
||||
|
||||
this._summaryNotification = clickedSummaryItemNotification;
|
||||
this._summaryNotificationClickedId = this._summaryNotification.connect('done-displaying',
|
||||
Lang.bind(this, this._escapeTray));
|
||||
this._summaryBoxPointer.bin.child = this._summaryNotification.actor;
|
||||
if (!this._summaryNotificationExpandedId)
|
||||
this._summaryNotificationExpandedId = this._summaryNotification.connect('expanded',
|
||||
Lang.bind(this, this._onSummaryBoxPointerExpanded));
|
||||
this._summaryNotification.expand(false);
|
||||
this._notificationQueue = this._notificationQueue.filter( Lang.bind(this,
|
||||
function(notification) {
|
||||
return this._summaryBoxPointerItem.source != notification.source;
|
||||
}));
|
||||
this._summaryBoxPointerItem.prepareNotificationStackForShowing();
|
||||
this._summaryBoxPointer.bin.child = this._summaryBoxPointerItem.notificationStackView;
|
||||
this._summaryBoxPointerItem.scrollTo(St.Side.BOTTOM);
|
||||
} else if (this._clickedSummaryItemMouseButton == 3) {
|
||||
this._summaryRightClickMenuClickedId = this._clickedSummaryItem.connect('right-click-menu-done-displaying',
|
||||
Lang.bind(this, this._escapeTray));
|
||||
this._summaryBoxPointer.bin.child = this._clickedSummaryItem.rightClickMenu;
|
||||
}
|
||||
|
||||
this._focusGrabber.grabFocus(this._summaryBoxPointer.bin.child);
|
||||
|
||||
|
||||
this._clickedSummaryItemAllocationChangedId =
|
||||
this._clickedSummaryItem.actor.connect('allocation-changed',
|
||||
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||
// _clickedSummaryItem.actor can change absolute postiion without changing allocation
|
||||
// _clickedSummaryItem.actor can change absolute position without changing allocation
|
||||
this._summaryMotionId = this._summary.connect('allocation-changed',
|
||||
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||
|
||||
@ -1881,6 +2064,7 @@ MessageTray.prototype = {
|
||||
this._adjustSummaryBoxPointerPosition();
|
||||
|
||||
this._summaryBoxPointerState = State.SHOWING;
|
||||
this._clickedSummaryItem.actor.add_style_pseudo_class('selected');
|
||||
this._summaryBoxPointer.show(true, Lang.bind(this, function() {
|
||||
this._summaryBoxPointerState = State.SHOWN;
|
||||
}));
|
||||
@ -1902,24 +2086,13 @@ MessageTray.prototype = {
|
||||
this._summaryMotionId = 0;
|
||||
}
|
||||
|
||||
if (this._summaryRightClickMenuClickedId) {
|
||||
this._clickedSummaryItem.disconnect(this._summaryRightClickMenuClickedId);
|
||||
this._summaryRightClickMenuClickedId = 0;
|
||||
}
|
||||
|
||||
if (this._clickedSummaryItem)
|
||||
this._clickedSummaryItem.actor.remove_style_pseudo_class('selected');
|
||||
this._clickedSummaryItem = null;
|
||||
this._clickedSummaryItemMouseButton = -1;
|
||||
},
|
||||
|
||||
_onSummaryBoxPointerExpanded: function() {
|
||||
this._adjustSummaryBoxPointerPosition();
|
||||
},
|
||||
|
||||
_hideSummaryBoxPointer: function() {
|
||||
if (this._summaryNotificationExpandedId) {
|
||||
this._summaryNotification.disconnect(this._summaryNotificationExpandedId);
|
||||
this._summaryNotificationExpandedId = 0;
|
||||
}
|
||||
// Unset this._clickedSummaryItem if we are no longer showing the summary
|
||||
if (this._summaryState != State.SHOWN)
|
||||
this._unsetClickedSummaryItem();
|
||||
@ -1930,21 +2103,32 @@ MessageTray.prototype = {
|
||||
},
|
||||
|
||||
_hideSummaryBoxPointerCompleted: function() {
|
||||
let doneShowingNotificationStack = (this._summaryBoxPointer.bin.child == this._summaryBoxPointerItem.notificationStackView);
|
||||
|
||||
this._summaryBoxPointerState = State.HIDDEN;
|
||||
this._summaryBoxPointer.bin.child = null;
|
||||
if (this._summaryNotification != null) {
|
||||
this._summaryNotification.collapseCompleted();
|
||||
this._summaryNotification.disconnect(this._summaryNotificationClickedId);
|
||||
this._summaryNotificationClickedId = 0;
|
||||
let summaryNotification = this._summaryNotification;
|
||||
this._summaryNotification = null;
|
||||
if (summaryNotification.isTransient && !this._reNotifyWithSummaryNotificationAfterHide)
|
||||
summaryNotification.destroy(NotificationDestroyedReason.EXPIRED);
|
||||
if (this._reNotifyWithSummaryNotificationAfterHide) {
|
||||
this._onNotify(summaryNotification.source, summaryNotification);
|
||||
this._reNotifyWithSummaryNotificationAfterHide = false;
|
||||
this._summaryBoxPointerItem.disconnect(this._summaryBoxPointerContentUpdatedId);
|
||||
this._summaryBoxPointerContentUpdatedId = 0;
|
||||
this._summaryBoxPointerItem.disconnect(this._summaryBoxPointerDoneDisplayingId);
|
||||
this._summaryBoxPointerDoneDisplayingId = 0;
|
||||
|
||||
let sourceNotificationStackDoneShowing = null;
|
||||
if (doneShowingNotificationStack) {
|
||||
this._summaryBoxPointerItem.doneShowingNotificationStack();
|
||||
sourceNotificationStackDoneShowing = this._summaryBoxPointerItem.source;
|
||||
}
|
||||
|
||||
this._summaryBoxPointerItem = null;
|
||||
|
||||
if (sourceNotificationStackDoneShowing) {
|
||||
if (sourceNotificationStackDoneShowing.isTransient && !this._reNotifyAfterHideNotification)
|
||||
sourceNotificationStackDoneShowing.destroy(NotificationDestroyedReason.EXPIRED);
|
||||
if (this._reNotifyAfterHideNotification) {
|
||||
this._onNotify(this._reNotifyAfterHideNotification.source, this._reNotifyAfterHideNotification);
|
||||
this._reNotifyAfterHideNotification = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (this._clickedSummaryItem)
|
||||
this._updateState();
|
||||
}
|
||||
|
@ -39,13 +39,20 @@ ModalDialog.prototype = {
|
||||
params = Params.parse(params, { styleClass: null });
|
||||
|
||||
this.state = State.CLOSED;
|
||||
this._hasModal = false;
|
||||
|
||||
this._group = new St.Group({ visible: false,
|
||||
x: 0,
|
||||
y: 0 });
|
||||
Main.uiGroup.add_actor(this._group);
|
||||
|
||||
let constraint = new Clutter.BindConstraint({ source: global.stage,
|
||||
coordinate: Clutter.BindCoordinate.POSITION | Clutter.BindCoordinate.SIZE });
|
||||
this._group.add_constraint(constraint);
|
||||
|
||||
global.focus_manager.add_group(this._group);
|
||||
this._initialKeyFocus = this._group;
|
||||
this._savedKeyFocus = null;
|
||||
|
||||
this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
|
||||
|
||||
@ -60,12 +67,18 @@ ModalDialog.prototype = {
|
||||
this._group.add_actor(this._backgroundBin);
|
||||
this._lightbox.highlight(this._backgroundBin);
|
||||
|
||||
this._backgroundStack = new Shell.Stack();
|
||||
this._backgroundBin.child = this._backgroundStack;
|
||||
|
||||
this._eventBlocker = new Clutter.Group({ reactive: true });
|
||||
this._backgroundStack.add_actor(this._eventBlocker);
|
||||
|
||||
this._dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
|
||||
vertical: true });
|
||||
if (params.styleClass != null) {
|
||||
this._dialogLayout.add_style_class_name(params.styleClass);
|
||||
}
|
||||
this._backgroundBin.child = this._dialogLayout;
|
||||
this._backgroundStack.add_actor(this._dialogLayout);
|
||||
|
||||
this.contentLayout = new St.BoxLayout({ vertical: true });
|
||||
this._dialogLayout.add(this.contentLayout,
|
||||
@ -74,8 +87,9 @@ ModalDialog.prototype = {
|
||||
x_align: St.Align.MIDDLE,
|
||||
y_align: St.Align.START });
|
||||
|
||||
this._buttonLayout = new St.BoxLayout({ opacity: 220,
|
||||
vertical: false });
|
||||
this._buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box',
|
||||
opacity: 220,
|
||||
vertical: false });
|
||||
this._dialogLayout.add(this._buttonLayout,
|
||||
{ expand: true,
|
||||
x_align: St.Align.MIDDLE,
|
||||
@ -154,22 +168,23 @@ ModalDialog.prototype = {
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
this._initialKeyFocus.grab_key_focus();
|
||||
this.state = State.OPENED;
|
||||
this.emit('opened');
|
||||
}),
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
setInitialKeyFocus: function(actor) {
|
||||
this._initialKeyFocus = actor;
|
||||
},
|
||||
|
||||
open: function(timestamp) {
|
||||
if (this.state == State.OPENED || this.state == State.OPENING)
|
||||
return true;
|
||||
|
||||
if (!Main.pushModal(this._group, timestamp))
|
||||
if (!this.pushModal(timestamp))
|
||||
return false;
|
||||
|
||||
global.stage.set_key_focus(this._group);
|
||||
|
||||
this._fadeOpen();
|
||||
return true;
|
||||
},
|
||||
@ -178,14 +193,8 @@ ModalDialog.prototype = {
|
||||
if (this.state == State.CLOSED || this.state == State.CLOSING)
|
||||
return;
|
||||
|
||||
let needsPopModal;
|
||||
|
||||
if (this.state == State.OPENED || this.state == State.OPENING)
|
||||
needsPopModal = true;
|
||||
else
|
||||
needsPopModal = false;
|
||||
|
||||
this.state = State.CLOSING;
|
||||
this.popModal(timestamp);
|
||||
|
||||
Tweener.addTween(this._group,
|
||||
{ opacity: 0,
|
||||
@ -195,13 +204,46 @@ ModalDialog.prototype = {
|
||||
function() {
|
||||
this.state = State.CLOSED;
|
||||
this._group.hide();
|
||||
|
||||
if (needsPopModal)
|
||||
Main.popModal(this._group, timestamp);
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
// Drop modal status without closing the dialog; this makes the
|
||||
// dialog insensitive as well, so it needs to be followed shortly
|
||||
// by either a close() or a pushModal()
|
||||
popModal: function(timestamp) {
|
||||
if (!this._hasModal)
|
||||
return;
|
||||
|
||||
let focus = global.stage.key_focus;
|
||||
if (focus && this._group.contains(focus))
|
||||
this._savedKeyFocus = focus;
|
||||
else
|
||||
this._savedKeyFocus = null;
|
||||
Main.popModal(this._group, timestamp);
|
||||
global.gdk_screen.get_display().sync();
|
||||
this._hasModal = false;
|
||||
|
||||
this._eventBlocker.raise_top();
|
||||
},
|
||||
|
||||
pushModal: function (timestamp) {
|
||||
if (this._hasModal)
|
||||
return true;
|
||||
if (!Main.pushModal(this._group, timestamp))
|
||||
return false;
|
||||
|
||||
this._hasModal = true;
|
||||
if (this._savedKeyFocus) {
|
||||
this._savedKeyFocus.grab_key_focus();
|
||||
this._savedKeyFocus = null;
|
||||
} else
|
||||
this._initialKeyFocus.grab_key_focus();
|
||||
|
||||
this._eventBlocker.lower_bottom();
|
||||
return true;
|
||||
},
|
||||
|
||||
// This method is like close, but fades the dialog out much slower,
|
||||
// and leaves the lightbox in place. Once in the faded out state,
|
||||
// the dialog can be brought back by an open call, or the lightbox
|
||||
@ -220,6 +262,7 @@ ModalDialog.prototype = {
|
||||
if (this.state == State.FADED_OUT)
|
||||
return;
|
||||
|
||||
this.popModal(timestamp);
|
||||
Tweener.addTween(this._dialogLayout,
|
||||
{ opacity: 0,
|
||||
time: FADE_OUT_DIALOG_TIME,
|
||||
@ -227,7 +270,6 @@ ModalDialog.prototype = {
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
this.state = State.FADED_OUT;
|
||||
Main.popModal(this._group, timestamp);
|
||||
})
|
||||
});
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const DBus = imports.dbus;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Lang = imports.lang;
|
||||
@ -345,7 +346,7 @@ NotificationDaemon.prototype = {
|
||||
notification.setTransient(hints['transient'] == true);
|
||||
|
||||
let sourceIconActor = source.useNotificationIcon ? this._iconForNotificationData(icon, hints, source.ICON_SIZE) : null;
|
||||
source.notify(notification, sourceIconActor);
|
||||
source.processNotification(notification, sourceIconActor);
|
||||
},
|
||||
|
||||
CloseNotification: function(id) {
|
||||
@ -389,8 +390,7 @@ NotificationDaemon.prototype = {
|
||||
for (let id in this._sources) {
|
||||
let source = this._sources[id];
|
||||
if (source.app == tracker.focus_app) {
|
||||
if (source.notification && !source.notification.resident)
|
||||
source.notification.destroy();
|
||||
source.destroyNonResidentNotifications();
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -441,15 +441,43 @@ Source.prototype = {
|
||||
this.title = this.app.get_name();
|
||||
else
|
||||
this.useNotificationIcon = true;
|
||||
this._isTrayIcon = false;
|
||||
this._trayIcon = null;
|
||||
},
|
||||
|
||||
notify: function(notification, icon) {
|
||||
processNotification: function(notification, icon) {
|
||||
if (!this.app)
|
||||
this._setApp();
|
||||
if (!this.app && icon)
|
||||
this._setSummaryIcon(icon);
|
||||
MessageTray.Source.prototype.notify.call(this, notification);
|
||||
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
if (notification.resident && this.app && tracker.focus_app == this.app)
|
||||
this.pushNotification(notification);
|
||||
else
|
||||
this.notify(notification);
|
||||
},
|
||||
|
||||
handleSummaryClick: function() {
|
||||
if (!this._trayIcon)
|
||||
return false;
|
||||
|
||||
let event = Clutter.get_current_event();
|
||||
if (event.type() != Clutter.EventType.BUTTON_RELEASE)
|
||||
return false;
|
||||
|
||||
if (Main.overview.visible) {
|
||||
// We can't just connect to Main.overview's 'hidden' signal,
|
||||
// because it's emitted *before* it calls popModal()...
|
||||
let id = global.connect('notify::stage-input-mode', Lang.bind(this,
|
||||
function () {
|
||||
global.disconnect(id);
|
||||
this._trayIcon.click(event);
|
||||
}));
|
||||
Main.overview.hide();
|
||||
} else {
|
||||
this._trayIcon.click(event);
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
_setApp: function() {
|
||||
@ -466,7 +494,7 @@ Source.prototype = {
|
||||
|
||||
// Only override the icon if we were previously using
|
||||
// notification-based icons (ie, not a trayicon) or if it was unset before
|
||||
if (!this._isTrayIcon) {
|
||||
if (!this._trayIcon) {
|
||||
this.useNotificationIcon = false;
|
||||
this._setSummaryIcon(this.app.create_icon_texture (this.ICON_SIZE));
|
||||
}
|
||||
@ -475,25 +503,29 @@ Source.prototype = {
|
||||
setTrayIcon: function(icon) {
|
||||
this._setSummaryIcon(icon);
|
||||
this.useNotificationIcon = false;
|
||||
this._isTrayIcon = true;
|
||||
this._trayIcon = icon;
|
||||
},
|
||||
|
||||
open: function(notification) {
|
||||
this.destroyNonResidentNotifications();
|
||||
this.openApp();
|
||||
},
|
||||
|
||||
_notificationRemoved: function() {
|
||||
if (!this._isTrayIcon)
|
||||
_lastNotificationRemoved: function() {
|
||||
if (!this._trayIcon)
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
_appStateChanged: function() {
|
||||
// Destroy notification sources when their apps exit.
|
||||
// The app exiting would normally result in a tray icon being removed,
|
||||
// so it should be ok to destroy the source associated with a tray icon
|
||||
// here too, however we just let that happen through the code path
|
||||
// associated with the tray icon being removed.
|
||||
if (!this._isTrayIcon && this.app.get_state() == Shell.AppState.STOPPED)
|
||||
// so the associated source would be destroyed through the code path
|
||||
// that handles the tray icon being removed. We should not destroy
|
||||
// the source associated with a tray icon when the application state
|
||||
// is Shell.AppState.STOPPED because running applications that have
|
||||
// no open windows would also have that state. This is often the case
|
||||
// for applications that use tray icons.
|
||||
if (!this._trayIcon && this.app.get_state() == Shell.AppState.STOPPED)
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
|
@ -23,6 +23,7 @@ const PlaceDisplay = imports.ui.placeDisplay;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const ViewSelector = imports.ui.viewSelector;
|
||||
const WorkspacesView = imports.ui.workspacesView;
|
||||
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
||||
const ZeitgeistSearch = imports.ui.zeitgeistSearch;
|
||||
|
||||
// Time for initial animation going into Overview mode
|
||||
@ -74,11 +75,13 @@ ShellInfo.prototype = {
|
||||
Main.messageTray.add(this._source);
|
||||
}
|
||||
|
||||
let notification = this._source.notification;
|
||||
if (notification == null)
|
||||
let notification = null;
|
||||
if (this._source.notifications.length == 0) {
|
||||
notification = new MessageTray.Notification(this._source, text, null);
|
||||
else
|
||||
} else {
|
||||
notification = this._source.notifications[0];
|
||||
notification.update(text, null, { clear: true });
|
||||
}
|
||||
|
||||
notification.setTransient(true);
|
||||
|
||||
@ -247,7 +250,8 @@ Overview.prototype = {
|
||||
_onDragMotion: function(dragEvent) {
|
||||
let targetIsWindow = dragEvent.targetActor &&
|
||||
dragEvent.targetActor._delegate &&
|
||||
dragEvent.targetActor._delegate.metaWindow;
|
||||
dragEvent.targetActor._delegate.metaWindow &&
|
||||
!(dragEvent.targetActor._delegate instanceof WorkspaceThumbnail.WindowClone);
|
||||
|
||||
this._windowSwitchTimestamp = global.get_current_time();
|
||||
|
||||
@ -443,7 +447,7 @@ Overview.prototype = {
|
||||
let primary = global.get_primary_monitor();
|
||||
let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
|
||||
|
||||
let contentY = Panel.PANEL_HEIGHT;
|
||||
let contentY = Main.panel.actor.height;
|
||||
let contentHeight = primary.height - contentY - Main.messageTray.actor.height;
|
||||
|
||||
this._group.set_position(primary.x, primary.y);
|
||||
@ -478,6 +482,10 @@ Overview.prototype = {
|
||||
this.emit('item-drag-begin');
|
||||
},
|
||||
|
||||
cancelledItemDrag: function(source) {
|
||||
this.emit('item-drag-cancelled');
|
||||
},
|
||||
|
||||
endItemDrag: function(source) {
|
||||
this.emit('item-drag-end');
|
||||
},
|
||||
@ -690,6 +698,7 @@ Overview.prototype = {
|
||||
this._animateNotVisible();
|
||||
|
||||
this._syncInputMode();
|
||||
global.sync_pointer();
|
||||
},
|
||||
|
||||
_hideDone: function() {
|
||||
|
115
js/ui/panel.js
115
js/ui/panel.js
@ -22,8 +22,6 @@ const DateMenu = imports.ui.dateMenu;
|
||||
const Main = imports.ui.main;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const PANEL_HEIGHT = 26;
|
||||
|
||||
const PANEL_ICON_SIZE = 24;
|
||||
|
||||
const STARTUP_ANIMATION_TIME = 0.2;
|
||||
@ -33,8 +31,7 @@ const HOT_CORNER_ACTIVATION_TIMEOUT = 0.5;
|
||||
const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
||||
|
||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
||||
const SPINNER_UPDATE_TIMEOUT = 130;
|
||||
const SPINNER_SPEED = 0.02;
|
||||
const SPINNER_ANIMATION_TIME = 0.2;
|
||||
|
||||
const STANDARD_TRAY_ICON_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'bluetooth', 'network', 'battery'];
|
||||
const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
|
||||
@ -47,6 +44,12 @@ const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
|
||||
if (Config.HAVE_BLUETOOTH)
|
||||
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
|
||||
|
||||
try {
|
||||
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['network'] = imports.ui.status.network.NMApplet;
|
||||
} catch(e) {
|
||||
log('NMApplet is not supported. It is possible that your NetworkManager version is too old');
|
||||
}
|
||||
|
||||
// To make sure the panel corners blend nicely with the panel,
|
||||
// we draw background and borders the same way, e.g. drawing
|
||||
// them as filled shapes from the outside inwards instead of
|
||||
@ -275,20 +278,13 @@ AppMenuButton.prototype = {
|
||||
this.hide();
|
||||
}));
|
||||
|
||||
this._updateId = 0;
|
||||
this._animationStep = 0;
|
||||
this._clipWidth = PANEL_ICON_SIZE;
|
||||
this._direction = SPINNER_SPEED;
|
||||
this._stop = true;
|
||||
|
||||
this._spinner = new AnimatedIcon('process-working.svg',
|
||||
PANEL_ICON_SIZE);
|
||||
this._container.add_actor(this._spinner.actor);
|
||||
this._spinner.actor.lower_bottom();
|
||||
|
||||
this._shadow = new St.Bin({ style_class: 'label-real-shadow' });
|
||||
this._shadow.hide();
|
||||
this._container.add_actor(this._shadow);
|
||||
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
tracker.connect('notify::focus-app', Lang.bind(this, this._sync));
|
||||
tracker.connect('app-state-changed', Lang.bind(this, this._onAppStateChanged));
|
||||
@ -338,62 +334,26 @@ AppMenuButton.prototype = {
|
||||
this._iconBox.remove_clip();
|
||||
},
|
||||
|
||||
_stopAnimation: function(animate) {
|
||||
this._label.actor.remove_clip();
|
||||
if (this._updateId) {
|
||||
this._shadow.hide();
|
||||
if (animate) {
|
||||
Tweener.addTween(this._spinner.actor,
|
||||
{ opacity: 0,
|
||||
time: 0.2,
|
||||
transition: "easeOutQuad",
|
||||
onCompleteScope: this,
|
||||
onComplete: function() {
|
||||
this._spinner.actor.opacity = 255;
|
||||
this._spinner.actor.hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
Mainloop.source_remove(this._updateId);
|
||||
this._updateId = 0;
|
||||
}
|
||||
if (!animate)
|
||||
this._spinner.actor.hide();
|
||||
},
|
||||
|
||||
stopAnimation: function() {
|
||||
this._direction = SPINNER_SPEED * 3;
|
||||
this._stop = true;
|
||||
},
|
||||
if (this._stop)
|
||||
return;
|
||||
|
||||
_update: function() {
|
||||
this._animationStep += this._direction;
|
||||
if (this._animationStep > 1 && this._stop) {
|
||||
this._animationStep = 1;
|
||||
this._stopAnimation(true);
|
||||
return false;
|
||||
}
|
||||
if (this._animationStep > 1)
|
||||
this._animationStep = 1;
|
||||
this._clipWidth = this._label.actor.width - (this._label.actor.width - PANEL_ICON_SIZE) * (1 - this._animationStep);
|
||||
if (this.actor.get_direction() == St.TextDirection.LTR) {
|
||||
this._label.actor.set_clip(0, 0, this._clipWidth + this._shadow.width, this.actor.height);
|
||||
} else {
|
||||
this._label.actor.set_clip(this._label.actor.width - this._clipWidth, 0, this._clipWidth, this.actor.height);
|
||||
}
|
||||
this._container.queue_relayout();
|
||||
return true;
|
||||
this._stop = true;
|
||||
Tweener.addTween(this._spinner.actor,
|
||||
{ opacity: 0,
|
||||
time: SPINNER_ANIMATION_TIME,
|
||||
transition: "easeOutQuad",
|
||||
onCompleteScope: this,
|
||||
onComplete: function() {
|
||||
this._spinner.actor.opacity = 255;
|
||||
this._spinner.actor.hide();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
startAnimation: function() {
|
||||
this._direction = SPINNER_SPEED;
|
||||
this._stopAnimation(false);
|
||||
this._animationStep = 0;
|
||||
this._update();
|
||||
this._stop = false;
|
||||
this._updateId = Mainloop.timeout_add(SPINNER_UPDATE_TIMEOUT, Lang.bind(this, this._update));
|
||||
this._spinner.actor.show();
|
||||
this._shadow.show();
|
||||
},
|
||||
|
||||
_getContentPreferredWidth: function(actor, forHeight, alloc) {
|
||||
@ -455,18 +415,13 @@ AppMenuButton.prototype = {
|
||||
this._label.actor.allocate(childBox, flags);
|
||||
|
||||
if (direction == St.TextDirection.LTR) {
|
||||
childBox.x1 = Math.floor(iconWidth / 2) + this._clipWidth + this._shadow.width;
|
||||
childBox.x1 = Math.floor(iconWidth / 2) + this._label.actor.width;
|
||||
childBox.x2 = childBox.x1 + this._spinner.actor.width;
|
||||
childBox.y1 = box.y1;
|
||||
childBox.y2 = box.y2 - 1;
|
||||
this._spinner.actor.allocate(childBox, flags);
|
||||
childBox.x1 = Math.floor(iconWidth / 2) + this._clipWidth + 2;
|
||||
childBox.x2 = childBox.x1 + this._shadow.width;
|
||||
childBox.y1 = box.y1;
|
||||
childBox.y2 = box.y2 - 1;
|
||||
this._shadow.allocate(childBox, flags);
|
||||
} else {
|
||||
childBox.x1 = this._label.actor.width - this._clipWidth - this._spinner.actor.width;
|
||||
childBox.x1 = -this._spinner.actor.width;
|
||||
childBox.x2 = childBox.x1 + this._spinner.actor.width;
|
||||
childBox.y1 = box.y1;
|
||||
childBox.y2 = box.y2 - 1;
|
||||
@ -545,8 +500,8 @@ AppMenuButton.prototype = {
|
||||
this.stopAnimation();
|
||||
return;
|
||||
}
|
||||
this._stopAnimation();
|
||||
|
||||
this._spinner.actor.hide();
|
||||
if (this._iconBox.child != null)
|
||||
this._iconBox.child.destroy();
|
||||
this._iconBox.hide();
|
||||
@ -751,6 +706,8 @@ HotCorner.prototype = {
|
||||
x: x,
|
||||
y: y });
|
||||
ripple._opacity = startOpacity;
|
||||
if (ripple.get_direction() == St.TextDirection.RTL)
|
||||
ripple.set_anchor_point_from_gravity(Clutter.Gravity.NORTH_EAST);
|
||||
Tweener.addTween(ripple, { _opacity: finalOpacity,
|
||||
scale_x: finalScale,
|
||||
scale_y: finalScale,
|
||||
@ -834,6 +791,8 @@ Panel.prototype = {
|
||||
this.actor.remove_style_class_name('in-overview');
|
||||
}));
|
||||
|
||||
this._leftPointerBarrier = 0;
|
||||
this._rightPointerBarrier = 0;
|
||||
this._menus = new PopupMenu.PopupMenuManager(this);
|
||||
|
||||
this._leftBox = new St.BoxLayout({ name: 'panelLeft' });
|
||||
@ -1017,7 +976,7 @@ Panel.prototype = {
|
||||
affectsStruts: false,
|
||||
affectsInputRegion: false });
|
||||
|
||||
Main.ctrlAltTabManager.addGroup(this.actor, _("Panel"), 'start-here',
|
||||
Main.ctrlAltTabManager.addGroup(this.actor, _("Top Bar"), 'start-here',
|
||||
{ sortGroup: CtrlAltTab.SortGroup.TOP });
|
||||
},
|
||||
|
||||
@ -1094,7 +1053,21 @@ Panel.prototype = {
|
||||
let primary = global.get_primary_monitor();
|
||||
|
||||
this.actor.set_position(primary.x, primary.y);
|
||||
this.actor.set_size(primary.width, PANEL_HEIGHT);
|
||||
this.actor.set_size(primary.width, -1);
|
||||
|
||||
if (this._leftPointerBarrier)
|
||||
global.destroy_pointer_barrier(this._leftPointerBarrier);
|
||||
if (this._rightPointerBarrier)
|
||||
global.destroy_pointer_barrier(this._rightPointerBarrier);
|
||||
|
||||
this._leftPointerBarrier =
|
||||
global.create_pointer_barrier(primary.x, primary.y,
|
||||
primary.x, primary.y + this.actor.height,
|
||||
1 /* BarrierPositiveX */);
|
||||
this._rightPointerBarrier =
|
||||
global.create_pointer_barrier(primary.x + primary.width, primary.y,
|
||||
primary.x + primary.width, primary.y + this.actor.height,
|
||||
4 /* BarrierNegativeX */);
|
||||
|
||||
this._leftCorner.relayout();
|
||||
this._rightCorner.relayout();
|
||||
|
@ -71,7 +71,7 @@ AuthenticationDialog.prototype = {
|
||||
{ y_align: St.Align.START });
|
||||
|
||||
this._subjectLabel = new St.Label({ style_class: 'polkit-dialog-headline',
|
||||
text: _('Authentication Required') });
|
||||
text: _("Authentication Required") });
|
||||
|
||||
messageBox.add(this._subjectLabel,
|
||||
{ y_fill: false,
|
||||
@ -105,13 +105,9 @@ AuthenticationDialog.prototype = {
|
||||
let userIsRoot = false;
|
||||
if (userName == 'root') {
|
||||
userIsRoot = true;
|
||||
userRealName = _('Administrator');
|
||||
userRealName = _("Administrator");
|
||||
}
|
||||
|
||||
// Work around Gdm.UserManager returning an empty string for the real name
|
||||
if (userRealName.length == 0)
|
||||
userRealName = userName;
|
||||
|
||||
if (userIsRoot) {
|
||||
let userLabel = new St.Label(({ style_class: 'polkit-dialog-user-root-label',
|
||||
text: userRealName }));
|
||||
@ -143,7 +139,7 @@ AuthenticationDialog.prototype = {
|
||||
this._passwordLabel = new St.Label(({ style_class: 'polkit-dialog-password-label' }));
|
||||
this._passwordBox.add(this._passwordLabel);
|
||||
this._passwordEntry = new St.Entry({ style_class: 'polkit-dialog-password-entry',
|
||||
text: _(''),
|
||||
text: "",
|
||||
can_focus: true});
|
||||
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
|
||||
this._passwordBox.add(this._passwordEntry,
|
||||
@ -173,11 +169,11 @@ AuthenticationDialog.prototype = {
|
||||
messageBox.add(this._nullMessageLabel);
|
||||
this._nullMessageLabel.show();
|
||||
|
||||
this.setButtons([{ label: _('Cancel'),
|
||||
this.setButtons([{ label: _("Cancel"),
|
||||
action: Lang.bind(this, this.cancel),
|
||||
key: Clutter.Escape
|
||||
},
|
||||
{ label: _('Authenticate'),
|
||||
{ label: _("Authenticate"),
|
||||
action: Lang.bind(this, this._onAuthenticateButtonPressed)
|
||||
}]);
|
||||
|
||||
@ -261,7 +257,7 @@ AuthenticationDialog.prototype = {
|
||||
* show "Sorry, that didn't work. Please try again."
|
||||
*/
|
||||
if (!this._errorMessageLabel.visible && !this._wasDismissed) {
|
||||
this._errorMessageLabel.set_text(_('Sorry, that didn\'t work. Please try again.'));
|
||||
this._errorMessageLabel.set_text(_("Sorry, that didn\'t work. Please try again."));
|
||||
this._errorMessageLabel.show();
|
||||
this._infoMessageLabel.hide();
|
||||
this._nullMessageLabel.hide();
|
||||
@ -273,7 +269,7 @@ AuthenticationDialog.prototype = {
|
||||
_onSessionRequest: function(session, request, echo_on) {
|
||||
// Cheap localization trick
|
||||
if (request == 'Password:')
|
||||
this._passwordLabel.set_text(_('Password:'));
|
||||
this._passwordLabel.set_text(_("Password:"));
|
||||
else
|
||||
this._passwordLabel.set_text(request);
|
||||
|
||||
|
@ -173,6 +173,8 @@ PopupBaseMenuItem.prototype = {
|
||||
cr.fill();
|
||||
},
|
||||
|
||||
// This returns column widths in logical order (i.e. from the dot
|
||||
// to the image), not in visual order (left to right)
|
||||
getColumnWidths: function() {
|
||||
let widths = [];
|
||||
for (let i = 0, col = 0; i < this._children.length; i++) {
|
||||
@ -224,19 +226,36 @@ PopupBaseMenuItem.prototype = {
|
||||
|
||||
_allocate: function(actor, box, flags) {
|
||||
let height = box.y2 - box.y1;
|
||||
let direction = this.actor.get_direction();
|
||||
|
||||
if (this._dot) {
|
||||
// The dot is placed outside box
|
||||
// one quarter of padding from the border of the container
|
||||
// (so 3/4 from the inner border)
|
||||
// (padding is box.x1)
|
||||
let dotBox = new Clutter.ActorBox();
|
||||
let dotWidth = Math.round(box.x1 / 2);
|
||||
|
||||
dotBox.x1 = Math.round(box.x1 / 4);
|
||||
dotBox.x2 = dotBox.x1 + dotWidth;
|
||||
if (direction == St.TextDirection.LTR) {
|
||||
dotBox.x1 = Math.round(box.x1 / 4);
|
||||
dotBox.x2 = dotBox.x1 + dotWidth;
|
||||
} else {
|
||||
dotBox.x2 = box.x2 + 3 * Math.round(box.x1 / 4);
|
||||
dotBox.x1 = dotBox.x2 - dotWidth;
|
||||
}
|
||||
dotBox.y1 = Math.round(box.y1 + (height - dotWidth) / 2);
|
||||
dotBox.y2 = dotBox.y1 + dotWidth;
|
||||
this._dot.allocate(dotBox, flags);
|
||||
}
|
||||
|
||||
let x = box.x1;
|
||||
let x;
|
||||
if (direction == St.TextDirection.LTR)
|
||||
x = box.x1;
|
||||
else
|
||||
x = box.x2;
|
||||
// if direction is ltr, x is the right edge of the last added
|
||||
// actor, and it's constantly increasing, whereas if rtl, x is
|
||||
// the left edge and it decreases
|
||||
for (let i = 0, col = 0; i < this._children.length; i++) {
|
||||
let child = this._children[i];
|
||||
let childBox = new Clutter.ActorBox();
|
||||
@ -244,9 +263,12 @@ PopupBaseMenuItem.prototype = {
|
||||
let [minWidth, naturalWidth] = child.actor.get_preferred_width(-1);
|
||||
let availWidth, extraWidth;
|
||||
if (this._columnWidths) {
|
||||
if (child.span == -1)
|
||||
availWidth = box.x2 - x;
|
||||
else {
|
||||
if (child.span == -1) {
|
||||
if (direction == St.TextDirection.LTR)
|
||||
availWidth = box.x2 - x;
|
||||
else
|
||||
availWidth = x - box.x1;
|
||||
} else {
|
||||
availWidth = 0;
|
||||
for (let j = 0; j < child.span; j++)
|
||||
availWidth += this._columnWidths[col++];
|
||||
@ -257,18 +279,36 @@ PopupBaseMenuItem.prototype = {
|
||||
extraWidth = 0;
|
||||
}
|
||||
|
||||
if (child.expand) {
|
||||
childBox.x1 = x;
|
||||
childBox.x2 = x + availWidth;
|
||||
} else if (child.align === St.Align.CENTER) {
|
||||
childBox.x1 = x + Math.round(extraWidth / 2);
|
||||
childBox.x2 = childBox.x1 + naturalWidth;
|
||||
} else if (child.align === St.Align.END) {
|
||||
childBox.x2 = x + availWidth;
|
||||
childBox.x1 = childBox.x2 - naturalWidth;
|
||||
if (direction == St.TextDirection.LTR) {
|
||||
if (child.expand) {
|
||||
childBox.x1 = x;
|
||||
childBox.x2 = x + availWidth;
|
||||
} else if (child.align === St.Align.CENTER) {
|
||||
childBox.x1 = x + Math.round(extraWidth / 2);
|
||||
childBox.x2 = childBox.x1 + naturalWidth;
|
||||
} else if (child.align === St.Align.END) {
|
||||
childBox.x2 = x + availWidth;
|
||||
childBox.x1 = childBox.x2 - naturalWidth;
|
||||
} else {
|
||||
childBox.x1 = x;
|
||||
childBox.x2 = x + naturalWidth;
|
||||
}
|
||||
} else {
|
||||
childBox.x1 = x;
|
||||
childBox.x2 = x + naturalWidth;
|
||||
if (child.expand) {
|
||||
childBox.x1 = x - availWidth;
|
||||
childBox.x2 = x;
|
||||
} else if (child.align === St.Align.CENTER) {
|
||||
childBox.x1 = x - Math.round(extraWidth / 2);
|
||||
childBox.x2 = childBox.x1 + naturalWidth;
|
||||
} else if (child.align === St.Align.END) {
|
||||
// align to the left
|
||||
childBox.x1 = x - availWidth;
|
||||
childBox.x2 = childBox.x1 + naturalWidth;
|
||||
} else {
|
||||
// align to the right
|
||||
childBox.x2 = x;
|
||||
childBox.x1 = x - naturalWidth;
|
||||
}
|
||||
}
|
||||
|
||||
let [minHeight, naturalHeight] = child.actor.get_preferred_height(-1);
|
||||
@ -277,7 +317,10 @@ PopupBaseMenuItem.prototype = {
|
||||
|
||||
child.actor.allocate(childBox, flags);
|
||||
|
||||
x += availWidth + this._spacing;
|
||||
if (direction == St.TextDirection.LTR)
|
||||
x += availWidth + this._spacing;
|
||||
else
|
||||
x -= availWidth + this._spacing;
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -724,6 +767,11 @@ PopupMenuBase.prototype = {
|
||||
}
|
||||
|
||||
this.isOpen = false;
|
||||
|
||||
// If set, we don't send events (including crossing events) to the source actor
|
||||
// for the menu which causes its prelight state to freeze
|
||||
this.blockSourceEvents = false;
|
||||
|
||||
this._activeMenuItem = null;
|
||||
},
|
||||
|
||||
@ -1331,14 +1379,20 @@ PopupMenuManager.prototype = {
|
||||
return this._activeMenuContains(event.get_source());
|
||||
},
|
||||
|
||||
_eventIsOnAnyMenuSource: function(event) {
|
||||
_shouldBlockEvent: function(event) {
|
||||
let src = event.get_source();
|
||||
|
||||
if (this._activeMenu != null && this._activeMenu.actor.contains(src))
|
||||
return false;
|
||||
|
||||
for (let i = 0; i < this._menus.length; i++) {
|
||||
let menu = this._menus[i].menu;
|
||||
if (menu.sourceActor && menu.sourceActor.contains(src))
|
||||
return true;
|
||||
if (menu.sourceActor && !menu.blockSourceEvents && menu.sourceActor.contains(src)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
_findMenu: function(item) {
|
||||
@ -1370,7 +1424,7 @@ PopupMenuManager.prototype = {
|
||||
} else if (eventType == Clutter.EventType.BUTTON_PRESS && !activeMenuContains) {
|
||||
this._closeMenu();
|
||||
return true;
|
||||
} else if (activeMenuContains || this._eventIsOnAnyMenuSource(event)) {
|
||||
} else if (!this._shouldBlockEvent(event)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,9 @@ const MAX_FILE_DELETED_BEFORE_INVALID = 10;
|
||||
|
||||
const HISTORY_KEY = 'command-history';
|
||||
|
||||
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
|
||||
const DISABLE_COMMAND_LINE_KEY = 'disable-command-line';
|
||||
|
||||
const DIALOG_GROW_TIME = 0.1;
|
||||
|
||||
function CommandCompleter() {
|
||||
@ -167,6 +170,7 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
||||
_init : function() {
|
||||
ModalDialog.ModalDialog.prototype._init.call(this, { styleClass: 'run-dialog' });
|
||||
|
||||
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
|
||||
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
|
||||
this._enableInternalCommands = global.settings.get_boolean('development-tools');
|
||||
}));
|
||||
@ -206,10 +210,7 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
||||
|
||||
this._entryText = entry.clutter_text;
|
||||
this.contentLayout.add(entry, { y_align: St.Align.START });
|
||||
this.connect('opened',
|
||||
Lang.bind(this, function() {
|
||||
this._entryText.grab_key_focus();
|
||||
}));
|
||||
this.setInitialKeyFocus(this._entryText);
|
||||
|
||||
this._errorBox = new St.BoxLayout({ style_class: 'run-dialog-error-box' });
|
||||
|
||||
@ -239,15 +240,21 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
||||
this._entryText.connect('key-press-event', Lang.bind(this, function(o, e) {
|
||||
let symbol = e.get_key_symbol();
|
||||
if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
|
||||
this.popModal();
|
||||
if (Shell.get_event_state(e) & Clutter.ModifierType.CONTROL_MASK)
|
||||
this._run(o.get_text(), true);
|
||||
else
|
||||
this._run(o.get_text(), false);
|
||||
if (!this._commandError)
|
||||
this.close(global.get_current_time());
|
||||
this.close();
|
||||
else {
|
||||
if (!this.pushModal())
|
||||
this.close();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (symbol == Clutter.Escape) {
|
||||
this.close(global.get_current_time());
|
||||
this.close();
|
||||
return true;
|
||||
}
|
||||
if (symbol == Clutter.slash) {
|
||||
@ -353,6 +360,9 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
||||
this._entryText.set_text('');
|
||||
this._commandError = false;
|
||||
|
||||
if (this._lockdownSettings.get_boolean(DISABLE_COMMAND_LINE_KEY))
|
||||
return;
|
||||
|
||||
ModalDialog.ModalDialog.prototype.open.call(this);
|
||||
},
|
||||
|
||||
|
@ -5,6 +5,7 @@ const Lang = imports.lang;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const DND = imports.ui.dnd;
|
||||
@ -49,6 +50,10 @@ SearchResult.prototype = {
|
||||
Lang.bind(this, function() {
|
||||
Main.overview.beginItemDrag(this);
|
||||
}));
|
||||
draggable.connect('drag-cancelled',
|
||||
Lang.bind(this, function() {
|
||||
Main.overview.cancelledItemDrag(this);
|
||||
}));
|
||||
draggable.connect('drag-end',
|
||||
Lang.bind(this, function() {
|
||||
Main.overview.endItemDrag(this);
|
||||
@ -100,8 +105,30 @@ GridSearchResults.prototype = {
|
||||
this._grid = new IconGrid.IconGrid({ rowLimit: MAX_SEARCH_RESULTS_ROWS,
|
||||
xAlign: St.Align.START });
|
||||
this.actor = new St.Bin({ x_align: St.Align.START });
|
||||
|
||||
this.actor.set_child(this._grid.actor);
|
||||
this.selectionIndex = -1;
|
||||
this._width = 0;
|
||||
this.actor.connect('notify::width', Lang.bind(this, function() {
|
||||
this._width = this.actor.width;
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
|
||||
this._tryAddResults();
|
||||
}));
|
||||
}));
|
||||
this._notDisplayedResult = [];
|
||||
this._terms = [];
|
||||
},
|
||||
|
||||
_tryAddResults: function() {
|
||||
let canDisplay = this._grid.childrenInRow(this._width) * MAX_SEARCH_RESULTS_ROWS
|
||||
- this._grid.visibleItemsCount();
|
||||
|
||||
for (let i = Math.min(this._notDisplayedResult.length, canDisplay); i > 0; i--) {
|
||||
let result = this._notDisplayedResult.shift();
|
||||
let meta = this.provider.getResultMeta(result);
|
||||
let display = new SearchResult(this.provider, meta, this._terms);
|
||||
this._grid.addItem(display.actor);
|
||||
}
|
||||
},
|
||||
|
||||
getVisibleResultCount: function() {
|
||||
@ -109,15 +136,15 @@ GridSearchResults.prototype = {
|
||||
},
|
||||
|
||||
renderResults: function(results, terms) {
|
||||
for (let i = 0; i < results.length; i++) {
|
||||
let result = results[i];
|
||||
let meta = this.provider.getResultMeta(result);
|
||||
let display = new SearchResult(this.provider, meta, terms);
|
||||
this._grid.addItem(display.actor);
|
||||
}
|
||||
// copy the lists
|
||||
this._notDisplayedResult = results.slice(0);
|
||||
this._terms = terms.slice(0);
|
||||
this._tryAddResults();
|
||||
},
|
||||
|
||||
clear: function () {
|
||||
this._terms = [];
|
||||
this._notDisplayedResult = [];
|
||||
this._grid.removeAll();
|
||||
this.selectionIndex = -1;
|
||||
},
|
||||
|
@ -66,13 +66,13 @@ ATIndicator.prototype = {
|
||||
let textZoom = this._buildFontItem();
|
||||
this.menu.addMenuItem(textZoom);
|
||||
|
||||
let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
'screen-reader-enabled');
|
||||
this.menu.addMenuItem(screenReader);
|
||||
// let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
// 'screen-reader-enabled');
|
||||
// this.menu.addMenuItem(screenReader);
|
||||
|
||||
let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
'screen-keyboard-enabled');
|
||||
this.menu.addMenuItem(screenKeyboard);
|
||||
// let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
// 'screen-keyboard-enabled');
|
||||
// this.menu.addMenuItem(screenKeyboard);
|
||||
|
||||
let visualBell = this._buildItemGConf(_("Visual Alerts"), client, KEY_VISUAL_BELL);
|
||||
this.menu.addMenuItem(visualBell);
|
||||
@ -91,7 +91,8 @@ ATIndicator.prototype = {
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("Universal Access Settings"), function() {
|
||||
Util.spawnDesktop('gnome-universal-access-panel');
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-universal-access-panel.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -93,7 +93,8 @@ Indicator.prototype = {
|
||||
this._updateFullMenu();
|
||||
|
||||
this.menu.addAction(_("Bluetooth Settings"), function() {
|
||||
GLib.spawn_command_line_async('gnome-control-center bluetooth');
|
||||
let app = Shell.AppSystem.get_default().get_app('bluetooth-properties.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
|
||||
this._applet.connect('pincode-request', Lang.bind(this, this._pinRequest));
|
||||
@ -136,6 +137,7 @@ Indicator.prototype = {
|
||||
_updateDevices: function() {
|
||||
let devices = this._applet.get_devices();
|
||||
|
||||
let newlist = [ ];
|
||||
for (let i = 0; i < this._deviceItems.length; i++) {
|
||||
let item = this._deviceItems[i];
|
||||
let destroy = true;
|
||||
@ -143,26 +145,20 @@ Indicator.prototype = {
|
||||
// we need to deep compare because BluetoothSimpleDevice is a boxed type
|
||||
// (but we take advantage of that, because _skip will disappear the next
|
||||
// time get_devices() is called)
|
||||
if (this._deviceCompare(item._device, devices[i])) {
|
||||
item.label.text = devices[i].alias;
|
||||
devices[i]._skip = true;
|
||||
if (this._deviceCompare(item._device, devices[j])) {
|
||||
item.label.text = devices[j].alias;
|
||||
devices[j]._skip = true;
|
||||
destroy = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (destroy) {
|
||||
if (destroy)
|
||||
item.destroy();
|
||||
item._destroyed = true;
|
||||
}
|
||||
}
|
||||
|
||||
let newlist = [ ];
|
||||
for (let i = 0; i < this._deviceItems.length; i++) {
|
||||
let item = this._deviceItems[i];
|
||||
if (!item._destroyed)
|
||||
else
|
||||
newlist.push(item);
|
||||
}
|
||||
this._deviceItems = newlist;
|
||||
|
||||
this._deviceItems = newlist;
|
||||
this._hasDevices = newlist.length > 0;
|
||||
for (let i = 0; i < devices.length; i++) {
|
||||
let d = devices[i];
|
||||
|
@ -74,7 +74,8 @@ XKBIndicator.prototype = {
|
||||
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
|
||||
}));
|
||||
this.menu.addAction(_("Localization Settings"), function() {
|
||||
Util.spawn(['gnome-control-center', 'region']);
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-region-panel.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
},
|
||||
|
||||
|
2107
js/ui/status/network.js
Normal file
2107
js/ui/status/network.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -83,7 +83,8 @@ Indicator.prototype = {
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
|
||||
this.menu.addAction(_("Power Settings"),function() {
|
||||
Util.spawnDesktop('gnome-power-panel');
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-power-panel.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
|
||||
this._proxy.connect('Changed', Lang.bind(this, this._devicesChanged));
|
||||
|
@ -64,7 +64,8 @@ Indicator.prototype = {
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("Sound Settings"), function() {
|
||||
Util.spawnDesktop('gnome-sound-panel');
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-sound-panel.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
const Gdm = imports.gi.Gdm;
|
||||
const DBus = imports.dbus;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
@ -20,6 +21,11 @@ const Util = imports.misc.util;
|
||||
const BUS_NAME = 'org.gnome.ScreenSaver';
|
||||
const OBJECT_PATH = '/org/gnome/ScreenSaver';
|
||||
|
||||
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
|
||||
const DISABLE_USER_SWITCH_KEY = 'disable-user-switching';
|
||||
const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
|
||||
const DISABLE_LOG_OUT_KEY = 'disable-log-out';
|
||||
|
||||
const ScreenSaverInterface = {
|
||||
name: BUS_NAME,
|
||||
methods: [ { name: 'Lock', inSignature: '' } ]
|
||||
@ -44,6 +50,8 @@ StatusMenuButton.prototype = {
|
||||
let box = new St.BoxLayout({ name: 'panelStatusMenu' });
|
||||
this.actor.set_child(box);
|
||||
|
||||
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
|
||||
|
||||
this._gdm = Gdm.UserManager.ref_default();
|
||||
this._gdm.queue_load();
|
||||
|
||||
@ -79,6 +87,15 @@ StatusMenuButton.prototype = {
|
||||
this._gdm.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUser));
|
||||
this._gdm.connect('user-added', Lang.bind(this, this._updateSwitchUser));
|
||||
this._gdm.connect('user-removed', Lang.bind(this, this._updateSwitchUser));
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_USER_SWITCH_KEY,
|
||||
Lang.bind(this, this._updateSwitchUser));
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
||||
Lang.bind(this, this._updateLogout));
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_LOCK_SCREEN_KEY,
|
||||
Lang.bind(this, this._updateLockScreen));
|
||||
this._updateSwitchUser();
|
||||
this._updateLogout();
|
||||
this._updateLockScreen();
|
||||
|
||||
this._upClient.connect('notify::can-suspend', Lang.bind(this, this._updateSuspendOrPowerOff));
|
||||
},
|
||||
@ -95,11 +112,41 @@ StatusMenuButton.prototype = {
|
||||
this._name.set_text("");
|
||||
},
|
||||
|
||||
_updateSessionSeparator: function() {
|
||||
let showSeparator = this._loginScreenItem.actor.visible ||
|
||||
this._logoutItem.actor.visible ||
|
||||
this._lockScreenItem.actor.visible;
|
||||
if (showSeparator)
|
||||
this._sessionSeparator.actor.show();
|
||||
else
|
||||
this._sessionSeparator.actor.hide();
|
||||
},
|
||||
|
||||
_updateSwitchUser: function() {
|
||||
if (this._gdm.can_switch ())
|
||||
let allowSwitch = !this._lockdownSettings.get_boolean(DISABLE_USER_SWITCH_KEY);
|
||||
if (allowSwitch && this._gdm.can_switch ())
|
||||
this._loginScreenItem.actor.show();
|
||||
else
|
||||
this._loginScreenItem.actor.hide();
|
||||
this._updateSessionSeparator();
|
||||
},
|
||||
|
||||
_updateLogout: function() {
|
||||
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
|
||||
if (allowLogout)
|
||||
this._logoutItem.actor.show();
|
||||
else
|
||||
this._logoutItem.actor.hide();
|
||||
this._updateSessionSeparator();
|
||||
},
|
||||
|
||||
_updateLockScreen: function() {
|
||||
let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
|
||||
if (allowLockScreen)
|
||||
this._lockScreenItem.actor.show();
|
||||
else
|
||||
this._lockScreenItem.actor.hide();
|
||||
this._updateSessionSeparator();
|
||||
},
|
||||
|
||||
_updateSuspendOrPowerOff: function() {
|
||||
@ -113,7 +160,7 @@ StatusMenuButton.prototype = {
|
||||
if (!this._haveSuspend) {
|
||||
this._suspendOrPowerOffItem.updateText(_("Power Off..."), null);
|
||||
} else {
|
||||
this._suspendOrPowerOffItem.updateText(_("Suspend"), ("Power Off..."));
|
||||
this._suspendOrPowerOffItem.updateText(_("Suspend"), _("Power Off..."));
|
||||
}
|
||||
},
|
||||
|
||||
@ -161,6 +208,7 @@ StatusMenuButton.prototype = {
|
||||
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
|
||||
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._lockScreenItem = item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Switch User"));
|
||||
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
|
||||
@ -170,9 +218,11 @@ StatusMenuButton.prototype = {
|
||||
item = new PopupMenu.PopupMenuItem(_("Log Out..."));
|
||||
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._logoutItem = item;
|
||||
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
this._sessionSeparator = item;
|
||||
|
||||
item = new PopupMenu.PopupAlternatingMenuItem(_("Suspend"),
|
||||
_("Power Off..."));
|
||||
@ -190,12 +240,14 @@ StatusMenuButton.prototype = {
|
||||
|
||||
_onMyAccountActivate: function() {
|
||||
Main.overview.hide();
|
||||
Util.spawnDesktop('gnome-user-accounts-panel');
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-user-accounts-panel.desktop');
|
||||
app.activate(-1);
|
||||
},
|
||||
|
||||
_onPreferencesActivate: function() {
|
||||
Main.overview.hide();
|
||||
Util.spawnDesktop('gnome-control-center');
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-control-center.desktop');
|
||||
app.activate(-1);
|
||||
},
|
||||
|
||||
_onLockScreenActivate: function() {
|
||||
|
@ -7,10 +7,12 @@ const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const Tpl = imports.gi.TelepathyLogger;
|
||||
const Tp = imports.gi.TelepathyGLib;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const History = imports.misc.history;
|
||||
const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
|
||||
@ -21,6 +23,9 @@ const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
|
||||
const SCROLLBACK_RECENT_LENGTH = 20;
|
||||
const SCROLLBACK_IDLE_LENGTH = 5;
|
||||
|
||||
// See Source._displayPendingMessages
|
||||
const SCROLLBACK_HISTORY_LINES = 10;
|
||||
|
||||
const NotificationDirection = {
|
||||
SENT: 'chat-sent',
|
||||
RECEIVED: 'chat-received'
|
||||
@ -35,6 +40,31 @@ let contactFeatures = [Tp.ContactFeature.ALIAS,
|
||||
// lets us see messages even if they belong to another app (eg,
|
||||
// Empathy).
|
||||
|
||||
function makeMessageFromTpMessage(tpMessage, direction) {
|
||||
let [text, flags] = tpMessage.to_text();
|
||||
return {
|
||||
messageType: tpMessage.get_message_type(),
|
||||
text: text,
|
||||
sender: tpMessage.sender.alias,
|
||||
timestamp: tpMessage.get_received_timestamp(),
|
||||
direction: direction
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
function makeMessageFromTplEvent(event) {
|
||||
let sent = event.get_sender().get_entity_type() == Tpl.EntityType.SELF;
|
||||
let direction = sent ? NotificationDirection.SENT : NotificationDirection.RECEIVED;
|
||||
|
||||
return {
|
||||
messageType: event.get_message_type(),
|
||||
text: event.get_message(),
|
||||
sender: event.get_sender().get_alias(),
|
||||
timestamp: event.get_timestamp(),
|
||||
direction: direction
|
||||
};
|
||||
}
|
||||
|
||||
function Client() {
|
||||
this._init();
|
||||
};
|
||||
@ -67,7 +97,22 @@ Client.prototype = {
|
||||
|
||||
_observeChannels: function(observer, account, conn, channels,
|
||||
dispatchOp, requests, context) {
|
||||
let connPath = conn.get_object_path();
|
||||
// If the self_contact doesn't have the ALIAS, make sure
|
||||
// to fetch it before trying to grab the channels.
|
||||
let self_contact = conn.get_self_contact();
|
||||
if (self_contact.has_feature(Tp.ContactFeature.ALIAS)) {
|
||||
this._finishObserveChannels(account, conn, channels, context);
|
||||
} else {
|
||||
Shell.get_self_contact_features(conn,
|
||||
contactFeatures.length, contactFeatures,
|
||||
Lang.bind(this, function() {
|
||||
this._finishObserveChannels(account, conn, channels, context);
|
||||
}));
|
||||
context.delay();
|
||||
}
|
||||
},
|
||||
|
||||
_finishObserveChannels: function(account, conn, channels, context) {
|
||||
let len = channels.length;
|
||||
for (let i = 0; i < len; i++) {
|
||||
let channel = channels[i];
|
||||
@ -90,7 +135,6 @@ Client.prototype = {
|
||||
}), null);
|
||||
}
|
||||
|
||||
// Allow dbus method to return
|
||||
context.accept();
|
||||
},
|
||||
|
||||
@ -116,7 +160,7 @@ Source.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init: function(account, conn, channel, contact) {
|
||||
MessageTray.Source.prototype._init.call(this, channel.get_identifier());
|
||||
MessageTray.Source.prototype._init.call(this, contact.get_alias());
|
||||
|
||||
this.isChat = true;
|
||||
|
||||
@ -127,8 +171,6 @@ Source.prototype = {
|
||||
this._channel = channel;
|
||||
this._closedId = this._channel.connect('invalidated', Lang.bind(this, this._channelClosed));
|
||||
|
||||
this._updateAlias();
|
||||
|
||||
this._notification = new Notification(this);
|
||||
this._notification.setUrgency(MessageTray.Urgency.HIGH);
|
||||
|
||||
@ -143,11 +185,18 @@ Source.prototype = {
|
||||
this._notifyAvatarId = this._contact.connect('notify::avatar-file', Lang.bind(this, this._updateAvatarIcon));
|
||||
this._presenceChangedId = this._contact.connect('presence-changed', Lang.bind(this, this._presenceChanged));
|
||||
|
||||
this._displayPendingMessages();
|
||||
// Add ourselves as a source.
|
||||
Main.messageTray.add(this);
|
||||
this.pushNotification(this._notification);
|
||||
|
||||
this._getLogMessages();
|
||||
},
|
||||
|
||||
_updateAlias: function() {
|
||||
let oldAlias = this.title;
|
||||
this.title = this._contact.get_alias();
|
||||
this._notification.appendAliasChange(oldAlias, this.title);
|
||||
this.pushNotification(this._notification);
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
@ -183,13 +232,50 @@ Source.prototype = {
|
||||
req.ensure_channel_async('', null, null);
|
||||
},
|
||||
|
||||
_displayPendingMessages: function() {
|
||||
let msgs = this._channel.get_pending_messages();
|
||||
_getLogMessages: function() {
|
||||
let logManager = Tpl.LogManager.dup_singleton();
|
||||
let entity = Tpl.Entity.new_from_tp_contact(this._contact, Tpl.EntityType.CONTACT);
|
||||
Shell.get_contact_events(logManager,
|
||||
this._account, entity,
|
||||
SCROLLBACK_HISTORY_LINES,
|
||||
Lang.bind(this, this._displayPendingMessages));
|
||||
},
|
||||
|
||||
for (let i = 0; i < msgs.length; i++) {
|
||||
let msg = msgs[i];
|
||||
this._messageReceived(this._channel, msg);
|
||||
_displayPendingMessages: function(logManager, result) {
|
||||
let [success, events] = logManager.get_filtered_events_finish(result);
|
||||
|
||||
let logMessages = events.map(makeMessageFromTplEvent);
|
||||
for (let i = 0; i < logMessages.length; i++) {
|
||||
this._notification.appendMessage(logMessages[i], true);
|
||||
}
|
||||
|
||||
let pendingMessages = this._channel.get_pending_messages();
|
||||
let hasPendingMessage = false;
|
||||
for (let i = 0; i < pendingMessages.length; i++) {
|
||||
let message = makeMessageFromTpMessage(pendingMessages[i], NotificationDirection.RECEIVED);
|
||||
|
||||
// Skip any pending messages that are in the logs.
|
||||
let inLog = false;
|
||||
for (let j = 0; j < logMessages.length; j++) {
|
||||
let logMessage = logMessages[j];
|
||||
if (logMessage.timestamp == message.timestamp && logMessage.text == message.body) {
|
||||
inLog = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (inLog)
|
||||
continue;
|
||||
|
||||
this._notification.appendMessage(message, true);
|
||||
hasPendingMessage = true;
|
||||
}
|
||||
|
||||
// Only show the timestamp if we have at least one message.
|
||||
if (hasPendingMessage || logMessages.length > 0)
|
||||
this._notification.appendTimestamp();
|
||||
|
||||
if (hasPendingMessage)
|
||||
this.notify();
|
||||
},
|
||||
|
||||
_channelClosed: function() {
|
||||
@ -205,25 +291,32 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
_messageReceived: function(channel, message) {
|
||||
this._notification.appendMessage(message, NotificationDirection.RECEIVED);
|
||||
message = makeMessageFromTpMessage(message, NotificationDirection.RECEIVED);
|
||||
this._notification.appendMessage(message);
|
||||
this.notify();
|
||||
},
|
||||
|
||||
// This is called for both messages we send from
|
||||
// our client and other clients as well.
|
||||
_messageSent: function(channel, message, flags, token) {
|
||||
this._notification.appendMessage(message, NotificationDirection.SENT);
|
||||
message = makeMessageFromTpMessage(message, NotificationDirection.SENT);
|
||||
this._notification.appendMessage(message);
|
||||
},
|
||||
|
||||
notify: function() {
|
||||
if (!Main.messageTray.contains(this))
|
||||
Main.messageTray.add(this);
|
||||
|
||||
MessageTray.Source.prototype.notify.call(this, this._notification);
|
||||
},
|
||||
|
||||
respond: function(text) {
|
||||
let msg = Tp.ClientMessage.new_text(Tp.ChannelTextMessageType.NORMAL, text);
|
||||
let type;
|
||||
if (text.slice(0, 4) == '/me ') {
|
||||
type = Tp.ChannelTextMessageType.ACTION;
|
||||
text = text.slice(4);
|
||||
} else {
|
||||
type = Tp.ChannelTextMessageType.NORMAL;
|
||||
}
|
||||
|
||||
let msg = Tp.ClientMessage.new_text(type, text);
|
||||
this._channel.send_message_async(msg, 0, null);
|
||||
},
|
||||
|
||||
@ -289,19 +382,40 @@ Notification.prototype = {
|
||||
this._oldMaxScrollAdjustment = adjustment.upper;
|
||||
}));
|
||||
|
||||
this._inputHistory = new History.HistoryManager({ entry: this._responseEntry.clutter_text });
|
||||
|
||||
this._history = [];
|
||||
this._timestampTimeoutId = 0;
|
||||
},
|
||||
|
||||
appendMessage: function(message, direction) {
|
||||
let [text, flags] = message.to_text();
|
||||
let timestamp = message.get_received_timestamp();
|
||||
/**
|
||||
* appendMessage:
|
||||
* @message: An object with the properties:
|
||||
* text: the body of the message,
|
||||
* messageType: a #Tp.ChannelTextMessageType,
|
||||
* sender: the name of the sender,
|
||||
* timestamp: the time the message was sent
|
||||
* direction: a #NotificationDirection
|
||||
*
|
||||
* @noTimestamp: Whether to add a timestamp. If %true, no timestamp
|
||||
* will be added, regardless of the difference since the
|
||||
* last timestamp
|
||||
*/
|
||||
appendMessage: function(message, noTimestamp) {
|
||||
let messageBody = GLib.markup_escape_text(message.text, -1);
|
||||
let styles = [message.direction];
|
||||
|
||||
this.update(this.source.title, text, { customContent: true });
|
||||
this._append(text, direction, timestamp);
|
||||
if (message.messageType == Tp.ChannelTextMessageType.ACTION) {
|
||||
let senderAlias = GLib.markup_escape_text(message.sender, -1);
|
||||
messageBody = '<i>%s</i> %s'.format(senderAlias, messageBody);
|
||||
styles.push('chat-action');
|
||||
}
|
||||
|
||||
this.update(this.source.title, messageBody, { customContent: true, bannerMarkup: true });
|
||||
this._append(messageBody, styles, message.timestamp, noTimestamp);
|
||||
},
|
||||
|
||||
_append: function(text, style, timestamp) {
|
||||
_append: function(text, styles, timestamp, noTimestamp) {
|
||||
let currentTime = (Date.now() / 1000);
|
||||
if (!timestamp)
|
||||
timestamp = currentTime;
|
||||
@ -313,19 +427,22 @@ Notification.prototype = {
|
||||
if (this._timestampTimeoutId)
|
||||
Mainloop.source_remove(this._timestampTimeoutId);
|
||||
|
||||
let body = this.addBody(text);
|
||||
body.add_style_class_name(style);
|
||||
let body = this.addBody(text, true);
|
||||
for (let i = 0; i < styles.length; i ++)
|
||||
body.add_style_class_name(styles[i]);
|
||||
|
||||
this._history.unshift({ actor: body, time: timestamp, realMessage: true });
|
||||
|
||||
if (timestamp < currentTime - SCROLLBACK_IMMEDIATE_TIME)
|
||||
this._appendTimestamp();
|
||||
else
|
||||
// Schedule a new timestamp in SCROLLBACK_IMMEDIATE_TIME
|
||||
// from the timestamp of the message.
|
||||
this._timestampTimeoutId = Mainloop.timeout_add_seconds(
|
||||
SCROLLBACK_IMMEDIATE_TIME - (currentTime - timestamp),
|
||||
Lang.bind(this, this._appendTimestamp));
|
||||
if (!noTimestamp) {
|
||||
if (timestamp < currentTime - SCROLLBACK_IMMEDIATE_TIME)
|
||||
this.appendTimestamp();
|
||||
else
|
||||
// Schedule a new timestamp in SCROLLBACK_IMMEDIATE_TIME
|
||||
// from the timestamp of the message.
|
||||
this._timestampTimeoutId = Mainloop.timeout_add_seconds(
|
||||
SCROLLBACK_IMMEDIATE_TIME - (currentTime - timestamp),
|
||||
Lang.bind(this, this.appendTimestamp));
|
||||
}
|
||||
|
||||
if (this._history.length > 1) {
|
||||
// Keep the scrollback from growing too long. If the most
|
||||
@ -346,7 +463,7 @@ Notification.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_appendTimestamp: function() {
|
||||
appendTimestamp: function() {
|
||||
let lastMessageTime = this._history[0].time;
|
||||
let lastMessageDate = new Date(lastMessageTime * 1000);
|
||||
|
||||
@ -372,11 +489,28 @@ Notification.prototype = {
|
||||
this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false});
|
||||
},
|
||||
|
||||
appendAliasChange: function(oldAlias, newAlias) {
|
||||
// FIXME: uncomment this after 3.0 string freeze ends
|
||||
|
||||
// oldAlias = GLib.markup_escape_text(oldAlias, -1);
|
||||
// newAlias = GLib.markup_escape_text(newAlias, -1);
|
||||
|
||||
// /* Translators: this is the other person changing their old IM name to their new
|
||||
// IM name. */
|
||||
// let message = '<i>' + _("%s is now known as %s").format(oldAlias, newAlias) + '</i>';
|
||||
// let label = this.addBody(message, true);
|
||||
// label.add_style_class_name('chat-meta-message');
|
||||
// this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false });
|
||||
// this.update(newAlias, null, { customContent: true });
|
||||
},
|
||||
|
||||
_onEntryActivated: function() {
|
||||
let text = this._responseEntry.get_text();
|
||||
if (text == '')
|
||||
return;
|
||||
|
||||
this._inputHistory.addItem(text);
|
||||
|
||||
// Telepathy sends out the Sent signal for us.
|
||||
// see Source._messageSent
|
||||
this._responseEntry.set_text('');
|
||||
|
@ -41,11 +41,14 @@ BaseTab.prototype = {
|
||||
this.visible = false;
|
||||
},
|
||||
|
||||
show: function() {
|
||||
show: function(animate) {
|
||||
this.visible = true;
|
||||
this.page.opacity = 0;
|
||||
this.page.show();
|
||||
|
||||
if (!animate)
|
||||
return;
|
||||
|
||||
this.page.opacity = 0;
|
||||
Tweener.addTween(this.page,
|
||||
{ opacity: 255,
|
||||
time: 0.1,
|
||||
@ -393,6 +396,8 @@ ViewSelector.prototype = {
|
||||
},
|
||||
|
||||
_switchTab: function(tab) {
|
||||
let firstSwitch = this._activeTab == null;
|
||||
|
||||
if (this._activeTab && this._activeTab.visible) {
|
||||
if (this._activeTab == tab)
|
||||
return;
|
||||
@ -408,11 +413,13 @@ ViewSelector.prototype = {
|
||||
}
|
||||
}
|
||||
|
||||
// Only fade when switching between tabs,
|
||||
// not when setting the initially selected one.
|
||||
if (!tab.visible)
|
||||
tab.show();
|
||||
tab.show(!firstSwitch);
|
||||
|
||||
// Pull a Meg Ryan:
|
||||
if (Main.overview && Main.overview.workspaces) {
|
||||
if (!firstSwitch && Main.overview.workspaces) {
|
||||
if (tab != this._tabs[0]) {
|
||||
Tweener.addTween(Main.overview.workspaces.actor,
|
||||
{ opacity: 0,
|
||||
|
@ -123,11 +123,11 @@ WindowManager.prototype = {
|
||||
|
||||
Main.overview.connect('showing', Lang.bind(this, function() {
|
||||
for (let i = 0; i < this._dimmedWindows.length; i++)
|
||||
this._undimParentWindow(this._dimmedWindows[i], true);
|
||||
this._undimWindow(this._dimmedWindows[i], true);
|
||||
}));
|
||||
Main.overview.connect('hiding', Lang.bind(this, function() {
|
||||
for (let i = 0; i < this._dimmedWindows.length; i++)
|
||||
this._dimParentWindow(this._dimmedWindows[i], true);
|
||||
this._dimWindow(this._dimmedWindows[i], true);
|
||||
}));
|
||||
},
|
||||
|
||||
@ -234,41 +234,39 @@ WindowManager.prototype = {
|
||||
_unmaximizeWindowDone : function(shellwm, actor) {
|
||||
},
|
||||
|
||||
_parentHasOtherAttachedDialog: function(parent, self) {
|
||||
_hasAttachedDialogs: function(window, ignoreWindow) {
|
||||
var count = 0;
|
||||
parent.foreach_transient(function(win) {
|
||||
if (win.get_window_type() == Meta.WindowType.MODAL_DIALOG && win != self)
|
||||
window.foreach_transient(function(win) {
|
||||
if (win != ignoreWindow && win.get_window_type() == Meta.WindowType.MODAL_DIALOG)
|
||||
count++;
|
||||
return false;
|
||||
});
|
||||
return count != 0;
|
||||
},
|
||||
|
||||
_markParentWindowAsDimmable: function(actor, animate) {
|
||||
if (Meta.prefs_get_attach_modal_dialogs()) {
|
||||
this._dimmedWindows.push(actor);
|
||||
if (this._shouldAnimate())
|
||||
this._dimParentWindow(actor, animate);
|
||||
_checkDimming: function(window, ignoreWindow) {
|
||||
let shouldDim = Meta.prefs_get_attach_modal_dialogs() && this._hasAttachedDialogs(window, ignoreWindow);
|
||||
|
||||
if (shouldDim && !window._dimmed) {
|
||||
window._dimmed = true;
|
||||
this._dimmedWindows.push(window);
|
||||
if (!Main.overview.visible)
|
||||
this._dimWindow(window, true);
|
||||
} else if (!shouldDim && window._dimmed) {
|
||||
window._dimmed = false;
|
||||
this._dimmedWindows = this._dimmedWindows.filter(function(win) {
|
||||
return win != window;
|
||||
});
|
||||
if (!Main.overview.visible)
|
||||
this._undimWindow(window, true);
|
||||
}
|
||||
},
|
||||
|
||||
_unmarkParentWindowAsDimmable: function(actor, animate) {
|
||||
if (!Main.overview.visible)
|
||||
this._undimParentWindow(actor, true);
|
||||
this._dimmedWindows = this._dimmedWindows.filter(function(win) {
|
||||
return win != actor;
|
||||
});
|
||||
},
|
||||
|
||||
_dimParentWindow: function(actor, animate) {
|
||||
let meta = actor.get_meta_window();
|
||||
let parent = meta.get_transient_for();
|
||||
if (!parent)
|
||||
_dimWindow: function(window, animate) {
|
||||
let actor = window.get_compositor_private();
|
||||
if (!actor)
|
||||
return;
|
||||
let parentActor = parent.get_compositor_private();
|
||||
if (!parentActor || this._parentHasOtherAttachedDialog(parent, meta))
|
||||
return;
|
||||
let texture = parentActor.get_texture();
|
||||
let texture = actor.get_texture();
|
||||
if (animate)
|
||||
Tweener.addTween(getWindowDimmer(texture),
|
||||
{ dimFraction: 1.0,
|
||||
@ -279,15 +277,11 @@ WindowManager.prototype = {
|
||||
getWindowDimmer(texture).dimFraction = 1.0;
|
||||
},
|
||||
|
||||
_undimParentWindow: function(actor, animate) {
|
||||
let meta = actor.get_meta_window();
|
||||
let parent = meta.get_transient_for();
|
||||
if (!parent)
|
||||
_undimWindow: function(window, animate) {
|
||||
let actor = window.get_compositor_private();
|
||||
if (!actor)
|
||||
return;
|
||||
let parentActor = parent.get_compositor_private();
|
||||
if (!parentActor || this._parentHasOtherAttachedDialog(parent, meta))
|
||||
return;
|
||||
let texture = parentActor.get_texture();
|
||||
let texture = actor.get_texture();
|
||||
if (animate)
|
||||
Tweener.addTween(getWindowDimmer(texture),
|
||||
{ dimFraction: 0.0,
|
||||
@ -304,17 +298,19 @@ WindowManager.prototype = {
|
||||
let type = actor.meta_window.get_window_type();
|
||||
if (type == actor._windowType)
|
||||
return;
|
||||
if (type == Meta.WindowType.MODAL_DIALOG)
|
||||
this._markParentWindowAsDimmable(actor, true);
|
||||
else if (actor._windowType == Meta.WindowType.MODAL_DIALOG)
|
||||
this._unmarkParentWindowAsDimmable(actor, true);
|
||||
if (type == Meta.WindowType.MODAL_DIALOG ||
|
||||
actor._windowType == Meta.WindowType.MODAL_DIALOG) {
|
||||
let parent = actor.get_meta_window().get_transient_for();
|
||||
if (parent)
|
||||
this._checkDimming(parent);
|
||||
}
|
||||
|
||||
actor._windowType = type;
|
||||
}));
|
||||
if (actor.meta_window.get_window_type() == Meta.WindowType.MODAL_DIALOG
|
||||
&& Meta.prefs_get_attach_modal_dialogs()
|
||||
&& actor.get_meta_window().get_transient_for()) {
|
||||
this._markParentWindowAsDimmable(actor, true);
|
||||
this._checkDimming(actor.get_meta_window().get_transient_for());
|
||||
if (this._shouldAnimate()) {
|
||||
actor.set_scale(1.0, 0.0);
|
||||
actor.show();
|
||||
@ -374,14 +370,20 @@ WindowManager.prototype = {
|
||||
},
|
||||
|
||||
_destroyWindow : function(shellwm, actor) {
|
||||
let parent = actor.meta_window.get_transient_for();
|
||||
let window = actor.meta_window;
|
||||
let parent = window.get_transient_for();
|
||||
if (actor._notifyWindowTypeSignalId) {
|
||||
actor.meta_window.disconnect(actor._notifyWindowTypeSignalId);
|
||||
window.disconnect(actor._notifyWindowTypeSignalId);
|
||||
actor._notifyWindowTypeSignalId = 0;
|
||||
}
|
||||
while (actor.meta_window.get_window_type() == Meta.WindowType.MODAL_DIALOG
|
||||
if (window._dimmed) {
|
||||
this._dimmedWindows = this._dimmedWindows.filter(function(win) {
|
||||
return win != window;
|
||||
});
|
||||
}
|
||||
while (window.get_window_type() == Meta.WindowType.MODAL_DIALOG
|
||||
&& parent) {
|
||||
this._unmarkParentWindowAsDimmable(actor, true);
|
||||
this._checkDimming(parent, window);
|
||||
if (!Meta.prefs_get_attach_modal_dialogs()
|
||||
|| !this._shouldAnimate())
|
||||
break;
|
||||
|
@ -221,8 +221,15 @@ WindowClone.prototype = {
|
||||
|
||||
let [width, height] = this.actor.get_transformed_size();
|
||||
|
||||
this.actor.x = _clamp(this.actor.x, 0, global.screen_width - width);
|
||||
this.actor.y = _clamp(this.actor.y, Panel.PANEL_HEIGHT, global.screen_height - height);
|
||||
let monitorIndex = this.metaWindow.get_monitor();
|
||||
let availArea = global.get_monitors()[monitorIndex];
|
||||
if (monitorIndex == global.get_primary_monitor_index()) {
|
||||
availArea.y += Main.panel.actor.height;
|
||||
availArea.height -= Main.panel.actor.height;
|
||||
}
|
||||
|
||||
this.actor.x = _clamp(this.actor.x, availArea.x, availArea.x + availArea.width - width);
|
||||
this.actor.y = _clamp(this.actor.y, availArea.y, availArea.y + availArea.height - height);
|
||||
},
|
||||
|
||||
_zoomStart : function () {
|
||||
@ -387,12 +394,6 @@ WindowOverlay.prototype = {
|
||||
|
||||
show: function() {
|
||||
this._hidden = false;
|
||||
let [x, y, mask] = global.get_pointer();
|
||||
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE,
|
||||
x, y);
|
||||
if (actor == this._windowClone.actor) {
|
||||
this.closeButton.show();
|
||||
}
|
||||
this.title.show();
|
||||
},
|
||||
|
||||
@ -541,14 +542,14 @@ const WindowPositionFlags = {
|
||||
};
|
||||
|
||||
/**
|
||||
* @metaWorkspace: a #Meta.Workspace
|
||||
* @metaWorkspace: a #Meta.Workspace, or null
|
||||
*/
|
||||
function Workspace(metaWorkspace) {
|
||||
this._init(metaWorkspace);
|
||||
function Workspace(metaWorkspace, monitorIndex) {
|
||||
this._init(metaWorkspace, monitorIndex);
|
||||
}
|
||||
|
||||
Workspace.prototype = {
|
||||
_init : function(metaWorkspace) {
|
||||
_init : function(metaWorkspace, monitorIndex) {
|
||||
// When dragging a window, we use this slot for reserve space.
|
||||
this._reservedSlot = null;
|
||||
this.metaWorkspace = metaWorkspace;
|
||||
@ -557,6 +558,8 @@ Workspace.prototype = {
|
||||
this._width = 0;
|
||||
this._height = 0;
|
||||
|
||||
this.monitorIndex = monitorIndex;
|
||||
this._monitor = global.get_monitors()[this.monitorIndex];
|
||||
this._windowOverlaysGroup = new Clutter.Group();
|
||||
// Without this the drop area will be overlapped.
|
||||
this._windowOverlaysGroup.set_size(0, 0);
|
||||
@ -572,7 +575,7 @@ Workspace.prototype = {
|
||||
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
let windows = Main.getWindowActorsForWorkspace(this.metaWorkspace.index());
|
||||
let windows = global.get_window_actors().filter(this._isMyWindow, this);
|
||||
|
||||
// Create clones for windows that should be
|
||||
// visible in the Overview
|
||||
@ -585,10 +588,16 @@ Workspace.prototype = {
|
||||
}
|
||||
|
||||
// Track window changes
|
||||
this._windowAddedId = this.metaWorkspace.connect('window-added',
|
||||
Lang.bind(this, this._windowAdded));
|
||||
this._windowRemovedId = this.metaWorkspace.connect('window-removed',
|
||||
Lang.bind(this, this._windowRemoved));
|
||||
if (this.metaWorkspace) {
|
||||
this._windowAddedId = this.metaWorkspace.connect('window-added',
|
||||
Lang.bind(this, this._windowAdded));
|
||||
this._windowRemovedId = this.metaWorkspace.connect('window-removed',
|
||||
Lang.bind(this, this._windowRemoved));
|
||||
}
|
||||
this._windowEnteredMonitorId = global.screen.connect('window-entered-monitor',
|
||||
Lang.bind(this, this._windowEnteredMonitor));
|
||||
this._windowLeftMonitorId = global.screen.connect('window-left-monitor',
|
||||
Lang.bind(this, this._windowLeftMonitor));
|
||||
this._repositionWindowsId = 0;
|
||||
|
||||
this.leavingOverview = false;
|
||||
@ -896,7 +905,7 @@ Workspace.prototype = {
|
||||
clones = this._orderWindowsByMotionAndStartup(clones, slots);
|
||||
|
||||
let currentWorkspace = global.screen.get_active_workspace();
|
||||
let isOnCurrentWorkspace = this.metaWorkspace == currentWorkspace;
|
||||
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
|
||||
|
||||
for (let i = 0; i < clones.length; i++) {
|
||||
let slot = slots[i];
|
||||
@ -999,7 +1008,8 @@ Workspace.prototype = {
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let clone = this._windows[i];
|
||||
let overlay = this._windowOverlays[i];
|
||||
this._showWindowOverlay(clone, overlay, this.metaWorkspace == currentWorkspace);
|
||||
this._showWindowOverlay(clone, overlay,
|
||||
this.metaWorkspace == null || this.metaWorkspace == currentWorkspace);
|
||||
}
|
||||
},
|
||||
|
||||
@ -1036,7 +1046,7 @@ Workspace.prototype = {
|
||||
this._windowOverlaysGroup.hide();
|
||||
},
|
||||
|
||||
_windowRemoved : function(metaWorkspace, metaWin) {
|
||||
_doRemoveWindow : function(metaWin) {
|
||||
let win = metaWin.get_compositor_private();
|
||||
|
||||
// find the position of the window in our list
|
||||
@ -1045,6 +1055,10 @@ Workspace.prototype = {
|
||||
if (index == -1)
|
||||
return;
|
||||
|
||||
// Check if window still should be here
|
||||
if (win && this._isMyWindow(win))
|
||||
return;
|
||||
|
||||
let clone = this._windows[index];
|
||||
|
||||
this._windows.splice(index, 1);
|
||||
@ -1088,7 +1102,7 @@ Workspace.prototype = {
|
||||
Lang.bind(this, this._delayedWindowRepositioning));
|
||||
},
|
||||
|
||||
_windowAdded : function(metaWorkspace, metaWin) {
|
||||
_doAddWindow : function(metaWin) {
|
||||
if (this.leavingOverview)
|
||||
return;
|
||||
|
||||
@ -1100,13 +1114,18 @@ Workspace.prototype = {
|
||||
Mainloop.idle_add(Lang.bind(this,
|
||||
function () {
|
||||
if (this.actor && metaWin.get_compositor_private())
|
||||
this._windowAdded(metaWorkspace, metaWin);
|
||||
this._doAddWindow(metaWin);
|
||||
return false;
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this._isOverviewWindow(win))
|
||||
// We might have the window in our list already if it was on all workspaces and
|
||||
// now was moved to this workspace
|
||||
if (this._lookupIndex (metaWin) != -1)
|
||||
return;
|
||||
|
||||
if (!this._isMyWindow(win) || !this._isOverviewWindow(win))
|
||||
return;
|
||||
|
||||
let clone = this._addWindowClone(win);
|
||||
@ -1131,6 +1150,26 @@ Workspace.prototype = {
|
||||
this.positionWindows(WindowPositionFlags.ANIMATE);
|
||||
},
|
||||
|
||||
_windowAdded : function(metaWorkspace, metaWin) {
|
||||
this._doAddWindow(metaWin);
|
||||
},
|
||||
|
||||
_windowRemoved : function(metaWorkspace, metaWin) {
|
||||
this._doRemoveWindow(metaWin);
|
||||
},
|
||||
|
||||
_windowEnteredMonitor : function(metaScreen, monitorIndex, metaWin) {
|
||||
if (monitorIndex == this.monitorIndex) {
|
||||
this._doAddWindow(metaWin);
|
||||
}
|
||||
},
|
||||
|
||||
_windowLeftMonitor : function(metaScreen, monitorIndex, metaWin) {
|
||||
if (monitorIndex == this.monitorIndex) {
|
||||
this._doRemoveWindow(metaWin);
|
||||
}
|
||||
},
|
||||
|
||||
// check for maximized windows on the workspace
|
||||
hasMaximizedWindows: function() {
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
@ -1167,7 +1206,7 @@ Workspace.prototype = {
|
||||
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this,
|
||||
this._doneLeavingOverview));
|
||||
|
||||
if (this.metaWorkspace != currentWorkspace)
|
||||
if (this.metaWorkspace != null && this.metaWorkspace != currentWorkspace)
|
||||
return;
|
||||
|
||||
// Position and scale the windows.
|
||||
@ -1211,8 +1250,12 @@ Workspace.prototype = {
|
||||
}
|
||||
Tweener.removeTweens(actor);
|
||||
|
||||
this.metaWorkspace.disconnect(this._windowAddedId);
|
||||
this.metaWorkspace.disconnect(this._windowRemovedId);
|
||||
if (this.metaWorkspace) {
|
||||
this.metaWorkspace.disconnect(this._windowAddedId);
|
||||
this.metaWorkspace.disconnect(this._windowRemovedId);
|
||||
}
|
||||
global.screen.disconnect(this._windowEnteredMonitorId);
|
||||
global.screen.disconnect(this._windowLeftMonitorId);
|
||||
|
||||
if (this._repositionWindowsId > 0)
|
||||
Mainloop.source_remove(this._repositionWindowsId);
|
||||
@ -1231,9 +1274,10 @@ Workspace.prototype = {
|
||||
this.leavingOverview = false;
|
||||
},
|
||||
|
||||
// Tests if @win belongs to this workspaces
|
||||
// Tests if @win belongs to this workspaces and monitor
|
||||
_isMyWindow : function (win) {
|
||||
return Main.isWindowActorDisplayedOnWorkspace(win, this.metaWorkspace.index());
|
||||
return (this.metaWorkspace == null || Main.isWindowActorDisplayedOnWorkspace(win, this.metaWorkspace.index())) &&
|
||||
(!win.get_meta_window() || win.get_meta_window().get_monitor() == this.monitorIndex);
|
||||
},
|
||||
|
||||
// Tests if @win should be shown in the Overview
|
||||
@ -1321,8 +1365,10 @@ Workspace.prototype = {
|
||||
},
|
||||
|
||||
_onCloneSelected : function (clone, time) {
|
||||
Main.activateWindow(clone.metaWindow, time,
|
||||
this.metaWorkspace.index());
|
||||
let wsIndex = undefined;
|
||||
if (this.metaWorkspace)
|
||||
wsIndex = this.metaWorkspace.index();
|
||||
Main.activateWindow(clone.metaWindow, time, wsIndex);
|
||||
},
|
||||
|
||||
// Draggable target interface
|
||||
@ -1350,7 +1396,15 @@ Workspace.prototype = {
|
||||
};
|
||||
|
||||
let metaWindow = win.get_meta_window();
|
||||
metaWindow.change_workspace_by_index(this.metaWorkspace.index(),
|
||||
|
||||
// We need to move the window before changing the workspace, because
|
||||
// the move itself could cause a workspace change if the window enters
|
||||
// the primary monitor
|
||||
if (metaWindow.get_monitor() != this.monitorIndex)
|
||||
metaWindow.move_to_monitor(this.monitorIndex);
|
||||
|
||||
let index = this.metaWorkspace ? this.metaWorkspace.index() : global.screen.get_active_workspace_index();
|
||||
metaWindow.change_workspace_by_index(index,
|
||||
false, // don't create workspace
|
||||
time);
|
||||
return true;
|
||||
|
@ -146,6 +146,7 @@ function WorkspaceThumbnail(metaWorkspace) {
|
||||
WorkspaceThumbnail.prototype = {
|
||||
_init : function(metaWorkspace) {
|
||||
this.metaWorkspace = metaWorkspace;
|
||||
this.monitorIndex = global.get_primary_monitor_index();
|
||||
|
||||
this.actor = new St.Group({ reactive: true,
|
||||
clip_to_allocation: true,
|
||||
@ -169,7 +170,8 @@ WorkspaceThumbnail.prototype = {
|
||||
this._background = new Clutter.Clone({ source: global.background_actor });
|
||||
this._contents.add_actor(this._background);
|
||||
|
||||
this.setPorthole(0, 0, global.screen_width, global.screen_height);
|
||||
let monitor = global.get_primary_monitor();
|
||||
this.setPorthole(monitor.x, monitor.y, monitor.width, monitor.height);
|
||||
|
||||
let windows = global.get_window_actors().filter(this._isMyWindow, this);
|
||||
|
||||
@ -186,6 +188,10 @@ WorkspaceThumbnail.prototype = {
|
||||
Lang.bind(this, this._windowAdded));
|
||||
this._windowRemovedId = this.metaWorkspace.connect('window-removed',
|
||||
Lang.bind(this, this._windowRemoved));
|
||||
this._windowEnteredMonitorId = global.screen.connect('window-entered-monitor',
|
||||
Lang.bind(this, this._windowEnteredMonitor));
|
||||
this._windowLeftMonitorId = global.screen.connect('window-left-monitor',
|
||||
Lang.bind(this, this._windowLeftMonitor));
|
||||
|
||||
this.state = ThumbnailState.NORMAL;
|
||||
this._slidePosition = 0; // Fully slid in
|
||||
@ -193,6 +199,8 @@ WorkspaceThumbnail.prototype = {
|
||||
},
|
||||
|
||||
setPorthole: function(x, y, width, height) {
|
||||
this._portholeX = x;
|
||||
this._portholeY = y;
|
||||
this.actor.set_size(width, height);
|
||||
this._contents.set_position(-x, -y);
|
||||
},
|
||||
@ -239,7 +247,7 @@ WorkspaceThumbnail.prototype = {
|
||||
return this._collapseFraction;
|
||||
},
|
||||
|
||||
_windowRemoved : function(metaWorkspace, metaWin) {
|
||||
_doRemoveWindow : function(metaWin) {
|
||||
let win = metaWin.get_compositor_private();
|
||||
|
||||
// find the position of the window in our list
|
||||
@ -248,12 +256,16 @@ WorkspaceThumbnail.prototype = {
|
||||
if (index == -1)
|
||||
return;
|
||||
|
||||
// Check if window still should be here
|
||||
if (win && this._isMyWindow(win))
|
||||
return;
|
||||
|
||||
let clone = this._windows[index];
|
||||
this._windows.splice(index, 1);
|
||||
clone.destroy();
|
||||
},
|
||||
|
||||
_windowAdded : function(metaWorkspace, metaWin) {
|
||||
_doAddWindow : function(metaWin) {
|
||||
if (this.leavingOverview)
|
||||
return;
|
||||
|
||||
@ -265,18 +277,43 @@ WorkspaceThumbnail.prototype = {
|
||||
Mainloop.idle_add(Lang.bind(this,
|
||||
function () {
|
||||
if (this.actor && metaWin.get_compositor_private())
|
||||
this._windowAdded(metaWorkspace, metaWin);
|
||||
this._doAddWindow(metaWin);
|
||||
return false;
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this._isOverviewWindow(win))
|
||||
// We might have the window in our list already if it was on all workspaces and
|
||||
// now was moved to this workspace
|
||||
if (this._lookupIndex (metaWin) != -1)
|
||||
return;
|
||||
|
||||
if (!this._isMyWindow(win) || !this._isOverviewWindow(win))
|
||||
return;
|
||||
|
||||
let clone = this._addWindowClone(win);
|
||||
},
|
||||
|
||||
_windowAdded : function(metaWorkspace, metaWin) {
|
||||
this._doAddWindow(metaWin);
|
||||
},
|
||||
|
||||
_windowRemoved : function(metaWorkspace, metaWin) {
|
||||
this._doRemoveWindow(metaWin);
|
||||
},
|
||||
|
||||
_windowEnteredMonitor : function(metaScreen, monitorIndex, metaWin) {
|
||||
if (monitorIndex == this.monitorIndex) {
|
||||
this._doAddWindow(metaWin);
|
||||
}
|
||||
},
|
||||
|
||||
_windowLeftMonitor : function(metaScreen, monitorIndex, metaWin) {
|
||||
if (monitorIndex == this.monitorIndex) {
|
||||
this._doRemoveWindow(metaWin);
|
||||
}
|
||||
},
|
||||
|
||||
destroy : function() {
|
||||
this.actor.destroy();
|
||||
},
|
||||
@ -284,15 +321,17 @@ WorkspaceThumbnail.prototype = {
|
||||
_onDestroy: function(actor) {
|
||||
this.metaWorkspace.disconnect(this._windowAddedId);
|
||||
this.metaWorkspace.disconnect(this._windowRemovedId);
|
||||
global.screen.disconnect(this._windowEnteredMonitorId);
|
||||
global.screen.disconnect(this._windowLeftMonitorId);
|
||||
|
||||
this._windows = [];
|
||||
this.actor = null;
|
||||
},
|
||||
|
||||
// Tests if @win belongs to this workspaces
|
||||
// Tests if @win belongs to this workspace and monitor
|
||||
_isMyWindow : function (win) {
|
||||
return win.get_workspace() == this.metaWorkspace.index() ||
|
||||
(win.get_meta_window() && win.get_meta_window().is_on_all_workspaces());
|
||||
return Main.isWindowActorDisplayedOnWorkspace(win, this.metaWorkspace.index()) &&
|
||||
(!win.get_meta_window() || win.get_meta_window().get_monitor() == this.monitorIndex);
|
||||
},
|
||||
|
||||
// Tests if @win should be shown in the Overview
|
||||
@ -340,6 +379,11 @@ WorkspaceThumbnail.prototype = {
|
||||
|
||||
// Draggable target interface
|
||||
handleDragOver : function(source, actor, x, y, time) {
|
||||
if (source == Main.xdndHandler) {
|
||||
this.metaWorkspace.activate(time);
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
}
|
||||
|
||||
if (this.state > ThumbnailState.NORMAL)
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
|
||||
@ -361,6 +405,13 @@ WorkspaceThumbnail.prototype = {
|
||||
return false;
|
||||
|
||||
let metaWindow = win.get_meta_window();
|
||||
|
||||
// We need to move the window before changing the workspace, because
|
||||
// the move itself could cause a workspace change if the window enters
|
||||
// the primary monitor
|
||||
if (metaWindow.get_monitor() != this.monitorIndex)
|
||||
metaWindow.move_to_monitor(this.monitorIndex);
|
||||
|
||||
metaWindow.change_workspace_by_index(this.metaWorkspace.index(),
|
||||
false, // don't create workspace
|
||||
time);
|
||||
@ -442,11 +493,12 @@ ThumbnailsBox.prototype = {
|
||||
|
||||
// The "porthole" is the portion of the screen that we show in the workspaces
|
||||
let panelHeight = Main.panel.actor.height;
|
||||
let monitor = global.get_primary_monitor();
|
||||
this._porthole = {
|
||||
x: 0,
|
||||
y: panelHeight,
|
||||
width: global.screen_width,
|
||||
height: global.screen_height - panelHeight
|
||||
x: monitor.x,
|
||||
y: monitor.y + panelHeight,
|
||||
width: monitor.width,
|
||||
height: monitor.height - panelHeight
|
||||
};
|
||||
|
||||
this.addThumbnails(0, global.screen.n_workspaces);
|
||||
|
@ -51,6 +51,7 @@ WorkspacesView.prototype = {
|
||||
this._height = 0;
|
||||
this._x = 0;
|
||||
this._y = 0;
|
||||
this._workspaceRatioSpacing = 0;
|
||||
this._spacing = 0;
|
||||
this._lostWorkspaces = [];
|
||||
this._animating = false; // tweening
|
||||
@ -67,6 +68,18 @@ WorkspacesView.prototype = {
|
||||
this._workspaces[w].actor.reparent(this.actor);
|
||||
this._workspaces[activeWorkspaceIndex].actor.raise_top();
|
||||
|
||||
this._extraWorkspaces = [];
|
||||
let monitors = global.get_monitors();
|
||||
let m = 0;
|
||||
for (let i = 0; i < monitors.length; i++) {
|
||||
if (i == global.get_primary_monitor_index())
|
||||
continue;
|
||||
let ws = new Workspace.Workspace(null, i);
|
||||
this._extraWorkspaces[m++] = ws;
|
||||
ws.setGeometry(monitors[i].x, monitors[i].y, monitors[i].width, monitors[i].height);
|
||||
global.overlay_group.add_actor(ws.actor);
|
||||
}
|
||||
|
||||
// Position/scale the desktop windows and their children after the
|
||||
// workspaces have been created. This cannot be done first because
|
||||
// window movement depends on the Workspaces object being accessible
|
||||
@ -76,6 +89,8 @@ WorkspacesView.prototype = {
|
||||
Lang.bind(this, function() {
|
||||
for (let w = 0; w < this._workspaces.length; w++)
|
||||
this._workspaces[w].zoomToOverview();
|
||||
for (let w = 0; w < this._extraWorkspaces.length; w++)
|
||||
this._extraWorkspaces[w].zoomToOverview();
|
||||
}));
|
||||
this._overviewShownId =
|
||||
Main.overview.connect('shown',
|
||||
@ -110,7 +125,7 @@ WorkspacesView.prototype = {
|
||||
this._swipeScrollEndId = 0;
|
||||
},
|
||||
|
||||
setGeometry: function(x, y, width, height) {
|
||||
setGeometry: function(x, y, width, height, spacing) {
|
||||
if (this._x == x && this._y == y &&
|
||||
this._width == width && this._height == height)
|
||||
return;
|
||||
@ -118,6 +133,7 @@ WorkspacesView.prototype = {
|
||||
this._height = height;
|
||||
this._x = x;
|
||||
this._y = y;
|
||||
this._workspaceRatioSpacing = spacing;
|
||||
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
this._workspaces[i].setGeometry(x, y, width, height);
|
||||
@ -146,6 +162,8 @@ WorkspacesView.prototype = {
|
||||
|
||||
for (let w = 0; w < this._workspaces.length; w++)
|
||||
this._workspaces[w].zoomFromOverview();
|
||||
for (let w = 0; w < this._extraWorkspaces.length; w++)
|
||||
this._extraWorkspaces[w].zoomFromOverview();
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
@ -155,6 +173,8 @@ WorkspacesView.prototype = {
|
||||
syncStacking: function(stackIndices) {
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
this._workspaces[i].syncStacking(stackIndices);
|
||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||
this._extraWorkspaces[i].syncStacking(stackIndices);
|
||||
},
|
||||
|
||||
updateWindowPositions: function() {
|
||||
@ -182,7 +202,7 @@ WorkspacesView.prototype = {
|
||||
Tweener.removeTweens(workspace.actor);
|
||||
|
||||
let opacity = (this._inDrag && w != active) ? 200 : 255;
|
||||
let y = (w - active) * (this._height + this._spacing);
|
||||
let y = (w - active) * (this._height + this._spacing + this._workspaceRatioSpacing);
|
||||
|
||||
if (showAnimation) {
|
||||
let params = { y: y,
|
||||
@ -315,6 +335,8 @@ WorkspacesView.prototype = {
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||
this._extraWorkspaces[i].destroy();
|
||||
this._scrollAdjustment.run_dispose();
|
||||
Main.overview.disconnect(this._overviewShowingId);
|
||||
Main.overview.disconnect(this._overviewShownId);
|
||||
@ -365,6 +387,7 @@ WorkspacesView.prototype = {
|
||||
return;
|
||||
|
||||
this._inDrag = true;
|
||||
this._firstDragMotion = true;
|
||||
|
||||
this._dragMonitor = {
|
||||
dragMotion: Lang.bind(this, this._onDragMotion)
|
||||
@ -376,6 +399,14 @@ WorkspacesView.prototype = {
|
||||
if (Main.overview.animationInProgress)
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
|
||||
if (this._firstDragMotion) {
|
||||
this._firstDragMotion = false;
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
this._workspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
|
||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||
this._extraWorkspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
|
||||
}
|
||||
|
||||
let primary = global.get_primary_monitor();
|
||||
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
@ -389,7 +420,6 @@ WorkspacesView.prototype = {
|
||||
let switchTop = (dragEvent.y <= topEdge && topWorkspace);
|
||||
if (switchTop && this._dragOverLastY != topEdge) {
|
||||
topWorkspace.metaWorkspace.activate(global.get_current_time());
|
||||
topWorkspace.setReservedSlot(dragEvent.dragActor._delegate);
|
||||
this._dragOverLastY = topEdge;
|
||||
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
@ -398,7 +428,6 @@ WorkspacesView.prototype = {
|
||||
let switchBottom = (dragEvent.y >= bottomEdge && bottomWorkspace);
|
||||
if (switchBottom && this._dragOverLastY != bottomEdge) {
|
||||
bottomWorkspace.metaWorkspace.activate(global.get_current_time());
|
||||
bottomWorkspace.setReservedSlot(dragEvent.dragActor._delegate);
|
||||
this._dragOverLastY = bottomEdge;
|
||||
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
@ -433,7 +462,6 @@ WorkspacesView.prototype = {
|
||||
this._timeoutId = Mainloop.timeout_add_seconds(1,
|
||||
Lang.bind(this, function() {
|
||||
hoverWorkspace.metaWorkspace.activate(global.get_current_time());
|
||||
hoverWorkspace.setReservedSlot(dragEvent.dragActor._delegate);
|
||||
return false;
|
||||
}));
|
||||
} else {
|
||||
@ -456,6 +484,8 @@ WorkspacesView.prototype = {
|
||||
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
this._workspaces[i].setReservedSlot(null);
|
||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||
this._extraWorkspaces[i].setReservedSlot(null);
|
||||
},
|
||||
|
||||
_swipeScrollBegin: function() {
|
||||
@ -534,6 +564,7 @@ WorkspacesDisplay.prototype = {
|
||||
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||
this.actor.connect('allocate', Lang.bind(this, this._allocate));
|
||||
this.actor.set_clip_to_allocation(true);
|
||||
|
||||
let controls = new St.Bin({ style_class: 'workspace-controls',
|
||||
request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT,
|
||||
@ -549,6 +580,8 @@ WorkspacesDisplay.prototype = {
|
||||
controls.connect('scroll-event',
|
||||
Lang.bind(this, this._onScrollEvent));
|
||||
|
||||
this._monitorIndex = global.get_primary_monitor_index();
|
||||
this._monitor = global.get_monitors()[this._monitorIndex];
|
||||
|
||||
this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox();
|
||||
controls.add_actor(this._thumbnailsBox.actor);
|
||||
@ -557,13 +590,28 @@ WorkspacesDisplay.prototype = {
|
||||
|
||||
this._inDrag = false;
|
||||
this._cancelledDrag = false;
|
||||
|
||||
this._alwaysZoomOut = false;
|
||||
this._zoomOut = false;
|
||||
this._zoomFraction = 0;
|
||||
|
||||
this._updateAlwaysZoom();
|
||||
|
||||
global.screen.connect('monitors-changed', Lang.bind(this, this._updateAlwaysZoom));
|
||||
Main.xdndHandler.connect('drag-begin', Lang.bind(this, function(){
|
||||
this._alwaysZoomOut = true;
|
||||
}));
|
||||
|
||||
Main.xdndHandler.connect('drag-end', Lang.bind(this, function(){
|
||||
this._alwaysZoomOut = false;
|
||||
this._updateAlwaysZoom();
|
||||
}));
|
||||
|
||||
this._nWorkspacesNotifyId = 0;
|
||||
this._switchWorkspaceNotifyId = 0;
|
||||
|
||||
this._itemDragBeginId = 0;
|
||||
this._itemDragCancelledId = 0;
|
||||
this._itemDragEndId = 0;
|
||||
this._windowDragBeginId = 0;
|
||||
this._windowDragCancelledId = 0;
|
||||
@ -571,13 +619,17 @@ WorkspacesDisplay.prototype = {
|
||||
},
|
||||
|
||||
show: function() {
|
||||
this._zoomOut = this._alwaysZoomOut;
|
||||
this._zoomFraction = this._alwaysZoomOut ? 1 : 0;
|
||||
this._updateZoom();
|
||||
|
||||
this._controls.show();
|
||||
this._thumbnailsBox.show();
|
||||
|
||||
this._workspaces = [];
|
||||
for (let i = 0; i < global.screen.n_workspaces; i++) {
|
||||
let metaWorkspace = global.screen.get_workspace_by_index(i);
|
||||
this._workspaces[i] = new Workspace.Workspace(metaWorkspace);
|
||||
this._workspaces[i] = new Workspace.Workspace(metaWorkspace, this._monitorIndex);
|
||||
}
|
||||
|
||||
if (this.workspacesView)
|
||||
@ -596,6 +648,9 @@ WorkspacesDisplay.prototype = {
|
||||
if (this._itemDragBeginId == 0)
|
||||
this._itemDragBeginId = Main.overview.connect('item-drag-begin',
|
||||
Lang.bind(this, this._dragBegin));
|
||||
if (this._itemDragCancelledId == 0)
|
||||
this._itemDragCancelledId = Main.overview.connect('item-drag-cancelled',
|
||||
Lang.bind(this, this._dragCancelled));
|
||||
if (this._itemDragEndId == 0)
|
||||
this._itemDragEndId = Main.overview.connect('item-drag-end',
|
||||
Lang.bind(this, this._dragEnd));
|
||||
@ -610,9 +665,6 @@ WorkspacesDisplay.prototype = {
|
||||
Lang.bind(this, this._dragEnd));
|
||||
|
||||
this._onRestacked();
|
||||
this._zoomOut = false;
|
||||
this._zoomFraction = 0;
|
||||
this._updateZoom();
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
@ -631,7 +683,11 @@ WorkspacesDisplay.prototype = {
|
||||
Main.overview.disconnect(this._itemDragBeginId);
|
||||
this._itemDragBeginId = 0;
|
||||
}
|
||||
if (this._itemEndBeginId > 0) {
|
||||
if (this._itemDragCancelledId > 0) {
|
||||
Main.overview.disconnect(this._itemDragCancelledId);
|
||||
this._itemDragCancelledId = 0;
|
||||
}
|
||||
if (this._itemDragEndId > 0) {
|
||||
Main.overview.disconnect(this._itemDragEndId);
|
||||
this._itemDragEndId = 0;
|
||||
}
|
||||
@ -666,6 +722,23 @@ WorkspacesDisplay.prototype = {
|
||||
return this._zoomFraction;
|
||||
},
|
||||
|
||||
_updateAlwaysZoom: function() {
|
||||
this._alwaysZoomOut = false;
|
||||
|
||||
let monitors = global.get_monitors();
|
||||
let primary = global.get_primary_monitor();
|
||||
|
||||
/* Look for any monitor to the right of the primary, if there is
|
||||
* one, we always keep zoom out, otherwise its hard to reach
|
||||
* the thumbnail area without passing into the next monitor. */
|
||||
for (let i = 0; i < monitors.length; i++) {
|
||||
if (monitors[i].x >= primary.x + primary.width) {
|
||||
this._alwaysZoomOut = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_getPreferredWidth: function (actor, forHeight, alloc) {
|
||||
// pass through the call in case the child needs it, but report 0x0
|
||||
this._controls.get_preferred_width(forHeight);
|
||||
@ -708,8 +781,11 @@ WorkspacesDisplay.prototype = {
|
||||
if (!this.workspacesView)
|
||||
return;
|
||||
|
||||
let width = this.actor.allocation.x2 - this.actor.allocation.x1;
|
||||
let height = this.actor.allocation.y2 - this.actor.allocation.y1;
|
||||
let fullWidth = this.actor.allocation.x2 - this.actor.allocation.x1;
|
||||
let fullHeight = this.actor.allocation.y2 - this.actor.allocation.y1;
|
||||
|
||||
let width = fullWidth;
|
||||
let height = fullHeight;
|
||||
|
||||
let [controlsMin, controlsNatural] = this._controls.get_preferred_width(height);
|
||||
let controlsVisible = this._controls.get_theme_node().get_length('visible-width');
|
||||
@ -728,7 +804,11 @@ WorkspacesDisplay.prototype = {
|
||||
x += controlsVisible;
|
||||
}
|
||||
|
||||
this.workspacesView.setGeometry(x, y, width, height);
|
||||
height = (fullHeight / fullWidth) * width;
|
||||
let difference = fullHeight - height;
|
||||
y += difference / 2;
|
||||
|
||||
this.workspacesView.setGeometry(x, y, width, height, difference);
|
||||
},
|
||||
|
||||
_onRestacked: function() {
|
||||
@ -757,7 +837,7 @@ WorkspacesDisplay.prototype = {
|
||||
// Assume workspaces are only added at the end
|
||||
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++) {
|
||||
let metaWorkspace = global.screen.get_workspace_by_index(w);
|
||||
this._workspaces[w] = new Workspace.Workspace(metaWorkspace);
|
||||
this._workspaces[w] = new Workspace.Workspace(metaWorkspace, this._monitorIndex);
|
||||
}
|
||||
|
||||
this._thumbnailsBox.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
|
||||
@ -794,7 +874,7 @@ WorkspacesDisplay.prototype = {
|
||||
if (Main.overview.animationInProgress)
|
||||
return;
|
||||
|
||||
let shouldZoom = this._controls.hover || (this._inDrag && !this._cancelledDrag);
|
||||
let shouldZoom = this._alwaysZoomOut || this._controls.hover || (this._inDrag && !this._cancelledDrag);
|
||||
if (shouldZoom != this._zoomOut) {
|
||||
this._zoomOut = shouldZoom;
|
||||
this._updateWorkspacesGeometry();
|
||||
|
@ -1,6 +1,7 @@
|
||||
af
|
||||
ar
|
||||
bg
|
||||
bn_IN
|
||||
ca
|
||||
cs
|
||||
da
|
||||
@ -23,6 +24,7 @@ ja
|
||||
ko
|
||||
kn
|
||||
lt
|
||||
lv
|
||||
nb
|
||||
nl
|
||||
nn
|
||||
|
@ -13,6 +13,7 @@ js/ui/messageTray.js
|
||||
js/ui/overview.js
|
||||
js/ui/panel.js
|
||||
js/ui/placeDisplay.js
|
||||
js/ui/polkitAuthenticationAgent.js
|
||||
js/ui/popupMenu.js
|
||||
js/ui/runDialog.js
|
||||
js/ui/searchDisplay.js
|
||||
@ -20,6 +21,7 @@ js/ui/statusMenu.js
|
||||
js/ui/status/accessibility.js
|
||||
js/ui/status/bluetooth.js
|
||||
js/ui/status/keyboard.js
|
||||
js/ui/status/network.js
|
||||
js/ui/status/power.js
|
||||
js/ui/status/volume.js
|
||||
js/ui/telepathyClient.js
|
||||
@ -29,8 +31,10 @@ js/ui/workspacesView.js
|
||||
src/gvc/gvc-mixer-control.c
|
||||
src/gdmuser/gdm-user.c
|
||||
src/main.c
|
||||
src/shell-app.c
|
||||
src/shell-app-system.c
|
||||
src/shell-global.c
|
||||
src/shell-mobile-providers.c
|
||||
src/shell-polkit-authentication-agent.c
|
||||
src/shell-util.c
|
||||
|
||||
|
434
po/ar.po
434
po/ar.po
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: HEAD\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-09 01:12+0200\n"
|
||||
"PO-Revision-Date: 2011-03-09 01:12+0300\n"
|
||||
"POT-Creation-Date: 2011-03-22 20:58+0200\n"
|
||||
"PO-Revision-Date: 2011-03-22 20:58+0300\n"
|
||||
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
||||
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -144,47 +144,43 @@ msgstr ""
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "لم يُعثَر على الأمر"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "تعذّر تحليل الأمر:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "لا تطبيق بهذا الاسم"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "فشل تنفيذ '%s':"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:226
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
msgid "All"
|
||||
msgstr "الكل"
|
||||
|
||||
#: ../js/ui/appDisplay.js:324
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "التطبيقات"
|
||||
|
||||
#: ../js/ui/appDisplay.js:350
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
msgid "SETTINGS"
|
||||
msgstr "الإعدادات"
|
||||
|
||||
#: ../js/ui/appDisplay.js:612
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
msgid "New Window"
|
||||
msgstr "نافذة جديدة"
|
||||
|
||||
#: ../js/ui/appDisplay.js:615
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "أزِل من المفضّلة"
|
||||
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Add to Favorites"
|
||||
msgstr "أضِف إلى المفضّلة"
|
||||
|
||||
@ -344,7 +340,7 @@ msgstr "هذا الأسبوع"
|
||||
msgid "Next week"
|
||||
msgstr "الأسبوع القادم"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:945
|
||||
msgid "Remove"
|
||||
msgstr "أزِل"
|
||||
|
||||
@ -399,7 +395,7 @@ msgstr "%A %Ol:%OM %p"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A %e %B، %Y"
|
||||
|
||||
@ -412,7 +408,7 @@ msgstr "العناصر الحديثة"
|
||||
msgid "Log Out %s"
|
||||
msgstr "اخرج%.0s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "اخرج"
|
||||
|
||||
@ -434,45 +430,42 @@ msgstr "ستُخرج تلقائيا بعد %d ثوان."
|
||||
msgid "Logging out of the system."
|
||||
msgstr "يخرج من النظام."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||
msgid "Shut Down"
|
||||
msgstr "أطفئ"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
msgstr "انقر على \"أطفئ\" لغلق هذه التطبيقات وإطفاء النظام."
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr "أطفئ الحاسوب"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
msgstr "سيُطفأ النظام تلقائيا خلال %d ثوان."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "انقر على \"أطفئ الحاسوب\" لغلق هذه التطبيقات وإطفاء النظام."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgid "Shutting down the system."
|
||||
msgstr "يُغلق النظام."
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "سيُطفأ النظام تلقائيا خلال %d ثوان."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
msgid "Powering off the system."
|
||||
msgstr "يُطفأ النظام."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "أعِد التشغيل"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr "انقر على \"أعِد التشغيل\" لغلق هذه التطبيقات إعادة تشغيل النظام."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "سيُعاد تشغيل النظام تلقائيا خلال %d ثوان."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Restarting the system."
|
||||
msgstr "يُعيد تشغيل النظام."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:395
|
||||
msgid "Confirm"
|
||||
msgstr "أكّد"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "ألغِ"
|
||||
|
||||
@ -486,7 +479,7 @@ msgstr "مفعّل"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "معطّل"
|
||||
|
||||
@ -506,47 +499,47 @@ msgstr "اعرض المصدر"
|
||||
msgid "Web Page"
|
||||
msgstr "صفحة الوب"
|
||||
|
||||
#: ../js/ui/messageTray.js:926
|
||||
#: ../js/ui/messageTray.js:938
|
||||
msgid "Open"
|
||||
msgstr "افتح"
|
||||
|
||||
#: ../js/ui/messageTray.js:1963
|
||||
#: ../js/ui/messageTray.js:2018
|
||||
msgid "System Information"
|
||||
msgstr "معلومات النظام"
|
||||
|
||||
#: ../js/ui/overview.js:88
|
||||
#: ../js/ui/overview.js:89
|
||||
msgid "Undo"
|
||||
msgstr "تراجع"
|
||||
|
||||
#: ../js/ui/overview.js:183
|
||||
#: ../js/ui/overview.js:184
|
||||
msgid "Windows"
|
||||
msgstr "النوافذ"
|
||||
|
||||
#: ../js/ui/overview.js:186
|
||||
#: ../js/ui/overview.js:187
|
||||
msgid "Applications"
|
||||
msgstr "التطبيقات"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:202
|
||||
#: ../js/ui/overview.js:203
|
||||
msgid "Dash"
|
||||
msgstr "الشريط"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:560
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "أغلق %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:919
|
||||
#: ../js/ui/panel.js:878
|
||||
msgid "Activities"
|
||||
msgstr "الأنشطة"
|
||||
|
||||
#: ../js/ui/panel.js:1020
|
||||
msgid "Panel"
|
||||
msgstr "اللوحة"
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "الشريط العلوي"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
@ -561,7 +554,7 @@ msgstr "أعد المحاولة"
|
||||
msgid "Connect to..."
|
||||
msgstr "اتّصل ب..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "الأماكن والأجهزة"
|
||||
|
||||
@ -570,55 +563,55 @@ msgstr "الأماكن والأجهزة"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:679
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:201
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "من فضلك اكتب أمرا:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
msgid "Searching..."
|
||||
msgstr "يبحث..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
msgid "No matching results."
|
||||
msgstr "لا نتائج مطابقة."
|
||||
|
||||
#: ../js/ui/statusMenu.js:102 ../js/ui/statusMenu.js:166
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "أطفئ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:104 ../js/ui/statusMenu.js:165
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "علّق"
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "متاح"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
msgstr "مشغول"
|
||||
|
||||
#: ../js/ui/statusMenu.js:138
|
||||
#: ../js/ui/statusMenu.js:197
|
||||
msgid "My Account"
|
||||
msgstr "حسابي"
|
||||
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
#: ../js/ui/statusMenu.js:201
|
||||
msgid "System Settings"
|
||||
msgstr "إعدادات النظام"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:208
|
||||
msgid "Lock Screen"
|
||||
msgstr "أوصد الشاشة"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:213
|
||||
msgid "Switch User"
|
||||
msgstr "بدّل المستخدم"
|
||||
|
||||
#: ../js/ui/statusMenu.js:158
|
||||
#: ../js/ui/statusMenu.js:218
|
||||
msgid "Log Out..."
|
||||
msgstr "اخرج..."
|
||||
|
||||
@ -626,14 +619,12 @@ msgstr "اخرج..."
|
||||
msgid "Zoom"
|
||||
msgstr "تقريب"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "قارئ الشاشة"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "لوحة مفاتيح على الشاشة"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "تنبيهات بصرية"
|
||||
@ -658,17 +649,17 @@ msgstr "مفاتيح الفأرة"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "إعدادات الإتاحة"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "تباين عال"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "نص كبير"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "بلوتوث"
|
||||
|
||||
@ -688,94 +679,94 @@ msgstr "اضبط جهازا جديدا..."
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "إعدادات بلوتوث"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "الاتصال"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "أرسل ملفات..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "تصفح الملفات..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "عطل أثناء تصفّح الجهاز"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "تعذّر تصفح الجهاز، رسالة العطل '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "إعدادات لوحة المفاتيح"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "إعدادات الفأرة"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "إعدادات الصوت"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "طلب تخويل من %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "يريد الجهاز %s صلاحية الوصول للخدمة '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "امنح الصلاحية دائما"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "امنح هذه المرة فقط"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "أخرج"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "تأكيد مزاوجة %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "يريد الجهاز %s المزاوجة مع هذا الحاسوب"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "من فضلك أكد تطابق الرقم '%s' مع الموجود على الجهاز."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "مطابقات"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "لا تتطابق"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "طلب مزاوجة من %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "من فضلك أدخل الرقم المذكور على الجهاز."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "حسنا"
|
||||
|
||||
@ -787,17 +778,147 @@ msgstr "أظهر تخطيط لوحة المفاتيح..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "إعدادات اللغة"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<غير معروفة>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "مُعَطَّلة"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "يتّصل..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "الاستيثاق مطلوب"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "الكبل مفصول"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "غير متاح"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "فشل الاتصال"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "متّصل (شخصي)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "إيثرنت تلقائي"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "نطاق عريض تلقائي"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "اتصال هاتفي تلقائي"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s تلقائي"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "بلوتوث تلقائي"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "لاسلكي تلقائي"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "المزيد..."
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "فعّل الشبكات"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "سلكي"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "لاسلكي"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "شبكة هاتف محمول"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "اتصال شخف"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "إعدادات الشّبكة"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "صرت الآن متّصلا بشبكة الهاتف المحمول '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "صرت الآن متّصلا بالشبكة اللاسلكية '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "صرت الآن متّصلا بالشبكة السلكية '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "صرت الآن متّصلا بشبكة شخف '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "صرت الآن متّصلا بشبكة '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
msgid "Connection established"
|
||||
msgstr "تم الاتصال"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "عُطّلت الشبكات"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "مدير الشبكة"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "إعدادات الطاقة"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "يَحسِب..."
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -809,12 +930,12 @@ msgstr[4] "بقي %d ساعة"
|
||||
msgstr[5] "بقي %d ساعة"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "بقي %d %s و %d %s"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "ساعة"
|
||||
@ -824,7 +945,7 @@ msgstr[3] "ساعات"
|
||||
msgstr[4] "ساعة"
|
||||
msgstr[5] "ساعة"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "دقيقة"
|
||||
@ -834,7 +955,7 @@ msgstr[3] "دقائق"
|
||||
msgstr[4] "دقيقة"
|
||||
msgstr[5] "دقيقة"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
@ -845,78 +966,78 @@ msgstr[3] "بقي %d دقائق"
|
||||
msgstr[4] "بقي %d دقيقة"
|
||||
msgstr[5] "بقي %d دقيقة"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "مقبس طاقة"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "بطارية حاسوب محمول"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "مزود طاقة لا منقطعة"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "شاشة"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "فأرة"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "لوحة المفاتيح"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "مساعد رقمي"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "هاتف محمول"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "مشغل وسائط"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "لوحة"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "حاسوب"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "مجهول"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "جزء"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "ميكروفون"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s متّصل."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s غير متّصل."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s غائب."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s مشغول."
|
||||
@ -924,7 +1045,7 @@ msgstr "%s مشغول."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:348
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "أُرسلت الساعة %l:%M:%S في %A"
|
||||
@ -933,11 +1054,11 @@ msgstr "أُرسلت الساعة %l:%M:%S في %A"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "اكتب نصا للبحث عنه..."
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "ابحث"
|
||||
|
||||
@ -953,7 +1074,7 @@ msgstr "'%s' جاهز"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -966,7 +1087,7 @@ msgstr[5] "%u مخرج"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
@ -977,19 +1098,24 @@ msgstr[3] "%u مداخل"
|
||||
msgstr[4] "%u مدخلا"
|
||||
msgstr[5] "%u مدخل"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "أصوات النظام"
|
||||
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:438
|
||||
msgid "Print version"
|
||||
msgstr "اطبع الإصدارة"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "فشل تشغيل '%s'"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "منذ أقل من دقيقة"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -1000,7 +1126,7 @@ msgstr[3] "منذ %d دقائق"
|
||||
msgstr[4] "منذ %d دقيقة"
|
||||
msgstr[5] "منذ %d دقيقة"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -1011,7 +1137,7 @@ msgstr[3] "منذ %d ساعات"
|
||||
msgstr[4] "منذ %d ساعة"
|
||||
msgstr[5] "منذ %d ساعة"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -1022,7 +1148,7 @@ msgstr[3] "منذ %d أيام"
|
||||
msgstr[4] "منذ %d يوما"
|
||||
msgstr[5] "منذ %d يوم"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -1033,6 +1159,14 @@ msgstr[3] "منذ %d أسابيع"
|
||||
msgstr[4] "منذ %d أسبوعا"
|
||||
msgstr[5] "منذ %d أسبوع"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "المملكة المتحدة"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "المبدئي"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "أغلق المستخدم مربع الاستيثاق الحِواري"
|
||||
@ -1057,6 +1191,33 @@ msgstr "نظام الملفات"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "أطفئ"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "انقر على \"أطفئ\" لغلق هذه التطبيقات وإطفاء النظام."
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "سيُطفأ النظام تلقائيا خلال %d ثوان."
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "يُغلق النظام."
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "أكّد"
|
||||
|
||||
#~ msgid "Panel"
|
||||
#~ msgstr "اللوحة"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "لا تطبيق بهذا الاسم"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "قارئ الشاشة"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "لوحة مفاتيح على الشاشة"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "التفضيلات"
|
||||
|
||||
@ -1125,9 +1286,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Frequent"
|
||||
#~ msgstr "متكرر"
|
||||
|
||||
#~ msgid "More"
|
||||
#~ msgstr "المزيد"
|
||||
|
||||
#~ msgid "(see all)"
|
||||
#~ msgstr "(انظر الكل)"
|
||||
|
||||
|
1189
po/bn_IN.po
Normal file
1189
po/bn_IN.po
Normal file
File diff suppressed because it is too large
Load Diff
513
po/es.po
513
po/es.po
@ -1,18 +1,18 @@
|
||||
# Spanish translation of gnome-shell.
|
||||
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
|
||||
# Benjamín Valero Espinosa <benjavalero@gmail.com>, 2011.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
|
||||
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-09 21:00+0000\n"
|
||||
"PO-Revision-Date: 2011-03-10 10:59+0100\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-25 20:20+0000\n"
|
||||
"PO-Revision-Date: 2011-03-25 21:35+0100\n"
|
||||
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -96,16 +96,16 @@ msgid ""
|
||||
"at the optimal thread count on the system."
|
||||
msgstr ""
|
||||
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
|
||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero («sink») "
|
||||
"de ensamblaje/sesensamblaje donde el vídeo que se está grabando se graba. "
|
||||
"Generalmente tendrá un origen de ensamblado/desensamblado; la salida de ese "
|
||||
"punto se escibirá en el archivo de salida. No obstante la tubería también "
|
||||
"puede tomar parte en su propia salida; esto se puede usar para enviar la "
|
||||
"salida a un servidor «icecast» a través de shout2send o similar. Cuando no "
|
||||
"está establecido o lo está a un valor vacío, se usará la tubería "
|
||||
"predeterminada. Actualmente es «videorate ! vp8enc quality=10 speed=2 threads="
|
||||
"%T ! queue ! webmmux» y greba en WEBM usando el códec VP8. Se usa %T como "
|
||||
"suposición para el número de hilos óptimos en el sistema."
|
||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero "
|
||||
"(«sink») de ensamblaje/sesensamblaje donde el vídeo que se está grabando se "
|
||||
"graba. Generalmente tendrá un origen de ensamblado/desensamblado; la salida "
|
||||
"de ese punto se escibirá en el archivo de salida. No obstante la tubería "
|
||||
"también puede tomar parte en su propia salida; esto se puede usar para "
|
||||
"enviar la salida a un servidor «icecast» a través de shout2send o similar. "
|
||||
"Cuando no está establecido o lo está a un valor vacío, se usará la tubería "
|
||||
"predeterminada. Actualmente es «videorate ! vp8enc quality=10 speed=2 "
|
||||
"threads=%T ! queue ! webmmux» y greba en WEBM usando el códec VP8. Se usa %T "
|
||||
"como suposición para el número de hilos óptimos en el sistema."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -174,47 +174,43 @@ msgstr ""
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "proveedores OpenSearch desactivados"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "Comando no encontrado"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "No se pudo analizar el comando:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "No existe la aplicación"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Falló la ejecución de «%s»:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:226
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
msgid "All"
|
||||
msgstr "Todas"
|
||||
|
||||
#: ../js/ui/appDisplay.js:324
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICACIONES"
|
||||
|
||||
#: ../js/ui/appDisplay.js:350
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
msgid "SETTINGS"
|
||||
msgstr "CONFIGURACIÓN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:612
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
msgid "New Window"
|
||||
msgstr "Ventana nueva"
|
||||
|
||||
#: ../js/ui/appDisplay.js:615
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Quitar de los favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Añadir a los favoritos"
|
||||
|
||||
@ -374,7 +370,7 @@ msgstr "Esta semana"
|
||||
msgid "Next week"
|
||||
msgstr "La semana que viene"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:931
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
msgid "Remove"
|
||||
msgstr "Quitar"
|
||||
|
||||
@ -429,7 +425,7 @@ msgstr "%a %H:%M"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A, %e de %B de %Y"
|
||||
|
||||
@ -442,7 +438,7 @@ msgstr "ELEMENTOS RECIENTES"
|
||||
msgid "Log Out %s"
|
||||
msgstr "Cerrar la sesión %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "Cerrar la sesión"
|
||||
|
||||
@ -466,46 +462,44 @@ msgstr "Su sesión se cerrará automáticamente en %d segundos."
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Cerrando la sesión."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||
msgid "Shut Down"
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "Pulse «Apagar» para salir de esas aplicaciones y apagar el sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "El sistema se apagará automáticamente en %d segundos."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgid "Shutting down the system."
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
msgid "Powering off the system."
|
||||
msgstr "Apagando el sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
"Pulse «Reiniciar» para salir de esas aplicaciones y reiniciar el sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "El sistema se reiniciará automáticamente en %d segundos."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Restarting the system."
|
||||
msgstr "Reiniciando el sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:395
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@ -519,7 +513,7 @@ msgstr "Activado"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
@ -539,47 +533,47 @@ msgstr "Ver fuente"
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#: ../js/ui/messageTray.js:924
|
||||
#: ../js/ui/messageTray.js:987
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
|
||||
#: ../js/ui/messageTray.js:1961
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
msgid "System Information"
|
||||
msgstr "Información del sistema"
|
||||
|
||||
#: ../js/ui/overview.js:88
|
||||
#: ../js/ui/overview.js:91
|
||||
msgid "Undo"
|
||||
msgstr "Deshacer"
|
||||
|
||||
#: ../js/ui/overview.js:183
|
||||
#: ../js/ui/overview.js:186
|
||||
msgid "Windows"
|
||||
msgstr "Ventanas"
|
||||
|
||||
#: ../js/ui/overview.js:186
|
||||
#: ../js/ui/overview.js:189
|
||||
msgid "Applications"
|
||||
msgstr "Aplicaciones"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:202
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr "Plano"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:560
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Salir de %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:919
|
||||
#: ../js/ui/panel.js:878
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
#: ../js/ui/panel.js:1020
|
||||
msgid "Panel"
|
||||
msgstr "Panel"
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "Barra superior"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
@ -594,64 +588,85 @@ msgstr "Reintentar"
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectar a…"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LUGARES Y DISPOSITIVOS"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:74
|
||||
msgid "Authentication Required"
|
||||
msgstr "Se necesita autenticación"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:108
|
||||
msgid "Administrator"
|
||||
msgstr "Administrador"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr "Autenticar"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Inténtelo de nuevo,"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
msgid "Password:"
|
||||
msgstr "Contraseña:"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:679
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:201
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Introduzca un comando:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
msgid "Searching..."
|
||||
msgstr "Buscando…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
msgid "No matching results."
|
||||
msgstr "No se encontró ningún resultado coincidente."
|
||||
|
||||
#: ../js/ui/statusMenu.js:113 ../js/ui/statusMenu.js:177
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "Apagar…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:115 ../js/ui/statusMenu.js:176
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
#: ../js/ui/statusMenu.js:136
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "Disponible"
|
||||
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:197
|
||||
msgid "My Account"
|
||||
msgstr "Mi cuenta"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:201
|
||||
msgid "System Settings"
|
||||
msgstr "Configuración del sistema"
|
||||
|
||||
#: ../js/ui/statusMenu.js:160
|
||||
#: ../js/ui/statusMenu.js:208
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear la pantalla"
|
||||
|
||||
#: ../js/ui/statusMenu.js:164
|
||||
#: ../js/ui/statusMenu.js:213
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/statusMenu.js:169
|
||||
#: ../js/ui/statusMenu.js:218
|
||||
msgid "Log Out..."
|
||||
msgstr "Cerrar la sesión…"
|
||||
|
||||
@ -659,14 +674,12 @@ msgstr "Cerrar la sesión…"
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliación"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "Lector de pantalla"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Teclado en pantalla"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Alertas visuales"
|
||||
@ -689,19 +702,19 @@ msgstr "Teclas del ratón"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:93
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Preferencias del acceso universal"
|
||||
msgstr "Configuración del acceso universal"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "Contraste alto"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "Texto grande"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -721,94 +734,94 @@ msgstr "Configurar un dispositivo nuevo…"
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Configuración de Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "Enviar archivos…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "Examinar archivos…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "Error al examinar el dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "No se puede examinar el dispositivo solicitado, el error es «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Configuración del teclado"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Ajustes del ratón…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Configuración del sonido"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Solicitud de autorización de %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "Conceder acceso siempre"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder sólo esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "Rechazar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Confirmación de emparejamiento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confirme que el PIN mostrado en «%s» coincide con el del dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "Coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "No coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Solicitud de emparejamiento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Introduzca el PIN mencionado en el dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
@ -820,17 +833,153 @@ msgstr "Mostrar la distribución del teclado…"
|
||||
msgid "Localization Settings"
|
||||
msgstr "Configuración regional"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1437
|
||||
msgid "<unknown>"
|
||||
msgstr "<desconocido>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:478
|
||||
msgid "connecting..."
|
||||
msgstr "conectando…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:481
|
||||
msgid "authentication required"
|
||||
msgstr "se necesita autenticación"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "firmware missing"
|
||||
msgstr "falta el «firmware»"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:498
|
||||
msgid "cable unplugged"
|
||||
msgstr "cable desconectado"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:503
|
||||
msgid "unavailable"
|
||||
msgstr "no disponible"
|
||||
|
||||
#: ../js/ui/status/network.js:505
|
||||
msgid "connection failed"
|
||||
msgstr "falló la conexión"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1385
|
||||
msgid "Connected (private)"
|
||||
msgstr "Conectada (privada)"
|
||||
|
||||
#: ../js/ui/status/network.js:666
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet automática"
|
||||
|
||||
#: ../js/ui/status/network.js:741
|
||||
msgid "Auto broadband"
|
||||
msgstr "Banda ancha automática"
|
||||
|
||||
#: ../js/ui/status/network.js:744
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Marcado automático"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:887 ../js/ui/status/network.js:1397
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automática"
|
||||
|
||||
#: ../js/ui/status/network.js:889
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automático"
|
||||
|
||||
#: ../js/ui/status/network.js:1399
|
||||
msgid "Auto wireless"
|
||||
msgstr "Inalámbrica automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1457
|
||||
msgid "More..."
|
||||
msgstr "Más…"
|
||||
|
||||
#: ../js/ui/status/network.js:1480
|
||||
msgid "Enable networking"
|
||||
msgstr "Activar red"
|
||||
|
||||
#: ../js/ui/status/network.js:1492
|
||||
msgid "Wired"
|
||||
msgstr "Cableada"
|
||||
|
||||
#: ../js/ui/status/network.js:1503
|
||||
msgid "Wireless"
|
||||
msgstr "Inalámbrica"
|
||||
|
||||
#: ../js/ui/status/network.js:1513
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda ancha móvil"
|
||||
|
||||
#: ../js/ui/status/network.js:1523
|
||||
msgid "VPN Connections"
|
||||
msgstr "Conexiones VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1532
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuración de la red"
|
||||
|
||||
#: ../js/ui/status/network.js:1827
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Ahora está conectado a la red de banda ancha móvil «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1831
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Ahora está conectado a la red inalámbrica «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1835
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Ahora está conectado a la red cableada «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1839
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Ahora está conectado a la VPN «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1844
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Ahora está conectado a «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1852
|
||||
msgid "Connection established"
|
||||
msgstr "Conexión establecida"
|
||||
|
||||
#: ../js/ui/status/network.js:1974
|
||||
msgid "Networking is disabled"
|
||||
msgstr "La red está desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:2099
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Configuración de energía"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "Estimando…"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -838,102 +987,102 @@ msgstr[0] "Queda %d hora"
|
||||
msgstr[1] "Queda %d horas"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "Quedan %d %s %d %s"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "hora"
|
||||
msgstr[1] "horas"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minuto"
|
||||
msgstr[1] "minutos"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "Queda %d minuto"
|
||||
msgstr[1] "Queda %d minutos"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "Adaptador de corriente"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "Batería del portátil"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "SAI"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "Ratón"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "Teclado"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "Teléfono móvil"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "Reproductor multimedia"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "Tableta"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "Equipo"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "Desconocido"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "Volumen"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "Micrófono"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado/a."
|
||||
@ -941,7 +1090,7 @@ msgstr "%s está ocupado/a."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Enviado a las %X el %A"
|
||||
@ -950,11 +1099,11 @@ msgstr "Enviado a las %X el %A"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "Teclear para buscar…"
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
@ -970,7 +1119,7 @@ msgstr "«%s» está preparado"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -979,53 +1128,66 @@ msgstr[1] "%u salidas"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u entrada"
|
||||
msgstr[1] "%u entradas"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "Sonidos del sistema"
|
||||
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:446
|
||||
msgid "Print version"
|
||||
msgstr "Imprimir versión"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Falló al lanzar «%s»"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Hace menos de un minuto"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "Hace %d minuto"
|
||||
msgstr[1] "Hace %d minutos"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "Hace %d hora"
|
||||
msgstr[1] "Hace %d horas"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "Hace %d día"
|
||||
msgstr[1] "Hace %d días"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "Hace %d semana"
|
||||
msgstr[1] "Hace %d semanas"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Reino Unido"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "Predeterminada"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "El usuario rechazó el diálogo de autenticación"
|
||||
@ -1050,6 +1212,36 @@ msgstr "Sistema de archivos"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Apagar"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "Pulse «Apagar» para salir de esas aplicaciones y apagar el sistema."
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "El sistema se apagará automáticamente en %d segundos."
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "Apagando el sistema."
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "Confirmar"
|
||||
|
||||
#~ msgid "Panel"
|
||||
#~ msgstr "Panel"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "No existe la aplicación"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Lector de pantalla"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Teclado en pantalla"
|
||||
|
||||
#~ msgid "%s is now known as %s"
|
||||
#~ msgstr "Ahora %s se llama %s"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "PREFERENCIAS"
|
||||
|
||||
@ -1224,8 +1416,8 @@ msgstr "%1$s: %2$s"
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
#~ msgstr ""
|
||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
|
||||
#~ "en la hora."
|
||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
|
||||
#~ "segundos en la hora."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the format used by the panel clock when the format key "
|
||||
@ -1242,18 +1434,19 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the hour format used by the panel clock. Possible "
|
||||
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
|
||||
#~ "01-01. If set to \"custom\", the clock will display time according to the "
|
||||
#~ "format specified in the custom_format key. Note that if set to either "
|
||||
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
|
||||
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
|
||||
#~ "to the format specified in the custom_format key. Note that if set to "
|
||||
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
|
||||
#~ "ignored."
|
||||
#~ msgstr ""
|
||||
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
|
||||
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
|
||||
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
|
||||
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
|
||||
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
|
||||
#~ "ignoran las claves «show_date» y «show_seconds»."
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
|
||||
#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
|
||||
#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
|
||||
#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
|
||||
#~ "especificado en la clave «custom_format». Note que si se establece a "
|
||||
#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Formato del reloj"
|
||||
@ -1319,9 +1512,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Frequent"
|
||||
#~ msgstr "Frecuentes"
|
||||
|
||||
#~ msgid "More"
|
||||
#~ msgstr "Más"
|
||||
|
||||
#~ msgid "(see all)"
|
||||
#~ msgstr "(ver todo)"
|
||||
|
||||
@ -1349,8 +1539,5 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "DOCUMENTS"
|
||||
#~ msgstr "DOCUMENTOS"
|
||||
|
||||
#~ msgid "Manager"
|
||||
#~ msgstr "Gestor"
|
||||
|
||||
#~ msgid "The user manager object this user is controlled by."
|
||||
#~ msgstr "El objeto de gestión de usuarios que controla a este usuario."
|
||||
|
495
po/et.po
495
po/et.po
@ -12,21 +12,21 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell MASTER\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2011-02-04 22:28+0000\n"
|
||||
"PO-Revision-Date: 2011-02-06 08:43+0200\n"
|
||||
"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-18 10:35+0000\n"
|
||||
"PO-Revision-Date: 2011-03-18 21:33+0300\n"
|
||||
"Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n"
|
||||
"Language-Team: Estonian <gnome-et@linux.ee>\n"
|
||||
"Language: et\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: et\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-Language: Estonian\n"
|
||||
"X-Poedit-Country: Estonia\n"
|
||||
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME kest"
|
||||
msgstr "GNOME Shell"
|
||||
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Aknahaldur ja rakenduste käivitaja"
|
||||
@ -58,6 +58,10 @@ msgstr ""
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Käsudialoogi (Alt-F2) ajalugu"
|
||||
|
||||
# suurendusklaasidialoog? miks ka mitte :)
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr "Otsingudialoogi ajalugu"
|
||||
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Kui määratud, siis kuvatakse kellaaja kõrval ka kuupäeva."
|
||||
|
||||
@ -83,6 +87,16 @@ msgid ""
|
||||
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
|
||||
"at the optimal thread count on the system."
|
||||
msgstr ""
|
||||
"Määrab GStreameri toru, mida kasutatakse lindistuste kodeerimiseks. See peab "
|
||||
"vastama gst-launch'i süntaksile. Torul peaks olema vaba plokk (pad), kuhu "
|
||||
"lindistatav video salvestatakse. Tavaliselt on vaba plokk olemas; selle "
|
||||
"ploki väljund kirjutatakse väljundfaili. Toru võib hoolitseda ka enda "
|
||||
"väljundi eest - seda võib kasutada väljundi saatmiseks icecast serverisse "
|
||||
"shout2send või sarnase tehnoloogia abil. Kui see on määramata või väärtus on "
|
||||
"tühi, kasutatakse vaikimisi toru. See on praegu 'videorate ! vp8enc "
|
||||
"quality=10 speed=2 threads=%T ! queue ! webmmux' ning lindistab WEBM "
|
||||
"vormingusse VP8 koodekiga. %T asendatakse süsteemi oletatava optimaalseima "
|
||||
"lõimede (thread) arvuga."
|
||||
|
||||
msgid "Show date in clock"
|
||||
msgstr "Kell näitab kuupäeva"
|
||||
@ -96,7 +110,7 @@ msgstr "Kellaaega näidatakse sekunditega"
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
msgstr "Nendele tunnustele vastavaid rakendusi kuvatakse lemmikutes."
|
||||
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
@ -112,9 +126,10 @@ msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"GNOME Shelli lindistatava ekraanivideo kaadrisagedus (kaadrit sekundis)."
|
||||
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr ""
|
||||
msgstr "GStreameri toru, mida ekraanivideo kodeerimiseks kasutatakse"
|
||||
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
@ -122,125 +137,19 @@ msgid ""
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
"Shell tavaliselt seirab aktiivseid rakendusi, et näidata enamkasutatavaid "
|
||||
"(näiteks käivitajaid). Kuigi neid andmeid hoitakse privaatselt, võid "
|
||||
"privaatsuse suurendamiseks selle keelata. Selle keelamine siiski ei eemalda "
|
||||
"juba salvestatud andmeid."
|
||||
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Keelatavate laienduste UUID-d"
|
||||
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr ""
|
||||
msgstr "Kas rakenduste kasutuse kohta kogutakse andmeid"
|
||||
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "Niitristi keskel on auk"
|
||||
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Niitristi värvus"
|
||||
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
"Määrab niitristi läbipaistvuse, alates täiesti läbipaistmatust kuni täiesti "
|
||||
"läbipaistvani."
|
||||
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
"Määrab, kas niitrist kattub suurendatud hiire pildiga või on keskelt ära "
|
||||
"lõigatud nii, et jooned ümbritsevad hiirekursori pilti."
|
||||
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Läätsede režiimi lubamine"
|
||||
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr "Lubab/keelab niitristi kuvamise suurendatud hiirekursori kohal."
|
||||
|
||||
msgid ""
|
||||
"For centered mouse tracking, when the system pointer is at or near the edge "
|
||||
"of the screen, the magnified contents continue to scroll such that the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Niitristi pikkus"
|
||||
|
||||
msgid "Magnification factor"
|
||||
msgstr "Suurendustegur"
|
||||
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Hiire jälitamise režiim"
|
||||
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Niitristi läbipaistvus"
|
||||
|
||||
msgid "Screen position"
|
||||
msgstr "Ekraani asukoht"
|
||||
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "Suurendusklaas võib liikuda töölauapiiridest väljapoole"
|
||||
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "Niitristi kuvamine või peitmine"
|
||||
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Suurendusklaasi kuvamine või peitmine"
|
||||
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
"Suurendusklaasi ja selle kõigi suurenduspiirkondade kuvamine või peitmine."
|
||||
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr "Niitristi püst- ja rõhtjoone värvus."
|
||||
|
||||
msgid ""
|
||||
"The magnified view either fills the entire screen, or occupies the top-half, "
|
||||
"bottom-half, left-half, or right-half of the screen."
|
||||
msgstr ""
|
||||
"Suurendatud vaade täidab kas kogu ekraani või täidab ülemise, alumise, "
|
||||
"vasaku või parema ekraanipoole."
|
||||
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr "Suurendustegur. 1,0 tähendab originaalsuurust. 2,0 muudab kaks korda."
|
||||
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Niitristi paksus"
|
||||
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
"Kas suurendatud vaate keskkoht peaks asetsema süsteemi hiire kohal ning "
|
||||
"liikuma sellega kaasa."
|
||||
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr "Niitristi moodustavate püst- ja rõhtjoone laius"
|
||||
msgstr "keelatud OpenSearch pakkujad"
|
||||
|
||||
msgid "Command not found"
|
||||
msgstr "Käsku ei leitud"
|
||||
@ -250,9 +159,6 @@ msgstr "Käsku ei leitud"
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Käsku pole võimalik analüüsida:"
|
||||
|
||||
msgid "No such application"
|
||||
msgstr "Sellist rakendust ei ole"
|
||||
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "'%s' käivitamine nurjus:"
|
||||
@ -264,8 +170,8 @@ msgstr "Kõik"
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "Rakendused"
|
||||
|
||||
msgid "PREFERENCES"
|
||||
msgstr "Eelistused"
|
||||
msgid "SETTINGS"
|
||||
msgstr "Seaded"
|
||||
|
||||
msgid "New Window"
|
||||
msgstr "Uus aken"
|
||||
@ -382,7 +288,7 @@ msgstr "L"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
msgid "Nothing Scheduled"
|
||||
msgstr ""
|
||||
msgstr "Ühtegi sündmust pole plaanitud"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
msgctxt "calendar heading"
|
||||
@ -465,6 +371,8 @@ msgstr "Logi välja"
|
||||
|
||||
msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgstr ""
|
||||
"Nende rakenduste sulgemiseks ja süsteemist väljalogimiseks klõpsa nupule "
|
||||
"Logi välja."
|
||||
|
||||
#, c-format
|
||||
msgid "%s will be logged out automatically in %d seconds."
|
||||
@ -482,6 +390,8 @@ msgstr "Lülita välja"
|
||||
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
msgstr ""
|
||||
"Nende rakenduste sulgemiseks ja süsteemi väljalülitamiseks klõpsa nupule "
|
||||
"Logi välja."
|
||||
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
@ -534,6 +444,9 @@ msgstr "Kuva lähtekoodi"
|
||||
msgid "Web Page"
|
||||
msgstr "Veebileht"
|
||||
|
||||
msgid "Open"
|
||||
msgstr "Ava"
|
||||
|
||||
msgid "System Information"
|
||||
msgstr "Süsteemi andmed"
|
||||
|
||||
@ -546,6 +459,11 @@ msgstr "Aknad"
|
||||
msgid "Applications"
|
||||
msgstr "Rakendused"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
msgid "Dash"
|
||||
msgstr "Dokk"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
@ -556,6 +474,9 @@ msgstr "Lõpeta %s"
|
||||
msgid "Activities"
|
||||
msgstr "Tegevused"
|
||||
|
||||
msgid "Panel"
|
||||
msgstr "Paneel"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "'%s' lahtihaakimine nurjus"
|
||||
@ -580,6 +501,18 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Palun sisesta käsk:"
|
||||
|
||||
msgid "Searching..."
|
||||
msgstr "Otsimine..."
|
||||
|
||||
msgid "No matching results."
|
||||
msgstr "Tulemused puuduvad."
|
||||
|
||||
msgid "Power Off..."
|
||||
msgstr "Lülita välja..."
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Uinak"
|
||||
|
||||
msgid "Available"
|
||||
msgstr "Saadaval"
|
||||
|
||||
@ -601,24 +534,15 @@ msgstr "Vaheta kasutajat"
|
||||
msgid "Log Out..."
|
||||
msgstr "Logi välja..."
|
||||
|
||||
#. This is temporarily removed, see
|
||||
#. http://bugzilla.gnome.org/show_bug.cgi?id=636680
|
||||
#. for details.
|
||||
#. item = new PopupMenu.PopupMenuItem(_("Suspend..."));
|
||||
#. item.connect('activate', Lang.bind(this, this._onShutDownActivate));
|
||||
#. this.menu.addMenuItem(item);
|
||||
msgid "Shut Down..."
|
||||
msgstr "Lülita välja..."
|
||||
|
||||
msgid "Zoom"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screen Reader"
|
||||
msgstr "Ekraanilugeja"
|
||||
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Ekraaniklaviatuur"
|
||||
msgstr "Suurendus"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Visuaalsed märguanded"
|
||||
|
||||
@ -638,10 +562,10 @@ msgid "Universal Access Settings"
|
||||
msgstr "Universaalse ligipääsu sätted"
|
||||
|
||||
msgid "High Contrast"
|
||||
msgstr ""
|
||||
msgstr "Kõrgkontrastne"
|
||||
|
||||
msgid "Large Text"
|
||||
msgstr ""
|
||||
msgstr "Suur tekst"
|
||||
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
@ -653,7 +577,7 @@ msgid "Send Files to Device..."
|
||||
msgstr "Failide saatmine seadmesse..."
|
||||
|
||||
msgid "Setup a New Device..."
|
||||
msgstr ""
|
||||
msgstr "Uue seadme häälestamine..."
|
||||
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Bluetoothi sätted"
|
||||
@ -672,7 +596,7 @@ msgstr "Viga seadme sirvimisel"
|
||||
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr ""
|
||||
msgstr "Küsitud seadet pole võimalik sirvida, viga on '%s'"
|
||||
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Klaviatuurisätted"
|
||||
@ -683,9 +607,6 @@ msgstr "Hiiresätted"
|
||||
msgid "Sound Settings"
|
||||
msgstr "Helisätted"
|
||||
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "Bluetoothi agent"
|
||||
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Autoriseerimise päring seadmelt %s"
|
||||
@ -731,12 +652,121 @@ msgstr "Palun sisesta seadme poolt öeldav PIN-kood."
|
||||
msgid "OK"
|
||||
msgstr "Olgu"
|
||||
|
||||
msgid "Show Keyboard Layout..."
|
||||
msgstr "Klaviatuuripaigutuse kuvamine..."
|
||||
|
||||
msgid "Localization Settings"
|
||||
msgstr "Lokaliseerimissätted"
|
||||
|
||||
msgid "<unknown>"
|
||||
msgstr "<tundmatu>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
msgid "disabled"
|
||||
msgstr "keelatud"
|
||||
|
||||
msgid "connecting..."
|
||||
msgstr "ühendumine..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
msgid "authentication required"
|
||||
msgstr "vajalik on autentimine"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
msgid "cable unplugged"
|
||||
msgstr "juhe eemaldatud"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
msgid "unavailable"
|
||||
msgstr "pole saadaval"
|
||||
|
||||
msgid "connection failed"
|
||||
msgstr "ühendumine nurjus"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
msgid "Connected (private)"
|
||||
msgstr "Ühendatud (privaatne)"
|
||||
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automaatne ethernet"
|
||||
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automaatne lairibaühendus"
|
||||
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automaatne sissehelistamine"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Automaatne %s"
|
||||
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automaatne bluetooth"
|
||||
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automaatne juhtmeta ühendus"
|
||||
|
||||
msgid "More..."
|
||||
msgstr "Veel..."
|
||||
|
||||
msgid "Enable networking"
|
||||
msgstr "Luba võrguühendused"
|
||||
|
||||
msgid "Wired"
|
||||
msgstr "Juhtmega"
|
||||
|
||||
msgid "Wireless"
|
||||
msgstr "Juhtmeta"
|
||||
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobiiliühendus"
|
||||
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-ühendused"
|
||||
|
||||
msgid "Network Settings"
|
||||
msgstr "Võrgusätted"
|
||||
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Loodi mobiiliühendus '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Loodi ühendus juhtmeta võrguga '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Loodi ühendus juhtmega võrguga '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Loodi ühendus VPN-võrguga '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Loodi võrguühendus '%s' kaudu"
|
||||
|
||||
msgid "Connection estabilished"
|
||||
msgstr "Ühendus loodud"
|
||||
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Võrguühendused on keelatud"
|
||||
|
||||
msgid "Network Manager"
|
||||
msgstr "Võrguhaldur"
|
||||
|
||||
msgid "Power Settings"
|
||||
msgstr "Toitesätted..."
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
msgid "Estimating..."
|
||||
msgstr "Andmete kogumine..."
|
||||
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -829,8 +859,15 @@ msgstr "%s on hõivatud."
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Saadetud: %a, kell %X"
|
||||
|
||||
msgid "Search your computer"
|
||||
msgstr ""
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
msgid "Type to search..."
|
||||
msgstr "Otsing..."
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Otsing"
|
||||
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
@ -840,32 +877,32 @@ msgstr "%s läks käima"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' on valmis"
|
||||
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "Pole võimalik uut tööala lisada, kuna tööalade piir on saavutatud."
|
||||
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Esimest tööala pole võimalik eemaldada."
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%u väljund"
|
||||
msgstr[1] "%u väljundit"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%u sisend"
|
||||
msgstr[1] "%u sisendit"
|
||||
|
||||
msgid "System Sounds"
|
||||
msgstr "Süsteemi helid"
|
||||
|
||||
msgid "Print version"
|
||||
msgstr "Printimise versioon"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "'%s' käivitamine nurjus"
|
||||
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Vähem kui minuti eest"
|
||||
|
||||
@ -893,6 +930,15 @@ msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d nädal tagasi"
|
||||
msgstr[1] "%d nädalat tagasi"
|
||||
|
||||
msgid "United Kingdom"
|
||||
msgstr "Suurbritannia"
|
||||
|
||||
msgid "Default"
|
||||
msgstr "Vaikimisi"
|
||||
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Kasutaja katkestas autentimisdialoogi"
|
||||
|
||||
msgid "Home Folder"
|
||||
msgstr "Kodukaust"
|
||||
|
||||
@ -901,9 +947,6 @@ msgstr "Kodukaust"
|
||||
msgid "File System"
|
||||
msgstr "Failisüsteem"
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Otsing"
|
||||
|
||||
#. Translators: the first string is the name of a gvfs
|
||||
#. * method, and the second string is a path. For
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
@ -913,8 +956,120 @@ msgstr "Otsing"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Suspend..."
|
||||
#~ msgstr "Peata..."
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Sellist rakendust ei ole"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Ekraanilugeja"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Ekraaniklaviatuur"
|
||||
|
||||
#~ msgid "Clip the crosshairs at the center"
|
||||
#~ msgstr "Niitristi keskel on auk"
|
||||
|
||||
#~ msgid "Color of the crosshairs"
|
||||
#~ msgstr "Niitristi värvus"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
#~ "transparent."
|
||||
#~ msgstr ""
|
||||
#~ "Määrab niitristi läbipaistvuse, alates täiesti läbipaistmatust kuni "
|
||||
#~ "täiesti läbipaistvani."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Determines whether the crosshairs intersect the magnified mouse sprite, "
|
||||
#~ "or are clipped such that the ends of the horizontal and vertical lines "
|
||||
#~ "surround the mouse image."
|
||||
#~ msgstr ""
|
||||
#~ "Määrab, kas niitrist kattub suurendatud hiire pildiga või on keskelt ära "
|
||||
#~ "lõigatud nii, et jooned ümbritsevad hiirekursori pilti."
|
||||
|
||||
#~ msgid "Enable lens mode"
|
||||
#~ msgstr "Läätsede režiimi lubamine"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
#~ "sprite."
|
||||
#~ msgstr "Lubab/keelab niitristi kuvamise suurendatud hiirekursori kohal."
|
||||
|
||||
#~ msgid "Length of the crosshairs"
|
||||
#~ msgstr "Niitristi pikkus"
|
||||
|
||||
#~ msgid "Magnification factor"
|
||||
#~ msgstr "Suurendustegur"
|
||||
|
||||
#~ msgid "Mouse Tracking Mode"
|
||||
#~ msgstr "Hiire jälitamise režiim"
|
||||
|
||||
#~ msgid "Opacity of the crosshairs"
|
||||
#~ msgstr "Niitristi läbipaistvus"
|
||||
|
||||
#~ msgid "Screen position"
|
||||
#~ msgstr "Ekraani asukoht"
|
||||
|
||||
#~ msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
#~ msgstr "Suurendusklaas võib liikuda töölauapiiridest väljapoole"
|
||||
|
||||
#~ msgid "Show or hide crosshairs"
|
||||
#~ msgstr "Niitristi kuvamine või peitmine"
|
||||
|
||||
#~ msgid "Show or hide the magnifier"
|
||||
#~ msgstr "Suurendusklaasi kuvamine või peitmine"
|
||||
|
||||
#~ msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
#~ msgstr ""
|
||||
#~ "Suurendusklaasi ja selle kõigi suurenduspiirkondade kuvamine või peitmine."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The color of the the vertical and horizontal lines that make up the "
|
||||
#~ "crosshairs."
|
||||
#~ msgstr "Niitristi püst- ja rõhtjoone värvus."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The magnified view either fills the entire screen, or occupies the top-"
|
||||
#~ "half, bottom-half, left-half, or right-half of the screen."
|
||||
#~ msgstr ""
|
||||
#~ "Suurendatud vaade täidab kas kogu ekraani või täidab ülemise, alumise, "
|
||||
#~ "vasaku või parema ekraanipoole."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
#~ "value of 2.0 doubles the size."
|
||||
#~ msgstr ""
|
||||
#~ "Suurendustegur. 1,0 tähendab originaalsuurust. 2,0 muudab kaks korda."
|
||||
|
||||
#~ msgid "Thickness of the crosshairs"
|
||||
#~ msgstr "Niitristi paksus"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Whether the magnified view should be centered over the location of the "
|
||||
#~ "system mouse and move with it."
|
||||
#~ msgstr ""
|
||||
#~ "Kas suurendatud vaate keskkoht peaks asetsema süsteemi hiire kohal ning "
|
||||
#~ "liikuma sellega kaasa."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
#~ msgstr "Niitristi moodustavate püst- ja rõhtjoone laius"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "Eelistused"
|
||||
|
||||
#~ msgid "Shut Down..."
|
||||
#~ msgstr "Lülita välja..."
|
||||
|
||||
#~ msgid "Bluetooth Agent"
|
||||
#~ msgstr "Bluetoothi agent"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Can't add a new workspace because maximum workspaces limit has been "
|
||||
#~ "reached."
|
||||
#~ msgstr "Pole võimalik uut tööala lisada, kuna tööalade piir on saavutatud."
|
||||
|
||||
#~ msgid "Can't remove the first workspace."
|
||||
#~ msgstr "Esimest tööala pole võimalik eemaldada."
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "Kell"
|
||||
@ -958,11 +1113,5 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Otsi"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "Otsimine..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "Tulemused puuduvad."
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Nähtamatu"
|
||||
|
342
po/he.po
342
po/he.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-10 18:43+0200\n"
|
||||
"PO-Revision-Date: 2011-03-10 18:45+0200\n"
|
||||
"POT-Creation-Date: 2011-03-17 00:33+0200\n"
|
||||
"PO-Revision-Date: 2011-03-17 00:37+0200\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <sh.yaron@gmail.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -171,21 +171,17 @@ msgstr "Whether to collect stats about applications usage"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "disabled OpenSearch providers"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "הפקודה לא נמצאה"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "לא ניתן לפענח את הפקודה:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "אין כזה יישום"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "ההרצה של '%s' נכשלה:"
|
||||
@ -371,7 +367,7 @@ msgstr "השבוע"
|
||||
msgid "Next week"
|
||||
msgstr "בשבוע הבא"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:931
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||
msgid "Remove"
|
||||
msgstr "הסרה"
|
||||
|
||||
@ -426,7 +422,7 @@ msgstr "%a %l:%M %p"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A ה־%e ב%B, %Y"
|
||||
|
||||
@ -499,7 +495,7 @@ msgstr "המערכת מופעלת מחדש"
|
||||
msgid "Confirm"
|
||||
msgstr "אישור"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:465
|
||||
msgid "Cancel"
|
||||
msgstr "ביטול"
|
||||
|
||||
@ -513,7 +509,7 @@ msgstr "פעיל"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "מנוטרל"
|
||||
|
||||
@ -533,11 +529,11 @@ msgstr "צפייה במקור"
|
||||
msgid "Web Page"
|
||||
msgstr "דף אינטרנט"
|
||||
|
||||
#: ../js/ui/messageTray.js:924
|
||||
#: ../js/ui/messageTray.js:926
|
||||
msgid "Open"
|
||||
msgstr "פתיחה"
|
||||
|
||||
#: ../js/ui/messageTray.js:1961
|
||||
#: ../js/ui/messageTray.js:1986
|
||||
msgid "System Information"
|
||||
msgstr "פרטי המערכת"
|
||||
|
||||
@ -560,18 +556,18 @@ msgid "Dash"
|
||||
msgstr "חלונית"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:560
|
||||
#: ../js/ui/panel.js:514
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "יציאה מ־%s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:919
|
||||
#: ../js/ui/panel.js:873
|
||||
msgid "Activities"
|
||||
msgstr "פעילויות"
|
||||
|
||||
#: ../js/ui/panel.js:1020
|
||||
#: ../js/ui/panel.js:974
|
||||
msgid "Panel"
|
||||
msgstr "לוח"
|
||||
|
||||
@ -588,7 +584,7 @@ msgstr "ניסיון חוזר"
|
||||
msgid "Connect to..."
|
||||
msgstr "התחברות אל..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "מקומות והתקנים"
|
||||
|
||||
@ -597,7 +593,7 @@ msgstr "מקומות והתקנים"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:636
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -613,39 +609,39 @@ msgstr "בחיפוש..."
|
||||
msgid "No matching results."
|
||||
msgstr "אין תוצאות תואמות."
|
||||
|
||||
#: ../js/ui/statusMenu.js:113 ../js/ui/statusMenu.js:177
|
||||
#: ../js/ui/statusMenu.js:114 ../js/ui/statusMenu.js:178
|
||||
msgid "Power Off..."
|
||||
msgstr "כיבוי..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:115 ../js/ui/statusMenu.js:176
|
||||
#: ../js/ui/statusMenu.js:116 ../js/ui/statusMenu.js:177
|
||||
msgid "Suspend"
|
||||
msgstr "השהיה"
|
||||
|
||||
#: ../js/ui/statusMenu.js:136
|
||||
#: ../js/ui/statusMenu.js:137
|
||||
msgid "Available"
|
||||
msgstr "זמין"
|
||||
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "עסוק"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "My Account"
|
||||
msgstr "החשבון שלי"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "System Settings"
|
||||
msgstr "הגדרות המערכת"
|
||||
|
||||
#: ../js/ui/statusMenu.js:160
|
||||
#: ../js/ui/statusMenu.js:161
|
||||
msgid "Lock Screen"
|
||||
msgstr "נעילת המסך"
|
||||
|
||||
#: ../js/ui/statusMenu.js:164
|
||||
#: ../js/ui/statusMenu.js:165
|
||||
msgid "Switch User"
|
||||
msgstr "החלפת משתמש"
|
||||
|
||||
#: ../js/ui/statusMenu.js:169
|
||||
#: ../js/ui/statusMenu.js:170
|
||||
msgid "Log Out..."
|
||||
msgstr "ניתוק..."
|
||||
|
||||
@ -653,14 +649,12 @@ msgstr "ניתוק..."
|
||||
msgid "Zoom"
|
||||
msgstr "תקריב"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "מקריא מסך"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "מקלדת מסך"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "התראות חזותיות"
|
||||
@ -685,17 +679,17 @@ msgstr "מקשי עכבר"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "הגדרות גישה אוניברסלית"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "ניגודיות גבוהה"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "טקסט גדול"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:236
|
||||
#: ../js/ui/status/bluetooth.js:332 ../js/ui/status/bluetooth.js:366
|
||||
#: ../js/ui/status/bluetooth.js:406 ../js/ui/status/bluetooth.js:439
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -715,94 +709,94 @@ msgstr "הגדרת התקן חדש..."
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "הגדרות Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:187
|
||||
msgid "Connection"
|
||||
msgstr "חיבור"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:223
|
||||
msgid "Send Files..."
|
||||
msgstr "שליחת קבצים..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
msgid "Browse Files..."
|
||||
msgstr "עיון בקבצים..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:237
|
||||
msgid "Error browsing device"
|
||||
msgstr "שגיאה בעיון בהתקן"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "לא ניתן לעיין בהתקן הנבחר, השגיאה היא '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:246
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "הגדרות מקלדת"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Mouse Settings"
|
||||
msgstr "הגדרות עכבר"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:258 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "הגדרות שמע"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:367
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "בקשת אישור מאת %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:373
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "ההתקן %s מעוניין לגשת אל השירות '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:375
|
||||
msgid "Always grant access"
|
||||
msgstr "תמיד להעניק גישה"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Grant this time only"
|
||||
msgstr "הענקת גישה הפעם בלבד"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Reject"
|
||||
msgstr "סירוב"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "אישור צימוד עבור %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:413 ../js/ui/status/bluetooth.js:447
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "ההתקן %s מעוניין בצימוד עם מחשב זה"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "נא לאשר האם קוד ה־PIN '%s' תואם את זה שמופיע בהתקן."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:416
|
||||
msgid "Matches"
|
||||
msgstr "התאמות"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Does not match"
|
||||
msgstr "אינו תואם"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "בקשת צימוד עבור %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:448
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "נא להזין את קוד ה־PIN המוזכר בהתקן."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:464
|
||||
msgid "OK"
|
||||
msgstr "אישור"
|
||||
|
||||
@ -814,17 +808,147 @@ msgstr "הצגת פריסת המקלדת..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "הגדרות אזוריות"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<לא ידוע>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "מנוטרל"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "בהתחברות..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "נדרש אימות"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "הכבל מנותק"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "לא זמין"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "החיבור נכשל"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "מחובר (פרטי)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "אתרנט אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "פס רחב אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "חיוג אוטומטי"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "אלחוטי אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "עוד..."
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "הפעלת תכונת הרשת"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "קווי"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "אלחוטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "פס־רחב נייד"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "חיבורי VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "הגדרות הרשת"
|
||||
|
||||
#: ../js/ui/status/network.js:1782
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "כרגע ישנו חיבור בינך ובין רשת הפס הרחב הניידת '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1786
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "כרגע ישנו חיבור בינך ובין הרשת האלחוטית '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1790
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "כרגע ישנו חיבור בינך ובין הרשת הקווית '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1794
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "כרגע ישנו חיבור בינך ובין רשת ה־VPN '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1799
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "כעת ישנו חיבור בינך ובין '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1807
|
||||
msgid "Connection established"
|
||||
msgstr "ההתחברות הצליחה"
|
||||
|
||||
#: ../js/ui/status/network.js:1929
|
||||
msgid "Networking is disabled"
|
||||
msgstr "תכונת הרשת מנוטרלת"
|
||||
|
||||
#: ../js/ui/status/network.js:2054
|
||||
msgid "Network Manager"
|
||||
msgstr "מנהל הרשתות"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "הגדרות צריכת החשמל"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "מתבצע שיערוך..."
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -833,26 +957,26 @@ msgstr[1] "נותרו %d שעות"
|
||||
msgstr[2] "נותרו שעתיים"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s נותרו"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "שעה"
|
||||
msgstr[1] "שעות"
|
||||
msgstr[2] "שעתיים"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "דקה"
|
||||
msgstr[1] "דקות"
|
||||
msgstr[2] "דקות"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
@ -860,78 +984,78 @@ msgstr[0] "דקה אחת נותרה"
|
||||
msgstr[1] "%d דקות נותרו"
|
||||
msgstr[2] "שתי דקות נותרו"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "מתאם חשמל"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "סוללת נייד"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "אל־פסק"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "צג"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "עכבר"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "מקלדת"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "מחשב כף יד"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "טלפון סלולרי"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "נגן מדיה"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "טבלת שליטה"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "מחשב"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:961
|
||||
msgid "Unknown"
|
||||
msgstr "לא ידוע"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "עצמה"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "מיקרופון"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s התחבר/ה."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s התנתק/ה."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "'%s' מרוחק/ת."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s עסוק/ה."
|
||||
@ -939,7 +1063,7 @@ msgstr "%s עסוק/ה."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "נשלח ב־%X בשעה %A"
|
||||
@ -948,11 +1072,11 @@ msgstr "נשלח ב־%X בשעה %A"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:119
|
||||
msgid "Type to search..."
|
||||
msgstr "יש להקליד כדי לחפש..."
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:139 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "חיפוש"
|
||||
|
||||
@ -968,7 +1092,7 @@ msgstr "'%s' מוכן"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -978,7 +1102,7 @@ msgstr[2] "2 פלטים"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
@ -986,7 +1110,7 @@ msgstr[0] "קלט אחד"
|
||||
msgstr[1] "%u קלטים"
|
||||
msgstr[2] "2 קלטים"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "צלילי מערכת"
|
||||
|
||||
@ -994,11 +1118,16 @@ msgstr "צלילי מערכת"
|
||||
msgid "Print version"
|
||||
msgstr "Print version"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:442
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "אירע כשל בטעינת '%s'"
|
||||
|
||||
#: ../src/shell-global.c:1340
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "לפני פחות מדקה"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1344
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -1006,7 +1135,7 @@ msgstr[0] "לפני דקה"
|
||||
msgstr[1] "לפני %d דקות"
|
||||
msgstr[2] "לפני 2 דקות"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1349
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -1014,7 +1143,7 @@ msgstr[0] "לפני שעה"
|
||||
msgstr[1] "לפני %d שעות"
|
||||
msgstr[2] "לפני שעתיים"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1354
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -1022,7 +1151,7 @@ msgstr[0] "לפני יום"
|
||||
msgstr[1] "לפני %d ימים"
|
||||
msgstr[2] "לפני יומיים"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1359
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -1030,6 +1159,14 @@ msgstr[0] "לפני שבוע"
|
||||
msgstr[1] "לפני %d שבועות"
|
||||
msgstr[2] "לפני שבועיים"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "בריטניה"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "בררת מחדל"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
|
||||
@ -1054,6 +1191,15 @@ msgstr "מערכת הקבצים"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "אין כזה יישום"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "מקריא מסך"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "מקלדת מסך"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "העדפות"
|
||||
|
||||
|
479
po/it.po
479
po/it.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-11 01:54+0100\n"
|
||||
"PO-Revision-Date: 2011-03-11 01:56+0100\n"
|
||||
"POT-Creation-Date: 2011-03-24 22:46+0100\n"
|
||||
"PO-Revision-Date: 2011-03-24 22:58+0100\n"
|
||||
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
|
||||
"Language-Team: Italian <tp@lists.linux.it>\n"
|
||||
"Language: it\n"
|
||||
@ -174,47 +174,43 @@ msgstr ""
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "Fornitori OpenSearch disabilitati"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "Comando non trovato"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Impossibile analizzare il comando:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "Applicazione inesistente"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Esecuzione di «%s» non riuscita:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:226
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
msgid "All"
|
||||
msgstr "Tutte"
|
||||
|
||||
#: ../js/ui/appDisplay.js:324
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APPLICAZIONI"
|
||||
|
||||
#: ../js/ui/appDisplay.js:350
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
msgid "SETTINGS"
|
||||
msgstr "IMPOSTAZIONI"
|
||||
|
||||
#: ../js/ui/appDisplay.js:612
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
msgid "New Window"
|
||||
msgstr "Nuova finestra"
|
||||
|
||||
#: ../js/ui/appDisplay.js:615
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Rimuovi dai preferiti"
|
||||
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Aggiungi ai preferiti"
|
||||
|
||||
@ -376,7 +372,7 @@ msgstr "Questa settimana"
|
||||
msgid "Next week"
|
||||
msgstr "Prossima settimana"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:931
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
msgid "Remove"
|
||||
msgstr "Rimuovi"
|
||||
|
||||
@ -431,7 +427,7 @@ msgstr "%a %l.%M %P"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%a %e %B %Y"
|
||||
|
||||
@ -444,7 +440,7 @@ msgstr "ELEMENTI RECENTI"
|
||||
msgid "Log Out %s"
|
||||
msgstr "Termina sessione di %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "Termina sessione"
|
||||
|
||||
@ -469,50 +465,45 @@ msgstr "La sessione verrà terminata automaticamente tra %d secondi."
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Chiusura della sessione."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||
msgid "Shut Down"
|
||||
msgstr "Arresta"
|
||||
|
||||
# usato un termine diverso, magari si capisce meglio (LF)
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
msgstr ""
|
||||
"Fare clic su «Arresta» per chiudere queste applicazioni e spegnere il "
|
||||
"sistema."
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr "Spegni"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
msgstr "Il sistema verrà arrestato automaticamente tra %d secondi."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "Fare clic su «Spegni» per chiudere queste applicazioni e spegnere il sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgid "Shutting down the system."
|
||||
msgstr "Arresto del sistema."
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "Il sistema verrà spento automaticamente tra %d secondi."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
msgid "Powering off the system."
|
||||
msgstr "pegnimento del sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "Riavvia"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
"Fare clic su «Riavvia» per chiudere queste applicazioni e riavviare il "
|
||||
"sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "Il sistema verrà riavviato automaticamente tra %d secondi."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Restarting the system."
|
||||
msgstr "Riavvio del sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:395
|
||||
msgid "Confirm"
|
||||
msgstr "Conferma"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
@ -528,7 +519,7 @@ msgstr "Abilitato"
|
||||
# (ndt) o disabilitata?
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "Disabilitato"
|
||||
|
||||
@ -548,48 +539,48 @@ msgstr "Visualizza sorgente"
|
||||
msgid "Web Page"
|
||||
msgstr "Pagina web"
|
||||
|
||||
#: ../js/ui/messageTray.js:924
|
||||
#: ../js/ui/messageTray.js:987
|
||||
msgid "Open"
|
||||
msgstr "Apri"
|
||||
|
||||
#: ../js/ui/messageTray.js:1961
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
msgid "System Information"
|
||||
msgstr "Informazione di sistema"
|
||||
|
||||
#: ../js/ui/overview.js:88
|
||||
#: ../js/ui/overview.js:91
|
||||
msgid "Undo"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: ../js/ui/overview.js:183
|
||||
#: ../js/ui/overview.js:186
|
||||
msgid "Windows"
|
||||
msgstr "Finestre"
|
||||
|
||||
#: ../js/ui/overview.js:186
|
||||
#: ../js/ui/overview.js:189
|
||||
msgid "Applications"
|
||||
msgstr "Applicazioni"
|
||||
|
||||
# cruscotto?!?!?!?!?!?!?
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:202
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr "Dash"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:560
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Chiudi %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:919
|
||||
#: ../js/ui/panel.js:878
|
||||
msgid "Activities"
|
||||
msgstr "Attività"
|
||||
|
||||
#: ../js/ui/panel.js:1020
|
||||
msgid "Panel"
|
||||
msgstr "Pannello"
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "Barra superiore"
|
||||
|
||||
# (ndt) libera, ma unmount non si può proprio vedere...
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
@ -605,64 +596,85 @@ msgstr "Riprova"
|
||||
msgid "Connect to..."
|
||||
msgstr "Connetti a..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "RISORSE E DISPOSITIVI"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:74
|
||||
msgid "Authentication Required"
|
||||
msgstr "Richiesta autenticazione"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:108
|
||||
msgid "Administrator"
|
||||
msgstr "Amministratore"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr "Autentica"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
msgid "Password:"
|
||||
msgstr "Password:"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:679
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-us"
|
||||
|
||||
#: ../js/ui/runDialog.js:201
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Inserire un comando:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
msgid "Searching..."
|
||||
msgstr "Ricerca..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
msgid "No matching results."
|
||||
msgstr "Nessun risultato corrispondente."
|
||||
|
||||
#: ../js/ui/statusMenu.js:113 ../js/ui/statusMenu.js:177
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "Spegni..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:115 ../js/ui/statusMenu.js:176
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "Sospendi"
|
||||
|
||||
#: ../js/ui/statusMenu.js:136
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "Disponibile"
|
||||
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
msgstr "Non disponibile"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:197
|
||||
msgid "My Account"
|
||||
msgstr "Account personale"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:201
|
||||
msgid "System Settings"
|
||||
msgstr "Impostazioni di sistema"
|
||||
|
||||
#: ../js/ui/statusMenu.js:160
|
||||
#: ../js/ui/statusMenu.js:208
|
||||
msgid "Lock Screen"
|
||||
msgstr "Blocca schermo"
|
||||
|
||||
#: ../js/ui/statusMenu.js:164
|
||||
#: ../js/ui/statusMenu.js:213
|
||||
msgid "Switch User"
|
||||
msgstr "Cambia utente"
|
||||
|
||||
#: ../js/ui/statusMenu.js:169
|
||||
#: ../js/ui/statusMenu.js:218
|
||||
msgid "Log Out..."
|
||||
msgstr "Termina sessione..."
|
||||
|
||||
@ -670,29 +682,27 @@ msgstr "Termina sessione..."
|
||||
msgid "Zoom"
|
||||
msgstr "Ingrandimento"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "Lettore schermo"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Tastiera a schermo"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Allerte visive"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:80
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Permanenza tasti"
|
||||
msgstr "Tasti singoli"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:83
|
||||
msgid "Slow Keys"
|
||||
msgstr "Rallentamento tasti"
|
||||
msgstr "Tasti lenti"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:86
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Pressione ravvicinata tasti"
|
||||
msgstr "Tasti rimbalzati"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:89
|
||||
msgid "Mouse Keys"
|
||||
@ -702,24 +712,24 @@ msgstr "Mouse da tastiera"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Impostazioni accesso universale"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "Contrasto elevato"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "Caratteri grandi"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
# as on Android :P
|
||||
# su Android è Rilevabile :P
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "Rilevabile"
|
||||
msgstr "Visibile"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:69
|
||||
msgid "Send Files to Device..."
|
||||
@ -735,94 +745,94 @@ msgstr "Impostazioni Bluetooth"
|
||||
|
||||
# indica lo stato del device BT, per esempio gli auricolari
|
||||
# credo sia meglio l'aggettivo che il sostantivo
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "Collegato"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "Invia file..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "Esplora file..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "Errore nell'esplorare il dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Non è possibile esplorare il dispositivo richiesto, l'errore è «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Impostazioni tastiera"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Impostazioni mouse"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Impostazioni audio"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Richesta autorizzazione da %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Il dispositivo %s vuole accedere al servizio «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "Consenti sempre accesso"
|
||||
msgstr "Accorda sempre l'accesso"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "Consenti solo stavolta"
|
||||
msgstr "Accorda solo stavolta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "Rifiuta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Conferma associazione per %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Il dispositivo %s vuole associarsi con questo computer"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confermare la corrispondenza del PIN «%s» con quello sul dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "Corrisponde"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "Non corrisponde"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Richiesta associazione per %s"
|
||||
msgstr "Richiesta di associazione per %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Inserire il PIN indicato sul dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -834,17 +844,147 @@ msgstr "Mostra disposizione tastiera..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "Impostazioni localizzazione"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<sconosciuto>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "disabilitata"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "connessione..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "richiesta autenticazione"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "cavo scollegato"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "non disponibile"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "connessione non riuscita"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "Connessa (privata)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "Banda larga automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Dial-up automatica"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "Wireless automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "Altro..."
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "Abilita rete"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "Via cavo"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "Wireless"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda larga mobile"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "Connessioni VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "Impostazioni rete"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Connessi alla rete mobile «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Connessi alla rete wireless «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Connessi alla rete via cavo «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Connessi alla rete VPN «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Connessi a «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
msgid "Connection established"
|
||||
msgstr "Connessione stabilita"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Rete disabilitata"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestore reti"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Impostazioni alimentazione"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "In stima..."
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -852,103 +992,103 @@ msgstr[0] "%d ora rimanente"
|
||||
msgstr[1] "%d ore rimanenti"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s e %d %s rimanenti"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "ora"
|
||||
msgstr[1] "ore"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minuto"
|
||||
msgstr[1] "minuti"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d minuto rimanente"
|
||||
msgstr[1] "%d minuti rimanenti"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "Alimentatore di corrente"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "Batteria del portatile"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "Mouse"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "Tastiera"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "PDS"
|
||||
|
||||
# c'era una discussione su tp...
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "Cellulare"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "Lettore multimediale"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "Tablet"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "Computer"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "Sconosciuto"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "Volume"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "Microfono"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s è disponibile."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s è fuori rete."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s è assente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s non è disponibile."
|
||||
@ -956,7 +1096,7 @@ msgstr "%s non è disponibile."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Inviato alle %-H.%M di %A"
|
||||
@ -965,11 +1105,11 @@ msgstr "Inviato alle %-H.%M di %A"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "Digitare per cercare..."
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
@ -986,7 +1126,7 @@ msgstr "«%s» è pronto"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -995,58 +1135,69 @@ msgstr[1] "%u uscite"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u ingresso"
|
||||
msgstr[1] "%u ingressi"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "Audio di sistema"
|
||||
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:446
|
||||
msgid "Print version"
|
||||
msgstr "Stampa la versione"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Avvio di «%s» non riuscito"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Meno di un minuto fa"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minuto fa"
|
||||
msgstr[1] "%d minuti fa"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d ora fa"
|
||||
msgstr[1] "%d ore fa"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d giorno fa"
|
||||
msgstr[1] "%d giorni fa"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d settimana fa"
|
||||
msgstr[1] "%d settimane fa"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Regno Unito"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "Predefinito"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
#, fuzzy
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr ""
|
||||
"Il dialogo di autenticazione è stato scartato|respinto|rimosso dall'utente"
|
||||
msgstr "Il dialogo di autenticazione è stato annullato dall'utente"
|
||||
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
@ -1069,6 +1220,36 @@ msgstr "File system"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Arresta"
|
||||
|
||||
# usato un termine diverso, magari si capisce meglio (LF)
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr ""
|
||||
#~ "Fare clic su «Arresta» per chiudere queste applicazioni e spegnere il "
|
||||
#~ "sistema."
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "Il sistema verrà arrestato automaticamente tra %d secondi."
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "Arresto del sistema."
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "Conferma"
|
||||
|
||||
#~ msgid "Panel"
|
||||
#~ msgstr "Pannello"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Applicazione inesistente"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Lettore schermo"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Tastiera a schermo"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "PREFERENZE"
|
||||
|
||||
|
454
po/ko.po
454
po/ko.po
@ -6,9 +6,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-08 05:43+0000\n"
|
||||
"PO-Revision-Date: 2011-03-14 10:40+0900\n"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-24 08:03+0000\n"
|
||||
"PO-Revision-Date: 2011-03-25 21:56+0900\n"
|
||||
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
|
||||
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -161,47 +161,43 @@ msgstr "프로그램 사용 통계를 저장할지 여부"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "OpenSearch 서비스 사용하지 않음"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "명령이 없습니다"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "명령어를 파싱할 수 없습니다:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "그런 프로그램이 없습니다"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "'%s' 실행이 실패했습니다:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:226
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
msgid "All"
|
||||
msgstr "모두"
|
||||
|
||||
#: ../js/ui/appDisplay.js:324
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "프로그램"
|
||||
|
||||
#: ../js/ui/appDisplay.js:350
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
msgid "SETTINGS"
|
||||
msgstr "설정"
|
||||
|
||||
#: ../js/ui/appDisplay.js:612
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
msgid "New Window"
|
||||
msgstr "새 창"
|
||||
|
||||
#: ../js/ui/appDisplay.js:615
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "즐겨찾기에서 제거"
|
||||
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Add to Favorites"
|
||||
msgstr "즐겨찾기에 추가"
|
||||
|
||||
@ -361,7 +357,7 @@ msgstr "이번주"
|
||||
msgid "Next week"
|
||||
msgstr "다음주"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
msgid "Remove"
|
||||
msgstr "제거"
|
||||
|
||||
@ -416,7 +412,7 @@ msgstr "(%a) %p %l:%M"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%Y년 %B %e일 %A"
|
||||
|
||||
@ -429,7 +425,7 @@ msgstr "최근 항목"
|
||||
msgid "Log Out %s"
|
||||
msgstr "로그아웃 %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "로그아웃"
|
||||
|
||||
@ -451,45 +447,43 @@ msgstr "%d초 뒤에 자동으로 로그아웃합니다."
|
||||
msgid "Logging out of the system."
|
||||
msgstr "시스템에서 로그아웃."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||
msgid "Shut Down"
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr "컴퓨터 끄기"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
msgstr "컴퓨터 끄기를 누르면 이 프로그램을 끝내고 시스템을 끕니다."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
msgstr "시스템이 %d초 뒤에 자동으로 꺼집니다."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "컴퓨터 끄기를 누르면 이 프로그램을 끝내고 시스템의 전원을 끕니다."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgid "Shutting down the system."
|
||||
msgstr "시스템을 끕니다."
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "시스템이 %d초 뒤에 자동으로 꺼집니다."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
msgid "Powering off the system."
|
||||
msgstr "시스템 전원 끄기."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "다시 시작"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr "다시 시작을 누르면 이 프로그램을 끝내고 시스템을 다시 시작합니다."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "시스템이 %d초 뒤에 자동으로 다시 시작합니다."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Restarting the system."
|
||||
msgstr "시스템을 다시 시작합니다."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:395
|
||||
msgid "Confirm"
|
||||
msgstr "확인"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "취소"
|
||||
|
||||
@ -503,7 +497,7 @@ msgstr "사용"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "사용 않음"
|
||||
|
||||
@ -523,47 +517,47 @@ msgstr "소스 보기"
|
||||
msgid "Web Page"
|
||||
msgstr "웹페이지"
|
||||
|
||||
#: ../js/ui/messageTray.js:926
|
||||
#: ../js/ui/messageTray.js:987
|
||||
msgid "Open"
|
||||
msgstr "열기"
|
||||
|
||||
#: ../js/ui/messageTray.js:1963
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
msgid "System Information"
|
||||
msgstr "시스템 정보"
|
||||
|
||||
#: ../js/ui/overview.js:88
|
||||
#: ../js/ui/overview.js:91
|
||||
msgid "Undo"
|
||||
msgstr "실행 취소"
|
||||
|
||||
#: ../js/ui/overview.js:183
|
||||
#: ../js/ui/overview.js:186
|
||||
msgid "Windows"
|
||||
msgstr "창"
|
||||
|
||||
#: ../js/ui/overview.js:186
|
||||
#: ../js/ui/overview.js:189
|
||||
msgid "Applications"
|
||||
msgstr "프로그램"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:202
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr "대시보드"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:532
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s 끝내기"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:893
|
||||
#: ../js/ui/panel.js:878
|
||||
msgid "Activities"
|
||||
msgstr "현재 활동"
|
||||
|
||||
#: ../js/ui/panel.js:994
|
||||
msgid "Panel"
|
||||
msgstr "패널"
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "위 막대"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
@ -578,64 +572,84 @@ msgstr "다시 시도"
|
||||
msgid "Connect to..."
|
||||
msgstr "연결..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "위치 및 장치"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:74
|
||||
msgid "Authentication Required"
|
||||
msgstr "인증이 필요합니다"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:108
|
||||
msgid "Administrator"
|
||||
msgstr "관리자"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr "인증"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "죄송합니다. 동작하지 않았습니다. 다시 시도하십시오."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
msgid "Password:"
|
||||
msgstr "암호:"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:679
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:201
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "명령을 입력하십시오:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
msgid "Searching..."
|
||||
msgstr "검색하는 중..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
msgid "No matching results."
|
||||
msgstr "일치하는 결과가 없습니다."
|
||||
|
||||
#: ../js/ui/statusMenu.js:102 ../js/ui/statusMenu.js:166
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "컴퓨터 끄기..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:104 ../js/ui/statusMenu.js:165
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "절전"
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "대화 가능"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
msgstr "다른 용무 중"
|
||||
|
||||
#: ../js/ui/statusMenu.js:138
|
||||
#: ../js/ui/statusMenu.js:197
|
||||
msgid "My Account"
|
||||
msgstr "내 계정"
|
||||
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
#: ../js/ui/statusMenu.js:201
|
||||
msgid "System Settings"
|
||||
msgstr "시스템 설정"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:208
|
||||
msgid "Lock Screen"
|
||||
msgstr "화면 잠그기"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:213
|
||||
msgid "Switch User"
|
||||
msgstr "사용자 바꾸기"
|
||||
|
||||
#: ../js/ui/statusMenu.js:158
|
||||
#: ../js/ui/statusMenu.js:218
|
||||
msgid "Log Out..."
|
||||
msgstr "로그아웃..."
|
||||
|
||||
@ -643,14 +657,12 @@ msgstr "로그아웃..."
|
||||
msgid "Zoom"
|
||||
msgstr "크기 조정"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "화면 읽기"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "화면 키보드"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "화면 알림"
|
||||
@ -673,19 +685,19 @@ msgstr "마우스 키"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:93
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "보편적 접근성 설정"
|
||||
msgstr "접근성 설정"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "고대비"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "큰 글자"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "블루투스"
|
||||
|
||||
@ -705,94 +717,94 @@ msgstr "새 장치 준비..."
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "블루투스 설정"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "연결"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "파일 보내기..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "파일 찾아보기..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "장치를 찾아보는데 오류"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "요청한 장치를 찾아볼 수 없습니다. 오류는 '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "키보드 설정"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "마우스 설정"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "소리 설정"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "%s 장치에서 권한 확인 요청"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "%s 장치에서 '%s' 서비스에 접근을 요청합니다"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "항상 접근 허용"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "이번에만 허용"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "거부"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "연결 확인 (%s)"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "%s 장치가 이 컴퓨터와 연결하려 합니다."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "PIN '%s'이(가) 해당 장치의 PIN과 일치하는지 확인하십시오."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "일치"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "일치하지 않음"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "연결 요청 (%s)"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "해당 장치에 표시된 PIN을 입력하십시오."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "확인"
|
||||
|
||||
@ -804,117 +816,247 @@ msgstr "키보드 배치 보기..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "지역화 설정"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<알 수 없음>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "사용 않음"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "연결하는 중..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "인증이 필요합니다"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "케이블이 분리되었습니다"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "사용 불가"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "연결이 실패했습니다"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "연결됨 (개인)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "자동 이더넷"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "자동 고속 통신망"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "자동 전화접속"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "자동 %s"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "자동 블루투스"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "자동 무선"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "더 보기..."
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "네트워크 사용"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "유선"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "무선"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "휴대전화 네트워크"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN 연결"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "네트워크 설정"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "'%s' 휴대전화 네트워크에 연결되었습니다"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "'%s' 무선 네트워크에 연결되었습니다"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "'%s' 유선 네트워크에 연결되었습니다"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "'%s' VPN 네트워크에 연결되었습니다"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "이제 '%s'에 연결되었습니다"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
msgid "Connection established"
|
||||
msgstr "연결이 되었습니다"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "네트워크를 사용하지 않습니다"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "네트워크 관리"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "전원 설정"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "예상치 계산 중..."
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%d시간 남음"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d%s %d%s 남음"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "시간"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "분"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d분 남음"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "AC 어댑터"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "노트북 배터리"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "모니터"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "마우스"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "키보드"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "휴대전화"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "미디어 플레이어"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "태블릿"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "컴퓨터"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "알 수 없음"
|
||||
|
||||
# 오디오 볼륨
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "볼륨"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "마이크"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s 연결 중."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s 연결 중지."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s 다른 용무 중."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s 부재중."
|
||||
@ -922,7 +1064,7 @@ msgstr "%s 부재중."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:348
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "보낸 때: %A %H시 %M분"
|
||||
@ -931,11 +1073,11 @@ msgstr "보낸 때: %A %H시 %M분"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "검색하려면 입력하십시오..."
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "검색"
|
||||
|
||||
@ -951,7 +1093,7 @@ msgstr "'%s' 프로그램이 준비되었습니다"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -959,49 +1101,62 @@ msgstr[0] "%u개 출력"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u개 입력"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "시스템 소리"
|
||||
|
||||
# 커맨드라인 옵션 설명
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:446
|
||||
msgid "Print version"
|
||||
msgstr "버전을 표시합니다"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "'%s' 실행에 실패했습니다"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "1분 이내"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d분 전"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d시간 전"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d일 전"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d주 전"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "영국"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "기본값"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "인증 대화 창을 사용자가 닫았습니다"
|
||||
@ -1026,5 +1181,32 @@ msgstr "파일시스템"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "컴퓨터 끄기"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "컴퓨터 끄기를 누르면 이 프로그램을 끝내고 시스템을 끕니다."
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "시스템이 %d초 뒤에 자동으로 꺼집니다."
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "시스템을 끕니다."
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "확인"
|
||||
|
||||
#~ msgid "Panel"
|
||||
#~ msgstr "패널"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "그런 프로그램이 없습니다"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "화면 읽기"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "화면 키보드"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "기본 설정"
|
||||
|
427
po/nb.po
427
po/nb.po
@ -4,12 +4,13 @@
|
||||
#
|
||||
# Kjartan Maraas <kmaraas@gnome.org>, 2009-2011.
|
||||
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:142
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 2.91.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-08 15:24+0100\n"
|
||||
"PO-Revision-Date: 2011-03-08 15:29+0100\n"
|
||||
"POT-Creation-Date: 2011-03-23 21:46+0100\n"
|
||||
"PO-Revision-Date: 2011-03-23 21:47+0100\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
@ -145,49 +146,45 @@ msgstr "Om det skal samles statistikk om bruk av programmer"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr ""
|
||||
msgstr "OpenSearch tilbydere slått av"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "Kommando ikke funnet"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Klarte ikke å lese kommando:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "Programmet finnes ikke"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Kjøring av «%s» feilet:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:226
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: ../js/ui/appDisplay.js:324
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "PROGRAMMER"
|
||||
|
||||
#: ../js/ui/appDisplay.js:350
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
msgid "SETTINGS"
|
||||
msgstr "INNSTILLINGER"
|
||||
|
||||
#: ../js/ui/appDisplay.js:612
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
msgid "New Window"
|
||||
msgstr "Nytt vindu"
|
||||
|
||||
#: ../js/ui/appDisplay.js:615
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Fjern fra favoritter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Legg til i favoritter"
|
||||
|
||||
@ -347,7 +344,7 @@ msgstr "Denne uken"
|
||||
msgid "Next week"
|
||||
msgstr "Neste uke"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
msgid "Remove"
|
||||
msgstr "Fjern"
|
||||
|
||||
@ -402,7 +399,7 @@ msgstr "%a %l.%M %p"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%a %e %B, %Y"
|
||||
|
||||
@ -415,7 +412,7 @@ msgstr "SISTE OPPFØRINGER"
|
||||
msgid "Log Out %s"
|
||||
msgstr "Logg ut %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "Logg ut"
|
||||
|
||||
@ -438,47 +435,46 @@ msgstr "Du vil bli logget ut automatisk om %d sekunder."
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Logger ut av systemet"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||
msgid "Shut Down"
|
||||
msgstr "Avslutt"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
msgstr "Klikk Avslutt for å avslutte disse programmene og stenge ned systemet."
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr "Slå av"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
msgstr "Systemet vil slås av automatisk om %d sekunder."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
"Klikk «Slå av» for å avslutte disse programmene og logge ut av systemet."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgid "Shutting down the system."
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "Systemet vil slås av automatisk om %d sekunder."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
msgid "Powering off the system."
|
||||
msgstr "Slår av systemet."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "Start på nytt"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
"Klikk Start på nytt for å avslutte disse programmene og starte systemet på "
|
||||
"nytt."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "Systemet vil starte på nytt automatisk om %d sekunder."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Restarting the system."
|
||||
msgstr "Starter systemet på nytt."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:395
|
||||
msgid "Confirm"
|
||||
msgstr "Bekreft"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
@ -492,7 +488,7 @@ msgstr "Aktivert"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "Deaktivert"
|
||||
|
||||
@ -512,47 +508,47 @@ msgstr "Vis kildekode"
|
||||
msgid "Web Page"
|
||||
msgstr "Nettside"
|
||||
|
||||
#: ../js/ui/messageTray.js:926
|
||||
#: ../js/ui/messageTray.js:987
|
||||
msgid "Open"
|
||||
msgstr "Åpne"
|
||||
|
||||
#: ../js/ui/messageTray.js:1963
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformasjon"
|
||||
|
||||
#: ../js/ui/overview.js:88
|
||||
#: ../js/ui/overview.js:91
|
||||
msgid "Undo"
|
||||
msgstr "Angre"
|
||||
|
||||
#: ../js/ui/overview.js:183
|
||||
#: ../js/ui/overview.js:186
|
||||
msgid "Windows"
|
||||
msgstr "Vinduer"
|
||||
|
||||
#: ../js/ui/overview.js:186
|
||||
#: ../js/ui/overview.js:189
|
||||
msgid "Applications"
|
||||
msgstr "Programmer"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:202
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr "Favoritter"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:532
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Avslutt %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:893
|
||||
#: ../js/ui/panel.js:878
|
||||
msgid "Activities"
|
||||
msgstr "Aktiviteter"
|
||||
|
||||
#: ../js/ui/panel.js:994
|
||||
msgid "Panel"
|
||||
msgstr "Panel"
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "Topp-panel"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
@ -567,64 +563,84 @@ msgstr "Prøv igjen"
|
||||
msgid "Connect to..."
|
||||
msgstr "Koble til …"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "STEDER & ENHETER"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:74
|
||||
msgid "Authentication Required"
|
||||
msgstr "Autentisering kreves"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:108
|
||||
msgid "Administrator"
|
||||
msgstr "Administrator"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr "Autentiser"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Beklager, det virket ikke. Vennligst prøv igjen."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
msgid "Password:"
|
||||
msgstr "Passord:"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:679
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:201
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Oppgi en kommando:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
msgid "Searching..."
|
||||
msgstr "Søker …"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
msgid "No matching results."
|
||||
msgstr "Ingen treff."
|
||||
|
||||
#: ../js/ui/statusMenu.js:102 ../js/ui/statusMenu.js:166
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "Slå av …"
|
||||
|
||||
#: ../js/ui/statusMenu.js:104 ../js/ui/statusMenu.js:165
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "Hvilemodus"
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "Tilgjengelig"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
msgstr "Opptatt"
|
||||
|
||||
#: ../js/ui/statusMenu.js:138
|
||||
#: ../js/ui/statusMenu.js:197
|
||||
msgid "My Account"
|
||||
msgstr "Min konto"
|
||||
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
#: ../js/ui/statusMenu.js:201
|
||||
msgid "System Settings"
|
||||
msgstr "Systeminnstillinger"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:208
|
||||
msgid "Lock Screen"
|
||||
msgstr "Lås skjerm"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:213
|
||||
msgid "Switch User"
|
||||
msgstr "Bytt bruker"
|
||||
|
||||
#: ../js/ui/statusMenu.js:158
|
||||
#: ../js/ui/statusMenu.js:218
|
||||
msgid "Log Out..."
|
||||
msgstr "Logg ut …"
|
||||
|
||||
@ -632,14 +648,12 @@ msgstr "Logg ut …"
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "Skjermleser"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Tastatur på skjermen"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Synlig varsling"
|
||||
@ -664,17 +678,17 @@ msgstr "Mustaster"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Innstillinger for tilgjengelighet"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "Høy kontrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "Stor tekst"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -694,94 +708,94 @@ msgstr "Sett opp en ny enhet …"
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Innstillinger for Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "Tilkobling"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "Send filer …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "Bla gjennom filer …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "Feil under lesing av enhet"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Kan ikke bla gjennom forespurt enhet. Feilen er «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Innstillinger for tastatur"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Innstillinger for mus"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Innstillinger for lyd"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Forespørsel om autorisering fra %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Enhet %s vil ha tilgang til tjenesten «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "Alltid gi tilgang"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "Gi tilgang kun denne ene gangen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "Avvis"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Bekreftelse for tilkobling for %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Vennligst bekreft om PIN «%s» er lik den som brukes på enheten."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "Stemmer overens"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "Stemmer ikke overens"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Forespørsel om tilkobling for %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Vennligst oppgi PIN som oppgitt på enheten."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -793,17 +807,147 @@ msgstr "Vis tastaturutforming …"
|
||||
msgid "Localization Settings"
|
||||
msgstr "Innstillinger for lokalisering"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<ukjent>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "slått av"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "kobler til …"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "autentisering kreves"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel koblet fra"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "tilkobling feilet"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "Tilkoblet (privat)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatisk Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatisk bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatisk oppringt"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatisk %s"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatisk Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatisk trådløst"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "Mer …"
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "Slå på nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "Kablet"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "Trådløst"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobilt bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-tilkoblinger"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "Innstillinger for nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Du er nå koblet til mobil bredbåndstilkobling «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Du er nå koblet til trådløst nettverk «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Du er nå koblet til kablet nettverk «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Du er nå koblet til virtuelt privat nettverk «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Du er nå koblet til «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
msgid "Connection established"
|
||||
msgstr "Tilkobling etablert"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Nettverk er slått av"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "Nettverkshåndtering"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Innstillinger for strøm"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "Estimerer …"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -811,102 +955,102 @@ msgstr[0] "%d time gjenstår"
|
||||
msgstr[1] "%d timer gjenstår"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s gjenstår"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "time"
|
||||
msgstr[1] "timer"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minutt"
|
||||
msgstr[1] "minutter"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d minutt gjenstår"
|
||||
msgstr[1] "%d minutter gjenstår"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "Strømadapter"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "Batteri på bærbar"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "Skjerm"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "Mus"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "Tastatur"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "Mobiltelefon"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "Medieavspiller"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "Nettbrett"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "Datamaskin"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "Ukjent"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "Volum"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s er tilkoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s er frakoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "«%s» er borte."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s er opptatt."
|
||||
@ -914,7 +1058,7 @@ msgstr "%s er opptatt."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:348
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Sendt %X på %A"
|
||||
@ -923,11 +1067,11 @@ msgstr "Sendt %X på %A"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "Skriv for å søke …"
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Søk"
|
||||
|
||||
@ -943,7 +1087,7 @@ msgstr "«%s» er klar"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -952,53 +1096,66 @@ msgstr[1] "%u utganger"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u inngang"
|
||||
msgstr[1] "%u innganger"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "Systemlyder"
|
||||
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:438
|
||||
msgid "Print version"
|
||||
msgstr "Skriv ut versjon"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Klarte ikke å starte «%s»"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Mindre enn ett minutt siden"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minutt siden"
|
||||
msgstr[1] "%d minutter siden"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d time siden"
|
||||
msgstr[1] "%d timer siden"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d dag siden"
|
||||
msgstr[1] "%d dager siden"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d uke siden"
|
||||
msgstr[1] "%d uker siden"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "Forvalg"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Autentiseringsdialogen ble lukket av brukeren"
|
||||
|
344
po/nl.po
344
po/nl.po
@ -6,12 +6,15 @@
|
||||
# Reinout van Schouwen <reinouts@gnome.org>, 2010
|
||||
# Wouter Bolsterlee <wbolster@gnome.org>, 2011
|
||||
#
|
||||
# Aangezien dit een erg zichtbare module is graag eerst contact opnemen met
|
||||
# Wouter Bolsterlee alvorens zaken te wijzigen!
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-12 23:52+0100\n"
|
||||
"PO-Revision-Date: 2011-03-12 23:52+0100\n"
|
||||
"POT-Creation-Date: 2011-03-19 01:15+0100\n"
|
||||
"PO-Revision-Date: 2011-03-19 01:14+0100\n"
|
||||
"Last-Translator: Wouter Bolsterlee <wbolster@gnome.org>\n"
|
||||
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
|
||||
"Language: nl\n"
|
||||
@ -44,11 +47,11 @@ msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Bestandsextensie voor het opslaan van de screencast"
|
||||
msgstr "Bestandsextensie voor het opslaan van de schermopname"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Framerate voor het opnemen van de screencasts."
|
||||
msgstr "Framerate voor het opnemen van de schermopnamen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
@ -149,7 +152,7 @@ msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "De gstreamer-pijplijn voor het coderen van de screencast"
|
||||
msgstr "De gstreamer-pijplijn voor het coderen van de schermopname"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
@ -175,21 +178,17 @@ msgstr "Of statistieken worden bijgehouden over gebruik van toepassingen"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "uitgeschakelde OpenSearch-providers"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "Opdracht niet gevonden"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Kon opdracht niet parsen:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "Toepassing niet gevonden"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Uitvoeren van ‘%s’ mislukt:"
|
||||
@ -375,13 +374,13 @@ msgstr "Deze week"
|
||||
msgid "Next week"
|
||||
msgstr "Volgende week"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:931
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||
msgid "Remove"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: ../js/ui/dateMenu.js:91
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "Datum- en tijdinstellingen"
|
||||
msgstr "Instellingen voor datum en tijd"
|
||||
|
||||
#: ../js/ui/dateMenu.js:111
|
||||
msgid "Open Calendar"
|
||||
@ -427,13 +426,12 @@ msgstr "%a %l:%M:%S %p"
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
# Dagnaam bewust afgekort (Wouter Bolsterlee)
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%a %e %B %Y"
|
||||
msgstr "%A %e %B %Y"
|
||||
|
||||
#: ../js/ui/docDisplay.js:19
|
||||
msgid "RECENT ITEMS"
|
||||
@ -509,7 +507,7 @@ msgstr "Computer opnieuw opstarten"
|
||||
msgid "Confirm"
|
||||
msgstr "Bevestigen"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
@ -543,11 +541,11 @@ msgstr "Broncode weergeven"
|
||||
msgid "Web Page"
|
||||
msgstr "Webpagina"
|
||||
|
||||
#: ../js/ui/messageTray.js:924
|
||||
#: ../js/ui/messageTray.js:926
|
||||
msgid "Open"
|
||||
msgstr "Openen"
|
||||
|
||||
#: ../js/ui/messageTray.js:1961
|
||||
#: ../js/ui/messageTray.js:1986
|
||||
msgid "System Information"
|
||||
msgstr "Systeeminformatie"
|
||||
|
||||
@ -571,18 +569,18 @@ msgid "Dash"
|
||||
msgstr "Zijbalk"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:560
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s afsluiten"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:919
|
||||
#: ../js/ui/panel.js:874
|
||||
msgid "Activities"
|
||||
msgstr "Activiteiten"
|
||||
|
||||
#: ../js/ui/panel.js:1020
|
||||
#: ../js/ui/panel.js:975
|
||||
msgid "Panel"
|
||||
msgstr "Paneel"
|
||||
|
||||
@ -599,7 +597,7 @@ msgstr "Opnieuw"
|
||||
msgid "Connect to..."
|
||||
msgstr "Verbinding maken met…"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LOCATIES & APPARATEN"
|
||||
|
||||
@ -608,7 +606,7 @@ msgstr "LOCATIES & APPARATEN"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:636
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -624,39 +622,39 @@ msgstr "Zoeken…"
|
||||
msgid "No matching results."
|
||||
msgstr "Geen overeenkomende resultaten."
|
||||
|
||||
#: ../js/ui/statusMenu.js:113 ../js/ui/statusMenu.js:177
|
||||
#: ../js/ui/statusMenu.js:114 ../js/ui/statusMenu.js:178
|
||||
msgid "Power Off..."
|
||||
msgstr "Uitschakelen…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:115 ../js/ui/statusMenu.js:176
|
||||
#: ../js/ui/statusMenu.js:116 ../js/ui/statusMenu.js:177
|
||||
msgid "Suspend"
|
||||
msgstr "Slaapstand"
|
||||
|
||||
#: ../js/ui/statusMenu.js:136
|
||||
#: ../js/ui/statusMenu.js:137
|
||||
msgid "Available"
|
||||
msgstr "Beschikbaar"
|
||||
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Bezig"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "My Account"
|
||||
msgstr "Mijn account"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "System Settings"
|
||||
msgstr "Systeeminstellingen"
|
||||
|
||||
#: ../js/ui/statusMenu.js:160
|
||||
#: ../js/ui/statusMenu.js:161
|
||||
msgid "Lock Screen"
|
||||
msgstr "Scherm vergrendelen"
|
||||
|
||||
#: ../js/ui/statusMenu.js:164
|
||||
#: ../js/ui/statusMenu.js:165
|
||||
msgid "Switch User"
|
||||
msgstr "Gebruiker wisselen"
|
||||
|
||||
#: ../js/ui/statusMenu.js:169
|
||||
#: ../js/ui/statusMenu.js:170
|
||||
msgid "Log Out..."
|
||||
msgstr "Afmelden…"
|
||||
|
||||
@ -664,14 +662,12 @@ msgstr "Afmelden…"
|
||||
msgid "Zoom"
|
||||
msgstr "Zoomen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "Schermlezer"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Schermtoetsenbord"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Visuele alerteringen"
|
||||
@ -696,17 +692,17 @@ msgstr "Muistoetsen"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Instellingen voor toegankelijkheid"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "Hoog contrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "Grote tekst"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -726,94 +722,94 @@ msgstr "Nieuw apparaat instellen…"
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Bluetooth-instellingen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "Verbinding"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "Bestanden sturen…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "Bestanden doorbladeren…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "Fout bij doorbladeren van apparaat"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Het gekozen apparaat kon niet doorgebladerd worden. De fout is ‘%s’"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Toetsenbordvoorkeuren"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Muisvoorkeuren"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Geluidsvoorkeuren"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Autorisatie-aanvraag van %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Het apparaat ‘%s’ wil toegang tot de dienst ‘%s’"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "Altijd toestaan"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "Eenmalig toestaan"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "Afwijzen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Koppelbevestiging voor %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Het apparaat ‘%s’ wil aankoppelen met deze computer"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Bevestig dat de PIN-code ‘%s’ hetzelfde is als die van het apparaat."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "Komt overeen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "Komt niet overeen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Verzoek tot koppelen met %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Geef de op het apparaat aangegeven PIN-code."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -825,17 +821,149 @@ msgstr "Toetsenbordindeling tonen…"
|
||||
msgid "Localization Settings"
|
||||
msgstr "Regionale instellingen"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<onbekend>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "uitgeschakeld"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "verbinden…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "authenticatie nodig"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel niet verbonden"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "niet beschikbaar"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "verbinding mislukt"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "Verbonden (persoonlijke verbinding)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatisch ethernetverbinding"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatische breedbandverbinding"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatisch inbellen"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s (automatisch)"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatische Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatisch draadloos netwerk"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "Meer…"
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "Netwerk inschakelen"
|
||||
|
||||
# Expliciet "netwerk" toegevoegd (Wouter Bolsterlee)
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "Bekabeld netwerk"
|
||||
|
||||
# Expliciet "netwerk" toegevoegd (Wouter Bolsterlee)
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "Draadloos netwerk"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobiel breedband"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-verbindingen"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "Netwerkinstellingen"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "U bent nu verbonden met de mobiele breedbandverbinding ‘%s’"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "U bent nu verbonden met het draadloze netwerk ‘%s’"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "U bent nu verbonden met het bekabelde netwerk ‘%s’"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "U bent nu verbonden met het VPN-netwerk ‘%s’"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "U bent nu verbonden met ‘%s’"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
msgid "Connection established"
|
||||
msgstr "Verbinding gemaakt"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Netwerk is uitgeschakeld"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "Netwerk-manager"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Energievoorkeuren"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "Schatten…"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -843,75 +971,75 @@ msgstr[0] "%d uur resterend"
|
||||
msgstr[1] "%d uur resterend"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s resterend"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "uur"
|
||||
msgstr[1] "uur"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minuut"
|
||||
msgstr[1] "minuten"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d minuut resterend"
|
||||
msgstr[1] "%d minuten resterend"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "Netstroom"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "Laptop-accu"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "Muis"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "Toetsenbord"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "Mobiele telefoon"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "Mediaspeler"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "Tablet"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "Computer"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:961
|
||||
msgid "Unknown"
|
||||
msgstr "Onbekend"
|
||||
|
||||
@ -923,22 +1051,22 @@ msgstr "Volume"
|
||||
msgid "Microphone"
|
||||
msgstr "Microfoon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s is online."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s is offline."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s is afwezig."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s is bezig."
|
||||
@ -946,7 +1074,7 @@ msgstr "%s is bezig."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Verzonden om %H:%M op %A %e %B %Y"
|
||||
@ -995,42 +1123,55 @@ msgstr[1] "%u invoerkanalen"
|
||||
msgid "System Sounds"
|
||||
msgstr "Systeemgeluiden"
|
||||
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:397
|
||||
msgid "Print version"
|
||||
msgstr "Versie weergeven"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Kon ‘%s’ niet starten"
|
||||
|
||||
#: ../src/shell-global.c:1340
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Minder dan een minuut geleden"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1344
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minuut geleden"
|
||||
msgstr[1] "%d minuten geleden"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1349
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d uur geleden"
|
||||
msgstr[1] "%d uur geleden"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1354
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d dag geleden"
|
||||
msgstr[1] "%d dagen geleden"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1359
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d week geleden"
|
||||
msgstr[1] "%d weken geleden"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Verenigd Koninkrijk"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "Standaard"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Authenticatievenster is door de gebruiker afgesloten"
|
||||
@ -1055,6 +1196,15 @@ msgstr "Bestandssysteem"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Toepassing niet gevonden"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Schermlezer"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Schermtoetsenbord"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "VOORKEUREN"
|
||||
|
||||
|
474
po/pa.po
474
po/pa.po
@ -6,9 +6,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
|
||||
"cgi?product=gnome-shell&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-07 16:15+0000\n"
|
||||
"PO-Revision-Date: 2011-03-08 08:27+0530\n"
|
||||
"cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-24 08:03+0000\n"
|
||||
"PO-Revision-Date: 2011-03-25 08:16+0530\n"
|
||||
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
|
||||
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -164,47 +164,43 @@ msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵਰਤੋਂ ਬਾਰੇ ਅੰਕੜੇ
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "ਓਪਨਸਰਚ ਉਪਲੱਬਧ ਕਰਵਾਉਣ ਵਾਲੇ ਬੰਦ ਹਨ"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "ਕਮਾਂਡ ਨਹੀਂ ਲੱਭੀ"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "ਕਮਾਂਡ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "ਇੰਞ ਦੀ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:226
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
msgid "All"
|
||||
msgstr "ਸਭ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:324
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:350
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
msgid "SETTINGS"
|
||||
msgstr "ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:612
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
msgid "New Window"
|
||||
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:615
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Add to Favorites"
|
||||
msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ"
|
||||
|
||||
@ -364,7 +360,7 @@ msgstr "ਇਹ ਹਫ਼ਤਾ"
|
||||
msgid "Next week"
|
||||
msgstr "ਹਫ਼ਤਾ ਅੱਗੇ"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
msgid "Remove"
|
||||
msgstr "ਹਟਾਓ"
|
||||
|
||||
@ -419,7 +415,7 @@ msgstr "%a %l:%M %p"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A, %e %B %Y"
|
||||
|
||||
@ -432,7 +428,7 @@ msgstr "ਤਾਜ਼ਾ ਆਈਟਮਾਂ"
|
||||
msgid "Log Out %s"
|
||||
msgstr "%s ਲਾਗਆਉਟ"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "ਲਾਗਆਉਟ"
|
||||
|
||||
@ -455,46 +451,48 @@ msgstr "ਤੁਹਾਨੂੰ %d ਸਕਿੰਟਾਂ ਵਿੱਚ ਆਟੋਮ
|
||||
msgid "Logging out of the system."
|
||||
msgstr "ਸਿਸਟਮ ਲਾਗ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||
msgid "Shut Down"
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
#| msgid "Power Off..."
|
||||
msgid "Power Off"
|
||||
msgstr "ਬੰਦ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
msgstr "ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰਕੇ ਸਿਸਟਮ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਬੰਦ ਕਰੋ ਨੂੰ ਕਲਿੱਕ ਕਰੋ।"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
msgstr "ਸਿਸਟਮ ਨੂੰ ਆਟੋਮੈਟਿਕ ਹੀ %d ਸਕਿੰਟਾਂ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾਵੇਗਾ।"
|
||||
#| msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "ਇਹ ਐਪਲੀਕੇਸ਼ਨਾਂ ਬੰਦ ਕਰਨ ਅਤੇ ਸਿਸਟਮ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਬੰਦ ਕਰੋ ਨੂੰ ਕਲਿੱਕ ਕਰੋ।"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgid "Shutting down the system."
|
||||
#, c-format
|
||||
#| msgid "The system will restart automatically in %d seconds."
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "ਸਿਸਟਮ ਨੂੰ ਆਟੋਮੈਟਿਕ ਹੀ %d ਸਕਿੰਟਾਂ ਵਿੱਚ ਬੰਦ ਹੋ ਜਾਵੇਗਾ।"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
#| msgid "Logging out of the system."
|
||||
msgid "Powering off the system."
|
||||
msgstr "ਸਿਸਟਮ ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "ਮੁੜ-ਚਾਲੂ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
"ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰਨ ਤੇ ਸਿਸਟਮ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਲਈ ਮੁੜ-ਚਾਲੂ ਕਰੋ ਨੂੰ ਕਲਿੱਕ ਕਰੋ।"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "ਸਿਸਟਮ ਨੂੰ ਆਟੋਮੈਟਿਕ ਹੀ %d ਸਕਿੰਟਾਂ ਵਿੱਚ ਮੁੜ-ਚਾਲੂ ਕੀਤਾ ਜਾ ਜਾਵੇਗਾ।"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Restarting the system."
|
||||
msgstr "ਸਿਸਟਮ ਮੁੜ-ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:395
|
||||
msgid "Confirm"
|
||||
msgstr "ਪੁਸ਼ਟੀ"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "ਰੱਦ ਕਰੋ"
|
||||
|
||||
@ -508,7 +506,7 @@ msgstr "ਚਾਲੂ ਹੈ"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "ਬੰਦ ਹੈ"
|
||||
|
||||
@ -528,48 +526,47 @@ msgstr "ਸਰੋਤ ਵੇਖੋ"
|
||||
msgid "Web Page"
|
||||
msgstr "ਵੈੱਬ ਪੇਜ਼"
|
||||
|
||||
#: ../js/ui/messageTray.js:926
|
||||
#: ../js/ui/messageTray.js:987
|
||||
msgid "Open"
|
||||
msgstr "ਖੋਲ੍ਹੋ"
|
||||
|
||||
#: ../js/ui/messageTray.js:1963
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
msgid "System Information"
|
||||
msgstr "ਸਿਸਟਮ ਜਾਣਕਾਰੀ"
|
||||
|
||||
#: ../js/ui/overview.js:88
|
||||
#: ../js/ui/overview.js:91
|
||||
msgid "Undo"
|
||||
msgstr "ਵਾਪਸ"
|
||||
|
||||
#: ../js/ui/overview.js:183
|
||||
#: ../js/ui/overview.js:186
|
||||
msgid "Windows"
|
||||
msgstr "ਵਿੰਡੋ"
|
||||
|
||||
#: ../js/ui/overview.js:186
|
||||
#: ../js/ui/overview.js:189
|
||||
msgid "Applications"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:202
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr "ਡੈਸ਼"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:532
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s ਬੰਦ ਕਰੋ"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:893
|
||||
#: ../js/ui/panel.js:878
|
||||
msgid "Activities"
|
||||
msgstr "ਸਰਗਰਮੀਆਂ"
|
||||
|
||||
#: ../js/ui/panel.js:994
|
||||
#| msgid "Cancel"
|
||||
msgid "Panel"
|
||||
msgstr "ਪੈਨਲ"
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "ਉੱਤਲੀ ਪੱਟੀ"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
@ -584,64 +581,84 @@ msgstr "ਮੁੜ-ਕੋਸ਼ਿਸ਼"
|
||||
msgid "Connect to..."
|
||||
msgstr "...ਨਾਲ ਕੁਨੈਕਟ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "ਥਾਵਾਂ ਤੇ ਜੰਤਰ"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:74
|
||||
msgid "Authentication Required"
|
||||
msgstr "ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਹੈ"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:108
|
||||
msgid "Administrator"
|
||||
msgstr "ਪਰਸ਼ਾਸ਼ਕ"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr "ਪਰਮਾਣਕਿਤਾ"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "ਅਫਸੋਸ, ਉਹ ਕੰਮ ਨਹੀਂ ਕਰਦਾ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
msgid "Password:"
|
||||
msgstr "ਪਾਸਵਰਡ:"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:679
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-us"
|
||||
|
||||
#: ../js/ui/runDialog.js:201
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "ਕਮਾਂਡ ਦਿਓ ਜੀ:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
msgid "Searching..."
|
||||
msgstr "ਖੋਜ ਜਾਰੀ ਹੈ..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
msgid "No matching results."
|
||||
msgstr "ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ ਲੱਭਿਆ।"
|
||||
|
||||
#: ../js/ui/statusMenu.js:102 ../js/ui/statusMenu.js:166
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "...ਬੰਦ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:104 ../js/ui/statusMenu.js:165
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "ਸਸਪੈਂਡ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "ਉਪਲੱਬਧ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
msgstr "ਰੁਝਿਆ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:138
|
||||
#: ../js/ui/statusMenu.js:197
|
||||
msgid "My Account"
|
||||
msgstr "ਮੇਰਾ ਅਕਾਊਂਟ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
#: ../js/ui/statusMenu.js:201
|
||||
msgid "System Settings"
|
||||
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:208
|
||||
msgid "Lock Screen"
|
||||
msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:213
|
||||
msgid "Switch User"
|
||||
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:158
|
||||
#: ../js/ui/statusMenu.js:218
|
||||
msgid "Log Out..."
|
||||
msgstr "...ਲਾਗਆਉਟ"
|
||||
|
||||
@ -649,14 +666,12 @@ msgstr "...ਲਾਗਆਉਟ"
|
||||
msgid "Zoom"
|
||||
msgstr "ਜ਼ੂਮ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "ਸਕਰੀਨ ਰੀਡਰ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "ਸਕਰੀਨ ਕੀਬੋਰਡ"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "ਦਿੱਖ ਚੇਤਾਵਨੀ"
|
||||
@ -681,17 +696,17 @@ msgstr "ਮਾਊਸ ਸਵਿੱਚਾਂ"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "ਯੂਨੀਵਰਸਲ ਅਸੈੱਸ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "ਵੱਧ ਕਨਟਰਾਸਟ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "ਵੱਡੇ ਅੱਖਰ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "ਬਲਿਊਟੁੱਥ"
|
||||
|
||||
@ -711,94 +726,94 @@ msgstr "...ਨਵਾਂ ਜੰਤਰ ਸੈਟਅੱਪ"
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "ਬਲਿਊਟੁੱਥ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "ਕੁਨੈਕਸ਼ਨ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "...ਫਾਇਲਾਂ ਭੇਜੋ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "...ਫਾਇਲਾਂ ਦੀ ਝਲਕ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "ਜੰਤਰ ਬਰਾਊਜ਼ ਕਰਨ ਲਈ ਗਲਤੀ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "ਮੰਗ ਕੀਤੇ ਗਏ ਜੰਤਰ ਨੂੰ ਬਰਾਊਜ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ, ਗਲਤੀ ਸੀ '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "ਕੀਬੋਰਡ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "ਮਾਊਸ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "ਸਾਊਂਡ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "'%s' ਤੋਂ ਪਰਮਾਣਕਿਤਾ ਮੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "ਜੰਤਰ %s ਸਰਵਿਸ '%s' ਨੂੰ ਵਰਤਣੀ ਚਾਹੁੰਦਾ ਹੈ।"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "ਹਮੇਸ਼ਾ ਪਹੁੰਚ ਮਨਜ਼ੂਰ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "ਕੇਵਲ ਇਸ ਸਮੇਂ ਹੀ ਮਨਜ਼ੂਰ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "ਨਾ-ਮਨਜ਼ੂਰ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "%s ਲਈ ਪੇਅਰ ਕਰਨ ਦੀ ਪੁਸ਼ਟੀ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "ਜੰਤਰ %s ਇਸ ਕੰਪਿਊਟਰ ਨਾਲ ਪੇਅਰ ਹੋਣਾ ਚਾਹੁੰਦਾ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "ਪੁਸ਼ਟੀ ਕਰੋ ਜੀ ਕਿ ਪਿੰਨ '%s' ਜੰਤਰ ਉੱਤੇ ਮੌਜੂਦ ਪਿੰਨ ਨਾਲ ਮਿਲਦਾ ਹੈ।"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "ਮਿਲਦਾ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "ਮਿਲਦਾ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "%s ਲਈ ਪੇਅਰ ਕਰਨ ਦੀ ਮੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "ਜੰਤਰ ਉੱਤੇ ਦਿੱਤਾ ਗਿਆ ਪਿੰਨ ਦਿਉ ਜੀ।"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "ਠੀਕ ਹੈ"
|
||||
|
||||
@ -810,17 +825,158 @@ msgstr "...ਕੀਬੋਰਡ ਲੇਆਉਟ ਵੇਖੋ"
|
||||
msgid "Localization Settings"
|
||||
msgstr "ਲੋਕਲਾਈਜ਼ੇਸ਼ਨ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
#| msgid "Unknown"
|
||||
msgid "<unknown>"
|
||||
msgstr "<ਅਣਜਾਣ>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
#| msgid "Disabled"
|
||||
msgid "disabled"
|
||||
msgstr "ਬੰਦ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
#| msgid "Connection"
|
||||
msgid "connecting..."
|
||||
msgstr "ਕੁਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਹੈ"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "ਕੇਬਲ ਕੱਢੀ ਹੋਈ ਹੈ"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
#| msgid "Available"
|
||||
msgid "unavailable"
|
||||
msgstr "ਨਾ-ਉਪਲੱਬਧ"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
#| msgid "Connection"
|
||||
msgid "connection failed"
|
||||
msgstr "ਕੁਨੈਕਸ਼ਨ ਫੇਲ੍ਹ ਹੈ"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "ਕੁਨੈਕਟ ਹੈ (ਪ੍ਰਾਈਵੇਟ)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "ਆਟੋ ਈਥਰਨੈੱਟ"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "ਆਟੋ ਬਰਾਡਬੈਂਡ"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "ਆਟੋ ਡਾਇਲ-ਅੱਪ"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
#| msgid "Quit %s"
|
||||
msgid "Auto %s"
|
||||
msgstr "ਆਟੋ %s"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
#| msgid "Bluetooth"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "ਆਟੋ ਬਲਿਊਟੁੱਥ"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "ਆਟੋ ਬੇਤਾਰ"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
#| msgid "More"
|
||||
msgid "More..."
|
||||
msgstr "ਹੋਰ..."
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "ਨੈੱਟਵਰਕਿੰਗ ਚਾਲੂ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "ਤਾਰ"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "ਬੇਤਾਰ"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
#| msgid "Connection"
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN ਕੁਨੈਕਸ਼ਨ"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
#| msgid "Power Settings"
|
||||
msgid "Network Settings"
|
||||
msgstr "ਨੈੱਟਵਰਕ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "ਹੁਣ ਤੁਸੀਂ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਨੈੱਟਵਰਕ '%s' ਨਾਲ ਕੁਨੈਕਟ ਹੋ ਗਏ ਹੋ"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "ਹੁਣ ਤੁਸੀਂ ਬੇਤਾਰ ਨੈੱਟਵਰਕ '%s' ਨਾਲ ਕੁਨੈਕਟ ਹੋ ਗਏ ਹੋ"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "ਹੁਣ ਤੁਸੀਂ ਤਾਰ ਵਾਲੇ ਨੈੱਟਵਰਕ '%s' ਨਾਲ ਕੁਨੈਕਟ ਹੋ ਗਏ ਹੋ"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "ਤੁਸੀਂ ਹੁਣ VPN ਨੈੱਟਵਰਕ '%s' ਨਾਲ ਕੁਨੈਕਟ ਹੋ ਚੁੱਕੇ ਹੋ"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "ਤੁਸੀਂ ਹੁਣ '%s' ਨਾਲ ਕੁਨੈਕਟ ਹੋ"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
#| msgid "Connection"
|
||||
msgid "Connection established"
|
||||
msgstr "ਕੁਨੈਕਸ਼ਨ ਬਣਾਇਆ ਗਿਆ"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "ਨੈੱਟਵਰਕਿੰਗ ਬੰਦ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "ਨੈੱਟਵਰਕ ਮੈਨੇਜਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "ਪਾਵਰ ਸੈਟਿੰਗ"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "...ਅਨੁਮਾਨ ਲਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -828,102 +984,102 @@ msgstr[0] "%d ਘੰਟਾ ਬਾਕੀ"
|
||||
msgstr[1] "%d ਘੰਟੇ ਬਾਕੀ"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s ਬਾਕੀ"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "ਘੰਟਾ"
|
||||
msgstr[1] "ਘੰਟੇ"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "ਮਿੰਟ"
|
||||
msgstr[1] "ਮਿੰਟ"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d ਮਿੰਟ ਬਾਕੀ"
|
||||
msgstr[1] "%d ਮਿੰਟ ਬਾਕੀ"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "AC ਐਡਪਟਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "ਲੈਪਟਾਪ ਬੈਟਰੀ"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "ਮਾਨੀਟਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "ਮਾਊਸ"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "ਕੀਬੋਰਡ"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "ਸੈੱਲ ਫੋਨ"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "ਮੀਡਿਆ ਪਲੇਅਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "ਟੇਬਲੇਟ"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "ਕੰਪਿਊਟਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "ਅਣਜਾਣ"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "ਆਵਾਜ਼"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "ਮਾਈਕਰੋਫੋਨ"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s ਆਨਲਾਈਨ ਹੈ।"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s ਆਫਲਾਈਨ ਹੈ।"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s ਦੂਰ ਹੈ।"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
|
||||
@ -931,7 +1087,7 @@ msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:348
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "%2$A ਨੂੰ %1$X ਵਜੇ ਭੇਜਿਆ"
|
||||
@ -940,11 +1096,11 @@ msgstr "%2$A ਨੂੰ %1$X ਵਜੇ ਭੇਜਿਆ"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "...ਲੱਭਣ ਲਈ ਲਿਖੋ"
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "ਖੋਜ"
|
||||
|
||||
@ -960,7 +1116,7 @@ msgstr "'%s' ਤਿਆਰ ਹੈ"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -969,51 +1125,68 @@ msgstr[1] "%u ਆਉਟਪੁੱਟ"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u ਇੰਪੁੱਟ"
|
||||
msgstr[1] "%u ਇੰਪੁੱਟ"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "ਸਿਸਟਮ ਸਾਊਂਡ"
|
||||
|
||||
#: ../src/shell-global.c:1298
|
||||
#: ../src/main.c:446
|
||||
msgid "Print version"
|
||||
msgstr "ਵਰਜਨ ਛਾਪੋ"
|
||||
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
#| msgid "Failed to unmount '%s'"
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਚਿਰ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1302
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1307
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d ਘੰਟਾ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਘੰਟੇ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d ਦਿਨ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਦਿਨ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d ਹਫ਼ਤਾ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਹਫ਼ਤੇ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "ਬਰਤਾਨੀਆ"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "ਡਿਫਾਲਟ"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
#| msgid "Authentation dialog was dismissed by the user"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "ਪਰਮਾਣਕਿਤਾ ਡਾਈਲਾਗ ਯੂਜ਼ਰ ਵਲੋਂ ਰੱਦ ਕੀਤਾ"
|
||||
|
||||
@ -1037,6 +1210,34 @@ msgstr "ਫਾਇਲ ਸਿਸਟਮ"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "ਇੰਞ ਦੀ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "ਬੰਦ ਕਰੋ"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰਕੇ ਸਿਸਟਮ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਬੰਦ ਕਰੋ ਨੂੰ ਕਲਿੱਕ ਕਰੋ।"
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "ਸਿਸਟਮ ਨੂੰ ਆਟੋਮੈਟਿਕ ਹੀ %d ਸਕਿੰਟਾਂ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾਵੇਗਾ।"
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "ਸਿਸਟਮ ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "ਪੁਸ਼ਟੀ"
|
||||
|
||||
#~| msgid "Cancel"
|
||||
#~ msgid "Panel"
|
||||
#~ msgstr "ਪੈਨਲ"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "ਸਕਰੀਨ ਰੀਡਰ"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "ਸਕਰੀਨ ਕੀਬੋਰਡ"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "ਪਸੰਦ"
|
||||
|
||||
@ -1246,9 +1447,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Frequent"
|
||||
#~ msgstr "ਅਕਸਰ"
|
||||
|
||||
#~ msgid "More"
|
||||
#~ msgstr "ਹੋਰ"
|
||||
|
||||
#~ msgid "(see all)"
|
||||
#~ msgstr "(ਸਭ ਵੇਖੋ)"
|
||||
|
||||
|
345
po/pl.po
345
po/pl.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-09 21:48+0100\n"
|
||||
"PO-Revision-Date: 2011-03-09 21:49+0100\n"
|
||||
"POT-Creation-Date: 2011-03-19 16:19+0100\n"
|
||||
"PO-Revision-Date: 2011-03-19 16:20+0100\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish <gnomepl@aviary.pl>\n"
|
||||
"Language: pl\n"
|
||||
@ -176,21 +176,17 @@ msgstr "Określa, czy zbierać statystyki o użyciu programów"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "Wyłączeni dostawcy OpenSearch"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "Nie odnaleziono polecenia"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Nie można przetworzyć polecenia:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "Nie ma takiego programu"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Wykonanie polecenia \"%s\" się nie powiodło:"
|
||||
@ -208,15 +204,15 @@ msgstr "Programy"
|
||||
msgid "SETTINGS"
|
||||
msgstr "Ustawienia"
|
||||
|
||||
#: ../js/ui/appDisplay.js:612
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
msgid "New Window"
|
||||
msgstr "Nowe okno"
|
||||
|
||||
#: ../js/ui/appDisplay.js:615
|
||||
#: ../js/ui/appDisplay.js:619
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Usuń z ulubionych"
|
||||
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
#: ../js/ui/appDisplay.js:620
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Dodaj do ulubionych"
|
||||
|
||||
@ -376,7 +372,7 @@ msgstr "Ten tydzień"
|
||||
msgid "Next week"
|
||||
msgstr "Następny tydzień"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:931
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||
msgid "Remove"
|
||||
msgstr "Usuń"
|
||||
|
||||
@ -431,7 +427,7 @@ msgstr "%a, %l:%M %p"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A %e %B, %Y"
|
||||
|
||||
@ -507,7 +503,7 @@ msgstr "Ponowne uruchamianie systemu."
|
||||
msgid "Confirm"
|
||||
msgstr "Potwierdź"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
@ -521,7 +517,7 @@ msgstr "Włączone"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "Wyłączone"
|
||||
|
||||
@ -541,11 +537,11 @@ msgstr "Wyświetl źródło"
|
||||
msgid "Web Page"
|
||||
msgstr "Strona WWW"
|
||||
|
||||
#: ../js/ui/messageTray.js:924
|
||||
#: ../js/ui/messageTray.js:926
|
||||
msgid "Open"
|
||||
msgstr "Otwórz"
|
||||
|
||||
#: ../js/ui/messageTray.js:1961
|
||||
#: ../js/ui/messageTray.js:1986
|
||||
msgid "System Information"
|
||||
msgstr "Informacje systemowe"
|
||||
|
||||
@ -568,18 +564,18 @@ msgid "Dash"
|
||||
msgstr "Ulubione"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:560
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Zakończ program %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:919
|
||||
#: ../js/ui/panel.js:874
|
||||
msgid "Activities"
|
||||
msgstr "Podgląd"
|
||||
|
||||
#: ../js/ui/panel.js:1020
|
||||
#: ../js/ui/panel.js:975
|
||||
msgid "Panel"
|
||||
msgstr "Panel"
|
||||
|
||||
@ -596,7 +592,7 @@ msgstr "Ponów"
|
||||
msgid "Connect to..."
|
||||
msgstr "Połącz z..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "Miejsca i urządzenia"
|
||||
|
||||
@ -605,7 +601,7 @@ msgstr "Miejsca i urządzenia"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:636
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -613,47 +609,47 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Proszę wprowadzić polecenie:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:287
|
||||
msgid "Searching..."
|
||||
msgstr "Wyszukiwanie..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:301
|
||||
msgid "No matching results."
|
||||
msgstr "Brak wyników."
|
||||
|
||||
#: ../js/ui/statusMenu.js:102 ../js/ui/statusMenu.js:166
|
||||
#: ../js/ui/statusMenu.js:114 ../js/ui/statusMenu.js:178
|
||||
msgid "Power Off..."
|
||||
msgstr "Wyłącz..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:104 ../js/ui/statusMenu.js:165
|
||||
#: ../js/ui/statusMenu.js:116 ../js/ui/statusMenu.js:177
|
||||
msgid "Suspend"
|
||||
msgstr "Uśpij"
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
#: ../js/ui/statusMenu.js:137
|
||||
msgid "Available"
|
||||
msgstr "Dostępny"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Zajęty"
|
||||
|
||||
#: ../js/ui/statusMenu.js:138
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "My Account"
|
||||
msgstr "Moje konto"
|
||||
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "System Settings"
|
||||
msgstr "Ustawienia systemu"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:161
|
||||
msgid "Lock Screen"
|
||||
msgstr "Zablokuj ekran"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:165
|
||||
msgid "Switch User"
|
||||
msgstr "Przełącz użytkownika"
|
||||
|
||||
#: ../js/ui/statusMenu.js:158
|
||||
#: ../js/ui/statusMenu.js:170
|
||||
msgid "Log Out..."
|
||||
msgstr "Wyloguj się..."
|
||||
|
||||
@ -661,14 +657,12 @@ msgstr "Wyloguj się..."
|
||||
msgid "Zoom"
|
||||
msgstr "Powiększenie"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "Czytnik ekranu"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Klawiatura ekranowa"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Ostrzeżenia wzrokowe"
|
||||
@ -693,17 +687,17 @@ msgstr "Klawisze myszy"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Ustawienia uniwersalnego dostępu"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "Wysoki kontrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "Duży tekst"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -723,94 +717,94 @@ msgstr "Ustaw nowe urządzenie..."
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Ustawienia Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "Połączenie"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "Wyślij pliki..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "Przeglądaj pliki..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "Błąd podczas przeglądania urządzenia"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Nie można przeglądać żądanego urządzenia. Błąd: \"%s\""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Ustawienia klawiatury"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Ustawienia myszy"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Ustawienia dźwięku"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Żądanie upoważnienia z %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Urządzenie %s żąda dostępu do usługi \"%s\""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "Zawsze udzielaj dostęp"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "Udziel dostęp tylko tym razem"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "Odrzuć"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Potwierdzenie wiązania dla %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Urządzenie %s żąda powiązania z tym komputerem"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Proszę potwierdzić, czy PIN \"%s\" zgadza się z tym na urządzeniu."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "Zgadza się"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "Nie zgadza się"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Żądanie powiązania dla %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Proszę wprowadzić PIN wyświetlony na urządzeniu."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -822,17 +816,147 @@ msgstr "Wyświetl układ klawiatury..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "Ustawienia lokalizacji"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<nieznane>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "wyłączone"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "łączenie..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "wymagane jest uwierzytelnienie"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel jest niepodłączony"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "niedostępne"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "połączenie się nie powiodło"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "Połączono (prywatne)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatyczne Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatyczne komórkowe"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatyczne wdzwaniane"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatyczne %s"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatyczne Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatyczne bezprzewodowe"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "Więcej..."
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "Włącz sieć"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "Przewodowe"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "Bezprzewodowe"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Komórkowe"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "Połączenia VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "Ustawienia sieci"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Połączono z siecią komórkową \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Połączono z siecią bezprzewodową \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Połączono z siecią przewodową \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Połączono z siecią VPN \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Połączono z siecią \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
msgid "Connection established"
|
||||
msgstr "Nawiązano połączenie"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Sieć jest wyłączona"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "Menedżer sieci"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Ustawienia zasilania"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "Obliczanie..."
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -841,26 +965,26 @@ msgstr[1] "Pozostały %d godziny"
|
||||
msgstr[2] "Pozostało %d godzin"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "Pozostało %d %s i %d %s"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "godzina"
|
||||
msgstr[1] "godziny"
|
||||
msgstr[2] "godzin"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minuta"
|
||||
msgstr[1] "minuty"
|
||||
msgstr[2] "minut"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
@ -868,78 +992,78 @@ msgstr[0] "Pozostała %d minuta"
|
||||
msgstr[1] "Pozostały %d minuty"
|
||||
msgstr[2] "Pozostało %d minut"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "Zasilacz sieciowy"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "Akumulator laptopa"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "Mysz"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "Klawiatura"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "Urządzenie PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "Telefon komórkowy"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "Odtwarzacz multimedialny"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "Tablet"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "Komputer"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:961
|
||||
msgid "Unknown"
|
||||
msgstr "Nieznane"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "Głośność"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "Użytkownik %s jest online."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "Użytkownik %s jest offline."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "Użytkownik %s jest nieobecny."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "Użytkownik %s jest zajęty."
|
||||
@ -947,7 +1071,7 @@ msgstr "Użytkownik %s jest zajęty."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Wysłano o %H:%M w dniu %e %b"
|
||||
@ -956,11 +1080,11 @@ msgstr "Wysłano o %H:%M w dniu %e %b"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "Wyszukiwanie..."
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Wyszukaj"
|
||||
|
||||
@ -976,7 +1100,7 @@ msgstr "Program \"%s\" jest gotowy"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -986,7 +1110,7 @@ msgstr[2] "%u wyjść"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
@ -994,19 +1118,24 @@ msgstr[0] "%u wejście"
|
||||
msgstr[1] "%u wejścia"
|
||||
msgstr[2] "%u wejść"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "Dźwięki systemowe"
|
||||
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:397
|
||||
msgid "Print version"
|
||||
msgstr "Wyświetla wersję"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Uruchomienie \"%s\" się nie powiodło"
|
||||
|
||||
#: ../src/shell-global.c:1340
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Mniej niż minutę temu"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1344
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -1014,7 +1143,7 @@ msgstr[0] "%d minuta temu"
|
||||
msgstr[1] "%d minuty temu"
|
||||
msgstr[2] "%d minut temu"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1349
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -1022,7 +1151,7 @@ msgstr[0] "%d godzina temu"
|
||||
msgstr[1] "%d godziny temu"
|
||||
msgstr[2] "%d godzin temu"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1354
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -1030,7 +1159,7 @@ msgstr[0] "%d dzień temu"
|
||||
msgstr[1] "%d dni temu"
|
||||
msgstr[2] "%d dni temu"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1359
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -1038,6 +1167,14 @@ msgstr[0] "%d tydzień temu"
|
||||
msgstr[1] "%d tygodnie temu"
|
||||
msgstr[2] "%d tygodni temu"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Zjednoczone Królestwo"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "Domyślne"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Okno dialogowe uwierzytelnienia zostało odrzucone przez użytkownika"
|
||||
|
1248
po/pt_BR.po
1248
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
316
po/ro.po
316
po/ro.po
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-13 00:31+0000\n"
|
||||
"PO-Revision-Date: 2011-03-13 01:25+0200\n"
|
||||
"POT-Creation-Date: 2011-03-17 21:07+0000\n"
|
||||
"PO-Revision-Date: 2011-03-17 11:00+0200\n"
|
||||
"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
|
||||
"Language-Team: Romanian Gnome Team <gnomero-list@lists.sourceforge.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -177,21 +177,17 @@ msgstr "Dacă să se colecteze statistici despre utilizarea aplicațiilor"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "furnizori OpenSearch dezactivați"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "Comanda nu a fost găsită"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Nu s-a putut analiza comanda:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "Nu există această aplicație"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Execuția comenzii „%s” a eșuat:"
|
||||
@ -377,7 +373,7 @@ msgstr "Această săptămână"
|
||||
msgid "Next week"
|
||||
msgstr "Săptămâna viitoare"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:931
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||
msgid "Remove"
|
||||
msgstr "Elimină"
|
||||
|
||||
@ -432,7 +428,7 @@ msgstr "%a %l:%M %p"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A %e %B, %Y"
|
||||
|
||||
@ -510,7 +506,7 @@ msgstr "Repornirea sistemului."
|
||||
msgid "Confirm"
|
||||
msgstr "Confirm"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:465
|
||||
msgid "Cancel"
|
||||
msgstr "Anulează"
|
||||
|
||||
@ -544,11 +540,11 @@ msgstr "Vezi sursa"
|
||||
msgid "Web Page"
|
||||
msgstr "Pagină web"
|
||||
|
||||
#: ../js/ui/messageTray.js:924
|
||||
#: ../js/ui/messageTray.js:926
|
||||
msgid "Open"
|
||||
msgstr "Deschide"
|
||||
|
||||
#: ../js/ui/messageTray.js:1961
|
||||
#: ../js/ui/messageTray.js:1986
|
||||
msgid "System Information"
|
||||
msgstr "Informații despre sistem"
|
||||
|
||||
@ -564,25 +560,26 @@ msgstr "Ferestre"
|
||||
msgid "Applications"
|
||||
msgstr "Aplicații"
|
||||
|
||||
# LG: WTF? cum traducem asta?
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:202
|
||||
msgid "Dash"
|
||||
msgstr ""
|
||||
msgstr "Dash"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:560
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Închide %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:919
|
||||
#: ../js/ui/panel.js:874
|
||||
msgid "Activities"
|
||||
msgstr "Activități"
|
||||
|
||||
#: ../js/ui/panel.js:1020
|
||||
#: ../js/ui/panel.js:975
|
||||
msgid "Panel"
|
||||
msgstr "Panou"
|
||||
|
||||
@ -599,7 +596,7 @@ msgstr "Reîncearcă"
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectare la..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LOCAȚII & DISPOZITIVE"
|
||||
|
||||
@ -608,7 +605,7 @@ msgstr "LOCAȚII & DISPOZITIVE"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:636
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-us"
|
||||
|
||||
@ -664,14 +661,12 @@ msgstr "Ieși din sesiune..."
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "Cititor de ecran"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Tastatură pe ecran"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Alerte vizuale"
|
||||
@ -696,17 +691,17 @@ msgstr "Taste maus"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Configurări acces universal"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "Contrast puternic"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "Text mare"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:236
|
||||
#: ../js/ui/status/bluetooth.js:332 ../js/ui/status/bluetooth.js:366
|
||||
#: ../js/ui/status/bluetooth.js:406 ../js/ui/status/bluetooth.js:439
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -726,94 +721,94 @@ msgstr "Configurează un dispozitiv nou..."
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Configurări Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:187
|
||||
msgid "Connection"
|
||||
msgstr "Conexiune"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:223
|
||||
msgid "Send Files..."
|
||||
msgstr "Trimite fișiere..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
msgid "Browse Files..."
|
||||
msgstr "Alege fișiere..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:237
|
||||
msgid "Error browsing device"
|
||||
msgstr "Eroare la navigarea dispozitivului"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Dispozitivul cerut nu poate fi navigat, eroarea este „%s”"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:246
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Configurări tastatură"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Configurări maus"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:258 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Configurări sunet"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:367
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Cerere de autorizare de la %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:373
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Dispozitivul %s dorește acces la serviciul „%s”"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:375
|
||||
msgid "Always grant access"
|
||||
msgstr "Acordă acces întotdeauna"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Grant this time only"
|
||||
msgstr "Acordă acces doar de data aceasta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Reject"
|
||||
msgstr "Respinge"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Se asociază confirmarea pentru %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:413 ../js/ui/status/bluetooth.js:447
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Dispozitivul %s dorește să se asocieze cu acest computer"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confirmați dacă codul PIN „%s” se potrivește cu cel de pe dispozitiv."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:416
|
||||
msgid "Matches"
|
||||
msgstr "Se potrivește"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Does not match"
|
||||
msgstr "Nu se potrivește"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Cerere de asociere de la %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:448
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Introduceți codul PIN menționat pe dispozitiv."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:464
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -825,17 +820,147 @@ msgstr "Arată aranjamentu tastaturii..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "Configurări de localizare"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<necunoscut>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "dezactivat"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "se conectează..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "necesită autentificare"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "cablu deconectat"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "indisponibil"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "conexiune eșuată"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "Conectat (privat)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet (automat)"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "Rețea de bandă largă (automat)"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Dial-up (automat)"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s (automat)"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth (automat)"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "Rețea fără fir (automat)"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "Mai multe..."
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "Activează rețeaua"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "Cu fir"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "Fără fir"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Internet mobil de bandă largă"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "Conexiuni VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "Configurări de rețea"
|
||||
|
||||
#: ../js/ui/status/network.js:1782
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "V-ați conectat la rețeaua mobilă de bandă largă „%s”"
|
||||
|
||||
#: ../js/ui/status/network.js:1786
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "V-ați conectat la rețeaua fără fir „%s”"
|
||||
|
||||
#: ../js/ui/status/network.js:1790
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "V-ați conectat la rețeaua cu fir „%s”"
|
||||
|
||||
#: ../js/ui/status/network.js:1794
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "V-ați conectat la rețeaua VPN „%s”"
|
||||
|
||||
#: ../js/ui/status/network.js:1799
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "V-ați conectat la „%s”"
|
||||
|
||||
#: ../js/ui/status/network.js:1807
|
||||
msgid "Connection established"
|
||||
msgstr "Conexiune stabilită"
|
||||
|
||||
#: ../js/ui/status/network.js:1929
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Reţeaua este dezactivată"
|
||||
|
||||
#: ../js/ui/status/network.js:2054
|
||||
msgid "Network Manager"
|
||||
msgstr "Administrator de rețea"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Configurări de alimentare"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "Se estimează..."
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -844,26 +969,26 @@ msgstr[1] "Au mai rămas %d ore"
|
||||
msgstr[2] "Au mai rămas %d de ore"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "Au mai rămas %d %s %d %s"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "oră"
|
||||
msgstr[1] "ore"
|
||||
msgstr[2] "de ore"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minut"
|
||||
msgstr[1] "minute"
|
||||
msgstr[2] "de minute"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
@ -871,51 +996,51 @@ msgstr[0] "A mai rămas un minut"
|
||||
msgstr[1] "Au mai rămas %d minute"
|
||||
msgstr[2] "Au mai rămas %d de minute"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "Adaptor conectat la rețeaua electrică"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "Baterie laptop"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "Maus"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "Tastatură"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "Telefon mobil"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "Media player"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "Tabletă"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "Calculator"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:961
|
||||
msgid "Unknown"
|
||||
msgstr "Necunoscut"
|
||||
|
||||
@ -927,22 +1052,22 @@ msgstr "Volum"
|
||||
msgid "Microphone"
|
||||
msgstr "Microfon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s este conectat."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s este deconectat."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s este absent."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s este ocupat."
|
||||
@ -950,7 +1075,7 @@ msgstr "%s este ocupat."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Trimis la %X pe data de %A"
|
||||
@ -1001,15 +1126,20 @@ msgstr[2] "%u de intrări"
|
||||
msgid "System Sounds"
|
||||
msgstr "Sunetele sistemului"
|
||||
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:397
|
||||
msgid "Print version"
|
||||
msgstr "Tipărește versiunea"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Nu s-a putut lansa „%s”"
|
||||
|
||||
#: ../src/shell-global.c:1340
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Cu mai puțin de un minut în urmă"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1344
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -1017,7 +1147,7 @@ msgstr[0] "Acum un minut"
|
||||
msgstr[1] "Acum %d minute"
|
||||
msgstr[2] "Acum %d de minute"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1349
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -1025,7 +1155,7 @@ msgstr[0] "Acum o oră"
|
||||
msgstr[1] "Acum %d ore"
|
||||
msgstr[2] "Acum %d de ore"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1354
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -1033,7 +1163,7 @@ msgstr[0] "Acum o zi"
|
||||
msgstr[1] "Acum %d zile"
|
||||
msgstr[2] "Acum %d de zile"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1359
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -1041,6 +1171,14 @@ msgstr[0] "Acum o săptămână"
|
||||
msgstr[1] "Acum %d săptămâni"
|
||||
msgstr[2] "Acum %d de săptămâni"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Marea Britanie"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "Implicit"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Dialogul de autentificare a fost respins de utilizator"
|
||||
@ -1065,6 +1203,15 @@ msgstr "Sistem de fișiere"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Nu există această aplicație"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Cititor de ecran"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Tastatură pe ecran"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "PREFERINȚE"
|
||||
|
||||
@ -1308,9 +1455,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Frequent"
|
||||
#~ msgstr "Frecvent"
|
||||
|
||||
#~ msgid "More"
|
||||
#~ msgstr "Mai multe"
|
||||
|
||||
#~ msgid "(see all)"
|
||||
#~ msgstr "(arată tot)"
|
||||
|
||||
|
1320
po/sr@latin.po
1320
po/sr@latin.po
File diff suppressed because it is too large
Load Diff
451
po/uk.po
451
po/uk.po
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-10 18:48+0200\n"
|
||||
"PO-Revision-Date: 2011-03-10 20:18+0300\n"
|
||||
"POT-Creation-Date: 2011-03-24 23:56+0200\n"
|
||||
"PO-Revision-Date: 2011-03-24 23:59+0300\n"
|
||||
"Last-Translator: Korostil Daniel <ted.korostiled@gmail.com>\n"
|
||||
"Language-Team: translation@linux.org.ua\n"
|
||||
"Language: uk\n"
|
||||
@ -173,47 +173,43 @@ msgstr "Чи потрібно збирати статистику про вжи
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "вимкнено постачальника OpenSearch"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "Команди не знайдено"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Неможливо розібрати команду:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "Нема такої програми"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Не вдалось виконати «%s»:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:226
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
msgid "All"
|
||||
msgstr "Всі"
|
||||
|
||||
#: ../js/ui/appDisplay.js:324
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "ПРОГРАМИ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:350
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
msgid "SETTINGS"
|
||||
msgstr "ПАРАМЕТРИ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:612
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
msgid "New Window"
|
||||
msgstr "Нове вікно"
|
||||
|
||||
#: ../js/ui/appDisplay.js:615
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Вилучити з улюбленого"
|
||||
|
||||
#: ../js/ui/appDisplay.js:616
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Додати до улюбленого"
|
||||
|
||||
@ -373,7 +369,7 @@ msgstr "Цей тиждень"
|
||||
msgid "Next week"
|
||||
msgstr "Наступний тиждень"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:931
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
msgid "Remove"
|
||||
msgstr "Вилучити"
|
||||
|
||||
@ -428,7 +424,7 @@ msgstr "%a %l:%M %p"
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:209
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A %B %e, %Y"
|
||||
|
||||
@ -441,7 +437,7 @@ msgstr "ОСТАННІ ПУНКТИ"
|
||||
msgid "Log Out %s"
|
||||
msgstr "Завершити сеанс %s…"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "Завершити сеанс"
|
||||
|
||||
@ -463,46 +459,44 @@ msgstr "Буде завершено сеанс автоматично через
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Вихід із системи."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||
msgid "Shut Down"
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr "Вимкнути"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
msgstr "Натисніть «Вимкнути», щоб вийти з усіх програм і вимкнути систему."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
msgstr "Систему буде вимкнено автоматично через %d секунд."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "Натисніть «Вимкнути», щоб вийти з усіх програм і системи."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgid "Shutting down the system."
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "Система автоматично вимкнеться через %d секунд."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
msgid "Powering off the system."
|
||||
msgstr "Вимкнення системи."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "Перезапустити"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
"Натисніть «Перезапустити», щоб вийти з усіх програм і перезапустити систему."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "Система автоматично перезапуститься через %d секунд."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Restarting the system."
|
||||
msgstr "Перезапуск системи."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:395
|
||||
msgid "Confirm"
|
||||
msgstr "Підтвердити"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "Скасувати"
|
||||
|
||||
@ -516,7 +510,7 @@ msgstr "Увімкнено"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "Вимкнено"
|
||||
|
||||
@ -536,47 +530,47 @@ msgstr "Переглянути джерело"
|
||||
msgid "Web Page"
|
||||
msgstr "Веб-сторінка"
|
||||
|
||||
#: ../js/ui/messageTray.js:924
|
||||
#: ../js/ui/messageTray.js:987
|
||||
msgid "Open"
|
||||
msgstr "Відкрити"
|
||||
|
||||
#: ../js/ui/messageTray.js:1961
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
msgid "System Information"
|
||||
msgstr "Інформація про систему"
|
||||
|
||||
#: ../js/ui/overview.js:88
|
||||
#: ../js/ui/overview.js:91
|
||||
msgid "Undo"
|
||||
msgstr "Повернути"
|
||||
|
||||
#: ../js/ui/overview.js:183
|
||||
#: ../js/ui/overview.js:186
|
||||
msgid "Windows"
|
||||
msgstr "Вікна"
|
||||
|
||||
#: ../js/ui/overview.js:186
|
||||
#: ../js/ui/overview.js:189
|
||||
msgid "Applications"
|
||||
msgstr "Програми"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:202
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr "Риска"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:560
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Вийти з %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:919
|
||||
#: ../js/ui/panel.js:878
|
||||
msgid "Activities"
|
||||
msgstr "Дії"
|
||||
msgstr "Діяльність"
|
||||
|
||||
#: ../js/ui/panel.js:1020
|
||||
msgid "Panel"
|
||||
msgstr "Панель"
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "Верхня панель"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
@ -591,64 +585,85 @@ msgstr "Повторити"
|
||||
msgid "Connect to..."
|
||||
msgstr "З'єднатися з…"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "МІСЦЯ ТА ПРИСТРОЇ"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:74
|
||||
msgid "Authentication Required"
|
||||
msgstr "Потрібна автентифікація"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:108
|
||||
msgid "Administrator"
|
||||
msgstr "Адміністратор"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr "Аутентифікація"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Вибачте, це не працює. Спробуйте ще."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
msgid "Password:"
|
||||
msgstr "Пароль:"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:618
|
||||
#: ../js/ui/popupMenu.js:679
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:201
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Будь ласка, введіть команду:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
msgid "Searching..."
|
||||
msgstr "Пошук…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
msgid "No matching results."
|
||||
msgstr "Нема збігів."
|
||||
|
||||
#: ../js/ui/statusMenu.js:113 ../js/ui/statusMenu.js:177
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "Вимкнення живлення…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:115 ../js/ui/statusMenu.js:176
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "Призупинити"
|
||||
|
||||
#: ../js/ui/statusMenu.js:136
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "Доступний"
|
||||
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
msgstr "Зайнятий"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:197
|
||||
msgid "My Account"
|
||||
msgstr "Мій обліковий запис"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:201
|
||||
msgid "System Settings"
|
||||
msgstr "Системні параметри"
|
||||
|
||||
#: ../js/ui/statusMenu.js:160
|
||||
#: ../js/ui/statusMenu.js:208
|
||||
msgid "Lock Screen"
|
||||
msgstr "Заблокувати екран"
|
||||
|
||||
#: ../js/ui/statusMenu.js:164
|
||||
#: ../js/ui/statusMenu.js:213
|
||||
msgid "Switch User"
|
||||
msgstr "Змінити користувача"
|
||||
|
||||
#: ../js/ui/statusMenu.js:169
|
||||
#: ../js/ui/statusMenu.js:218
|
||||
msgid "Log Out..."
|
||||
msgstr "Завершити сеанс…"
|
||||
|
||||
@ -656,14 +671,12 @@ msgstr "Завершити сеанс…"
|
||||
msgid "Zoom"
|
||||
msgstr "Масштаб"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "Читання з екрану"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Екранна клавіатура"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Візуальні тривоги"
|
||||
@ -688,17 +701,17 @@ msgstr "Клавіші миші"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Параметри універсального доступу"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "Висока контрастність"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "Більший текст"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -718,94 +731,94 @@ msgstr "Встановити новий пристрій…"
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Параметри Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "З'єднання"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "Відправити файли…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "Огляд файлів…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "Помилка перегляду пристрою…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Потрібний пристрій неможливо переглянути, помилка — «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Параметри клавіатури"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Параметри миші"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Параметри звуку"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Запит про авторизацію від %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Пристрій %s потребує доступ до служби «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "Завжди надавати доступ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "Надати лише цього разу"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "Відмовити"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Сполучення підтвердження для %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Пристрій %s потребує прив'язання до цього комп'ютера"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Будь ласка, підвердьте, чи «%s» збігається з PIN на пристрої."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "Збігається"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "Не збігається"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Запит на сполучення для %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Будь ласка, введіть PIN, згаданий на пристрої."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "Гаразд"
|
||||
|
||||
@ -817,17 +830,147 @@ msgstr "Показувати розкладку клавіатури…"
|
||||
msgid "Localization Settings"
|
||||
msgstr "Параметри локалізації"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
msgid "<unknown>"
|
||||
msgstr "<невідомо>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
msgid "disabled"
|
||||
msgstr "вимкнено"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
msgid "connecting..."
|
||||
msgstr "з'єднання…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "Потрібна аутентифікація"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "кабель від'єднано"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unavailable"
|
||||
msgstr "недоступний"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "connection failed"
|
||||
msgstr "не вдалось з'єднатись"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "З'єднано (приватно)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Автоматично Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "Автоматично радіомережа"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Автоматично додзвін"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Автоматично %s"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Автоматично Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "Автоматично бездротова мережа"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "Більше…"
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "Увімкнути мережу"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "Дротова"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "Бездротова"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Мобільна радіомережа"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
msgid "VPN Connections"
|
||||
msgstr "З'єднання VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
msgid "Network Settings"
|
||||
msgstr "Налаштування мережі"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Зараз ви з'єднані через мобільну радіомережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Зараз ви з'єднані через бездротову мережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Зараз ви з'єднані через дротову мережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Зараз ви з'єднані через мережу VPN «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Зараз ви з'єднані через «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
msgid "Connection established"
|
||||
msgstr "З'єднання встановлено"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Мережу вимкнено"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "Керування мережею"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Енергетичні параметри"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "Оцінювання…"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
@ -836,26 +979,26 @@ msgstr[1] "Залишилось %d години"
|
||||
msgstr[2] "Залишилось %d годин"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "Залишилось %d %s %d %s"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "година"
|
||||
msgstr[1] "години"
|
||||
msgstr[2] "годин"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "хвилина"
|
||||
msgstr[1] "хвилини"
|
||||
msgstr[2] "хвилин"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
@ -863,78 +1006,78 @@ msgstr[0] "Залишилось %d хвилина"
|
||||
msgstr[1] "Залишилось %d хвилини"
|
||||
msgstr[2] "Залишилось %d хвилин"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "Блок живлення"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "Батарея ноутбука"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "Монітор"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "Миша"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "Клавіатура"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "КПК"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "Мобільний телефон"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "Програвач"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "Планшет"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "Комп'ютер"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "Невідомо"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "Гучність"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "Мікрофон"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s в мережі."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s поза мережею."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s відійшов."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s зайнятий."
|
||||
@ -942,7 +1085,7 @@ msgstr "%s зайнятий."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Відправити на %X в %A"
|
||||
@ -951,11 +1094,11 @@ msgstr "Відправити на %X в %A"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:117
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "Введіть для пошуку…"
|
||||
|
||||
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Пошук"
|
||||
|
||||
@ -971,7 +1114,7 @@ msgstr "«%s» готовий"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -981,7 +1124,7 @@ msgstr[2] "%u виходів"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
@ -989,19 +1132,24 @@ msgstr[0] "%u вхід"
|
||||
msgstr[1] "%u входи"
|
||||
msgstr[2] "%u входів"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "Системні звуки"
|
||||
|
||||
#: ../src/main.c:395
|
||||
#: ../src/main.c:446
|
||||
msgid "Print version"
|
||||
msgstr "Показати версію"
|
||||
|
||||
#: ../src/shell-global.c:1308
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Не вдалось запустити «%s»"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Менше хвилини тому"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -1009,7 +1157,7 @@ msgstr[0] "%d хвилина тому"
|
||||
msgstr[1] "%d хвилини тому"
|
||||
msgstr[2] "%d хвилин тому"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -1017,7 +1165,7 @@ msgstr[0] "%d година тому"
|
||||
msgstr[1] "%d години тому"
|
||||
msgstr[2] "%d годин тому"
|
||||
|
||||
#: ../src/shell-global.c:1322
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -1025,7 +1173,7 @@ msgstr[0] "%d день тому"
|
||||
msgstr[1] "%d дні тому"
|
||||
msgstr[2] "%d днів тому"
|
||||
|
||||
#: ../src/shell-global.c:1327
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -1033,6 +1181,14 @@ msgstr[0] "%d тиждень тому"
|
||||
msgstr[1] "%d тижні тому"
|
||||
msgstr[2] "%d тижнів тому"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Великобританія"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "Типово"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Вікно авторизації відхилено користувачем"
|
||||
@ -1057,6 +1213,33 @@ msgstr "Файлова система"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Вимкнути"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "Натисніть «Вимкнути», щоб вийти з усіх програм і вимкнути систему."
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "Систему буде вимкнено автоматично через %d секунд."
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "Вимкнення системи."
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "Підтвердити"
|
||||
|
||||
#~ msgid "Panel"
|
||||
#~ msgstr "Панель"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Нема такої програми"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Читання з екрану"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Екранна клавіатура"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "ПАРАМЕТРИ"
|
||||
|
||||
|
515
po/vi.po
515
po/vi.po
@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-05 08:37+0000\n"
|
||||
"PO-Revision-Date: 2011-03-05 15:41+0700\n"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-24 08:03+0000\n"
|
||||
"PO-Revision-Date: 2011-03-25 00:31+0700\n"
|
||||
"Last-Translator: Duy <pclouds@gmail.com>\n"
|
||||
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -59,7 +59,6 @@ msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Hộp thoại lịch sử lệnh (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#| msgid "History for command (Alt-F2) dialog"
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr "Lịch sử hộp thoại looking glass"
|
||||
|
||||
@ -150,7 +149,10 @@ msgid ""
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr "GNOME Shell bình thường sẽ theo dõi các ứng dụng tích cực để thể hiện phù hợp (ví dụ, bộ phóng). Mặc dù thông tin này là riêng tư, bạn vẫn có thể tắt vì lý do cá nhân. Chú ý là làm vậy sẽ không xoá bỏ những dữ liệu đã có."
|
||||
msgstr ""
|
||||
"GNOME Shell bình thường sẽ theo dõi các ứng dụng tích cực để thể hiện phù "
|
||||
"hợp (ví dụ, bộ phóng). Mặc dù thông tin này là riêng tư, bạn vẫn có thể tắt "
|
||||
"vì lý do cá nhân. Chú ý là làm vậy sẽ không xoá bỏ những dữ liệu đã có."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "Uuids of extensions to disable"
|
||||
@ -164,47 +166,43 @@ msgstr "Có thu thập thống kê sử dụng ứng dụng không"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "Phần cung cấp OpenSearch bị tắt"
|
||||
|
||||
#: ../js/misc/util.js:86
|
||||
#: ../js/misc/util.js:71
|
||||
msgid "Command not found"
|
||||
msgstr "Không tìm thấy lệnh"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:113
|
||||
#: ../js/misc/util.js:98
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Không thể phân tích lệnh:"
|
||||
|
||||
#: ../js/misc/util.js:135
|
||||
msgid "No such application"
|
||||
msgstr "Không có ứng dụng đó"
|
||||
|
||||
#: ../js/misc/util.js:148
|
||||
#: ../js/misc/util.js:106
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Lỗi thực hiện '%s':"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:195
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
msgid "All"
|
||||
msgstr "Tất cả"
|
||||
|
||||
#: ../js/ui/appDisplay.js:285
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "ỨNG DỤNG"
|
||||
|
||||
#: ../js/ui/appDisplay.js:311
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
msgid "SETTINGS"
|
||||
msgstr "THIẾT LẬP"
|
||||
|
||||
#: ../js/ui/appDisplay.js:565
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
msgid "New Window"
|
||||
msgstr "Cửa sổ mới"
|
||||
|
||||
#: ../js/ui/appDisplay.js:568
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Bỏ đánh dấu ưa thích"
|
||||
|
||||
#: ../js/ui/appDisplay.js:569
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Đánh dấu ưa thích"
|
||||
|
||||
@ -224,7 +222,7 @@ msgstr "Đã bỏ đánh dấu ưa thích cho %s"
|
||||
#: ../js/ui/calendar.js:66
|
||||
msgctxt "event list time"
|
||||
msgid "All Day"
|
||||
msgstr "Nguyên ngày"
|
||||
msgstr "Cả ngày"
|
||||
|
||||
#. Translators: Shown in calendar event list, if 24h format
|
||||
#: ../js/ui/calendar.js:71
|
||||
@ -364,7 +362,7 @@ msgstr "Tuần này"
|
||||
msgid "Next week"
|
||||
msgstr "Tuần tới"
|
||||
|
||||
#: ../js/ui/dash.js:174
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
msgid "Remove"
|
||||
msgstr "Loại bỏ"
|
||||
|
||||
@ -372,54 +370,54 @@ msgstr "Loại bỏ"
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "Thiết lập ngày giờ"
|
||||
|
||||
#: ../js/ui/dateMenu.js:110
|
||||
#: ../js/ui/dateMenu.js:111
|
||||
msgid "Open Calendar"
|
||||
msgstr "Mở lịch"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:162
|
||||
#: ../js/ui/dateMenu.js:164
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%R:%S, %a %b %e"
|
||||
msgstr "%a %R:%S, %e %b"
|
||||
|
||||
#: ../js/ui/dateMenu.js:163
|
||||
#: ../js/ui/dateMenu.js:165
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%R, %a %b %e"
|
||||
msgstr "%a %R, %e %b"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:167
|
||||
#: ../js/ui/dateMenu.js:169
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%R:%S %a"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:168
|
||||
#: ../js/ui/dateMenu.js:170
|
||||
msgid "%a %R"
|
||||
msgstr "%R %a"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:175
|
||||
#: ../js/ui/dateMenu.js:177
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:176
|
||||
#: ../js/ui/dateMenu.js:178
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e %b, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:180
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
#: ../js/ui/dateMenu.js:183
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:207
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A %e %B, %Y"
|
||||
|
||||
@ -432,7 +430,7 @@ msgstr "MỤC GẦN ĐÂY"
|
||||
msgid "Log Out %s"
|
||||
msgstr "Đăng xuất %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "Đăng xuất"
|
||||
|
||||
@ -454,46 +452,48 @@ msgstr "Bạn sẽ tự động đăng xuất sau %d giây."
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Đang xuất khỏi hệ thống."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||
msgid "Shut Down"
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
#| msgid "Power Off..."
|
||||
msgid "Power Off"
|
||||
msgstr "Tắt máy"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
msgstr "Nhấn Tắt máy để thoát những ứng dụng này và tắt hệ thống."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#, c-format
|
||||
msgid "The system will shut down automatically in %d seconds."
|
||||
msgstr "Hệ thống sẽ tự động tắt sau %d giây."
|
||||
#| msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "Nhấn Tắt máy để thoát những ứng dụng này và tắt máy."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgid "Shutting down the system."
|
||||
msgstr "Tắt hệ thống."
|
||||
#, c-format
|
||||
#| msgid "The system will restart automatically in %d seconds."
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "Hệ thống sẽ tự động tắt sau %d giây."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
#| msgid "Logging out of the system."
|
||||
msgid "Powering off the system."
|
||||
msgstr "Tắt máy."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "Khởi động lại"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
"Nhấn Khởi động lại để thoát những ứng dụng này và khởi động lại hệ thống."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "Hệ thống sẽ tự động khởi động lại sau %d giây."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Restarting the system."
|
||||
msgstr "Khởi động lại hệ thống."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:395
|
||||
msgid "Confirm"
|
||||
msgstr "Xác nhận"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "Thôi"
|
||||
|
||||
@ -507,7 +507,7 @@ msgstr "Bật"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "Tắt"
|
||||
|
||||
@ -527,34 +527,48 @@ msgstr "Xem mã nguồn"
|
||||
msgid "Web Page"
|
||||
msgstr "Trang Web"
|
||||
|
||||
#: ../js/ui/messageTray.js:1907
|
||||
#: ../js/ui/messageTray.js:987
|
||||
msgid "Open"
|
||||
msgstr "Mở"
|
||||
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
msgid "System Information"
|
||||
msgstr "Thông tin hệ thống"
|
||||
|
||||
#: ../js/ui/overview.js:88
|
||||
#: ../js/ui/overview.js:91
|
||||
msgid "Undo"
|
||||
msgstr "Hoàn lại"
|
||||
|
||||
#: ../js/ui/overview.js:183
|
||||
#: ../js/ui/overview.js:186
|
||||
msgid "Windows"
|
||||
msgstr "Cửa sổ"
|
||||
|
||||
#: ../js/ui/overview.js:186
|
||||
#: ../js/ui/overview.js:189
|
||||
msgid "Applications"
|
||||
msgstr "Ứng dụng"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr "Khung ứng dụng"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:531
|
||||
#: ../js/ui/panel.js:515
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Thoát %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:899
|
||||
#: ../js/ui/panel.js:878
|
||||
msgid "Activities"
|
||||
msgstr "Hoạt động"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "Thanh đỉnh"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
@ -568,65 +582,84 @@ msgstr "Thử lại"
|
||||
msgid "Connect to..."
|
||||
msgstr "Kết nối đến..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:409
|
||||
#: ../js/ui/placeDisplay.js:380
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "ĐỊA ĐIỂM & THIẾT BỊ"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:74
|
||||
msgid "Authentication Required"
|
||||
msgstr "Cần xác thực"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:108
|
||||
msgid "Administrator"
|
||||
msgstr "Quản trị"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr "Xác thực"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Rất tiếc, không được. Vui lòng thử lại."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
msgid "Password:"
|
||||
msgstr "Mật khẩu:"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:612
|
||||
#: ../js/ui/popupMenu.js:679
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:201
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Vui lòng nhập lệnh:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:283
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
msgid "Searching..."
|
||||
msgstr "Đang tìm..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:297
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
msgid "No matching results."
|
||||
msgstr "Không tìm thấy."
|
||||
|
||||
#: ../js/ui/statusMenu.js:102 ../js/ui/statusMenu.js:166
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "Tắt máy..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:104 ../js/ui/statusMenu.js:165
|
||||
#| msgid "Suspend..."
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "Ngưng"
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "Có mặt"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
msgstr "Bận"
|
||||
|
||||
#: ../js/ui/statusMenu.js:138
|
||||
#: ../js/ui/statusMenu.js:197
|
||||
msgid "My Account"
|
||||
msgstr "Tài khoản"
|
||||
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
#: ../js/ui/statusMenu.js:201
|
||||
msgid "System Settings"
|
||||
msgstr "Thiết lập hệ thống"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:208
|
||||
msgid "Lock Screen"
|
||||
msgstr "Khoá màn hình"
|
||||
|
||||
#: ../js/ui/statusMenu.js:153
|
||||
#: ../js/ui/statusMenu.js:213
|
||||
msgid "Switch User"
|
||||
msgstr "Chuyển người dùng"
|
||||
|
||||
#: ../js/ui/statusMenu.js:158
|
||||
#: ../js/ui/statusMenu.js:218
|
||||
msgid "Log Out..."
|
||||
msgstr "Đăng xuất..."
|
||||
|
||||
@ -634,14 +667,12 @@ msgstr "Đăng xuất..."
|
||||
msgid "Zoom"
|
||||
msgstr "Phóng to"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:69
|
||||
msgid "Screen Reader"
|
||||
msgstr "Trình đọc màn hình"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:73
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Bàn phím màn hình"
|
||||
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:77
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Cảnh báo trực quan"
|
||||
@ -666,17 +697,17 @@ msgstr "Phím chuột"
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Thiết lập hỗ trợ truy cập"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:145
|
||||
#: ../js/ui/status/accessibility.js:146
|
||||
msgid "High Contrast"
|
||||
msgstr "Tương phản cao"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:182
|
||||
#: ../js/ui/status/accessibility.js:183
|
||||
msgid "Large Text"
|
||||
msgstr "Chữ lớn"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -696,94 +727,94 @@ msgstr "Thiết lập thiết bị mới..."
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Thiết lập Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
msgid "Connection"
|
||||
msgstr "Kết nối"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
msgid "Send Files..."
|
||||
msgstr "Gửi tập tin..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:233
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
msgid "Browse Files..."
|
||||
msgstr "Duyệt tập tin..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
msgid "Error browsing device"
|
||||
msgstr "Lỗi duyệt tập tin"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:243
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Không thể duyệt thiết bị yêu cầu , lỗi là '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Thiết lập bàn phím"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Thiết lập chuột"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Thiết lập âm thanh"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Yêu cầu cấp quyền từ %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Thiết bị %s muốn truy cập dịch vụ '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
msgid "Always grant access"
|
||||
msgstr "Luôn cho phép"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Grant this time only"
|
||||
msgstr "Chỉ cho phép lần này"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Reject"
|
||||
msgstr "Từ chối"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Xác nhận kết nối cho %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Thiết bị %s muốn kết nối với máy tính này"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Vui lòng xác nhận PIN '%s' khớp với số trên thiết bị."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "Khớp"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:422
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "Không khớp"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Yêu cầu kết nối cho %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:453
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Vui lòng nhập số PIN ghi trên thiết bị."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -795,116 +826,256 @@ msgstr "Hiện bố trí bàn phím..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "Thiết lập bản địa hoá"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
#| msgid "Unknown"
|
||||
msgid "<unknown>"
|
||||
msgstr "<không rõ>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
#| msgid "Disabled"
|
||||
msgid "disabled"
|
||||
msgstr "tắt"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
#| msgid "Connection"
|
||||
msgid "connecting..."
|
||||
msgstr "đang kết nối..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
msgid "authentication required"
|
||||
msgstr "cần xác thực"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
msgid "cable unplugged"
|
||||
msgstr "cáp bị tháo"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
#| msgid "Available"
|
||||
msgid "unavailable"
|
||||
msgstr "không có mặt"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
#| msgid "Connection"
|
||||
msgid "connection failed"
|
||||
msgstr "lỗi kết nối"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
msgid "Connected (private)"
|
||||
msgstr "Đã kết nối (riêng)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet tự động"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
msgid "Auto broadband"
|
||||
msgstr "Băng thông rộng tự động"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Quay số tự động"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#, c-format
|
||||
#| msgid "Quit %s"
|
||||
msgid "Auto %s"
|
||||
msgstr "%s tự động"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
#| msgid "Bluetooth"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth tự động"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
msgid "Auto wireless"
|
||||
msgstr "Mạng không dây tự động"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
msgid "More..."
|
||||
msgstr "Nữa..."
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
msgid "Enable networking"
|
||||
msgstr "Bật nối mạng"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
msgid "Wired"
|
||||
msgstr "Mạng dây"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Wireless"
|
||||
msgstr "Mạng không dây"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mạng băng thông rộng"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
#| msgid "Connection"
|
||||
msgid "VPN Connections"
|
||||
msgstr "Kết nối VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
#| msgid "Power Settings"
|
||||
msgid "Network Settings"
|
||||
msgstr "Thiết lập mạng"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Bạn đã kết nối vào mạng băng thông rộng '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Bạn đã kết nối vào mạng không dây '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Bạn đã kết nối vào mạng (dây) '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Bạn đã kết nối vào mạng VPN '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Bạn đã kết nối vào '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
#| msgid "Connection"
|
||||
msgid "Connection established"
|
||||
msgstr "Đã tạo kết nối"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Mạng bị tắt"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
msgid "Network Manager"
|
||||
msgstr "Trình quản lý mạng"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Thiết lập năng lượng"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:110
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr "Ước lượng..."
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%d giờ còn lại"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#: ../js/ui/status/power.js:121
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s còn lại"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "giờ"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#: ../js/ui/status/power.js:123
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "%d phút"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#: ../js/ui/status/power.js:126
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d phút còn lại"
|
||||
|
||||
#: ../js/ui/status/power.js:227
|
||||
#: ../js/ui/status/power.js:228
|
||||
msgid "AC adapter"
|
||||
msgstr "Bộ đổi điện AC"
|
||||
|
||||
#: ../js/ui/status/power.js:229
|
||||
#: ../js/ui/status/power.js:230
|
||||
msgid "Laptop battery"
|
||||
msgstr "Pin laptop"
|
||||
|
||||
#: ../js/ui/status/power.js:231
|
||||
#: ../js/ui/status/power.js:232
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:233
|
||||
#: ../js/ui/status/power.js:234
|
||||
msgid "Monitor"
|
||||
msgstr "Màn hình"
|
||||
|
||||
#: ../js/ui/status/power.js:235
|
||||
#: ../js/ui/status/power.js:236
|
||||
msgid "Mouse"
|
||||
msgstr "Chuột"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
#: ../js/ui/status/power.js:238
|
||||
msgid "Keyboard"
|
||||
msgstr "Bàn phím"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
#: ../js/ui/status/power.js:240
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
#: ../js/ui/status/power.js:242
|
||||
msgid "Cell phone"
|
||||
msgstr "Điện thoại cầm tay"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "Media player"
|
||||
msgstr "Máy phát"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Tablet"
|
||||
msgstr "Bảng"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "Computer"
|
||||
msgstr "Máy tính"
|
||||
|
||||
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "Không biết"
|
||||
|
||||
#: ../js/ui/status/volume.js:44
|
||||
#: ../js/ui/status/volume.js:45
|
||||
msgid "Volume"
|
||||
msgstr "Âm lượng"
|
||||
|
||||
#: ../js/ui/status/volume.js:57
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Microphone"
|
||||
msgstr "Micrô"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:239
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s trực tuyến."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:244
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s ngoại tuyến."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:247
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s đi vắng."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:250
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s bận."
|
||||
@ -912,7 +1083,7 @@ msgstr "%s bận."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:348
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Đã gửi %X lúc %A"
|
||||
@ -921,10 +1092,14 @@ msgstr "Đã gửi %X lúc %A"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:103
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr "Nhập để tìm..."
|
||||
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Tìm"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:42
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
@ -937,7 +1112,7 @@ msgstr "'%s' đã sẵn sàng"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#: ../src/gvc/gvc-mixer-control.c:1098
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -945,44 +1120,62 @@ msgstr[0] "%u đầu ra"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#: ../src/gvc/gvc-mixer-control.c:1108
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u đầu vào"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#: ../src/gvc/gvc-mixer-control.c:1406
|
||||
msgid "System Sounds"
|
||||
msgstr "Âm thanh hệ thống"
|
||||
|
||||
#: ../src/shell-global.c:1298
|
||||
#: ../src/main.c:446
|
||||
msgid "Print version"
|
||||
msgstr "In phiên bản"
|
||||
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
#| msgid "Failed to unmount '%s'"
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Lỗi chạy '%s'"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Chưa đến một phút"
|
||||
|
||||
#: ../src/shell-global.c:1302
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d phút trước"
|
||||
|
||||
#: ../src/shell-global.c:1307
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d giờ trước"
|
||||
|
||||
#: ../src/shell-global.c:1312
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d ngày trước"
|
||||
|
||||
#: ../src/shell-global.c:1317
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d tuần trước"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Vương quốc Anh"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
msgstr "Mặc định"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Hộp thoại xác thực bị người dùng bỏ qua"
|
||||
@ -997,10 +1190,6 @@ msgstr "Thư mục chính"
|
||||
msgid "File System"
|
||||
msgstr "Hệ tập tin"
|
||||
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Tìm"
|
||||
|
||||
#. Translators: the first string is the name of a gvfs
|
||||
#. * method, and the second string is a path. For
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
@ -1011,6 +1200,30 @@ msgstr "Tìm"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Không có ứng dụng đó"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Tắt máy"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "Nhấn Tắt máy để thoát những ứng dụng này và tắt hệ thống."
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "Hệ thống sẽ tự động tắt sau %d giây."
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "Tắt hệ thống."
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "Xác nhận"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Trình đọc màn hình"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Bàn phím màn hình"
|
||||
|
||||
#~ msgid "Clip the crosshairs at the center"
|
||||
#~ msgstr "Cắt lưới chéo ở giữa"
|
||||
|
||||
|
571
po/zh_CN.po
571
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
845
po/zh_HK.po
845
po/zh_HK.po
File diff suppressed because it is too large
Load Diff
852
po/zh_TW.po
852
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@ -38,13 +38,16 @@ generated_script_substitutions = \
|
||||
-e "s|@datadir[@]|$(datadir)|" \
|
||||
-e "s|@libexecdir[@]|$(libexecdir)|" \
|
||||
-e "s|@libdir[@]|$(libdir)|" \
|
||||
-e "s|@JHBUILD_TYPELIBDIR[@]|$(JHBUILD_TYPELIBDIR)|" \
|
||||
-e "s|@pkgdatadir[@]|$(pkgdatadir)|" \
|
||||
-e "s|@PYTHON[@]|$(PYTHON)|" \
|
||||
-e "s|@VERSION[@]|$(VERSION)|" \
|
||||
-e "s|@sysconfdir[@]|$(sysconfdir)|"
|
||||
|
||||
gnome-shell-jhbuild: gnome-shell-jhbuild.in Makefile
|
||||
gnome-shell-jhbuild: gnome-shell-jhbuild.in gnome-shell-real Makefile
|
||||
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
||||
@# Regenerate libtool wrapper so Alt+F2 restart will work
|
||||
@$(LIBTOOL) --mode=execute test -f gnome-shell-real
|
||||
|
||||
gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile
|
||||
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
||||
@ -62,7 +65,8 @@ gnome_shell_cflags = \
|
||||
$(GNOME_SHELL_CFLAGS) \
|
||||
-I$(srcdir)/tray \
|
||||
-DVERSION=\"$(VERSION)\" \
|
||||
-DLOCALEDIR=\"$(datadir)/locale\" \
|
||||
-DLOCALEDIR=\"$(datadir)/locale\" \
|
||||
-DDATADIR=\"$(datadir)\" \
|
||||
-DGNOME_SHELL_LIBEXECDIR=\"$(libexecdir)\" \
|
||||
-DGNOME_SHELL_DATADIR=\"$(pkgdatadir)\" \
|
||||
-DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\" \
|
||||
@ -90,6 +94,7 @@ shell_public_headers_h = \
|
||||
shell-generic-container.h \
|
||||
shell-gtk-embed.h \
|
||||
shell-global.h \
|
||||
shell-mobile-providers.h \
|
||||
shell-perf-log.h \
|
||||
shell-slicer.h \
|
||||
shell-stack.h \
|
||||
@ -121,6 +126,7 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-generic-container.c \
|
||||
shell-gtk-embed.c \
|
||||
shell-global.c \
|
||||
shell-mobile-providers.c \
|
||||
shell-perf-log.c \
|
||||
shell-polkit-authentication-agent.h \
|
||||
shell-polkit-authentication-agent.c \
|
||||
@ -262,7 +268,7 @@ libgnome_shell_la_LIBADD = \
|
||||
libgnome_shell_la_CPPFLAGS = $(gnome_shell_cflags)
|
||||
|
||||
Shell-0.1.gir: libgnome-shell.la St-1.0.gir
|
||||
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-2.91 TelepathyGLib-0.12
|
||||
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-2.91 TelepathyGLib-0.12 TelepathyLogger-0.2
|
||||
Shell_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
|
||||
Shell_0_1_gir_LIBS = libgnome-shell.la
|
||||
Shell_0_1_gir_FILES = $(addprefix $(srcdir)/,$(libgnome_shell_la_gir_sources))
|
||||
|
@ -407,7 +407,9 @@ gdm_user_get_uid (GdmUser *user)
|
||||
* gdm_user_get_real_name:
|
||||
* @user: the user object to examine.
|
||||
*
|
||||
* Retrieves the display name of @user.
|
||||
* Retrieves a displayable name for @user. By default this is the real name
|
||||
* of the user, but will fall back to the user name if there is no real name
|
||||
* defined.
|
||||
*
|
||||
* Returns: (transfer none): a pointer to an array of characters which must not be modified or
|
||||
* freed, or %NULL.
|
||||
@ -417,7 +419,12 @@ gdm_user_get_real_name (GdmUser *user)
|
||||
{
|
||||
g_return_val_if_fail (GDM_IS_USER (user), NULL);
|
||||
|
||||
return (user->real_name ? user->real_name : user->user_name);
|
||||
if (user->real_name == NULL ||
|
||||
user->real_name[0] == '\0') {
|
||||
return user->user_name;
|
||||
}
|
||||
|
||||
return user->real_name;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -197,12 +197,16 @@ def start_shell(perf_output=None):
|
||||
if os.path.exists(os.path.join(self_dir, 'gnome-shell-jhbuild.in')):
|
||||
running_from_source_tree = True
|
||||
top_dir = os.path.dirname(self_dir)
|
||||
typelib_dir = os.path.join(top_dir, "src")
|
||||
typelib_dir = '@JHBUILD_TYPELIBDIR@:' + os.path.join(top_dir, "src")
|
||||
js_dir = os.path.join(top_dir, "js")
|
||||
data_dir = os.path.join(top_dir, "data")
|
||||
else:
|
||||
running_from_source_tree = False
|
||||
js_dir = os.path.join('@pkgdatadir@', 'js')
|
||||
typelib_dir = '@JHBUILD_TYPELIBDIR@'
|
||||
|
||||
if os.environ.has_key('GI_TYPELIB_PATH'):
|
||||
typelib_dir = typelib_dir + ":" + os.environ.get('GI_TYPELIB_PATH')
|
||||
|
||||
# Set up environment
|
||||
env = dict(os.environ)
|
||||
@ -215,14 +219,12 @@ def start_shell(perf_output=None):
|
||||
# run". See bug #642084
|
||||
env.update({'GNOME_SHELL_JS' : js_dir,
|
||||
'PATH' : '@bindir@:' + os.environ.get('PATH', ''),
|
||||
'GI_TYPELIB_PATH' : typelib_dir,
|
||||
'XDG_CONFIG_DIRS' : '@sysconfdir@/xdg:' + (os.environ.get('XDG_CONFIG_DIRS') or '/etc/xdg'),
|
||||
'XDG_DATA_DIRS' : '@datadir@:' + (os.environ.get('XDG_DATA_DIRS') or '/usr/local/share:/usr/share')})
|
||||
if running_from_source_tree:
|
||||
if os.environ.has_key('GI_TYPELIB_PATH'):
|
||||
typelib_dir = typelib_dir + ":" + os.environ.get('GI_TYPELIB_PATH')
|
||||
env.update({'GNOME_SHELL_BINDIR' : self_dir,
|
||||
'GNOME_SHELL_DATADIR' : data_dir,
|
||||
'GI_TYPELIB_PATH' : typelib_dir,
|
||||
'GSETTINGS_SCHEMA_DIR' : data_dir })
|
||||
else:
|
||||
# This is just broken to set in the installed case; see bug #642084
|
||||
|
@ -321,20 +321,28 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
}
|
||||
#endif
|
||||
|
||||
/* When the pointer leaves the stage to enter a child of the stage
|
||||
* (like a notification icon), we don't want to produce Clutter leave
|
||||
* events. But Clutter treats all leave events identically, so we
|
||||
* need hide the detail = NotifyInferior events from it.
|
||||
*
|
||||
* Since Clutter doesn't see any event at all, this does mean that
|
||||
* it won't produce an enter event on a Clutter actor that surrounds
|
||||
* the child (unless it gets a MotionNotify before the Enter event).
|
||||
* Other weirdness is likely also possible.
|
||||
*/
|
||||
if ((xev->xany.type == EnterNotify || xev->xany.type == LeaveNotify)
|
||||
&& xev->xcrossing.detail == NotifyInferior
|
||||
&& xev->xcrossing.window == clutter_x11_get_stage_window (CLUTTER_STAGE (clutter_stage_get_default ())))
|
||||
return TRUE;
|
||||
{
|
||||
/* If the pointer enters a child of the stage window (eg, a
|
||||
* trayicon), we want to consider it to still be in the stage,
|
||||
* so don't let Clutter see the event.
|
||||
*/
|
||||
if (xev->xcrossing.detail == NotifyInferior)
|
||||
return TRUE;
|
||||
|
||||
/* If the pointer is grabbed by a window it is not currently in,
|
||||
* filter that out as well. In particular, if a trayicon grabs
|
||||
* the pointer after a click on its label, we don't want to hide
|
||||
* the message tray. Filtering out this event will leave Clutter
|
||||
* out of sync, but that happens fairly often with grabs, and we
|
||||
* can work around it. (Eg, shell_global_sync_pointer().)
|
||||
*/
|
||||
if (xev->xcrossing.mode == NotifyGrab &&
|
||||
(xev->xcrossing.detail == NotifyNonlinear ||
|
||||
xev->xcrossing.detail == NotifyNonlinearVirtual))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Pass the event to shell-global
|
||||
|
67
src/main.c
67
src/main.c
@ -31,11 +31,12 @@ extern GType gnome_shell_plugin_get_type (void);
|
||||
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
|
||||
|
||||
static void
|
||||
shell_dbus_init (void)
|
||||
shell_dbus_init (gboolean replace)
|
||||
{
|
||||
GError *error = NULL;
|
||||
DBusGConnection *session;
|
||||
DBusGProxy *bus;
|
||||
guint32 request_name_flags;
|
||||
guint32 request_name_result;
|
||||
|
||||
/** TODO:
|
||||
@ -51,18 +52,25 @@ shell_dbus_init (void)
|
||||
DBUS_PATH_DBUS,
|
||||
DBUS_INTERFACE_DBUS);
|
||||
|
||||
request_name_flags = DBUS_NAME_FLAG_DO_NOT_QUEUE | DBUS_NAME_FLAG_ALLOW_REPLACEMENT;
|
||||
if (replace)
|
||||
request_name_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING;
|
||||
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
||||
G_TYPE_STRING, SHELL_DBUS_SERVICE,
|
||||
G_TYPE_UINT, 0,
|
||||
G_TYPE_UINT, request_name_flags,
|
||||
G_TYPE_INVALID,
|
||||
G_TYPE_UINT, &request_name_result,
|
||||
G_TYPE_INVALID))
|
||||
{
|
||||
g_print ("failed to acquire org.gnome.Shell: %s\n", error->message);
|
||||
/* If we somehow got started again, it's not an error to be running
|
||||
* already. So just exit 0.
|
||||
*/
|
||||
exit (0);
|
||||
g_printerr ("failed to acquire org.gnome.Shell: %s\n", error->message);
|
||||
exit (1);
|
||||
}
|
||||
if (!(request_name_result == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER
|
||||
|| request_name_result == DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER))
|
||||
{
|
||||
g_printerr ("%s already exists on bus and --replace not specified\n",
|
||||
SHELL_DBUS_SERVICE);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
/* Also grab org.gnome.Panel to replace any existing panel process,
|
||||
@ -108,6 +116,45 @@ shell_dbus_init (void)
|
||||
g_object_unref (bus);
|
||||
}
|
||||
|
||||
static void
|
||||
constrain_tooltip (StTooltip *tooltip,
|
||||
const ClutterGeometry *geometry,
|
||||
ClutterGeometry *adjusted_geometry,
|
||||
gpointer data)
|
||||
{
|
||||
const ClutterGeometry *tip_area = st_tooltip_get_tip_area (tooltip);
|
||||
ShellGlobal *global = shell_global_get ();
|
||||
MetaScreen *screen = shell_global_get_screen (global);
|
||||
int n_monitors = meta_screen_get_n_monitors (screen);
|
||||
int i;
|
||||
|
||||
*adjusted_geometry = *geometry;
|
||||
|
||||
/* A point that determines what screen we'll constrain to */
|
||||
int x = tip_area->x + tip_area->width / 2;
|
||||
int y = tip_area->y + tip_area->height / 2;
|
||||
|
||||
for (i = 0; i < n_monitors; i++)
|
||||
{
|
||||
MetaRectangle rect;
|
||||
meta_screen_get_monitor_geometry (screen, i, &rect);
|
||||
if (x >= rect.x && x < rect.x + rect.width &&
|
||||
y >= rect.y && y < rect.y + rect.height)
|
||||
{
|
||||
if (adjusted_geometry->x + adjusted_geometry->width > rect.x + rect.width)
|
||||
adjusted_geometry->x = rect.x + rect.width - adjusted_geometry->width;
|
||||
if (adjusted_geometry->x < rect.x)
|
||||
adjusted_geometry->x = rect.x;
|
||||
|
||||
if (adjusted_geometry->y + adjusted_geometry->height > rect.y + rect.height)
|
||||
adjusted_geometry->y = rect.y + rect.height - adjusted_geometry->height;
|
||||
if (adjusted_geometry->y < rect.y)
|
||||
adjusted_geometry->y = rect.y;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
update_font_options (GtkSettings *settings)
|
||||
@ -139,6 +186,8 @@ update_font_options (GtkSettings *settings)
|
||||
else
|
||||
st_theme_context_set_default_resolution (context);
|
||||
|
||||
st_tooltip_set_constrain_func (stage, constrain_tooltip, NULL, NULL);
|
||||
|
||||
/* Clutter (as of 0.9) passes comprehensively wrong font options
|
||||
* override whatever set_font_flags() did above.
|
||||
*
|
||||
@ -221,6 +270,8 @@ shell_prefs_init (void)
|
||||
{
|
||||
meta_prefs_override_preference_location ("/apps/mutter/general/attach_modal_dialogs",
|
||||
"/desktop/gnome/shell/windows/attach_modal_dialogs");
|
||||
meta_prefs_override_preference_location ("/apps/mutter/general/workspaces_only_on_primary",
|
||||
"/desktop/gnome/shell/windows/workspaces_only_on_primary");
|
||||
meta_prefs_override_preference_location ("/apps/metacity/general/button_layout",
|
||||
"/desktop/gnome/shell/windows/button_layout");
|
||||
meta_prefs_override_preference_location ("/apps/metacity/general/edge_tiling",
|
||||
@ -432,7 +483,7 @@ main (int argc, char **argv)
|
||||
g_setenv ("GJS_DEBUG_OUTPUT", "stderr", TRUE);
|
||||
g_setenv ("GJS_DEBUG_TOPICS", "JS ERROR;JS LOG", TRUE);
|
||||
|
||||
shell_dbus_init ();
|
||||
shell_dbus_init (meta_get_replace_current_wm ());
|
||||
shell_a11y_init ();
|
||||
shell_fonts_init ();
|
||||
shell_perf_log_init ();
|
||||
|
@ -23,10 +23,10 @@
|
||||
/* Vendor prefixes are something that can be preprended to a .desktop
|
||||
* file name. Undo this.
|
||||
*/
|
||||
static const char*const known_vendor_prefixes[] = { "gnome",
|
||||
"fedora",
|
||||
"mozilla",
|
||||
NULL };
|
||||
static const char*const vendor_prefixes[] = { "gnome-",
|
||||
"fedora-",
|
||||
"mozilla-",
|
||||
NULL };
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
@ -49,12 +49,14 @@ struct _ShellAppSystemPrivate {
|
||||
|
||||
GSList *cached_flattened_apps; /* ShellAppInfo */
|
||||
GSList *cached_settings; /* ShellAppInfo */
|
||||
GSList *known_vendor_prefixes;
|
||||
|
||||
gint app_monitor_id;
|
||||
|
||||
guint app_change_timeout_id;
|
||||
};
|
||||
|
||||
static char *shell_app_info_get_prefix (ShellAppInfo *info);
|
||||
static void shell_app_system_finalize (GObject *object);
|
||||
static gboolean on_tree_changed (gpointer user_data);
|
||||
static void on_tree_changed_cb (GMenuTree *tree, gpointer user_data);
|
||||
@ -159,20 +161,6 @@ shell_app_info_new_from_window (MetaWindow *window)
|
||||
return info;
|
||||
}
|
||||
|
||||
static ShellAppInfo *
|
||||
shell_app_info_new_from_keyfile_take_ownership (GKeyFile *keyfile,
|
||||
const char *path)
|
||||
{
|
||||
ShellAppInfo *info;
|
||||
|
||||
info = g_slice_alloc0 (sizeof (ShellAppInfo));
|
||||
info->type = SHELL_APP_INFO_TYPE_DESKTOP_FILE;
|
||||
info->refcount = 1;
|
||||
info->keyfile = keyfile;
|
||||
info->keyfile_path = g_strdup (path);
|
||||
return info;
|
||||
}
|
||||
|
||||
static void shell_app_system_class_init(ShellAppSystemClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = (GObjectClass *)klass;
|
||||
@ -212,7 +200,7 @@ shell_app_system_init (ShellAppSystem *self)
|
||||
* case by case.
|
||||
*/
|
||||
priv->apps_tree = gmenu_tree_lookup ("applications.menu", GMENU_TREE_FLAGS_INCLUDE_NODISPLAY);
|
||||
priv->settings_tree = gmenu_tree_lookup ("settings.menu", GMENU_TREE_FLAGS_NONE);
|
||||
priv->settings_tree = gmenu_tree_lookup ("gnomecc.menu", GMENU_TREE_FLAGS_INCLUDE_NODISPLAY);
|
||||
|
||||
priv->app_change_timeout_id = 0;
|
||||
|
||||
@ -240,6 +228,11 @@ shell_app_system_finalize (GObject *object)
|
||||
g_slist_foreach (priv->cached_flattened_apps, (GFunc)shell_app_info_unref, NULL);
|
||||
g_slist_free (priv->cached_flattened_apps);
|
||||
priv->cached_flattened_apps = NULL;
|
||||
|
||||
g_slist_foreach (priv->known_vendor_prefixes, (GFunc)g_free, NULL);
|
||||
g_slist_free (priv->known_vendor_prefixes);
|
||||
priv->known_vendor_prefixes = NULL;
|
||||
|
||||
g_slist_foreach (priv->cached_settings, (GFunc)shell_app_info_unref, NULL);
|
||||
g_slist_free (priv->cached_settings);
|
||||
priv->cached_settings = NULL;
|
||||
@ -323,10 +316,20 @@ cache_by_id (ShellAppSystem *self, GSList *apps)
|
||||
for (iter = apps; iter; iter = iter->next)
|
||||
{
|
||||
ShellAppInfo *info = iter->data;
|
||||
const char *id = shell_app_info_get_id (info);
|
||||
char *prefix = shell_app_info_get_prefix (info);
|
||||
|
||||
shell_app_info_ref (info);
|
||||
/* the name is owned by the info itself */
|
||||
g_hash_table_replace (self->priv->app_id_to_info, (char*)shell_app_info_get_id (info),
|
||||
info);
|
||||
|
||||
if (prefix
|
||||
&& !g_slist_find_custom (self->priv->known_vendor_prefixes, prefix,
|
||||
(GCompareFunc)g_strcmp0))
|
||||
self->priv->known_vendor_prefixes = g_slist_append (self->priv->known_vendor_prefixes,
|
||||
prefix);
|
||||
else
|
||||
g_free (prefix);
|
||||
g_hash_table_replace (self->priv->app_id_to_info, (char*)id, info);
|
||||
}
|
||||
}
|
||||
|
||||
@ -335,6 +338,10 @@ reread_menus (ShellAppSystem *self)
|
||||
{
|
||||
GHashTable *unique = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
g_slist_foreach (self->priv->known_vendor_prefixes, (GFunc)g_free, NULL);
|
||||
g_slist_free (self->priv->known_vendor_prefixes);
|
||||
self->priv->known_vendor_prefixes = NULL;
|
||||
|
||||
reread_entries (self, &(self->priv->cached_flattened_apps), unique, self->priv->apps_tree);
|
||||
g_hash_table_remove_all (unique);
|
||||
reread_entries (self, &(self->priv->cached_settings), unique, self->priv->settings_tree);
|
||||
@ -576,44 +583,6 @@ _shell_app_system_register_app (ShellAppSystem *self,
|
||||
g_object_weak_ref (G_OBJECT (app), shell_app_system_on_app_weakref, ref);
|
||||
}
|
||||
|
||||
ShellAppInfo *
|
||||
shell_app_system_load_from_desktop_file (ShellAppSystem *system,
|
||||
const char *filename,
|
||||
GError **error)
|
||||
{
|
||||
ShellAppInfo *appinfo;
|
||||
GKeyFile *keyfile;
|
||||
char *full_path = NULL;
|
||||
gboolean success;
|
||||
|
||||
keyfile = g_key_file_new ();
|
||||
|
||||
if (strchr (filename, '/') != NULL)
|
||||
{
|
||||
success = g_key_file_load_from_file (keyfile, filename, G_KEY_FILE_NONE, error);
|
||||
full_path = g_strdup (filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
char *app_path = g_build_filename ("applications", filename, NULL);
|
||||
success = g_key_file_load_from_data_dirs (keyfile, app_path, &full_path,
|
||||
G_KEY_FILE_NONE, error);
|
||||
g_free (app_path);
|
||||
}
|
||||
|
||||
if (!success)
|
||||
{
|
||||
g_key_file_free (keyfile);
|
||||
g_free (full_path);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
appinfo = shell_app_info_new_from_keyfile_take_ownership (keyfile, full_path);
|
||||
g_free (full_path);
|
||||
|
||||
return appinfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_app_system_create_from_window:
|
||||
*
|
||||
@ -645,16 +614,13 @@ shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
|
||||
const char *name)
|
||||
{
|
||||
ShellApp *result;
|
||||
char **vendor_prefixes;
|
||||
|
||||
GSList *prefix;
|
||||
result = shell_app_system_get_app (system, name);
|
||||
if (result != NULL)
|
||||
return result;
|
||||
|
||||
for (vendor_prefixes = (char**)known_vendor_prefixes;
|
||||
*vendor_prefixes; vendor_prefixes++)
|
||||
for (prefix = system->priv->known_vendor_prefixes; prefix; prefix = g_slist_next (prefix))
|
||||
{
|
||||
char *tmpid = g_strjoin (NULL, *vendor_prefixes, "-", name, NULL);
|
||||
char *tmpid = g_strconcat ((char*)prefix->data, name, NULL);
|
||||
result = shell_app_system_get_app (system, tmpid);
|
||||
g_free (tmpid);
|
||||
if (result != NULL)
|
||||
@ -993,6 +959,115 @@ shell_app_info_get_id (ShellAppInfo *info)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char *
|
||||
shell_app_info_get_prefix (ShellAppInfo *info)
|
||||
{
|
||||
char *prefix = NULL, *file_prefix = NULL;
|
||||
const char *id;
|
||||
GFile *file;
|
||||
char *name;
|
||||
int i = 0;
|
||||
|
||||
if (info->type != SHELL_APP_INFO_TYPE_ENTRY)
|
||||
return NULL;
|
||||
|
||||
id = gmenu_tree_entry_get_desktop_file_id ((GMenuTreeEntry*)info->entry);
|
||||
file = g_file_new_for_path (gmenu_tree_entry_get_desktop_file_path ((GMenuTreeEntry*)info->entry));
|
||||
name = g_file_get_basename (file);
|
||||
|
||||
if (!name)
|
||||
{
|
||||
g_object_unref (file);
|
||||
return NULL;
|
||||
}
|
||||
for (i = 0; vendor_prefixes[i]; i++)
|
||||
{
|
||||
if (g_str_has_prefix (name, vendor_prefixes[i]))
|
||||
{
|
||||
file_prefix = g_strdup (vendor_prefixes[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
while (strcmp (name, id) != 0)
|
||||
{
|
||||
char *t;
|
||||
char *pname;
|
||||
GFile *parent = g_file_get_parent (file);
|
||||
|
||||
if (!parent)
|
||||
{
|
||||
g_warn_if_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
pname = g_file_get_basename (parent);
|
||||
if (!pname)
|
||||
{
|
||||
g_object_unref (parent);
|
||||
break;
|
||||
}
|
||||
if (!g_strstr_len (id, -1, pname))
|
||||
{
|
||||
/* handle <LegacyDir prefix="..."> */
|
||||
char *t;
|
||||
size_t name_len = strlen (name);
|
||||
size_t id_len = strlen (id);
|
||||
char *t_id = g_strdup (id);
|
||||
|
||||
t_id[id_len - name_len] = '\0';
|
||||
t = g_strdup(t_id);
|
||||
g_free (prefix);
|
||||
g_free (t_id);
|
||||
g_free (name);
|
||||
name = g_strdup (id);
|
||||
prefix = t;
|
||||
|
||||
g_object_unref (file);
|
||||
file = parent;
|
||||
g_free (pname);
|
||||
g_free (file_prefix);
|
||||
file_prefix = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
t = g_strconcat (pname, "-", name, NULL);
|
||||
g_free (name);
|
||||
name = t;
|
||||
|
||||
t = g_strconcat (pname, "-", prefix, NULL);
|
||||
g_free (prefix);
|
||||
prefix = t;
|
||||
|
||||
g_object_unref (file);
|
||||
file = parent;
|
||||
g_free (pname);
|
||||
}
|
||||
|
||||
if (file)
|
||||
g_object_unref (file);
|
||||
|
||||
if (strcmp (name, id) == 0)
|
||||
{
|
||||
g_free (name);
|
||||
if (file_prefix && !prefix)
|
||||
return file_prefix;
|
||||
if (file_prefix)
|
||||
{
|
||||
char *t = g_strconcat (prefix, "-", file_prefix, NULL);
|
||||
g_free (prefix);
|
||||
g_free (file_prefix);
|
||||
prefix = t;
|
||||
}
|
||||
return prefix;
|
||||
}
|
||||
|
||||
g_free (name);
|
||||
g_free (prefix);
|
||||
g_free (file_prefix);
|
||||
g_return_val_if_reached (NULL);
|
||||
}
|
||||
|
||||
#define DESKTOP_ENTRY_GROUP "Desktop Entry"
|
||||
|
||||
char *
|
||||
@ -1260,21 +1335,27 @@ shell_app_info_create_icon_texture (ShellAppInfo *info, float size)
|
||||
GIcon *icon;
|
||||
ClutterActor *ret;
|
||||
|
||||
ret = NULL;
|
||||
|
||||
if (info->type == SHELL_APP_INFO_TYPE_WINDOW)
|
||||
{
|
||||
return st_texture_cache_bind_pixbuf_property (st_texture_cache_get_default (),
|
||||
G_OBJECT (info->window),
|
||||
"icon");
|
||||
}
|
||||
|
||||
icon = shell_app_info_get_icon (info);
|
||||
if (icon == NULL)
|
||||
{
|
||||
ret = clutter_texture_new ();
|
||||
g_object_set (ret, "opacity", 0, "width", size, "height", size, NULL);
|
||||
ret = st_texture_cache_bind_pixbuf_property (st_texture_cache_get_default (),
|
||||
G_OBJECT (info->window),
|
||||
"icon");
|
||||
}
|
||||
else
|
||||
{
|
||||
icon = shell_app_info_get_icon (info);
|
||||
if (icon != NULL)
|
||||
{
|
||||
ret = st_texture_cache_load_gicon (st_texture_cache_get_default (), NULL, icon, (int)size);
|
||||
g_object_unref (icon);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == NULL)
|
||||
{
|
||||
icon = g_themed_icon_new ("application-x-executable");
|
||||
ret = st_texture_cache_load_gicon (st_texture_cache_get_default (), NULL, icon, (int)size);
|
||||
g_object_unref (icon);
|
||||
}
|
||||
@ -1386,12 +1467,23 @@ shell_app_info_launch_full (ShellAppInfo *info,
|
||||
shell_app = shell_app_system_get_app (shell_app_system_get_default (),
|
||||
shell_app_info_get_id (info));
|
||||
|
||||
ret = g_desktop_app_info_launch_uris_as_manager (gapp, uris,
|
||||
G_APP_LAUNCH_CONTEXT (context),
|
||||
G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
|
||||
NULL, NULL,
|
||||
_gather_pid_callback, shell_app,
|
||||
error);
|
||||
/* In the case where we know an app, we handle reaping the child internally,
|
||||
* in the window tracker.
|
||||
*/
|
||||
if (shell_app != NULL)
|
||||
ret = g_desktop_app_info_launch_uris_as_manager (gapp, uris,
|
||||
G_APP_LAUNCH_CONTEXT (context),
|
||||
G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
|
||||
NULL, NULL,
|
||||
_gather_pid_callback, shell_app,
|
||||
error);
|
||||
else
|
||||
ret = g_desktop_app_info_launch_uris_as_manager (gapp, uris,
|
||||
G_APP_LAUNCH_CONTEXT (context),
|
||||
G_SPAWN_SEARCH_PATH,
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
error);
|
||||
|
||||
g_object_unref (G_OBJECT (gapp));
|
||||
|
||||
|
@ -81,9 +81,6 @@ ShellApp *shell_app_system_get_app_for_window (ShellAppSystem *sel
|
||||
ShellApp *shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
|
||||
const char *id);
|
||||
|
||||
ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system,
|
||||
const char *filename,
|
||||
GError **error);
|
||||
ShellAppInfo *shell_app_system_create_from_window (ShellAppSystem *system,
|
||||
MetaWindow *window);
|
||||
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <meta/display.h>
|
||||
|
||||
#include "shell-app-private.h"
|
||||
@ -139,14 +141,26 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
|
||||
app = data->app;
|
||||
size = data->size;
|
||||
|
||||
icon = shell_app_info_get_icon (app->info);
|
||||
if (icon == NULL)
|
||||
return COGL_INVALID_HANDLE;
|
||||
info = NULL;
|
||||
|
||||
icon = shell_app_info_get_icon (app->info);
|
||||
if (icon != NULL)
|
||||
{
|
||||
info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default (),
|
||||
icon, (int) (size + 0.5),
|
||||
GTK_ICON_LOOKUP_FORCE_SIZE);
|
||||
g_object_unref (icon);
|
||||
}
|
||||
|
||||
if (info == NULL)
|
||||
{
|
||||
icon = g_themed_icon_new ("application-x-executable");
|
||||
info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default (),
|
||||
icon, (int) (size + 0.5),
|
||||
GTK_ICON_LOOKUP_FORCE_SIZE);
|
||||
g_object_unref (icon);
|
||||
}
|
||||
|
||||
info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default (),
|
||||
icon, (int) (size + 0.5),
|
||||
GTK_ICON_LOOKUP_FORCE_SIZE);
|
||||
g_object_unref (icon);
|
||||
if (info == NULL)
|
||||
return COGL_INVALID_HANDLE;
|
||||
|
||||
@ -427,13 +441,24 @@ shell_app_activate (ShellApp *app,
|
||||
switch (app->state)
|
||||
{
|
||||
case SHELL_APP_STATE_STOPPED:
|
||||
/* TODO sensibly handle this error */
|
||||
shell_app_info_launch_full (app->info,
|
||||
0,
|
||||
NULL,
|
||||
workspace,
|
||||
NULL,
|
||||
NULL);
|
||||
{
|
||||
GError *error = NULL;
|
||||
if (!shell_app_info_launch_full (app->info,
|
||||
0,
|
||||
NULL,
|
||||
workspace,
|
||||
NULL,
|
||||
&error))
|
||||
{
|
||||
char *msg;
|
||||
msg = g_strdup_printf (_("Failed to launch '%s'"), shell_app_get_name (app));
|
||||
shell_global_notify_error (shell_global_get (),
|
||||
msg,
|
||||
error->message);
|
||||
g_free (msg);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SHELL_APP_STATE_STARTING:
|
||||
break;
|
||||
@ -755,9 +780,6 @@ _shell_app_add_window (ShellApp *app,
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (app));
|
||||
|
||||
if (app->state != SHELL_APP_STATE_STARTING)
|
||||
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
|
||||
|
||||
if (!app->running_state)
|
||||
create_running_state (app);
|
||||
|
||||
@ -770,6 +792,9 @@ _shell_app_add_window (ShellApp *app,
|
||||
if (user_time > app->running_state->last_user_time)
|
||||
app->running_state->last_user_time = user_time;
|
||||
|
||||
if (app->state != SHELL_APP_STATE_STARTING)
|
||||
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (app));
|
||||
|
||||
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <gdk/gdkx.h>
|
||||
#include <gio/gio.h>
|
||||
#include <gjs/gjs-module.h>
|
||||
#include <girepository.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/xmlmemory.h>
|
||||
@ -102,6 +103,7 @@ enum
|
||||
XDND_POSITION_CHANGED,
|
||||
XDND_LEAVE,
|
||||
XDND_ENTER,
|
||||
NOTIFY_ERROR,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
@ -293,6 +295,17 @@ shell_global_class_init (ShellGlobalClass *klass)
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
shell_global_signals[NOTIFY_ERROR] =
|
||||
g_signal_new ("notify-error",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
gi_cclosure_marshal_generic,
|
||||
G_TYPE_NONE, 2,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING);
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_OVERLAY_GROUP,
|
||||
g_param_spec_object ("overlay-group",
|
||||
@ -871,6 +884,61 @@ shell_global_display_is_grabbed (ShellGlobal *global)
|
||||
return meta_display_get_grab_op (display) != META_GRAB_OP_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_create_pointer_barrier
|
||||
* @global: a #ShellGlobal
|
||||
* @x1: left X coordinate
|
||||
* @y1: top Y coordinate
|
||||
* @x2: right X coordinate
|
||||
* @y2: bottom Y coordinate
|
||||
* @directions: The directions we're allowed to pass through
|
||||
*
|
||||
* If supported by X creates a pointer barrier.
|
||||
*
|
||||
* Return value: value you can pass to shell_global_destroy_pointer_barrier()
|
||||
*/
|
||||
guint32
|
||||
shell_global_create_pointer_barrier (ShellGlobal *global,
|
||||
int x1, int y1, int x2, int y2,
|
||||
int directions)
|
||||
{
|
||||
#if XFIXES_MAJOR >= 5
|
||||
Display *xdpy;
|
||||
|
||||
xdpy = meta_plugin_get_xdisplay (global->plugin);
|
||||
|
||||
return (guint32)
|
||||
XFixesCreatePointerBarrier (xdpy, DefaultRootWindow(xdpy),
|
||||
x1, y1,
|
||||
x2, y2,
|
||||
directions,
|
||||
0, NULL);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_destroy_pointer_barrier
|
||||
* @global: a #ShellGlobal
|
||||
* @barrier: a pointer barrier
|
||||
*
|
||||
* Destroys the @barrier created by shell_global_create_pointer_barrier().
|
||||
*/
|
||||
void
|
||||
shell_global_destroy_pointer_barrier (ShellGlobal *global, guint32 barrier)
|
||||
{
|
||||
#if XFIXES_MAJOR >= 5
|
||||
Display *xdpy;
|
||||
|
||||
g_return_if_fail (barrier > 0);
|
||||
|
||||
xdpy = meta_plugin_get_xdisplay (global->plugin);
|
||||
XFixesDestroyPointerBarrier (xdpy, (PointerBarrier)barrier);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* shell_global_add_extension_importer:
|
||||
* @target_object_script: JavaScript code evaluating to a target object
|
||||
@ -1238,6 +1306,25 @@ shell_global_maybe_gc (ShellGlobal *global)
|
||||
gjs_context_maybe_gc (global->js_context);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_notify_error:
|
||||
* @global: a #ShellGlobal
|
||||
* @msg: Error message
|
||||
* @details: Error details
|
||||
*
|
||||
* Show a system error notification. Use this function
|
||||
* when a user-initiated action results in a non-fatal problem
|
||||
* from causes that may not be under system control. For
|
||||
* example, an application crash.
|
||||
*/
|
||||
void
|
||||
shell_global_notify_error (ShellGlobal *global,
|
||||
const char *msg,
|
||||
const char *details)
|
||||
{
|
||||
g_signal_emit_by_name (global, "notify-error", msg, details);
|
||||
}
|
||||
|
||||
static void
|
||||
grab_notify (GtkWidget *widget, gboolean was_grabbed, gpointer user_data)
|
||||
{
|
||||
@ -1368,48 +1455,33 @@ shell_global_get_monitors (ShellGlobal *global)
|
||||
MetaRectangle *
|
||||
shell_global_get_primary_monitor (ShellGlobal *global)
|
||||
{
|
||||
GdkScreen *screen = shell_global_get_gdk_screen (global);
|
||||
GdkRectangle gdk_rect;
|
||||
MetaScreen *screen = shell_global_get_screen (global);
|
||||
MetaRectangle rect;
|
||||
gint primary = 0;
|
||||
|
||||
/* gdk_screen_get_primary_monitor is only present in gtk-2.20+
|
||||
* and is in a useable state (supports heuristics and fallback modes)
|
||||
* starting with 2.20.1
|
||||
*/
|
||||
#if !GTK_CHECK_VERSION (2, 20, 1)
|
||||
gint i;
|
||||
gchar *output_name = NULL;
|
||||
gint num_monitors = gdk_screen_get_n_monitors (screen);
|
||||
|
||||
for (i = 0; i < num_monitors; i++)
|
||||
{
|
||||
/* Prefer the laptop's internal screen if present */
|
||||
output_name = gdk_screen_get_monitor_plug_name (screen, i);
|
||||
if (output_name)
|
||||
{
|
||||
gboolean is_lvds = g_ascii_strncasecmp (output_name, "LVDS", 4) == 0;
|
||||
g_free (output_name);
|
||||
if (is_lvds)
|
||||
{
|
||||
primary = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
primary = gdk_screen_get_primary_monitor (screen);
|
||||
#endif
|
||||
|
||||
gdk_screen_get_monitor_geometry (screen, primary, &gdk_rect);
|
||||
rect.x = gdk_rect.x;
|
||||
rect.y = gdk_rect.y;
|
||||
rect.width = gdk_rect.width;
|
||||
rect.height = gdk_rect.height;
|
||||
primary = meta_screen_get_primary_monitor (screen);
|
||||
meta_screen_get_monitor_geometry (screen, primary, &rect);
|
||||
|
||||
return meta_rectangle_copy (&rect);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_get_primary_monitor_index:
|
||||
* @global: the #ShellGlobal
|
||||
*
|
||||
* Gets the index of the primary monitor (the one that the
|
||||
* panel is on).
|
||||
*
|
||||
* Return value: the index of the primary monitor
|
||||
*/
|
||||
int
|
||||
shell_global_get_primary_monitor_index (ShellGlobal *global)
|
||||
{
|
||||
MetaScreen *screen = shell_global_get_screen (global);
|
||||
|
||||
return meta_screen_get_primary_monitor (screen);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_get_focus_monitor:
|
||||
* @global: the #ShellGlobal
|
||||
@ -1473,6 +1545,48 @@ shell_global_get_pointer (ShellGlobal *global,
|
||||
*mods = raw_mods & GDK_MODIFIER_MASK;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_sync_pointer:
|
||||
* @global: the #ShellGlobal
|
||||
*
|
||||
* Ensures that clutter is aware of the current pointer position,
|
||||
* causing enter and leave events to be emitted if the pointer moved
|
||||
* behind our back (ie, during a pointer grab).
|
||||
*/
|
||||
void
|
||||
shell_global_sync_pointer (ShellGlobal *global)
|
||||
{
|
||||
int x, y;
|
||||
GdkModifierType mods;
|
||||
ClutterMotionEvent event;
|
||||
|
||||
gdk_display_get_pointer (gdk_display_get_default (), NULL, &x, &y, &mods);
|
||||
|
||||
event.type = CLUTTER_MOTION;
|
||||
event.time = shell_global_get_current_time (global);
|
||||
event.flags = 0;
|
||||
/* This is wrong: we should be setting event.stage to NULL if the
|
||||
* pointer is not inside the bounds of the stage given the current
|
||||
* stage_input_mode. For our current purposes however, this works.
|
||||
*/
|
||||
event.stage = CLUTTER_STAGE (meta_plugin_get_stage (global->plugin));
|
||||
event.x = x;
|
||||
event.y = y;
|
||||
event.modifier_state = mods;
|
||||
event.axes = NULL;
|
||||
event.device = clutter_device_manager_get_core_device (clutter_device_manager_get_default (),
|
||||
CLUTTER_POINTER_DEVICE);
|
||||
|
||||
/* Leaving event.source NULL will force clutter to look it up, which
|
||||
* will generate enter/leave events as a side effect, if they are
|
||||
* needed. We need a better way to do this though... see
|
||||
* http://bugzilla.clutter-project.org/show_bug.cgi?id=2615.
|
||||
*/
|
||||
event.source = NULL;
|
||||
|
||||
clutter_event_put ((ClutterEvent *)&event);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_event_state:
|
||||
* @event: a #ClutterEvent
|
||||
@ -2048,3 +2162,70 @@ shell_global_launch_calendar_server (ShellGlobal *global)
|
||||
|
||||
g_free (calendar_server_exe);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_global_get_self_contact_features_cb (TpConnection *connection,
|
||||
guint n_contacts,
|
||||
TpContact * const *contacts,
|
||||
const GError *error,
|
||||
gpointer user_data,
|
||||
GObject *weak_object)
|
||||
{
|
||||
if (error != NULL) {
|
||||
g_print ("Failed to upgrade self contact: %s", error->message);
|
||||
return;
|
||||
}
|
||||
((ShellGetSelfContactFeaturesCb)user_data)(connection, *contacts);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_self_contact_features:
|
||||
* @self: A connection, which must be ready
|
||||
* @n_features: Number of features in features
|
||||
* @features: (array length=n_features) (allow-none) (element-type uint):
|
||||
* Array of features
|
||||
* @callback: (scope async): User callback to run when the contact is ready
|
||||
*
|
||||
* Wrap tp_connection_upgrade_contacts due to the lack of support for
|
||||
* proper arrays arguments in GJS.
|
||||
*/
|
||||
void
|
||||
shell_get_self_contact_features (TpConnection *self,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetSelfContactFeaturesCb callback)
|
||||
{
|
||||
TpContact *self_contact = tp_connection_get_self_contact (self);
|
||||
|
||||
tp_connection_upgrade_contacts (self, 1, &self_contact,
|
||||
n_features, features,
|
||||
shell_global_get_self_contact_features_cb,
|
||||
callback, NULL, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_contact_events:
|
||||
* @log_manager: A #TplLogManager
|
||||
* @account: A #TpAccount
|
||||
* @entity: A #TplEntity
|
||||
* @num_events: The number of events to retrieve
|
||||
* @callback: (scope async): User callback to run when the contact is ready
|
||||
*
|
||||
* Wrap tpl_log_manager_get_filtered_events_async because gjs cannot support
|
||||
* multiple callbacks in the same function call.
|
||||
*/
|
||||
void
|
||||
shell_get_contact_events (TplLogManager *log_manager,
|
||||
TpAccount *account,
|
||||
TplEntity *entity,
|
||||
guint num_events,
|
||||
GAsyncReadyCallback callback)
|
||||
{
|
||||
tpl_log_manager_get_filtered_events_async (log_manager,
|
||||
account,
|
||||
entity,
|
||||
TPL_EVENT_MASK_TEXT,
|
||||
num_events,
|
||||
NULL, NULL,
|
||||
callback, NULL);
|
||||
}
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <gtk/gtk.h>
|
||||
#include <meta/meta-plugin.h>
|
||||
#include <telepathy-glib/telepathy-glib.h>
|
||||
#include <telepathy-logger/telepathy-logger.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@ -99,12 +100,20 @@ void shell_global_format_time_relative_pretty (ShellGlobal *global, guint delta,
|
||||
|
||||
GSList *shell_global_get_monitors (ShellGlobal *global);
|
||||
MetaRectangle *shell_global_get_primary_monitor (ShellGlobal *global);
|
||||
int shell_global_get_primary_monitor_index (ShellGlobal *global);
|
||||
MetaRectangle *shell_global_get_focus_monitor (ShellGlobal *global);
|
||||
|
||||
void shell_global_get_pointer (ShellGlobal *global,
|
||||
int *x,
|
||||
int *y,
|
||||
ClutterModifierType *mods);
|
||||
guint32 shell_global_create_pointer_barrier (ShellGlobal *global,
|
||||
int x1, int y1, int x2, int y2,
|
||||
int directions);
|
||||
void shell_global_destroy_pointer_barrier (ShellGlobal *global,
|
||||
guint32 barrier);
|
||||
|
||||
void shell_global_get_pointer (ShellGlobal *global,
|
||||
int *x,
|
||||
int *y,
|
||||
ClutterModifierType *mods);
|
||||
void shell_global_sync_pointer (ShellGlobal *global);
|
||||
|
||||
GSettings *shell_global_get_settings (ShellGlobal *global);
|
||||
|
||||
@ -142,6 +151,11 @@ void shell_global_play_theme_sound (ShellGlobal *global,
|
||||
void shell_global_cancel_theme_sound (ShellGlobal *global,
|
||||
guint id);
|
||||
|
||||
|
||||
void shell_global_notify_error (ShellGlobal *global,
|
||||
const char *msg,
|
||||
const char *details);
|
||||
|
||||
void shell_global_init_xdnd (ShellGlobal *global);
|
||||
|
||||
typedef void (*ShellGetTpContactCb) (TpConnection *connection,
|
||||
@ -157,6 +171,20 @@ void shell_get_tp_contacts (TpConnection *self,
|
||||
|
||||
void shell_global_launch_calendar_server (ShellGlobal *global);
|
||||
|
||||
typedef void (*ShellGetSelfContactFeaturesCb) (TpConnection *connection,
|
||||
TpContact *contact);
|
||||
|
||||
void shell_get_self_contact_features (TpConnection *self,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetSelfContactFeaturesCb callback);
|
||||
|
||||
void shell_get_contact_events (TplLogManager *log_manager,
|
||||
TpAccount *account,
|
||||
TplEntity *entity,
|
||||
guint num_events,
|
||||
GAsyncReadyCallback callback);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_GLOBAL_H__ */
|
||||
|
816
src/shell-mobile-providers.c
Normal file
816
src/shell-mobile-providers.c
Normal file
@ -0,0 +1,816 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Copyright (C) 2009 Novell, Inc.
|
||||
* Author: Tambet Ingo (tambet@gmail.com).
|
||||
*
|
||||
* Copyright (C) 2009 - 2010 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include "shell-mobile-providers.h"
|
||||
|
||||
#ifndef MOBILE_BROADBAND_PROVIDER_INFO
|
||||
#define MOBILE_BROADBAND_PROVIDER_INFO DATADIR "/mobile-broadband-provider-info/serviceproviders.xml"
|
||||
#endif
|
||||
|
||||
#define ISO_3166_COUNTRY_CODES DATADIR "/zoneinfo/iso3166.tab"
|
||||
|
||||
|
||||
|
||||
static GHashTable *
|
||||
read_country_codes (void)
|
||||
{
|
||||
GHashTable *table;
|
||||
GIOChannel *channel;
|
||||
GString *buffer;
|
||||
GError *error = NULL;
|
||||
GIOStatus status;
|
||||
|
||||
channel = g_io_channel_new_file (ISO_3166_COUNTRY_CODES, "r", &error);
|
||||
if (!channel) {
|
||||
if (error) {
|
||||
g_warning ("Could not read " ISO_3166_COUNTRY_CODES ": %s", error->message);
|
||||
g_error_free (error);
|
||||
} else
|
||||
g_warning ("Could not read " ISO_3166_COUNTRY_CODES ": Unknown error");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
|
||||
buffer = g_string_sized_new (32);
|
||||
|
||||
status = G_IO_STATUS_NORMAL;
|
||||
while (status == G_IO_STATUS_NORMAL) {
|
||||
status = g_io_channel_read_line_string (channel, buffer, NULL, &error);
|
||||
|
||||
switch (status) {
|
||||
case G_IO_STATUS_NORMAL:
|
||||
if (buffer->str[0] != '#') {
|
||||
char **pieces;
|
||||
|
||||
pieces = g_strsplit (buffer->str, "\t", 2);
|
||||
|
||||
/* Hack for rh#556292; iso3166.tab is just wrong */
|
||||
pieces[1] = pieces[1] ? g_strchomp (pieces[1]) : NULL;
|
||||
if (pieces[1] && !strcmp (pieces[1], "Britain (UK)")) {
|
||||
g_free (pieces[1]);
|
||||
pieces[1] = g_strdup (_("United Kingdom"));
|
||||
}
|
||||
|
||||
g_hash_table_insert (table, pieces[0], pieces[1]);
|
||||
g_free (pieces);
|
||||
}
|
||||
|
||||
g_string_truncate (buffer, 0);
|
||||
break;
|
||||
case G_IO_STATUS_EOF:
|
||||
break;
|
||||
case G_IO_STATUS_ERROR:
|
||||
g_warning ("Error while reading: %s", error->message);
|
||||
g_error_free (error);
|
||||
break;
|
||||
case G_IO_STATUS_AGAIN:
|
||||
/* FIXME: Try again a few times, but really, it never happes, right? */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_string_free (buffer, TRUE);
|
||||
g_io_channel_unref (channel);
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
/* XML Parser */
|
||||
|
||||
typedef enum {
|
||||
PARSER_TOPLEVEL = 0,
|
||||
PARSER_COUNTRY,
|
||||
PARSER_PROVIDER,
|
||||
PARSER_METHOD_GSM,
|
||||
PARSER_METHOD_GSM_APN,
|
||||
PARSER_METHOD_CDMA,
|
||||
PARSER_ERROR
|
||||
} MobileContextState;
|
||||
|
||||
typedef struct {
|
||||
GHashTable *country_codes;
|
||||
GHashTable *table;
|
||||
|
||||
char *current_country;
|
||||
GSList *current_providers;
|
||||
ShellMobileProvider *current_provider;
|
||||
ShellMobileAccessMethod *current_method;
|
||||
|
||||
char *text_buffer;
|
||||
MobileContextState state;
|
||||
} MobileParser;
|
||||
|
||||
static ShellGsmMccMnc *
|
||||
mcc_mnc_new (const char *mcc, const char *mnc)
|
||||
{
|
||||
ShellGsmMccMnc *m;
|
||||
|
||||
m = g_slice_new (ShellGsmMccMnc);
|
||||
m->mcc = g_strstrip (g_strdup (mcc));
|
||||
m->mnc = g_strstrip (g_strdup (mnc));
|
||||
return m;
|
||||
}
|
||||
|
||||
/* added in porting */
|
||||
static ShellGsmMccMnc *
|
||||
mcc_mnc_copy (const ShellGsmMccMnc *other) {
|
||||
ShellGsmMccMnc *ret;
|
||||
|
||||
ret = g_slice_new (ShellGsmMccMnc);
|
||||
ret->mcc = g_strdup (other->mcc);
|
||||
ret->mnc = g_strdup (other->mnc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
mcc_mnc_free (ShellGsmMccMnc *m)
|
||||
{
|
||||
g_return_if_fail (m != NULL);
|
||||
g_free (m->mcc);
|
||||
g_free (m->mnc);
|
||||
g_slice_free (ShellGsmMccMnc, m);
|
||||
}
|
||||
|
||||
/* added in porting */
|
||||
G_DEFINE_BOXED_TYPE (ShellGsmMccMnc, shell_gsm_mcc_mnc, mcc_mnc_copy, mcc_mnc_free)
|
||||
|
||||
static ShellMobileAccessMethod *
|
||||
access_method_new (void)
|
||||
{
|
||||
ShellMobileAccessMethod *method;
|
||||
|
||||
method = g_slice_new0 (ShellMobileAccessMethod);
|
||||
method->refs = 1;
|
||||
method->lcl_names = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
(GDestroyNotify) g_free,
|
||||
(GDestroyNotify) g_free);
|
||||
|
||||
return method;
|
||||
}
|
||||
|
||||
ShellMobileAccessMethod *
|
||||
shell_mobile_access_method_ref (ShellMobileAccessMethod *method)
|
||||
{
|
||||
g_return_val_if_fail (method != NULL, NULL);
|
||||
g_return_val_if_fail (method->refs > 0, NULL);
|
||||
|
||||
method->refs++;
|
||||
|
||||
return method;
|
||||
}
|
||||
|
||||
void
|
||||
shell_mobile_access_method_unref (ShellMobileAccessMethod *method)
|
||||
{
|
||||
g_return_if_fail (method != NULL);
|
||||
g_return_if_fail (method->refs > 0);
|
||||
|
||||
if (--method->refs == 0) {
|
||||
g_free (method->name);
|
||||
g_hash_table_destroy (method->lcl_names);
|
||||
g_free (method->username);
|
||||
g_free (method->password);
|
||||
g_free (method->gateway);
|
||||
g_free (method->gsm_apn);
|
||||
g_slist_foreach (method->dns, (GFunc) g_free, NULL);
|
||||
g_slist_free (method->dns);
|
||||
|
||||
g_slice_free (ShellMobileAccessMethod, method);
|
||||
}
|
||||
}
|
||||
|
||||
GType
|
||||
shell_mobile_access_method_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (G_UNLIKELY (type == 0)) {
|
||||
type = g_boxed_type_register_static ("ShellMobileAccessMethod",
|
||||
(GBoxedCopyFunc) shell_mobile_access_method_ref,
|
||||
(GBoxedFreeFunc) shell_mobile_access_method_unref);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
static ShellMobileProvider *
|
||||
provider_new (void)
|
||||
{
|
||||
ShellMobileProvider *provider;
|
||||
|
||||
provider = g_slice_new0 (ShellMobileProvider);
|
||||
provider->refs = 1;
|
||||
provider->lcl_names = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
(GDestroyNotify) g_free,
|
||||
(GDestroyNotify) g_free);
|
||||
|
||||
return provider;
|
||||
}
|
||||
|
||||
ShellMobileProvider *
|
||||
shell_mobile_provider_ref (ShellMobileProvider *provider)
|
||||
{
|
||||
provider->refs++;
|
||||
|
||||
return provider;
|
||||
}
|
||||
|
||||
void
|
||||
shell_mobile_provider_unref (ShellMobileProvider *provider)
|
||||
{
|
||||
if (--provider->refs == 0) {
|
||||
g_free (provider->name);
|
||||
g_hash_table_destroy (provider->lcl_names);
|
||||
|
||||
g_slist_foreach (provider->methods, (GFunc) shell_mobile_access_method_unref, NULL);
|
||||
g_slist_free (provider->methods);
|
||||
|
||||
g_slist_foreach (provider->gsm_mcc_mnc, (GFunc) mcc_mnc_free, NULL);
|
||||
g_slist_free (provider->gsm_mcc_mnc);
|
||||
|
||||
g_slist_free (provider->cdma_sid);
|
||||
|
||||
g_slice_free (ShellMobileProvider, provider);
|
||||
}
|
||||
}
|
||||
|
||||
GType
|
||||
shell_mobile_provider_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (G_UNLIKELY (type == 0)) {
|
||||
type = g_boxed_type_register_static ("ShellMobileProvider",
|
||||
(GBoxedCopyFunc) shell_mobile_provider_ref,
|
||||
(GBoxedFreeFunc) shell_mobile_provider_unref);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
static void
|
||||
provider_list_free (gpointer data)
|
||||
{
|
||||
GSList *list = (GSList *) data;
|
||||
|
||||
while (list) {
|
||||
shell_mobile_provider_unref ((ShellMobileProvider *) list->data);
|
||||
list = g_slist_delete_link (list, list);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_toplevel_start (MobileParser *parser,
|
||||
const char *name,
|
||||
const char **attribute_names,
|
||||
const char **attribute_values)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!strcmp (name, "serviceproviders")) {
|
||||
for (i = 0; attribute_names && attribute_names[i]; i++) {
|
||||
if (!strcmp (attribute_names[i], "format")) {
|
||||
if (strcmp (attribute_values[i], "2.0")) {
|
||||
g_warning ("%s: mobile broadband provider database format '%s'"
|
||||
" not supported.", __func__, attribute_values[i]);
|
||||
parser->state = PARSER_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (!strcmp (name, "country")) {
|
||||
for (i = 0; attribute_names && attribute_names[i]; i++) {
|
||||
if (!strcmp (attribute_names[i], "code")) {
|
||||
char *country_code;
|
||||
char *country;
|
||||
|
||||
country_code = g_ascii_strup (attribute_values[i], -1);
|
||||
country = g_hash_table_lookup (parser->country_codes, country_code);
|
||||
if (country) {
|
||||
parser->current_country = g_strdup (country);
|
||||
g_free (country_code);
|
||||
} else
|
||||
parser->current_country = country_code;
|
||||
|
||||
parser->state = PARSER_COUNTRY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_country_start (MobileParser *parser,
|
||||
const char *name,
|
||||
const char **attribute_names,
|
||||
const char **attribute_values)
|
||||
{
|
||||
if (!strcmp (name, "provider")) {
|
||||
parser->state = PARSER_PROVIDER;
|
||||
parser->current_provider = provider_new ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_provider_start (MobileParser *parser,
|
||||
const char *name,
|
||||
const char **attribute_names,
|
||||
const char **attribute_values)
|
||||
{
|
||||
if (!strcmp (name, "gsm"))
|
||||
parser->state = PARSER_METHOD_GSM;
|
||||
else if (!strcmp (name, "cdma")) {
|
||||
parser->state = PARSER_METHOD_CDMA;
|
||||
parser->current_method = access_method_new ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_gsm_start (MobileParser *parser,
|
||||
const char *name,
|
||||
const char **attribute_names,
|
||||
const char **attribute_values)
|
||||
{
|
||||
if (!strcmp (name, "network-id")) {
|
||||
const char *mcc = NULL, *mnc = NULL;
|
||||
int i;
|
||||
|
||||
for (i = 0; attribute_names && attribute_names[i]; i++) {
|
||||
if (!strcmp (attribute_names[i], "mcc"))
|
||||
mcc = attribute_values[i];
|
||||
else if (!strcmp (attribute_names[i], "mnc"))
|
||||
mnc = attribute_values[i];
|
||||
|
||||
if (mcc && strlen (mcc) && mnc && strlen (mnc)) {
|
||||
parser->current_provider->gsm_mcc_mnc = g_slist_prepend (parser->current_provider->gsm_mcc_mnc,
|
||||
mcc_mnc_new (mcc, mnc));
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (!strcmp (name, "apn")) {
|
||||
int i;
|
||||
|
||||
for (i = 0; attribute_names && attribute_names[i]; i++) {
|
||||
if (!strcmp (attribute_names[i], "value")) {
|
||||
|
||||
parser->state = PARSER_METHOD_GSM_APN;
|
||||
parser->current_method = access_method_new ();
|
||||
parser->current_method->gsm_apn = g_strstrip (g_strdup (attribute_values[i]));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_cdma_start (MobileParser *parser,
|
||||
const char *name,
|
||||
const char **attribute_names,
|
||||
const char **attribute_values)
|
||||
{
|
||||
if (!strcmp (name, "sid")) {
|
||||
int i;
|
||||
|
||||
for (i = 0; attribute_names && attribute_names[i]; i++) {
|
||||
if (!strcmp (attribute_names[i], "value")) {
|
||||
unsigned long tmp;
|
||||
|
||||
errno = 0;
|
||||
tmp = strtoul (attribute_values[i], NULL, 10);
|
||||
if (errno == 0 && tmp > 0)
|
||||
parser->current_provider->cdma_sid = g_slist_prepend (parser->current_provider->cdma_sid,
|
||||
GUINT_TO_POINTER ((guint32) tmp));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
mobile_parser_start_element (GMarkupParseContext *context,
|
||||
const gchar *element_name,
|
||||
const gchar **attribute_names,
|
||||
const gchar **attribute_values,
|
||||
gpointer data,
|
||||
GError **error)
|
||||
{
|
||||
MobileParser *parser = (MobileParser *) data;
|
||||
|
||||
if (parser->text_buffer) {
|
||||
g_free (parser->text_buffer);
|
||||
parser->text_buffer = NULL;
|
||||
}
|
||||
|
||||
switch (parser->state) {
|
||||
case PARSER_TOPLEVEL:
|
||||
parser_toplevel_start (parser, element_name, attribute_names, attribute_values);
|
||||
break;
|
||||
case PARSER_COUNTRY:
|
||||
parser_country_start (parser, element_name, attribute_names, attribute_values);
|
||||
break;
|
||||
case PARSER_PROVIDER:
|
||||
parser_provider_start (parser, element_name, attribute_names, attribute_values);
|
||||
break;
|
||||
case PARSER_METHOD_GSM:
|
||||
parser_gsm_start (parser, element_name, attribute_names, attribute_values);
|
||||
break;
|
||||
case PARSER_METHOD_CDMA:
|
||||
parser_cdma_start (parser, element_name, attribute_names, attribute_values);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_country_end (MobileParser *parser,
|
||||
const char *name)
|
||||
{
|
||||
if (!strcmp (name, "country")) {
|
||||
g_hash_table_insert (parser->table, parser->current_country, parser->current_providers);
|
||||
parser->current_country = NULL;
|
||||
parser->current_providers = NULL;
|
||||
parser->text_buffer = NULL;
|
||||
parser->state = PARSER_TOPLEVEL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_provider_end (MobileParser *parser,
|
||||
const char *name)
|
||||
{
|
||||
if (!strcmp (name, "name")) {
|
||||
if (!parser->current_provider->name) {
|
||||
/* Use the first one. */
|
||||
parser->current_provider->name = parser->text_buffer;
|
||||
parser->text_buffer = NULL;
|
||||
}
|
||||
} else if (!strcmp (name, "provider")) {
|
||||
parser->current_provider->methods = g_slist_reverse (parser->current_provider->methods);
|
||||
|
||||
parser->current_provider->gsm_mcc_mnc = g_slist_reverse (parser->current_provider->gsm_mcc_mnc);
|
||||
parser->current_provider->cdma_sid = g_slist_reverse (parser->current_provider->cdma_sid);
|
||||
|
||||
parser->current_providers = g_slist_prepend (parser->current_providers, parser->current_provider);
|
||||
parser->current_provider = NULL;
|
||||
parser->text_buffer = NULL;
|
||||
parser->state = PARSER_COUNTRY;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_gsm_end (MobileParser *parser,
|
||||
const char *name)
|
||||
{
|
||||
if (!strcmp (name, "gsm")) {
|
||||
parser->text_buffer = NULL;
|
||||
parser->state = PARSER_PROVIDER;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_gsm_apn_end (MobileParser *parser,
|
||||
const char *name)
|
||||
{
|
||||
if (!strcmp (name, "name")) {
|
||||
if (!parser->current_method->name) {
|
||||
/* Use the first one. */
|
||||
parser->current_method->name = parser->text_buffer;
|
||||
parser->text_buffer = NULL;
|
||||
}
|
||||
} else if (!strcmp (name, "username")) {
|
||||
parser->current_method->username = parser->text_buffer;
|
||||
parser->text_buffer = NULL;
|
||||
} else if (!strcmp (name, "password")) {
|
||||
parser->current_method->password = parser->text_buffer;
|
||||
parser->text_buffer = NULL;
|
||||
} else if (!strcmp (name, "dns")) {
|
||||
parser->current_method->dns = g_slist_prepend (parser->current_method->dns, parser->text_buffer);
|
||||
parser->text_buffer = NULL;
|
||||
} else if (!strcmp (name, "gateway")) {
|
||||
parser->current_method->gateway = parser->text_buffer;
|
||||
parser->text_buffer = NULL;
|
||||
} else if (!strcmp (name, "apn")) {
|
||||
parser->current_method->type = SHELL_MOBILE_ACCESS_METHOD_TYPE_GSM;
|
||||
parser->current_method->dns = g_slist_reverse (parser->current_method->dns);
|
||||
|
||||
if (!parser->current_method->name)
|
||||
parser->current_method->name = g_strdup (_("Default"));
|
||||
|
||||
parser->current_provider->methods = g_slist_prepend (parser->current_provider->methods,
|
||||
parser->current_method);
|
||||
parser->current_method = NULL;
|
||||
parser->text_buffer = NULL;
|
||||
parser->state = PARSER_METHOD_GSM;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parser_cdma_end (MobileParser *parser,
|
||||
const char *name)
|
||||
{
|
||||
if (!strcmp (name, "username")) {
|
||||
parser->current_method->username = parser->text_buffer;
|
||||
parser->text_buffer = NULL;
|
||||
} else if (!strcmp (name, "password")) {
|
||||
parser->current_method->password = parser->text_buffer;
|
||||
parser->text_buffer = NULL;
|
||||
} else if (!strcmp (name, "dns")) {
|
||||
parser->current_method->dns = g_slist_prepend (parser->current_method->dns, parser->text_buffer);
|
||||
parser->text_buffer = NULL;
|
||||
} else if (!strcmp (name, "gateway")) {
|
||||
parser->current_method->gateway = parser->text_buffer;
|
||||
parser->text_buffer = NULL;
|
||||
} else if (!strcmp (name, "cdma")) {
|
||||
parser->current_method->type = SHELL_MOBILE_ACCESS_METHOD_TYPE_CDMA;
|
||||
parser->current_method->dns = g_slist_reverse (parser->current_method->dns);
|
||||
|
||||
if (!parser->current_method->name)
|
||||
parser->current_method->name = g_strdup (parser->current_provider->name);
|
||||
|
||||
parser->current_provider->methods = g_slist_prepend (parser->current_provider->methods,
|
||||
parser->current_method);
|
||||
parser->current_method = NULL;
|
||||
parser->text_buffer = NULL;
|
||||
parser->state = PARSER_PROVIDER;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
mobile_parser_end_element (GMarkupParseContext *context,
|
||||
const gchar *element_name,
|
||||
gpointer data,
|
||||
GError **error)
|
||||
{
|
||||
MobileParser *parser = (MobileParser *) data;
|
||||
|
||||
switch (parser->state) {
|
||||
case PARSER_COUNTRY:
|
||||
parser_country_end (parser, element_name);
|
||||
break;
|
||||
case PARSER_PROVIDER:
|
||||
parser_provider_end (parser, element_name);
|
||||
break;
|
||||
case PARSER_METHOD_GSM:
|
||||
parser_gsm_end (parser, element_name);
|
||||
break;
|
||||
case PARSER_METHOD_GSM_APN:
|
||||
parser_gsm_apn_end (parser, element_name);
|
||||
break;
|
||||
case PARSER_METHOD_CDMA:
|
||||
parser_cdma_end (parser, element_name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
mobile_parser_characters (GMarkupParseContext *context,
|
||||
const gchar *text,
|
||||
gsize text_len,
|
||||
gpointer data,
|
||||
GError **error)
|
||||
{
|
||||
MobileParser *parser = (MobileParser *) data;
|
||||
|
||||
g_free (parser->text_buffer);
|
||||
parser->text_buffer = g_strdup (text);
|
||||
}
|
||||
|
||||
static const GMarkupParser mobile_parser = {
|
||||
mobile_parser_start_element,
|
||||
mobile_parser_end_element,
|
||||
mobile_parser_characters,
|
||||
NULL, /* passthrough */
|
||||
NULL /* error */
|
||||
};
|
||||
|
||||
/**
|
||||
* shell_mobile_providers_parse:
|
||||
* @out_ccs: (out) (allow-none): (element-type utf8 utf8): a #GHashTable containing
|
||||
* country codes
|
||||
*
|
||||
* Returns: (element-type utf8 GList<Shell.MobileProvider>) (transfer container): a
|
||||
* hash table where keys are country names 'char *', values are a 'GSList *'
|
||||
* of 'ShellMobileProvider *'. Everything is destroyed with g_hash_table_destroy ().
|
||||
*/
|
||||
GHashTable *
|
||||
shell_mobile_providers_parse (GHashTable **out_ccs)
|
||||
{
|
||||
GMarkupParseContext *ctx;
|
||||
GIOChannel *channel;
|
||||
MobileParser parser;
|
||||
GError *error = NULL;
|
||||
char buffer[4096];
|
||||
GIOStatus status;
|
||||
gsize len = 0;
|
||||
|
||||
memset (&parser, 0, sizeof (MobileParser));
|
||||
|
||||
parser.country_codes = read_country_codes ();
|
||||
if (!parser.country_codes)
|
||||
goto out;
|
||||
|
||||
channel = g_io_channel_new_file (MOBILE_BROADBAND_PROVIDER_INFO, "r", &error);
|
||||
if (!channel) {
|
||||
if (error) {
|
||||
g_warning ("Could not read " MOBILE_BROADBAND_PROVIDER_INFO ": %s", error->message);
|
||||
g_error_free (error);
|
||||
} else
|
||||
g_warning ("Could not read " MOBILE_BROADBAND_PROVIDER_INFO ": Unknown error");
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
parser.table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, provider_list_free);
|
||||
parser.state = PARSER_TOPLEVEL;
|
||||
|
||||
ctx = g_markup_parse_context_new (&mobile_parser, 0, &parser, NULL);
|
||||
|
||||
status = G_IO_STATUS_NORMAL;
|
||||
while (status == G_IO_STATUS_NORMAL) {
|
||||
status = g_io_channel_read_chars (channel, buffer, sizeof (buffer), &len, &error);
|
||||
|
||||
switch (status) {
|
||||
case G_IO_STATUS_NORMAL:
|
||||
if (!g_markup_parse_context_parse (ctx, buffer, len, &error)) {
|
||||
status = G_IO_STATUS_ERROR;
|
||||
g_warning ("Error while parsing XML: %s", error->message);
|
||||
g_error_free (error);;
|
||||
}
|
||||
break;
|
||||
case G_IO_STATUS_EOF:
|
||||
break;
|
||||
case G_IO_STATUS_ERROR:
|
||||
g_warning ("Error while reading: %s", error->message);
|
||||
g_error_free (error);
|
||||
break;
|
||||
case G_IO_STATUS_AGAIN:
|
||||
/* FIXME: Try again a few times, but really, it never happes, right? */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_io_channel_unref (channel);
|
||||
g_markup_parse_context_free (ctx);
|
||||
|
||||
if (parser.current_provider) {
|
||||
g_warning ("pending current provider");
|
||||
shell_mobile_provider_unref (parser.current_provider);
|
||||
}
|
||||
|
||||
if (parser.current_providers) {
|
||||
g_warning ("pending current providers");
|
||||
provider_list_free (parser.current_providers);
|
||||
}
|
||||
|
||||
g_free (parser.current_country);
|
||||
g_free (parser.text_buffer);
|
||||
|
||||
out:
|
||||
if (parser.country_codes) {
|
||||
if (out_ccs)
|
||||
*out_ccs = parser.country_codes;
|
||||
else
|
||||
g_hash_table_destroy (parser.country_codes);
|
||||
}
|
||||
|
||||
return parser.table;
|
||||
}
|
||||
|
||||
static void
|
||||
dump_generic (ShellMobileAccessMethod *method)
|
||||
{
|
||||
GSList *iter;
|
||||
GString *dns;
|
||||
|
||||
g_print (" username: %s\n", method->username ? method->username : "");
|
||||
g_print (" password: %s\n", method->password ? method->password : "");
|
||||
|
||||
dns = g_string_new (NULL);
|
||||
for (iter = method->dns; iter; iter = g_slist_next (iter))
|
||||
g_string_append_printf (dns, "%s%s", dns->len ? ", " : "", (char *) iter->data);
|
||||
g_print (" dns : %s\n", dns->str);
|
||||
g_string_free (dns, TRUE);
|
||||
|
||||
g_print (" gateway : %s\n", method->gateway ? method->gateway : "");
|
||||
}
|
||||
|
||||
static void
|
||||
dump_cdma (ShellMobileAccessMethod *method)
|
||||
{
|
||||
g_print (" CDMA: %s\n", method->name);
|
||||
|
||||
dump_generic (method);
|
||||
}
|
||||
|
||||
static void
|
||||
dump_gsm (ShellMobileAccessMethod *method)
|
||||
{
|
||||
g_print (" APN: %s (%s)\n", method->name, method->gsm_apn);
|
||||
|
||||
dump_generic (method);
|
||||
}
|
||||
|
||||
static void
|
||||
dump_country (gpointer key, gpointer value, gpointer user_data)
|
||||
{
|
||||
GSList *citer, *miter;
|
||||
|
||||
for (citer = value; citer; citer = g_slist_next (citer)) {
|
||||
ShellMobileProvider *provider = citer->data;
|
||||
|
||||
g_print ("Provider: %s (%s)\n", provider->name, (const char *) key);
|
||||
for (miter = provider->methods; miter; miter = g_slist_next (miter)) {
|
||||
ShellMobileAccessMethod *method = miter->data;
|
||||
GSList *liter;
|
||||
|
||||
|
||||
for (liter = provider->gsm_mcc_mnc; liter; liter = g_slist_next (liter)) {
|
||||
ShellGsmMccMnc *m = liter->data;
|
||||
g_print (" MCC/MNC: %s-%s\n", m->mcc, m->mnc);
|
||||
}
|
||||
|
||||
for (liter = provider->cdma_sid; liter; liter = g_slist_next (liter))
|
||||
g_print (" SID: %d\n", GPOINTER_TO_UINT (liter->data));
|
||||
|
||||
switch (method->type) {
|
||||
case SHELL_MOBILE_ACCESS_METHOD_TYPE_CDMA:
|
||||
dump_cdma (method);
|
||||
break;
|
||||
case SHELL_MOBILE_ACCESS_METHOD_TYPE_GSM:
|
||||
dump_gsm (method);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
g_print ("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
shell_mobile_providers_dump (GHashTable *providers)
|
||||
{
|
||||
g_return_if_fail (providers != NULL);
|
||||
g_hash_table_foreach (providers, dump_country, NULL);
|
||||
}
|
||||
|
||||
/* All the following don't exist in nm-applet, because C doesn't need
|
||||
those. They're only needed for the introspection annotations
|
||||
*/
|
||||
|
||||
/**
|
||||
* shell_mobile_provider_get_gsm_mcc_mnc:
|
||||
* @provider: a #ShellMobileProvider
|
||||
*
|
||||
* Returns: (element-type Shell.GsmMccMnc) (transfer none): the
|
||||
* list of #ShellGsmMccMnc this provider exposes
|
||||
*/
|
||||
GSList *
|
||||
shell_mobile_provider_get_gsm_mcc_mnc (ShellMobileProvider *provider)
|
||||
{
|
||||
return provider->gsm_mcc_mnc;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_mobile_provider_get_cdma_sid:
|
||||
* @provider: a #ShellMobileProvider
|
||||
*
|
||||
* Returns: (element-type guint32) (transfer none): the
|
||||
* list of CDMA sids this provider exposes
|
||||
*/
|
||||
GSList *
|
||||
shell_mobile_provider_get_cdma_sid (ShellMobileProvider *provider)
|
||||
{
|
||||
return provider->cdma_sid;
|
||||
}
|
96
src/shell-mobile-providers.h
Normal file
96
src/shell-mobile-providers.h
Normal file
@ -0,0 +1,96 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Copyright (C) 2009 Novell, Inc.
|
||||
* Author: Tambet Ingo (tambet@gmail.com).
|
||||
*
|
||||
* Copyright (C) 2009 - 2010 Red Hat, Inc.
|
||||
*
|
||||
* Ported to GNOME Shell by Giovanni Campagna <scampa.giovanni@gmail.com>
|
||||
* Porting consisted only in replacing nmn with shell, to be compatible with
|
||||
* GObject Introspection namespacing
|
||||
*/
|
||||
|
||||
#ifndef SHELL_MOBILE_PROVIDERS_H
|
||||
#define SHELL_MOBILE_PROVIDERS_H
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
|
||||
#define SHELL_TYPE_MOBILE_PROVIDER (shell_mobile_provider_get_type ())
|
||||
#define SHELL_TYPE_MOBILE_ACCESS_METHOD (shell_mobile_access_method_get_type ())
|
||||
|
||||
typedef enum {
|
||||
SHELL_MOBILE_ACCESS_METHOD_TYPE_UNKNOWN = 0,
|
||||
SHELL_MOBILE_ACCESS_METHOD_TYPE_GSM,
|
||||
SHELL_MOBILE_ACCESS_METHOD_TYPE_CDMA
|
||||
} ShellMobileAccessMethodType;
|
||||
|
||||
typedef struct {
|
||||
char *mcc;
|
||||
char *mnc;
|
||||
} ShellGsmMccMnc;
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
/* maps lang (char *) -> name (char *) */
|
||||
GHashTable *lcl_names;
|
||||
|
||||
char *username;
|
||||
char *password;
|
||||
char *gateway;
|
||||
GSList *dns; /* GSList of 'char *' */
|
||||
|
||||
/* Only used with SHELL_PROVIDER_TYPE_GSM */
|
||||
char *gsm_apn;
|
||||
|
||||
ShellMobileAccessMethodType type;
|
||||
|
||||
gint refs;
|
||||
} ShellMobileAccessMethod;
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
/* maps lang (char *) -> name (char *) */
|
||||
GHashTable *lcl_names;
|
||||
|
||||
GSList *methods; /* GSList of ShellMobileAccessMethod */
|
||||
|
||||
GSList *gsm_mcc_mnc; /* GSList of ShellGsmMccMnc */
|
||||
GSList *cdma_sid; /* GSList of guint32 */
|
||||
|
||||
gint refs;
|
||||
} ShellMobileProvider;
|
||||
|
||||
|
||||
GType shell_gsm_mcc_mnc_get_type (void); /* added in porting */
|
||||
GType shell_mobile_provider_get_type (void);
|
||||
GType shell_mobile_access_method_get_type (void);
|
||||
|
||||
ShellMobileProvider *shell_mobile_provider_ref (ShellMobileProvider *provider);
|
||||
void shell_mobile_provider_unref (ShellMobileProvider *provider);
|
||||
GSList * shell_mobile_provider_get_gsm_mcc_mnc (ShellMobileProvider *provider);
|
||||
GSList * shell_mobile_provider_get_cdma_sid (ShellMobileProvider *provider);
|
||||
|
||||
ShellMobileAccessMethod *shell_mobile_access_method_ref (ShellMobileAccessMethod *method);
|
||||
void shell_mobile_access_method_unref (ShellMobileAccessMethod *method);
|
||||
|
||||
GHashTable *shell_mobile_providers_parse (GHashTable **out_ccs);
|
||||
|
||||
void shell_mobile_providers_dump (GHashTable *providers);
|
||||
|
||||
#endif /* SHELL_MOBILE_PROVIDERS_H */
|
@ -165,3 +165,76 @@ shell_tray_icon_new (ShellEmbeddedWindow *window)
|
||||
"window", window,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_tray_icon_click:
|
||||
* @icon: a #ShellTrayIcon
|
||||
* @event: the #ClutterEvent triggering the fake click
|
||||
*
|
||||
* Fakes a press and release on @icon. @event must be a
|
||||
* %CLUTTER_BUTTON_RELEASE event. Its relevant details will be passed
|
||||
* on to the icon, but its coordinates will be ignored; the click is
|
||||
* always made on the center of @icon.
|
||||
*/
|
||||
void
|
||||
shell_tray_icon_click (ShellTrayIcon *icon,
|
||||
ClutterEvent *event)
|
||||
{
|
||||
XButtonEvent xbevent;
|
||||
XCrossingEvent xcevent;
|
||||
GdkWindow *remote_window;
|
||||
GdkScreen *screen;
|
||||
int x_root, y_root;
|
||||
Display *xdisplay;
|
||||
Window xwindow, xrootwindow;
|
||||
|
||||
g_return_if_fail (clutter_event_type (event) == CLUTTER_BUTTON_RELEASE);
|
||||
|
||||
gdk_error_trap_push ();
|
||||
|
||||
remote_window = gtk_socket_get_plug_window (GTK_SOCKET (icon->priv->socket));
|
||||
xwindow = GDK_WINDOW_XID (remote_window);
|
||||
xdisplay = GDK_WINDOW_XDISPLAY (remote_window);
|
||||
screen = gdk_window_get_screen (remote_window);
|
||||
xrootwindow = GDK_WINDOW_XID (gdk_screen_get_root_window (screen));
|
||||
gdk_window_get_origin (remote_window, &x_root, &y_root);
|
||||
|
||||
/* First make the icon believe the pointer is inside it */
|
||||
xcevent.type = EnterNotify;
|
||||
xcevent.window = xwindow;
|
||||
xcevent.root = xrootwindow;
|
||||
xcevent.subwindow = None;
|
||||
xcevent.time = clutter_event_get_time (event);
|
||||
xcevent.x = gdk_window_get_width (remote_window) / 2;
|
||||
xcevent.y = gdk_window_get_height (remote_window) / 2;
|
||||
xcevent.x_root = x_root + xcevent.x;
|
||||
xcevent.y_root = y_root + xcevent.y;
|
||||
xcevent.mode = NotifyNormal;
|
||||
xcevent.detail = NotifyNonlinear;
|
||||
xcevent.same_screen = True;
|
||||
XSendEvent (xdisplay, xwindow, False, 0, (XEvent *)&xcevent);
|
||||
|
||||
/* Now do the click */
|
||||
xbevent.type = ButtonPress;
|
||||
xbevent.window = xwindow;
|
||||
xbevent.root = xrootwindow;
|
||||
xbevent.subwindow = None;
|
||||
xbevent.time = xcevent.time;
|
||||
xbevent.x = xcevent.x;
|
||||
xbevent.y = xcevent.y;
|
||||
xbevent.x_root = xcevent.x_root;
|
||||
xbevent.y_root = xcevent.y_root;
|
||||
xbevent.state = clutter_event_get_state (event);
|
||||
xbevent.button = clutter_event_get_button (event);
|
||||
xbevent.same_screen = True;
|
||||
XSendEvent (xdisplay, xwindow, False, 0, (XEvent *)&xbevent);
|
||||
|
||||
xbevent.type = ButtonRelease;
|
||||
XSendEvent (xdisplay, xwindow, False, 0, (XEvent *)&xbevent);
|
||||
|
||||
/* And move the pointer back out */
|
||||
xcevent.type = LeaveNotify;
|
||||
XSendEvent (xdisplay, xwindow, False, 0, (XEvent *)&xcevent);
|
||||
|
||||
gdk_error_trap_pop_ignored ();
|
||||
}
|
||||
|
@ -31,4 +31,7 @@ struct _ShellTrayIconClass
|
||||
GType shell_tray_icon_get_type (void) G_GNUC_CONST;
|
||||
ClutterActor *shell_tray_icon_new (ShellEmbeddedWindow *window);
|
||||
|
||||
void shell_tray_icon_click (ShellTrayIcon *icon,
|
||||
ClutterEvent *event);
|
||||
|
||||
#endif /* __SHELL_TRAY_ICON_H__ */
|
||||
|
@ -225,23 +225,6 @@ get_appid_from_window (MetaWindow *window)
|
||||
return appid_guess;
|
||||
}
|
||||
|
||||
/**
|
||||
* window_is_tracked:
|
||||
*
|
||||
* We don't attempt to associate override-redirect windows with applications
|
||||
* at all, since there's no reason to do so yet.
|
||||
*
|
||||
* Returns: %TRUE iff we want to scan this window for application association
|
||||
*/
|
||||
static gboolean
|
||||
window_is_tracked (MetaWindow *window)
|
||||
{
|
||||
if (meta_window_is_override_redirect (window))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_window_tracker_is_window_interesting:
|
||||
*
|
||||
@ -529,7 +512,7 @@ track_window (ShellWindowTracker *self,
|
||||
{
|
||||
ShellApp *app;
|
||||
|
||||
if (!window_is_tracked (window))
|
||||
if (!shell_window_tracker_is_window_interesting (window))
|
||||
return;
|
||||
|
||||
app = get_app_for_window (self, window);
|
||||
@ -539,10 +522,6 @@ track_window (ShellWindowTracker *self,
|
||||
/* At this point we've stored the association from window -> application */
|
||||
g_hash_table_insert (self->window_to_app, window, app);
|
||||
|
||||
/* However, only put interesting windows in the window list for an app. */
|
||||
if (!shell_window_tracker_is_window_interesting (window))
|
||||
return;
|
||||
|
||||
if (shell_app_is_transient (app))
|
||||
{
|
||||
/* For a transient application, it's possible one of our title regexps
|
||||
|
@ -232,7 +232,10 @@ st_button_key_release (ClutterActor *actor,
|
||||
if (event->keyval == CLUTTER_KEY_space ||
|
||||
event->keyval == CLUTTER_KEY_Return)
|
||||
{
|
||||
st_button_release (button, ST_BUTTON_ONE, 1);
|
||||
gboolean is_click;
|
||||
|
||||
is_click = (button->priv->pressed & ST_BUTTON_ONE);
|
||||
st_button_release (button, ST_BUTTON_ONE, is_click ? 1 : 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -445,33 +445,35 @@ filter_by_position (GList *children,
|
||||
clutter_actor_get_allocation_box (child, &cbox);
|
||||
|
||||
/* Filter out children if they are in the wrong direction from
|
||||
* @rbox, or if they don't overlap it.
|
||||
* @rbox, or if they don't overlap it. To account for floating-
|
||||
* point imprecision, an actor is "down" (etc.) from an another
|
||||
* actor even if it overlaps it by up to 0.1 pixels.
|
||||
*/
|
||||
switch (direction)
|
||||
{
|
||||
case GTK_DIR_UP:
|
||||
if (cbox.y2 > rbox->y1)
|
||||
if (cbox.y2 > rbox->y1 + 0.1)
|
||||
continue;
|
||||
if (cbox.x1 >= rbox->x2 || cbox.x2 <= rbox->x1)
|
||||
continue;
|
||||
break;
|
||||
|
||||
case GTK_DIR_DOWN:
|
||||
if (cbox.y1 < rbox->y2)
|
||||
if (cbox.y1 < rbox->y2 - 0.1)
|
||||
continue;
|
||||
if (cbox.x1 >= rbox->x2 || cbox.x2 <= rbox->x1)
|
||||
continue;
|
||||
break;
|
||||
|
||||
case GTK_DIR_LEFT:
|
||||
if (cbox.x2 > rbox->x1)
|
||||
if (cbox.x2 > rbox->x1 + 0.1)
|
||||
continue;
|
||||
if (cbox.y1 >= rbox->y2 || cbox.y2 <= rbox->y1)
|
||||
continue;
|
||||
break;
|
||||
|
||||
case GTK_DIR_RIGHT:
|
||||
if (cbox.x1 < rbox->x2)
|
||||
if (cbox.x1 < rbox->x2 - 0.1)
|
||||
continue;
|
||||
if (cbox.y1 >= rbox->y2 || cbox.y2 <= rbox->y1)
|
||||
continue;
|
||||
|
@ -243,10 +243,11 @@ st_label_paint (ClutterActor *actor)
|
||||
priv->text_shadow_material = material;
|
||||
}
|
||||
|
||||
_st_paint_shadow_with_opacity (shadow_spec,
|
||||
priv->text_shadow_material,
|
||||
&allocation,
|
||||
clutter_actor_get_paint_opacity (priv->label));
|
||||
if (priv->text_shadow_material != COGL_INVALID_HANDLE)
|
||||
_st_paint_shadow_with_opacity (shadow_spec,
|
||||
priv->text_shadow_material,
|
||||
&allocation,
|
||||
clutter_actor_get_paint_opacity (priv->label));
|
||||
}
|
||||
|
||||
clutter_actor_paint (priv->label);
|
||||
|
@ -435,11 +435,12 @@ blur_pixels (guchar *pixels_in,
|
||||
guchar *pixels_out;
|
||||
float sigma;
|
||||
|
||||
/* we use an approximation of the sigma - blur radius relationship used
|
||||
in Firefox for doing SVG blurs; see
|
||||
http://mxr.mozilla.org/mozilla-central/source/gfx/thebes/src/gfxBlur.cpp#280
|
||||
*/
|
||||
sigma = blur / 1.9;
|
||||
/* The CSS specification defines (or will define) the blur radius as twice
|
||||
* the Gaussian standard deviation. See:
|
||||
*
|
||||
* http://lists.w3.org/Archives/Public/www-style/2010Sep/0002.html
|
||||
*/
|
||||
sigma = blur / 2.;
|
||||
|
||||
if ((guint) blur == 0)
|
||||
{
|
||||
@ -604,32 +605,41 @@ _st_create_shadow_material_from_actor (StShadow *shadow_spec,
|
||||
{
|
||||
CoglHandle buffer, offscreen;
|
||||
ClutterActorBox box;
|
||||
CoglColor clear_color;
|
||||
float width, height;
|
||||
|
||||
clutter_actor_get_allocation_box (actor, &box);
|
||||
clutter_actor_box_get_size (&box, &width, &height);
|
||||
|
||||
if (width == 0 || height == 0)
|
||||
return COGL_INVALID_HANDLE;
|
||||
|
||||
buffer = cogl_texture_new_with_size (width,
|
||||
height,
|
||||
COGL_TEXTURE_NO_SLICING,
|
||||
COGL_PIXEL_FORMAT_ANY);
|
||||
|
||||
if (buffer == COGL_INVALID_HANDLE)
|
||||
return COGL_INVALID_HANDLE;
|
||||
|
||||
offscreen = cogl_offscreen_new_to_texture (buffer);
|
||||
|
||||
if (offscreen != COGL_INVALID_HANDLE)
|
||||
if (offscreen == COGL_INVALID_HANDLE)
|
||||
{
|
||||
CoglColor clear_color;
|
||||
|
||||
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
|
||||
cogl_push_framebuffer (offscreen);
|
||||
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
|
||||
cogl_ortho (0, width, height, 0, 0, 1.0);
|
||||
clutter_actor_paint (actor);
|
||||
cogl_pop_framebuffer ();
|
||||
cogl_handle_unref (offscreen);
|
||||
|
||||
shadow_material = _st_create_shadow_material (shadow_spec, buffer);
|
||||
cogl_handle_unref (buffer);
|
||||
return COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
|
||||
cogl_push_framebuffer (offscreen);
|
||||
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
|
||||
cogl_ortho (0, width, height, 0, 0, 1.0);
|
||||
clutter_actor_paint (actor);
|
||||
cogl_pop_framebuffer ();
|
||||
cogl_handle_unref (offscreen);
|
||||
|
||||
shadow_material = _st_create_shadow_material (shadow_spec, buffer);
|
||||
|
||||
cogl_handle_unref (buffer);
|
||||
}
|
||||
|
||||
|
@ -143,7 +143,7 @@ st_texture_cache_init (StTextureCache *self)
|
||||
g_free, cogl_handle_unref);
|
||||
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, NULL);
|
||||
self->priv->thumbnails = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_NORMAL);
|
||||
self->priv->thumbnails = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -777,6 +777,7 @@ typedef struct {
|
||||
char *key;
|
||||
char *uri;
|
||||
gboolean thumbnail;
|
||||
gboolean enforced_square;
|
||||
char *mimetype;
|
||||
GtkRecentInfo *recent_info;
|
||||
char *checksum;
|
||||
@ -788,15 +789,47 @@ typedef struct {
|
||||
} AsyncTextureLoadData;
|
||||
|
||||
static CoglHandle
|
||||
pixbuf_to_cogl_handle (GdkPixbuf *pixbuf)
|
||||
pixbuf_to_cogl_handle (GdkPixbuf *pixbuf,
|
||||
gboolean add_padding)
|
||||
{
|
||||
return cogl_texture_new_from_data (gdk_pixbuf_get_width (pixbuf),
|
||||
gdk_pixbuf_get_height (pixbuf),
|
||||
COGL_TEXTURE_NONE,
|
||||
gdk_pixbuf_get_has_alpha (pixbuf) ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
|
||||
COGL_PIXEL_FORMAT_ANY,
|
||||
gdk_pixbuf_get_rowstride (pixbuf),
|
||||
gdk_pixbuf_get_pixels (pixbuf));
|
||||
CoglHandle texture, offscreen;
|
||||
CoglColor clear_color;
|
||||
int width, height;
|
||||
guint size;
|
||||
|
||||
width = gdk_pixbuf_get_width (pixbuf);
|
||||
height = gdk_pixbuf_get_height (pixbuf);
|
||||
size = MAX (width, height);
|
||||
|
||||
if (!add_padding || width == height)
|
||||
return cogl_texture_new_from_data (width,
|
||||
height,
|
||||
COGL_TEXTURE_NONE,
|
||||
gdk_pixbuf_get_has_alpha (pixbuf) ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
|
||||
COGL_PIXEL_FORMAT_ANY,
|
||||
gdk_pixbuf_get_rowstride (pixbuf),
|
||||
gdk_pixbuf_get_pixels (pixbuf));
|
||||
|
||||
texture = cogl_texture_new_with_size (size, size,
|
||||
COGL_TEXTURE_NO_SLICING,
|
||||
COGL_PIXEL_FORMAT_ANY);
|
||||
|
||||
offscreen = cogl_offscreen_new_to_texture (texture);
|
||||
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
|
||||
cogl_push_framebuffer (offscreen);
|
||||
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
|
||||
cogl_pop_framebuffer ();
|
||||
cogl_handle_unref (offscreen);
|
||||
|
||||
cogl_texture_set_region (texture,
|
||||
0, 0,
|
||||
(size - width) / 2, (size - height) / 2,
|
||||
width, height,
|
||||
width, height,
|
||||
gdk_pixbuf_get_has_alpha (pixbuf) ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
|
||||
gdk_pixbuf_get_rowstride (pixbuf),
|
||||
gdk_pixbuf_get_pixels (pixbuf));
|
||||
return texture;
|
||||
}
|
||||
|
||||
static cairo_surface_t *
|
||||
@ -882,7 +915,7 @@ on_pixbuf_loaded (GObject *source,
|
||||
if (pixbuf == NULL)
|
||||
goto out;
|
||||
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf);
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf, data->enforced_square);
|
||||
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
@ -956,7 +989,7 @@ st_texture_cache_reset_texture (StTextureCachePropertyBind *bind,
|
||||
|
||||
if (pixbuf != NULL)
|
||||
{
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf);
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf, FALSE);
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
clutter_texture_set_cogl_texture (bind->texture, texdata);
|
||||
@ -1183,6 +1216,7 @@ load_gicon_with_colors (StTextureCache *cache,
|
||||
request->icon = g_object_ref (icon);
|
||||
request->icon_info = info;
|
||||
request->width = request->height = size;
|
||||
request->enforced_square = TRUE;
|
||||
|
||||
load_icon_pixbuf_async (cache, icon, info, size, colors, NULL, on_pixbuf_loaded, request);
|
||||
}
|
||||
@ -1195,6 +1229,8 @@ load_gicon_with_colors (StTextureCache *cache,
|
||||
g_slist_free (request->textures);
|
||||
g_free (request);
|
||||
g_hash_table_remove (cache->priv->outstanding_requests, key);
|
||||
g_object_unref (texture);
|
||||
texture = NULL;
|
||||
}
|
||||
|
||||
g_free (key);
|
||||
@ -1216,7 +1252,7 @@ load_gicon_with_colors (StTextureCache *cache,
|
||||
* This will load @icon as a full-color icon; if you want a symbolic
|
||||
* icon, you must use st_texture_cache_load_icon_name().
|
||||
*
|
||||
* Return Value: (transfer none): A new #ClutterActor for the icon
|
||||
* Return Value: (transfer none): A new #ClutterActor for the icon, or %NULL if not found
|
||||
*/
|
||||
ClutterActor *
|
||||
st_texture_cache_load_gicon (StTextureCache *cache,
|
||||
@ -1245,7 +1281,7 @@ load_from_pixbuf (GdkPixbuf *pixbuf)
|
||||
|
||||
clutter_actor_set_size (CLUTTER_ACTOR (texture), width, height);
|
||||
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf);
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf, FALSE);
|
||||
|
||||
set_texture_cogl_texture (texture, texdata);
|
||||
|
||||
@ -1461,10 +1497,27 @@ st_texture_cache_load_icon_name (StTextureCache *cache,
|
||||
switch (icon_type)
|
||||
{
|
||||
case ST_ICON_APPLICATION:
|
||||
themed = g_themed_icon_new (name);
|
||||
texture = load_gicon_with_colors (cache, themed, size, NULL);
|
||||
g_object_unref (themed);
|
||||
if (texture == NULL)
|
||||
{
|
||||
themed = g_themed_icon_new ("application-x-executable");
|
||||
texture = load_gicon_with_colors (cache, themed, size, NULL);
|
||||
g_object_unref (themed);
|
||||
}
|
||||
return CLUTTER_ACTOR (texture);
|
||||
break;
|
||||
case ST_ICON_DOCUMENT:
|
||||
themed = g_themed_icon_new (name);
|
||||
texture = load_gicon_with_colors (cache, themed, size, NULL);
|
||||
g_object_unref (themed);
|
||||
if (texture == NULL)
|
||||
{
|
||||
themed = g_themed_icon_new ("x-office-document");
|
||||
texture = load_gicon_with_colors (cache, themed, size, NULL);
|
||||
g_object_unref (themed);
|
||||
}
|
||||
|
||||
return CLUTTER_ACTOR (texture);
|
||||
break;
|
||||
@ -1482,6 +1535,12 @@ st_texture_cache_load_icon_name (StTextureCache *cache,
|
||||
themed = g_themed_icon_new_with_default_fallbacks (name);
|
||||
texture = load_gicon_with_colors (cache, themed, size, NULL);
|
||||
g_object_unref (themed);
|
||||
if (texture == NULL)
|
||||
{
|
||||
themed = g_themed_icon_new ("image-missing");
|
||||
texture = load_gicon_with_colors (cache, themed, size, NULL);
|
||||
g_object_unref (themed);
|
||||
}
|
||||
|
||||
return CLUTTER_ACTOR (texture);
|
||||
break;
|
||||
@ -1549,7 +1608,7 @@ st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
|
||||
if (!pixbuf)
|
||||
goto out;
|
||||
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf);
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf, FALSE);
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
||||
@ -1800,7 +1859,7 @@ st_texture_cache_load_from_data (StTextureCache *cache,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf);
|
||||
texdata = pixbuf_to_cogl_handle (pixbuf, TRUE);
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
set_texture_cogl_texture (texture, texdata);
|
||||
@ -1924,6 +1983,7 @@ st_texture_cache_load_thumbnail (StTextureCache *cache,
|
||||
data->thumbnail = TRUE;
|
||||
data->width = size;
|
||||
data->height = size;
|
||||
data->enforced_square = TRUE;
|
||||
data->textures = g_slist_prepend (data->textures, g_object_ref (texture));
|
||||
load_thumbnail_async (cache, uri, mimetype, size, NULL, on_pixbuf_loaded, data);
|
||||
}
|
||||
@ -2000,6 +2060,7 @@ st_texture_cache_load_recent_thumbnail (StTextureCache *cache,
|
||||
data->recent_info = gtk_recent_info_ref (info);
|
||||
data->width = size;
|
||||
data->height = size;
|
||||
data->enforced_square = TRUE;
|
||||
data->textures = g_slist_prepend (data->textures, g_object_ref (texture));
|
||||
load_recent_thumbnail_async (cache, info, size, NULL, on_pixbuf_loaded, data);
|
||||
}
|
||||
|
@ -2518,6 +2518,15 @@ st_theme_node_get_border_image (StThemeNode *node)
|
||||
|
||||
char *filename;
|
||||
|
||||
/* Support border-image: none; to suppress a previously specified border image */
|
||||
if (term_is_none (term))
|
||||
{
|
||||
if (term->next == NULL)
|
||||
return NULL;
|
||||
else
|
||||
goto next_property;
|
||||
}
|
||||
|
||||
/* First term must be the URL to the image */
|
||||
if (term->type != TERM_URI)
|
||||
goto next_property;
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@ -59,9 +60,6 @@ struct _StTooltipPrivate
|
||||
{
|
||||
StLabel *label;
|
||||
|
||||
gfloat arrow_offset;
|
||||
gboolean actor_below;
|
||||
|
||||
ClutterGeometry *tip_area;
|
||||
};
|
||||
|
||||
@ -73,6 +71,10 @@ static void st_tooltip_show (ClutterActor *self);
|
||||
static void st_tooltip_show_all (ClutterActor *self);
|
||||
static void st_tooltip_hide_all (ClutterActor *self);
|
||||
|
||||
static void st_tooltip_constrain (StTooltip *tooltip,
|
||||
const ClutterGeometry *geometry,
|
||||
ClutterGeometry *adjusted_geometry);
|
||||
|
||||
static void
|
||||
st_tooltip_set_property (GObject *gobject,
|
||||
guint prop_id,
|
||||
@ -208,26 +210,6 @@ st_tooltip_paint (ClutterActor *self)
|
||||
clutter_actor_paint (CLUTTER_ACTOR (priv->label));
|
||||
}
|
||||
|
||||
static void
|
||||
st_tooltip_map (ClutterActor *self)
|
||||
{
|
||||
StTooltipPrivate *priv = ST_TOOLTIP (self)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->map (self);
|
||||
|
||||
clutter_actor_map (CLUTTER_ACTOR (priv->label));
|
||||
}
|
||||
|
||||
static void
|
||||
st_tooltip_unmap (ClutterActor *self)
|
||||
{
|
||||
StTooltipPrivate *priv = ST_TOOLTIP (self)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->unmap (self);
|
||||
|
||||
clutter_actor_unmap (CLUTTER_ACTOR (priv->label));
|
||||
}
|
||||
|
||||
static void
|
||||
st_tooltip_dispose (GObject *self)
|
||||
{
|
||||
@ -259,8 +241,6 @@ st_tooltip_class_init (StTooltipClass *klass)
|
||||
actor_class->get_preferred_height = st_tooltip_get_preferred_height;
|
||||
actor_class->allocate = st_tooltip_allocate;
|
||||
actor_class->paint = st_tooltip_paint;
|
||||
actor_class->map = st_tooltip_map;
|
||||
actor_class->unmap = st_tooltip_unmap;
|
||||
actor_class->show = st_tooltip_show;
|
||||
actor_class->show_all = st_tooltip_show_all;
|
||||
actor_class->hide_all = st_tooltip_hide_all;
|
||||
@ -301,17 +281,14 @@ st_tooltip_update_position (StTooltip *tooltip)
|
||||
{
|
||||
StTooltipPrivate *priv = tooltip->priv;
|
||||
ClutterGeometry *tip_area = tooltip->priv->tip_area;
|
||||
ClutterGeometry geometry;
|
||||
ClutterGeometry adjusted_geometry;
|
||||
gfloat tooltip_w, tooltip_h, tooltip_x, tooltip_y;
|
||||
gfloat stage_w, stage_h;
|
||||
ClutterActor *stage;
|
||||
|
||||
/* ensure the tooltip with is not fixed size */
|
||||
clutter_actor_set_size ((ClutterActor*) tooltip, -1, -1);
|
||||
|
||||
/* if no area set, just position ourselves top left */
|
||||
if (!priv->tip_area)
|
||||
{
|
||||
clutter_actor_set_position ((ClutterActor*) tooltip, 0, 0);
|
||||
clutter_actor_set_anchor_point ((ClutterActor*) tooltip, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -326,47 +303,22 @@ st_tooltip_update_position (StTooltip *tooltip)
|
||||
tooltip_x = (int)(tip_area->x + (tip_area->width / 2) - (tooltip_w / 2));
|
||||
tooltip_y = (int)(tip_area->y + tip_area->height);
|
||||
|
||||
stage = clutter_actor_get_stage ((ClutterActor *) tooltip);
|
||||
if (!stage)
|
||||
{
|
||||
return;
|
||||
}
|
||||
clutter_actor_get_size (stage, &stage_w, &stage_h);
|
||||
geometry.x = tooltip_x;
|
||||
geometry.y = tooltip_y;
|
||||
geometry.width = ceil (tooltip_w);
|
||||
geometry.height = ceil (tooltip_h);
|
||||
|
||||
/* make sure the tooltip is not off screen vertically */
|
||||
if (tooltip_w > stage_w)
|
||||
{
|
||||
tooltip_x = 0;
|
||||
clutter_actor_set_width ((ClutterActor*) tooltip, stage_w);
|
||||
}
|
||||
else if (tooltip_x < 0)
|
||||
{
|
||||
tooltip_x = 0;
|
||||
}
|
||||
else if (tooltip_x + tooltip_w > stage_w)
|
||||
{
|
||||
tooltip_x = (int)(stage_w) - tooltip_w;
|
||||
}
|
||||
st_tooltip_constrain (tooltip, &geometry, &adjusted_geometry);
|
||||
|
||||
/* make sure the tooltip is not off screen horizontally */
|
||||
if (tooltip_y + tooltip_h > stage_h)
|
||||
{
|
||||
priv->actor_below = TRUE;
|
||||
tooltip_x = adjusted_geometry.x;
|
||||
tooltip_y = adjusted_geometry.y;
|
||||
|
||||
/* re-query size as may have changed */
|
||||
clutter_actor_get_preferred_height ((ClutterActor*) tooltip,
|
||||
-1, NULL, &tooltip_h);
|
||||
tooltip_y = tip_area->y - tooltip_h;
|
||||
}
|
||||
else
|
||||
{
|
||||
priv->actor_below = FALSE;
|
||||
}
|
||||
|
||||
/* calculate the arrow offset */
|
||||
priv->arrow_offset = tip_area->x + tip_area->width / 2 - tooltip_x;
|
||||
|
||||
clutter_actor_set_position ((ClutterActor*) tooltip, tooltip_x, tooltip_y);
|
||||
/* Since we are updating the position out of st_widget_allocate(), we can't
|
||||
* call clutter_actor_set_position(), since that would trigger another
|
||||
* allocation cycle. Instead, we adjust the anchor position which moves
|
||||
* the tooltip actor on the screen without changing its allocation
|
||||
*/
|
||||
clutter_actor_set_anchor_point ((ClutterActor*) tooltip, -tooltip_x, -tooltip_y);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -411,32 +363,6 @@ static void
|
||||
st_tooltip_show (ClutterActor *self)
|
||||
{
|
||||
StTooltip *tooltip = ST_TOOLTIP (self);
|
||||
ClutterActor *parent;
|
||||
ClutterActor *stage;
|
||||
|
||||
parent = clutter_actor_get_parent (self);
|
||||
stage = clutter_actor_get_stage (self);
|
||||
|
||||
if (!stage)
|
||||
{
|
||||
g_warning ("StTooltip is not on any stage.");
|
||||
return;
|
||||
}
|
||||
|
||||
/* make sure we're parented on the stage */
|
||||
if (G_UNLIKELY (parent != stage))
|
||||
{
|
||||
g_object_ref (self);
|
||||
clutter_actor_unparent (self);
|
||||
clutter_actor_set_parent (self, stage);
|
||||
g_object_unref (self);
|
||||
parent = stage;
|
||||
}
|
||||
|
||||
/* raise the tooltip to the top */
|
||||
clutter_container_raise_child (CLUTTER_CONTAINER (stage),
|
||||
CLUTTER_ACTOR (tooltip),
|
||||
NULL);
|
||||
|
||||
st_tooltip_update_position (tooltip);
|
||||
|
||||
@ -477,7 +403,8 @@ st_tooltip_set_tip_area (StTooltip *tooltip,
|
||||
g_boxed_free (CLUTTER_TYPE_GEOMETRY, tooltip->priv->tip_area);
|
||||
tooltip->priv->tip_area = g_boxed_copy (CLUTTER_TYPE_GEOMETRY, area);
|
||||
|
||||
st_tooltip_update_position (tooltip);
|
||||
if (clutter_actor_get_stage (CLUTTER_ACTOR (tooltip)))
|
||||
st_tooltip_update_position (tooltip);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -496,3 +423,102 @@ st_tooltip_get_tip_area (StTooltip *tooltip)
|
||||
|
||||
return tooltip->priv->tip_area;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
StTooltipConstrainFunc func;
|
||||
gpointer data;
|
||||
GDestroyNotify notify;
|
||||
} ConstrainFuncClosure;
|
||||
|
||||
static void
|
||||
constrain_func_closure_free (gpointer data)
|
||||
{
|
||||
ConstrainFuncClosure *closure = data;
|
||||
if (closure->notify)
|
||||
closure->notify (closure->data);
|
||||
g_slice_free (ConstrainFuncClosure, data);
|
||||
}
|
||||
|
||||
static GQuark
|
||||
st_tooltip_constrain_func_quark (void)
|
||||
{
|
||||
static GQuark value = 0;
|
||||
if (G_UNLIKELY (value == 0))
|
||||
value = g_quark_from_static_string ("st-tooltip-constrain-func");
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* st_tooltip_set_constrain_func:
|
||||
* @stage: a #ClutterStage
|
||||
* @func: (allow-none): function to be called to constrain tooltip position
|
||||
* @data: (allow-none): user data to pass to @func
|
||||
* @notify: (allow-none): function to be called when @data is no longer needed
|
||||
*
|
||||
* Sets a callback function that will be used to constrain the position
|
||||
* of tooltips within @stage. This can be used, for example, if the stage
|
||||
* spans multiple monitors and tooltips should be positioned not to cross
|
||||
* monitors.
|
||||
*/
|
||||
void
|
||||
st_tooltip_set_constrain_func (ClutterStage *stage,
|
||||
StTooltipConstrainFunc func,
|
||||
gpointer data,
|
||||
GDestroyNotify notify)
|
||||
{
|
||||
ConstrainFuncClosure *closure;
|
||||
|
||||
g_return_if_fail (CLUTTER_IS_STAGE (stage));
|
||||
|
||||
if (func)
|
||||
{
|
||||
closure = g_slice_new (ConstrainFuncClosure);
|
||||
closure->func = func;
|
||||
closure->data = data;
|
||||
closure->notify = notify;
|
||||
}
|
||||
else
|
||||
closure = NULL;
|
||||
|
||||
g_object_set_qdata_full (G_OBJECT (stage), st_tooltip_constrain_func_quark (),
|
||||
closure, constrain_func_closure_free);
|
||||
}
|
||||
|
||||
static void
|
||||
st_tooltip_constrain (StTooltip *tooltip,
|
||||
const ClutterGeometry *geometry,
|
||||
ClutterGeometry *adjusted_geometry)
|
||||
{
|
||||
ConstrainFuncClosure *closure;
|
||||
|
||||
ClutterActor *stage = clutter_actor_get_stage (CLUTTER_ACTOR (tooltip));
|
||||
|
||||
*adjusted_geometry = *geometry;
|
||||
|
||||
if (stage == NULL)
|
||||
return;
|
||||
|
||||
closure = g_object_get_qdata (G_OBJECT (stage), st_tooltip_constrain_func_quark ());
|
||||
if (closure)
|
||||
{
|
||||
closure->func (tooltip, geometry, adjusted_geometry, closure->data);
|
||||
}
|
||||
else
|
||||
{
|
||||
ClutterActor *parent;
|
||||
gfloat parent_w, parent_h;
|
||||
|
||||
parent = clutter_actor_get_parent ((ClutterActor *) tooltip);
|
||||
clutter_actor_get_size (parent, &parent_w, &parent_h);
|
||||
|
||||
/* make sure the tooltip is not off parent horizontally */
|
||||
if (adjusted_geometry->x < 0)
|
||||
adjusted_geometry->x = 0;
|
||||
else if (adjusted_geometry->x + adjusted_geometry->width > parent_w)
|
||||
adjusted_geometry->x = (int)(parent_w) - adjusted_geometry->width;
|
||||
|
||||
/* make sure the tooltip is not off parent vertically */
|
||||
if (adjusted_geometry->y + adjusted_geometry->height > parent_h)
|
||||
adjusted_geometry->y = parent_h - adjusted_geometry->height;
|
||||
}
|
||||
}
|
||||
|
@ -68,6 +68,24 @@ void st_tooltip_set_tip_area (StTooltip *tooltip,
|
||||
const ClutterGeometry *area);
|
||||
const ClutterGeometry* st_tooltip_get_tip_area (StTooltip *tooltip);
|
||||
|
||||
/**
|
||||
* StTooltipConstrainFunc:
|
||||
* @tooltip: the #StTooltip that is being positioned
|
||||
* @geometry: size and position of the tooltip without any constraints
|
||||
* @adjusted_geometry: (out): new position of the tooltip.
|
||||
* The width and height fields will be ignored.
|
||||
* @data: (closure): user data passed to st_tooltip_set_constrain_func()
|
||||
*/
|
||||
typedef void (*StTooltipConstrainFunc) (StTooltip *tooltip,
|
||||
const ClutterGeometry *geometry,
|
||||
ClutterGeometry *adjusted_geometry,
|
||||
gpointer data);
|
||||
|
||||
void st_tooltip_set_constrain_func (ClutterStage *stage,
|
||||
StTooltipConstrainFunc func,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __ST_TOOLTIP_H__ */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user