Compare commits
170 Commits
Author | SHA1 | Date | |
---|---|---|---|
c1300ddbbc | |||
8bd5b1e696 | |||
40c5db397d | |||
8b52919b4d | |||
2859f23038 | |||
00384ccb47 | |||
0191cc589a | |||
dae6db9b51 | |||
4d912c9feb | |||
07c4b46466 | |||
e9cdce49a3 | |||
84c3ce8778 | |||
d5a32a7fe4 | |||
cc4dfda21b | |||
703b37aa7b | |||
b433de9022 | |||
0c1a22ff95 | |||
4d526e40c3 | |||
4586c7b36b | |||
3d60b73b60 | |||
4ef5cd8ef6 | |||
6959bd19f1 | |||
17e4ce5ea8 | |||
33094b4988 | |||
a8fdcffd44 | |||
5adb5411fa | |||
ff0d11c89c | |||
5f6dce2b5c | |||
a7405e8b39 | |||
d87c520bad | |||
24959f8d34 | |||
6d1432e166 | |||
2c7ba2c125 | |||
a0ba664c64 | |||
131da5f523 | |||
7c6144450a | |||
4c7369db16 | |||
f4355de896 | |||
4a3db9f44d | |||
6c0a9ff9cc | |||
57b1695fcf | |||
045c6546cc | |||
ce5bd954bf | |||
6ef00a4a3b | |||
569d9718a0 | |||
00a3a8697f | |||
c93444e390 | |||
5e5788ab14 | |||
abf57e6362 | |||
74c2074d5a | |||
b74606312e | |||
0c849df4d5 | |||
38690d4a09 | |||
b64c237cb3 | |||
3fbee8e027 | |||
a68e6e3c63 | |||
db5a72774d | |||
966f90f24a | |||
eaa664c023 | |||
e9282c3987 | |||
ed1f8ed339 | |||
5d0d637eb8 | |||
7e70dfdf4c | |||
3f61f39ae3 | |||
371f623a3e | |||
566d566f26 | |||
fb30822860 | |||
526a53bdd4 | |||
3833124d66 | |||
e5e1b52abf | |||
82fc66305d | |||
05e0d5066f | |||
ce2dc84e49 | |||
eb14ed32ea | |||
f97987d0d8 | |||
d23d9c3b05 | |||
3ebf6e3bea | |||
9f41f5c740 | |||
ae00f86887 | |||
ab67c0f8b0 | |||
ed7d4928e5 | |||
f23239a923 | |||
d949920e68 | |||
a1def85c18 | |||
dc624f65e4 | |||
361652d028 | |||
92024b7e54 | |||
4e4ce0dd21 | |||
bc0c490ec3 | |||
6d92af17fd | |||
2140a498a2 | |||
28349d362c | |||
e7af9f98e3 | |||
dd6053c5e1 | |||
37726a4cb6 | |||
4352cc231e | |||
824220356f | |||
247ad9d7ab | |||
09fe12d0c1 | |||
127ef8383b | |||
82eccb566c | |||
543b29efe7 | |||
0f4ce5dd4e | |||
c23919df15 | |||
2b2a8b4747 | |||
2e48dbf6ee | |||
207917ba45 | |||
f824b97f3a | |||
a5ff2fc68f | |||
4906806c0b | |||
d98336a906 | |||
9ddd11cdb8 | |||
554ad4ef05 | |||
45d8550044 | |||
f2b44c1494 | |||
bdb28e87a9 | |||
8b9592e53e | |||
84f89648a6 | |||
1174992099 | |||
391a220dc1 | |||
43f1d0578b | |||
d3e35028ca | |||
61c7d87003 | |||
20f2fa84a4 | |||
17e269b96c | |||
6a57ac92ba | |||
07ad03556f | |||
04c33230c8 | |||
083dac630f | |||
6375724196 | |||
922957c1ae | |||
cbf7d0e738 | |||
fb81efeecf | |||
8466198626 | |||
33718ef7a5 | |||
a94a62764d | |||
12c98df3db | |||
81909a406f | |||
d291aaa4f2 | |||
da36d87e46 | |||
42bc09a7ef | |||
d0defc592e | |||
700f7fbaf3 | |||
74f2d02ac3 | |||
c865d96f4b | |||
cd7b9e108c | |||
f54b82f64c | |||
36bfe8c533 | |||
a40d063cb8 | |||
ac88a88bfb | |||
d89c9b4556 | |||
a07056f5e2 | |||
f91bea3ea5 | |||
9fbd79316a | |||
6d89d0b02a | |||
0febcbfa2a | |||
f2f2898fe3 | |||
f65826b3ba | |||
a869007180 | |||
b5fa48f485 | |||
36d564526c | |||
063f34b5d3 | |||
9486ca5975 | |||
63ead272a9 | |||
9dfa2ad84e | |||
523e431ece | |||
768c4a0dd5 | |||
fd25cf30ff | |||
1d14488a4f | |||
6e32c97c43 |
93
NEWS
93
NEWS
@ -1,3 +1,96 @@
|
||||
3.2.0
|
||||
=====
|
||||
* Prevent the fallback on-screen keyboard from showing up while
|
||||
GNOME Shell is running [Dan, #659865]
|
||||
* Disable code to reposition windows around the on-screen keyboard;
|
||||
it wasn't finished or working properly. [Dan; #659643]
|
||||
* Fix interaction between on-screen keyboard and notifications
|
||||
[Dan; #658603]
|
||||
* Fix menu-sizing problems in right-to-left locales. [Florian; #659827]
|
||||
* Update chat icons in the message tray when an avatar image changes
|
||||
[Marina; #659768]
|
||||
* Fix problem with empty notification bubbles being left [Marina; #659862]
|
||||
* Fix problem with chat notifications bouncing when new messages come in.
|
||||
[Marina; #659768]
|
||||
* Fix bug that was causing SIP calls to automatically be accepted in some
|
||||
circumstances [Guillaume; #660084]
|
||||
* Fix string that should have been marked translatable [Frédéric]
|
||||
* Fix a crash that could happen during CSS transitions [Florian; #659676]
|
||||
* Build fixes [Colin, Florian]
|
||||
|
||||
Contributors:
|
||||
Guillaume Desmottes, Florian Müllner, Frédéric Péters, Colin Walters,
|
||||
Dan Winship, Marina Zhurakhinskaya
|
||||
|
||||
Translations:
|
||||
Friedel Wolff [af], Nilamdyuti Goswami [as], Ihar Hrachyshka [be],
|
||||
Ivaylo Valkov [bg], Gil Forcada [ca], Carles Ferrando [ca@valencia],
|
||||
Petr Kovar [cz], Mario Blättermann [de], Kris Thomsen [dk],
|
||||
Tiffany Antopolski, Kristjan Schmidt [eo], Daniel Mustieles [es],
|
||||
Inaki Larranaga Murgoitio [eu], Tommi Vainikainen [fi], Bruno Brouard [fr],
|
||||
Fran Dieguez [gl], Yaron Shahrabani [he], Gabor Kelemen [hu],
|
||||
Andika Triwidada [id], Jiro Matsuzawa [ja], Changwoo Ryu [ko],
|
||||
Rudolfs Mazurs [lv], Aurimas Černius [lt], Kjartan Maraas [nb],
|
||||
A S Alam [pa], Piotr Drąg [pl], Duarte Loreto [pt], Djavan Fagundes,
|
||||
Rodolfo Ribeiro Gomes, Gabriel F. Vilar [pt_BR], Yuri Myasoedov [ru],
|
||||
Daniel Nylander [se], Martin Srebotnjak [sl], Michal Štrba [sv],
|
||||
Krishnababu Krothapalli, Praveen Illa [te], Cheng-Chia Tseng [zh_KH, zh_TW]
|
||||
|
||||
3.1.92
|
||||
======
|
||||
|
||||
* Login screen
|
||||
- Add the ability to set a logo at the top of the user list [Ray; #658062]
|
||||
- Add fingerprint reader support [Ray; #657823]
|
||||
- Add a power button offering the choice of Suspend/Restart/Power off
|
||||
[Ray; #657822]
|
||||
- Remove the option to view the current keyboad layout [Matthias; #659164]
|
||||
- Make Control-Alt-Tab work for full keyboard access [Ray; #659177]
|
||||
* Frequently initiate a full garbage collection; Spidermonkey isn't very good
|
||||
at tracking the amount of resources we have allocated so this hopefully will
|
||||
improve memory usage without affecting performance too much [Colin; #659254]
|
||||
* Stop adding a notification when the network connection is lost
|
||||
[Colin; #658954]
|
||||
* When disabling notifications; display a notification
|
||||
"Your chat status will be set to busy" [Florian; #652718]
|
||||
* Fix keynav in network dialogs [Florian; #659133]
|
||||
* Improve calendar styling [Sean; #641135, #651299]
|
||||
* Shrink padding around panel buttons for narrow screens [Dan; #651299]
|
||||
* Allow enabling the onscreen keyboard through the accessibility menu
|
||||
[Dan; #612662]
|
||||
* Fix problem that was causing VPN secret dialogs to be delayed before showing
|
||||
[Florian; #658484]
|
||||
* Make custom-keybindings for the window switcher that don't use alt
|
||||
work correctly [Florian; #645200]
|
||||
* Fix duplicate application icons in the Activities Overview [Colin; #659351]
|
||||
* Bug fixes for dimming windows with attached modal dialogs
|
||||
[Jasper, Owen; #659302, 659634]
|
||||
* Add build-time support for BROWSER_PLUGIN_DIR environment variable
|
||||
[Vincent; #659123]
|
||||
* Build fixes [Vincent; #659194]
|
||||
* Code cleanups and test cases
|
||||
[Adel, Dan, Florian, Jasper; #651299, #658092, #658939]
|
||||
* Misc bug fixes
|
||||
[Adel, Colin, Cosimo, Dan, Florian, Giovanni, Jasper, Ray, Xavier;
|
||||
#651299, #652837, #657249, #658004, #658150, #658239, #658469, #658598,
|
||||
#658605, #659050, #659159, #659210, #659270, #659370, #659633]
|
||||
|
||||
Contributors:
|
||||
Giovanni Campagna, Cosimo Cecchi, Xavier Claessens, Matthias Clasen,
|
||||
Rui Matos, Florian Müllner, Jasper St. Pierre, Owen Taylor,
|
||||
Vincent Untz, Colin Walters, Sean Wilson, Dan Winship
|
||||
|
||||
Translations:
|
||||
Ihar Hrachyshka [be], Alexander Shopov, Ivaylo Valkov [bg],
|
||||
Mario Blättermann [de], Jorge González, Daniel Mustieles [es],
|
||||
Arash Mousavi [fa], Ville-Pekka Vainio [fi], Fran Dieguez [gl],
|
||||
Sweta Kothari [gu], Gabor Kelemen [hu], Jiro Matsuzawa [ja],
|
||||
Luca Ferretti [it], Rudolfs Mazurs [lv], Kjartan Maraas [nb], A S Alam [pa],
|
||||
Piotr Drąg [pl], Duarte Loreto [pt], Yuri Myasoedov [ru],
|
||||
Daniel Nylander [se], Matej Urbančič [sl], Miroslav Nikolić [sr, sr@latin],
|
||||
Michal Štrba [sv], Tirumurti Vasudevan [ta], Phương Lê Hoàng [vi],
|
||||
Aron Xu [zh_CN], Chao-Hsiung Liao [zh_HK, zh_TW]
|
||||
|
||||
3.1.91.1
|
||||
========
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
mozillalibdir = $(libdir)/mozilla/plugins
|
||||
mozillalibdir = $(BROWSER_PLUGIN_DIR)
|
||||
|
||||
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[3.1.91.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[3.2.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@ -9,7 +9,7 @@ AC_CONFIG_AUX_DIR([config])
|
||||
AC_SUBST([PACKAGE_NAME], ["$PACKAGE_NAME"])
|
||||
AC_SUBST([PACKAGE_VERSION], ["$PACKAGE_VERSION"])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.10 dist-xz no-dist-gzip foreign])
|
||||
AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar foreign])
|
||||
AM_MAINTAINER_MODE([enable])
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
||||
@ -66,7 +66,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||
|
||||
CLUTTER_MIN_VERSION=1.7.5
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||
GJS_MIN_VERSION=1.29.15
|
||||
GJS_MIN_VERSION=1.29.18
|
||||
MUTTER_MIN_VERSION=3.0.0
|
||||
FOLKS_MIN_VERSION=0.5.2
|
||||
GTK_MIN_VERSION=3.0.0
|
||||
@ -235,6 +235,9 @@ else
|
||||
fi
|
||||
AC_SUBST(SHELL_SYSTEM_CA_FILE,["$with_ca_certificates"])
|
||||
|
||||
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
|
||||
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
data/Makefile
|
||||
|
@ -69,13 +69,6 @@
|
||||
|
||||
<schema id="org.gnome.shell.keyboard" path="/org/gnome/shell/keyboard/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="show-keyboard" type="b">
|
||||
<default>false</default>
|
||||
<_summary>Show the onscreen keyboard</_summary>
|
||||
<_description>
|
||||
If true, display onscreen keyboard.
|
||||
</_description>
|
||||
</key>
|
||||
<key name="keyboard-type" type="s">
|
||||
<default>'touch'</default>
|
||||
<_summary>Which keyboard to use</_summary>
|
||||
|
@ -1,5 +1,5 @@
|
||||
#version 110
|
||||
uniform sampler2D sampler0;
|
||||
uniform sampler2D tex;
|
||||
uniform float fraction;
|
||||
uniform float height;
|
||||
const float c = -0.2;
|
||||
@ -12,15 +12,16 @@ mat4 contrast = mat4 (1.0 + c, 0.0, 0.0, 0.0,
|
||||
vec4 off = vec4(0.633, 0.633, 0.633, 0);
|
||||
void main()
|
||||
{
|
||||
vec4 color = texture2D(sampler0, gl_TexCoord[0].st);
|
||||
float y = height * gl_TexCoord[0][1];
|
||||
vec4 color = texture2D(tex, cogl_tex_coord_in[0].xy);
|
||||
float y = height * cogl_tex_coord_in[0].y;
|
||||
|
||||
// To reduce contrast, blend with a mid gray
|
||||
gl_FragColor = color * contrast - off * c;
|
||||
cogl_color_out = color * contrast - off * c * color.a;
|
||||
|
||||
// We only fully dim at a distance of BORDER_MAX_HEIGHT from the edge and
|
||||
// We only fully dim at a distance of BORDER_MAX_HEIGHT from the top and
|
||||
// when the fraction is 1.0. For other locations and fractions we linearly
|
||||
// interpolate back to the original undimmed color.
|
||||
gl_FragColor = color + (gl_FragColor - color) * min(y / border_max_height, 1.0);
|
||||
gl_FragColor = color + (gl_FragColor - color) * fraction;
|
||||
// interpolate back to the original undimmed color, so the top of the window
|
||||
// is at full color.
|
||||
cogl_color_out = color + (cogl_color_out - color) * max(min(y / border_max_height, 1.0), 0.0);
|
||||
cogl_color_out = color + (cogl_color_out - color) * fraction;
|
||||
}
|
||||
|
@ -30,6 +30,10 @@
|
||||
min-width: 350px;
|
||||
}
|
||||
|
||||
.login-dialog-prompt-fingerprint-message {
|
||||
font-size: 10.5pt;
|
||||
}
|
||||
|
||||
.login-dialog-user-list-view {
|
||||
-st-vfade-offset: 1em;
|
||||
}
|
||||
@ -110,7 +114,7 @@
|
||||
background-color: white;
|
||||
caret-color: black;
|
||||
caret-size: 1px;
|
||||
width: 23em;
|
||||
width: 15em;
|
||||
}
|
||||
|
||||
.login-dialog-session-list {
|
||||
|
@ -164,6 +164,10 @@ StTooltip StLabel {
|
||||
background-color: #4c4c4c;
|
||||
}
|
||||
|
||||
.popup-menu-item:insensitive {
|
||||
color: #9f9f9f;
|
||||
}
|
||||
|
||||
.popup-image-menu-item {
|
||||
}
|
||||
|
||||
@ -276,12 +280,12 @@ StTooltip StLabel {
|
||||
background-color: black;
|
||||
border-image: url("panel-border.svg") 1;
|
||||
font-size: 10.5pt;
|
||||
font-weight: bold;
|
||||
height: 1.86em;
|
||||
}
|
||||
|
||||
#panelLeft, #panelCenter, #panelRight {
|
||||
#panelLeft, #panelCenter {
|
||||
spacing: 4px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#panelLeft:ltr {
|
||||
@ -335,7 +339,8 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.panel-button {
|
||||
padding: 0px 12px;
|
||||
-natural-hpadding: 12px;
|
||||
-minimum-hpadding: 6px;
|
||||
font-weight: bold;
|
||||
color: #ccc;
|
||||
transition-duration: 100;
|
||||
@ -355,9 +360,9 @@ StTooltip StLabel {
|
||||
text-shadow: black 0px 2px 2px;
|
||||
}
|
||||
|
||||
#statusTray > .panel-button:active,
|
||||
#statusTray > .panel-button:checked,
|
||||
#statusTray > .panel-button:focus {
|
||||
.panel-status-button:active,
|
||||
.panel-status-button:checked,
|
||||
.panel-status-button:focus {
|
||||
background-image: url("panel-button-highlight-narrow.svg");
|
||||
}
|
||||
|
||||
@ -371,19 +376,7 @@ StTooltip StLabel {
|
||||
-boxpointer-gap: 4px
|
||||
}
|
||||
|
||||
/* The rounded panel corners we draw don't
|
||||
* support transitions, so disable transitions
|
||||
* for the buttons at the left/right edges
|
||||
*/
|
||||
#panelActivities {
|
||||
transition-duration: 0;
|
||||
}
|
||||
|
||||
#panelStatus {
|
||||
transition-duration: 0;
|
||||
}
|
||||
|
||||
#panelStatusMenu {
|
||||
#panelUserMenu {
|
||||
spacing: 4px;
|
||||
}
|
||||
|
||||
@ -410,6 +403,7 @@ StTooltip StLabel {
|
||||
.status-chooser-user-name {
|
||||
font-weight: bold;
|
||||
font-size: 1.3em;
|
||||
min-width: 120pt;
|
||||
}
|
||||
|
||||
.status-chooser-combo {
|
||||
@ -426,24 +420,10 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.status-chooser-status-item,
|
||||
.status-chooser-combo > .popup-combobox-item {
|
||||
.status-chooser-combo .popup-combobox-item {
|
||||
spacing: .4em;
|
||||
}
|
||||
|
||||
#legacyTray {
|
||||
spacing: 14px;
|
||||
padding-left: 14px;
|
||||
}
|
||||
|
||||
#legacyTray:rtl {
|
||||
padding-left: 0px;
|
||||
padding-right: 14px;
|
||||
}
|
||||
|
||||
#legacyTray:compact {
|
||||
spacing: 8px;
|
||||
}
|
||||
|
||||
.system-status-icon {
|
||||
icon-size: 1.14em;
|
||||
}
|
||||
@ -531,8 +511,6 @@ StTooltip StLabel {
|
||||
|
||||
.dash-placeholder {
|
||||
background-image: url("dash-placeholder.svg");
|
||||
height: 27px;
|
||||
width: 48px;
|
||||
}
|
||||
|
||||
#viewSelector {
|
||||
@ -951,7 +929,7 @@ StTooltip StLabel {
|
||||
.calendar-vertical-separator {
|
||||
-stipple-width: 1px;
|
||||
-stipple-color: #505050;
|
||||
width: 1.5em;
|
||||
width: 0.3em;
|
||||
}
|
||||
|
||||
#calendarPopup {
|
||||
@ -974,13 +952,14 @@ StTooltip StLabel {
|
||||
.calendar-month-label {
|
||||
color: #666666;
|
||||
font-size: 7.5pt;
|
||||
padding: 2px;
|
||||
padding-bottom: 8px;
|
||||
padding-top: 8px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.calendar-change-month-back {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
width: 18px;
|
||||
height: 12px;
|
||||
background-image: url("calendar-arrow-left.svg");
|
||||
border-radius: 4px;
|
||||
}
|
||||
@ -997,8 +976,8 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.calendar-change-month-forward {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
width: 18px;
|
||||
height: 12px;
|
||||
background-image: url("calendar-arrow-right.svg");
|
||||
border-radius: 4px;
|
||||
}
|
||||
@ -1030,6 +1009,7 @@ StTooltip StLabel {
|
||||
|
||||
.calendar-day-base:hover {
|
||||
background-color: #777777;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.calendar-day-base:active {
|
||||
@ -1038,6 +1018,7 @@ StTooltip StLabel {
|
||||
|
||||
.calendar-day-heading {
|
||||
color: #666666;
|
||||
padding-top: 1em;
|
||||
}
|
||||
|
||||
.calendar-week-number {
|
||||
@ -1100,7 +1081,8 @@ StTooltip StLabel {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
color: rgba(153, 153, 153, 1.0);
|
||||
padding-left: 0.3em;
|
||||
padding-left: 1.8em;
|
||||
padding-top: 0.8em;
|
||||
}
|
||||
|
||||
.events-day-header:rtl {
|
||||
|
@ -3,7 +3,10 @@ jsdir = $(pkgdatadir)/js
|
||||
|
||||
nobase_dist_js_DATA = \
|
||||
gdm/batch.js \
|
||||
gdm/consoleKit.js \
|
||||
gdm/fingerprint.js \
|
||||
gdm/loginDialog.js \
|
||||
gdm/powerMenu.js \
|
||||
misc/config.js \
|
||||
misc/docInfo.js \
|
||||
misc/fileUtils.js \
|
||||
|
32
js/gdm/consoleKit.js
Normal file
32
js/gdm/consoleKit.js
Normal file
@ -0,0 +1,32 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
|
||||
const ConsoleKitManagerIface = {
|
||||
name: 'org.freedesktop.ConsoleKit.Manager',
|
||||
methods: [{ name: 'CanRestart',
|
||||
inSignature: '',
|
||||
outSignature: 'b' },
|
||||
{ name: 'CanStop',
|
||||
inSignature: '',
|
||||
outSignature: 'b' },
|
||||
{ name: 'Restart',
|
||||
inSignature: '',
|
||||
outSignature: '' },
|
||||
{ name: 'Stop',
|
||||
inSignature: '',
|
||||
outSignature: '' }]
|
||||
};
|
||||
|
||||
function ConsoleKitManager() {
|
||||
this._init();
|
||||
};
|
||||
|
||||
ConsoleKitManager.prototype = {
|
||||
_init: function() {
|
||||
DBus.system.proxifyObject(this,
|
||||
'org.freedesktop.ConsoleKit',
|
||||
'/org/freedesktop/ConsoleKit/Manager');
|
||||
}
|
||||
};
|
||||
DBus.proxifyPrototype(ConsoleKitManager.prototype, ConsoleKitManagerIface);
|
26
js/gdm/fingerprint.js
Normal file
26
js/gdm/fingerprint.js
Normal file
@ -0,0 +1,26 @@
|
||||
// -*- 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;
|
||||
|
||||
const FprintManagerIface = {
|
||||
name: 'net.reactivated.Fprint.Manager',
|
||||
methods: [{ name: 'GetDefaultDevice',
|
||||
inSignature: '',
|
||||
outSignature: 'o' }]
|
||||
};
|
||||
|
||||
function FprintManager() {
|
||||
this._init();
|
||||
};
|
||||
|
||||
FprintManager.prototype = {
|
||||
_init: function() {
|
||||
DBus.system.proxifyObject(this,
|
||||
'net.reactivated.Fprint',
|
||||
'/net/reactivated/Fprint/Manager');
|
||||
}
|
||||
};
|
||||
DBus.proxifyPrototype(FprintManager.prototype, FprintManagerIface);
|
@ -33,15 +33,25 @@ const St = imports.gi.St;
|
||||
const GdmGreeter = imports.gi.GdmGreeter;
|
||||
|
||||
const Batch = imports.gdm.batch;
|
||||
const DBus = imports.dbus;
|
||||
const Fprint = imports.gdm.fingerprint;
|
||||
const Lightbox = imports.ui.lightbox;
|
||||
const Main = imports.ui.main;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const _PASSWORD_SERVICE_NAME = 'gdm-password';
|
||||
const _FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
||||
const _FADE_ANIMATION_TIME = 0.16;
|
||||
const _RESIZE_ANIMATION_TIME = 0.25;
|
||||
const _SCROLL_ANIMATION_TIME = 2.0;
|
||||
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
||||
const _LOGO_ICON_NAME_SIZE = 48;
|
||||
|
||||
const _LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
|
||||
const _FINGERPRINT_AUTHENTICATION_KEY = 'enable-fingerprint-authentication';
|
||||
|
||||
const _LOGO_KEY = 'logo';
|
||||
|
||||
let _loginDialog = null;
|
||||
|
||||
@ -246,12 +256,15 @@ UserListItem.prototype = {
|
||||
showFocusAnimation: function(time) {
|
||||
let hold = new Batch.Hold();
|
||||
|
||||
let node = this.actor.get_theme_node();
|
||||
let padding = node.get_horizontal_padding();
|
||||
|
||||
let box = this._verticalBox.get_allocation_box();
|
||||
|
||||
Tweener.removeTweens(this._focusBin);
|
||||
this._focusBin.width = 0;
|
||||
Tweener.addTween(this._focusBin,
|
||||
{ width: box.x2 - box.x1,
|
||||
{ width: (box.x2 - box.x1 - padding),
|
||||
time: time,
|
||||
transition: 'linear',
|
||||
onComplete: function() {
|
||||
@ -734,7 +747,7 @@ LoginDialog.prototype = {
|
||||
|
||||
this._greeterClient.open_connection();
|
||||
|
||||
this._greeterClient.call_start_conversation('gdm-password');
|
||||
this._greeterClient.call_start_conversation(_PASSWORD_SERVICE_NAME);
|
||||
|
||||
this._greeterClient.connect('reset',
|
||||
Lang.bind(this, this._onReset));
|
||||
@ -757,6 +770,17 @@ LoginDialog.prototype = {
|
||||
this._greeterClient.connect('conversation-stopped',
|
||||
Lang.bind(this, this._onConversationStopped));
|
||||
|
||||
this._settings = new Gio.Settings({ schema: _LOGIN_SCREEN_SCHEMA });
|
||||
|
||||
this._fprintManager = new Fprint.FprintManager();
|
||||
this._startFingerprintConversationIfNeeded();
|
||||
this._settings.connect('changed::' + _LOGO_KEY,
|
||||
Lang.bind(this, this._updateLogo));
|
||||
|
||||
this._logoBox = new St.Bin({ style_class: 'login-dialog-logo-box' });
|
||||
this.contentLayout.add(this._logoBox);
|
||||
this._updateLogo();
|
||||
|
||||
this._titleLabel = new St.Label({ style_class: 'login-dialog-title',
|
||||
text: C_("title", "Sign In") });
|
||||
|
||||
@ -801,6 +825,12 @@ LoginDialog.prototype = {
|
||||
x_fill: true,
|
||||
y_fill: false,
|
||||
x_align: St.Align.START });
|
||||
// translators: this message is shown below the password entry field
|
||||
// to indicate the user can swipe their finger instead
|
||||
this._promptFingerprintMessage = new St.Label({ text: _("(or swipe finger)"),
|
||||
style_class: 'login-dialog-prompt-fingerprint-message' });
|
||||
this._promptFingerprintMessage.hide();
|
||||
this._promptBox.add(this._promptFingerprintMessage);
|
||||
|
||||
this._sessionList = new SessionList();
|
||||
this._sessionList.connect('session-activated',
|
||||
@ -848,15 +878,47 @@ LoginDialog.prototype = {
|
||||
this._onUserListActivated(item);
|
||||
}));
|
||||
|
||||
},
|
||||
|
||||
_startFingerprintConversationIfNeeded: function() {
|
||||
this._haveFingerprintReader = false;
|
||||
|
||||
if (!this._settings.get_boolean(_FINGERPRINT_AUTHENTICATION_KEY))
|
||||
return;
|
||||
|
||||
this._fprintManager.GetDefaultDeviceRemote(DBus.CALL_FLAG_START, Lang.bind(this,
|
||||
function(device, error) {
|
||||
if (!error && device)
|
||||
this._haveFingerprintReader = true;
|
||||
|
||||
if (this._haveFingerprintReader)
|
||||
this._greeterClient.call_start_conversation(_FINGERPRINT_SERVICE_NAME);
|
||||
}));
|
||||
},
|
||||
|
||||
_updateLogo: function() {
|
||||
this._logoBox.child = null;
|
||||
let path = this._settings.get_string(_LOGO_KEY);
|
||||
|
||||
if (path) {
|
||||
let file = Gio.file_new_for_path(path);
|
||||
let uri = file.get_uri();
|
||||
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
this._logoBox.child = textureCache.load_uri_async(uri, -1, _LOGO_ICON_NAME_SIZE);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
_onReset: function(client, serviceName) {
|
||||
this._greeterClient.call_start_conversation('gdm-password');
|
||||
this._greeterClient.call_start_conversation(_PASSWORD_SERVICE_NAME);
|
||||
this._startFingerprintConversationIfNeeded();
|
||||
|
||||
let tasks = [this._hidePrompt,
|
||||
|
||||
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
|
||||
this._fadeInNotListedButton]),
|
||||
this._fadeInNotListedButton,
|
||||
this._fadeInLogo]),
|
||||
|
||||
function() {
|
||||
this._sessionList.close();
|
||||
@ -881,10 +943,17 @@ LoginDialog.prototype = {
|
||||
},
|
||||
|
||||
_onInfo: function(client, serviceName, info) {
|
||||
// we don't want fingerprint messages with the word UPEK in them
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
Main.notifyError(info);
|
||||
},
|
||||
|
||||
_onProblem: function(client, serviceName, problem) {
|
||||
// we don't want to show auth failed messages to
|
||||
// users who haven't enrolled their fingerprint.
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
Main.notifyError(problem);
|
||||
},
|
||||
|
||||
@ -901,6 +970,13 @@ LoginDialog.prototype = {
|
||||
return _fadeInActor(this._promptEntry);
|
||||
},
|
||||
|
||||
function() {
|
||||
if (!this._haveFingerprintReader)
|
||||
return null;
|
||||
|
||||
return _fadeInActor(this._promptFingerprintMessage);
|
||||
},
|
||||
|
||||
function() {
|
||||
return _fadeInActor(this._promptBox);
|
||||
},
|
||||
@ -969,6 +1045,7 @@ LoginDialog.prototype = {
|
||||
},
|
||||
|
||||
function() {
|
||||
this._promptFingerprintMessage.hide();
|
||||
this._promptEntry.set_text('');
|
||||
}];
|
||||
|
||||
@ -992,12 +1069,20 @@ LoginDialog.prototype = {
|
||||
return batch.run();
|
||||
},
|
||||
_onInfoQuery: function(client, serviceName, question) {
|
||||
// We only expect questions to come from the main auth service
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
|
||||
this._promptEntry.set_text('');
|
||||
this._promptEntry.clutter_text.set_password_char('');
|
||||
this._askQuestion(serviceName, question);
|
||||
},
|
||||
|
||||
_onSecretInfoQuery: function(client, serviceName, secretQuestion) {
|
||||
// We only expect secret requests to come from the main auth service
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
|
||||
this._promptEntry.set_text('');
|
||||
this._promptEntry.clutter_text.set_password_char('\u25cf');
|
||||
this._askQuestion(serviceName, secretQuestion);
|
||||
@ -1134,7 +1219,14 @@ LoginDialog.prototype = {
|
||||
},
|
||||
|
||||
_onConversationStopped: function(client, serviceName) {
|
||||
this._greeterClient.call_cancel();
|
||||
// if the password service fails, then cancel everything.
|
||||
// But if, e.g., fingerprint fails, still give
|
||||
// password authentication a chance to succeed
|
||||
if (serviceName == _PASSWORD_SERVICE_NAME) {
|
||||
this._greeterClient.call_cancel();
|
||||
} else if (serviceName == _FINGERPRINT_SERVICE_NAME) {
|
||||
_fadeOutActor(this._promptFingerprintMessage);
|
||||
}
|
||||
},
|
||||
|
||||
_onNotListedClicked: function(user) {
|
||||
@ -1151,16 +1243,25 @@ LoginDialog.prototype = {
|
||||
},
|
||||
|
||||
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
|
||||
this._fadeOutNotListedButton]),
|
||||
this._fadeOutNotListedButton,
|
||||
this._fadeOutLogo]),
|
||||
|
||||
function() {
|
||||
this._greeterClient.call_begin_verification('gdm-password');
|
||||
this._greeterClient.call_begin_verification(_PASSWORD_SERVICE_NAME);
|
||||
}];
|
||||
|
||||
let batch = new Batch.ConsecutiveBatch(this, tasks);
|
||||
batch.run();
|
||||
},
|
||||
|
||||
_fadeInLogo: function() {
|
||||
return _fadeInActor(this._logoBox);
|
||||
},
|
||||
|
||||
_fadeOutLogo: function() {
|
||||
return _fadeOutActor(this._logoBox);
|
||||
},
|
||||
|
||||
_fadeInTitleLabel: function() {
|
||||
return _fadeInActor(this._titleLabel);
|
||||
},
|
||||
@ -1196,7 +1297,8 @@ LoginDialog.prototype = {
|
||||
},
|
||||
|
||||
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
|
||||
this._fadeOutNotListedButton]),
|
||||
this._fadeOutNotListedButton,
|
||||
this._fadeOutLogo]),
|
||||
|
||||
function() {
|
||||
return this._userList.shrinkToNaturalHeight();
|
||||
@ -1204,8 +1306,11 @@ LoginDialog.prototype = {
|
||||
|
||||
function() {
|
||||
let userName = activatedItem.user.get_user_name();
|
||||
this._greeterClient.call_begin_verification_for_user('gdm-password',
|
||||
this._greeterClient.call_begin_verification_for_user(_PASSWORD_SERVICE_NAME,
|
||||
userName);
|
||||
|
||||
if (this._haveFingerprintReader)
|
||||
this._greeterClient.call_begin_verification_for_user(_FINGERPRINT_SERVICE_NAME, userName);
|
||||
}];
|
||||
|
||||
this._user = activatedItem.user;
|
||||
|
146
js/gdm/powerMenu.js
Normal file
146
js/gdm/powerMenu.js
Normal file
@ -0,0 +1,146 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||
*
|
||||
* Copyright 2011 Red Hat, Inc
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
const Lang = imports.lang;
|
||||
const UPowerGlib = imports.gi.UPowerGlib;
|
||||
|
||||
const ConsoleKit = imports.gdm.consoleKit;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
function PowerMenuButton() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
PowerMenuButton.prototype = {
|
||||
__proto__: PanelMenu.SystemStatusButton.prototype,
|
||||
|
||||
_init: function() {
|
||||
PanelMenu.SystemStatusButton.prototype._init.call(this, 'system-shutdown', null);
|
||||
this._consoleKitManager = new ConsoleKit.ConsoleKitManager();
|
||||
this._upClient = new UPowerGlib.Client();
|
||||
|
||||
this._createSubMenu();
|
||||
|
||||
this._upClient.connect('notify::can-suspend',
|
||||
Lang.bind(this, this._updateHaveSuspend));
|
||||
this._updateHaveSuspend();
|
||||
|
||||
// ConsoleKit doesn't send notifications when shutdown/reboot
|
||||
// are disabled, so we update the menu item each time the menu opens
|
||||
this.menu.connect('open-state-changed', Lang.bind(this,
|
||||
function(menu, open) {
|
||||
if (open) {
|
||||
this._updateHaveShutdown();
|
||||
this._updateHaveRestart();
|
||||
}
|
||||
}));
|
||||
this._updateHaveShutdown();
|
||||
this._updateHaveRestart();
|
||||
},
|
||||
|
||||
_updateVisibility: function() {
|
||||
if (!this._haveSuspend && !this._haveShutdown && !this._haveRestart)
|
||||
this.actor.hide();
|
||||
else
|
||||
this.actor.show();
|
||||
},
|
||||
|
||||
_updateHaveShutdown: function() {
|
||||
this._consoleKitManager.CanStopRemote(Lang.bind(this,
|
||||
function(result, error) {
|
||||
if (!error)
|
||||
this._haveShutdown = result;
|
||||
else
|
||||
this._haveShutdown = false;
|
||||
|
||||
if (this._haveShutdown) {
|
||||
this._powerOffItem.actor.show();
|
||||
} else {
|
||||
this._powerOffItem.actor.hide();
|
||||
}
|
||||
|
||||
this._updateVisibility();
|
||||
}));
|
||||
},
|
||||
|
||||
_updateHaveRestart: function() {
|
||||
this._consoleKitManager.CanRestartRemote(Lang.bind(this,
|
||||
function(result, error) {
|
||||
if (!error)
|
||||
this._haveRestart = result;
|
||||
else
|
||||
this._haveRestart = false;
|
||||
|
||||
if (this._haveRestart) {
|
||||
this._restartItem.actor.show();
|
||||
} else {
|
||||
this._restartItem.actor.hide();
|
||||
}
|
||||
|
||||
this._updateVisibility();
|
||||
}));
|
||||
},
|
||||
|
||||
_updateHaveSuspend: function() {
|
||||
this._haveSuspend = this._upClient.get_can_suspend();
|
||||
|
||||
if (this._haveSuspend)
|
||||
this._suspendItem.actor.show();
|
||||
else
|
||||
this._suspendItem.actor.hide();
|
||||
|
||||
this._updateVisibility();
|
||||
},
|
||||
|
||||
_createSubMenu: function() {
|
||||
let item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Suspend"));
|
||||
item.connect('activate', Lang.bind(this, this._onActivateSuspend));
|
||||
this.menu.addMenuItem(item);
|
||||
this._suspendItem = item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Restart"));
|
||||
item.connect('activate', Lang.bind(this, this._onActivateRestart));
|
||||
this.menu.addMenuItem(item);
|
||||
this._restartItem = item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Power Off"));
|
||||
item.connect('activate', Lang.bind(this, this._onActivatePowerOff));
|
||||
this.menu.addMenuItem(item);
|
||||
this._powerOffItem = item;
|
||||
},
|
||||
|
||||
_onActivateSuspend: function() {
|
||||
if (this._haveSuspend)
|
||||
this._upClient.suspend_sync(null);
|
||||
},
|
||||
|
||||
_onActivateRestart: function() {
|
||||
if (this._haveRestart)
|
||||
this._consoleKitManager.RestartRemote();
|
||||
},
|
||||
|
||||
_onActivatePowerOff: function() {
|
||||
if (this._haveShutdown)
|
||||
this._consoleKitManager.StopRemote();
|
||||
}
|
||||
};
|
@ -31,6 +31,18 @@ function mod(a, b) {
|
||||
return (a + b) % b;
|
||||
}
|
||||
|
||||
function primaryModifier(mask) {
|
||||
if (mask == 0)
|
||||
return 0;
|
||||
|
||||
let primary = 1;
|
||||
while (mask > 1) {
|
||||
mask >>= 1;
|
||||
primary <<= 1;
|
||||
}
|
||||
return primary;
|
||||
}
|
||||
|
||||
function AltTabPopup() {
|
||||
this._init();
|
||||
}
|
||||
@ -48,6 +60,7 @@ AltTabPopup.prototype = {
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
this._haveModal = false;
|
||||
this._modifierMask = 0;
|
||||
|
||||
this._currentApp = 0;
|
||||
this._currentWindow = -1;
|
||||
@ -121,7 +134,7 @@ AltTabPopup.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
show : function(backward, binding) {
|
||||
show : function(backward, binding, mask) {
|
||||
let appSys = Shell.AppSystem.get_default();
|
||||
let apps = appSys.get_running ();
|
||||
|
||||
@ -131,6 +144,7 @@ AltTabPopup.prototype = {
|
||||
if (!Main.pushModal(this.actor))
|
||||
return false;
|
||||
this._haveModal = true;
|
||||
this._modifierMask = primaryModifier(mask);
|
||||
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
|
||||
this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
|
||||
@ -179,7 +193,7 @@ AltTabPopup.prototype = {
|
||||
// details.) So we check now. (Have to do this after updating
|
||||
// selection.)
|
||||
let [x, y, mods] = global.get_pointer();
|
||||
if (!(mods & Gdk.ModifierType.MOD1_MASK)) {
|
||||
if (!(mods & this._modifierMask)) {
|
||||
this._finish();
|
||||
return false;
|
||||
}
|
||||
@ -256,7 +270,7 @@ AltTabPopup.prototype = {
|
||||
|
||||
_keyReleaseEvent : function(actor, event) {
|
||||
let [x, y, mods] = global.get_pointer();
|
||||
let state = mods & Clutter.ModifierType.MOD1_MASK;
|
||||
let state = mods & this._modifierMask;
|
||||
|
||||
if (state == 0)
|
||||
this._finish();
|
||||
@ -636,11 +650,10 @@ SwitcherList.prototype = {
|
||||
this._items[this._highlighted].add_style_pseudo_class('selected');
|
||||
}
|
||||
|
||||
let monitor = Main.layoutManager.primaryMonitor;
|
||||
let itemSize = this._items[index].allocation.x2 - this._items[index].allocation.x1;
|
||||
let [posX, posY] = this._items[index].get_transformed_position();
|
||||
posX += this.actor.x;
|
||||
if (posX + itemSize > monitor.width + monitor.x)
|
||||
let [absItemX, absItemY] = this._items[index].get_transformed_position();
|
||||
let [result, posX, posY] = this.actor.transform_stage_point(absItemX, 0);
|
||||
let [containerWidth, containerHeight] = this.actor.get_transformed_size();
|
||||
if (posX + this._items[index].get_width() > containerWidth)
|
||||
this._scrollToRight();
|
||||
else if (posX < 0)
|
||||
this._scrollToLeft();
|
||||
|
@ -559,7 +559,7 @@ AppWellIcon.prototype = {
|
||||
this._menu.connect('activate-window', Lang.bind(this, function (menu, window) {
|
||||
this.activateWindow(window);
|
||||
}));
|
||||
this._menu.connect('popup', Lang.bind(this, function (menu, isPoppedUp) {
|
||||
this._menu.connect('open-state-changed', Lang.bind(this, function (menu, isPoppedUp) {
|
||||
if (!isPoppedUp)
|
||||
this._onMenuPoppedDown();
|
||||
}));
|
||||
@ -643,7 +643,6 @@ AppIconMenu.prototype = {
|
||||
this._source = source;
|
||||
|
||||
this.connect('activate', Lang.bind(this, this._onActivate));
|
||||
this.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
|
||||
|
||||
this.actor.add_style_class_name('app-well-menu');
|
||||
|
||||
@ -707,14 +706,6 @@ AppIconMenu.prototype = {
|
||||
this.open();
|
||||
},
|
||||
|
||||
_onOpenStateChanged: function (menu, open) {
|
||||
if (open) {
|
||||
this.emit('popup', true);
|
||||
} else {
|
||||
this.emit('popup', false);
|
||||
}
|
||||
},
|
||||
|
||||
_onActivate: function (actor, child) {
|
||||
if (child._window) {
|
||||
let metaWindow = child._window;
|
||||
|
@ -23,8 +23,6 @@ const AutorunSetting = {
|
||||
ASK: 3
|
||||
};
|
||||
|
||||
const HOTPLUG_ICON_SIZE = 16;
|
||||
|
||||
// misc utils
|
||||
function ignoreAutorunForMount(mount) {
|
||||
let root = mount.get_root();
|
||||
@ -279,12 +277,12 @@ AutorunResidentSource.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init: function() {
|
||||
MessageTray.Source.prototype._init.call(this, _('Removable Devices'));
|
||||
MessageTray.Source.prototype._init.call(this, _("Removable Devices"));
|
||||
|
||||
this._mounts = [];
|
||||
|
||||
this._notification = new AutorunResidentNotification(this);
|
||||
this._setSummaryIcon(this.createNotificationIcon(HOTPLUG_ICON_SIZE));
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
addMount: function(mount, apps) {
|
||||
@ -329,10 +327,10 @@ AutorunResidentSource.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
createNotificationIcon: function(iconSize) {
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon ({ icon_name: 'media-removable',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: iconSize ? iconSize : this.ICON_SIZE });
|
||||
icon_size: this.ICON_SIZE });
|
||||
}
|
||||
}
|
||||
|
||||
@ -533,16 +531,16 @@ AutorunTransientSource.prototype = {
|
||||
this.apps = apps;
|
||||
|
||||
this._notification = new AutorunTransientNotification(this);
|
||||
this._setSummaryIcon(this.createNotificationIcon(this.ICON_SIZE));
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
|
||||
// add ourselves as a source, and popup the notification
|
||||
Main.messageTray.add(this);
|
||||
this.notify(this._notification);
|
||||
},
|
||||
|
||||
createNotificationIcon: function(iconSize) {
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ gicon: this.mount.get_icon(),
|
||||
icon_size: iconSize ? iconSize : this.ICON_SIZE });
|
||||
icon_size: this.ICON_SIZE });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ CtrlAltTabManager.prototype = {
|
||||
return a.x - b.x;
|
||||
},
|
||||
|
||||
popup: function(backwards) {
|
||||
popup: function(backwards, mask) {
|
||||
// Start with the set of focus groups that are currently mapped
|
||||
let items = this._items.filter(function (item) { return item.proxy.mapped; });
|
||||
|
||||
@ -123,7 +123,16 @@ CtrlAltTabManager.prototype = {
|
||||
return;
|
||||
|
||||
items.sort(Lang.bind(this, this._sortItems));
|
||||
new CtrlAltTabPopup().show(items, backwards);
|
||||
|
||||
if (!this._popup) {
|
||||
this._popup = new CtrlAltTabPopup();
|
||||
this._popup.show(items, backwards, mask);
|
||||
|
||||
this._popup.actor.connect('destroy',
|
||||
Lang.bind(this, function() {
|
||||
this._popup = null;
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -147,6 +156,7 @@ CtrlAltTabPopup.prototype = {
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
this._haveModal = false;
|
||||
this._modifierMask = 0;
|
||||
this._selection = 0;
|
||||
|
||||
Main.uiGroup.add_actor(this.actor);
|
||||
@ -183,10 +193,11 @@ CtrlAltTabPopup.prototype = {
|
||||
this._switcher.actor.allocate(childBox, flags);
|
||||
},
|
||||
|
||||
show : function(items, startBackwards) {
|
||||
show : function(items, startBackwards, mask) {
|
||||
if (!Main.pushModal(this.actor))
|
||||
return false;
|
||||
this._haveModal = true;
|
||||
this._modifierMask = AltTab.primaryModifier(mask);
|
||||
|
||||
this._keyPressEventId = this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
|
||||
this._keyReleaseEventId = this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
|
||||
@ -200,7 +211,7 @@ CtrlAltTabPopup.prototype = {
|
||||
this._select(this._selection);
|
||||
|
||||
let [x, y, mods] = global.get_pointer();
|
||||
if (!(mods & Gdk.ModifierType.MOD1_MASK)) {
|
||||
if (!(mods & this._modifierMask)) {
|
||||
this._finish();
|
||||
return false;
|
||||
}
|
||||
@ -246,7 +257,7 @@ CtrlAltTabPopup.prototype = {
|
||||
|
||||
_keyReleaseEvent : function(actor, event) {
|
||||
let [x, y, mods] = global.get_pointer();
|
||||
let state = mods & Clutter.ModifierType.MOD1_MASK;
|
||||
let state = mods & this._modifierMask;
|
||||
|
||||
if (state == 0)
|
||||
this._finish();
|
||||
|
@ -684,6 +684,8 @@ Dash.prototype = {
|
||||
}
|
||||
|
||||
this._dragPlaceholder = new DragPlaceholderItem();
|
||||
this._dragPlaceholder.child.set_width (this.iconSize);
|
||||
this._dragPlaceholder.child.set_height (this.iconSize / 2);
|
||||
this._box.insert_actor(this._dragPlaceholder.actor,
|
||||
this._dragPlaceholderPos);
|
||||
if (fadeIn)
|
||||
|
@ -60,7 +60,7 @@ DateMenuButton.prototype = {
|
||||
PanelMenu.Button.prototype._init.call(this, menuAlignment);
|
||||
|
||||
this._clock = new St.Label();
|
||||
this.actor.set_child(this._clock);
|
||||
this.actor.add_actor(this._clock);
|
||||
|
||||
hbox = new St.BoxLayout({name: 'calendarArea' });
|
||||
this.menu.addActor(hbox);
|
||||
|
@ -15,9 +15,11 @@ const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
|
||||
const KEYBOARD_SCHEMA = 'org.gnome.shell.keyboard';
|
||||
const SHOW_KEYBOARD = 'show-keyboard';
|
||||
const KEYBOARD_TYPE = 'keyboard-type';
|
||||
|
||||
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
||||
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
|
||||
|
||||
// Key constants taken from Antler
|
||||
// FIXME: ought to be moved into libcaribou
|
||||
const PRETTY_KEYS = {
|
||||
@ -207,6 +209,8 @@ Keyboard.prototype = {
|
||||
|
||||
this._keyboardSettings = new Gio.Settings({ schema: KEYBOARD_SCHEMA });
|
||||
this._keyboardSettings.connect('changed', Lang.bind(this, this._settingsChanged));
|
||||
this._a11yApplicationsSettings = new Gio.Settings({ schema: A11Y_APPLICATIONS_SCHEMA });
|
||||
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._settingsChanged));
|
||||
this._settingsChanged();
|
||||
},
|
||||
|
||||
@ -215,7 +219,7 @@ Keyboard.prototype = {
|
||||
},
|
||||
|
||||
_settingsChanged: function () {
|
||||
this._enableKeyboard = this._keyboardSettings.get_boolean(SHOW_KEYBOARD);
|
||||
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD);
|
||||
if (!this._enableKeyboard && !this._keyboard)
|
||||
return;
|
||||
if (this._enableKeyboard && this._keyboard &&
|
||||
@ -488,11 +492,11 @@ Keyboard.prototype = {
|
||||
},
|
||||
|
||||
SetCursorLocation: function(x, y, w, h) {
|
||||
this._setLocation(x, y);
|
||||
// this._setLocation(x, y);
|
||||
},
|
||||
|
||||
SetEntryLocation: function(x, y, w, h) {
|
||||
this._setLocation(x, y);
|
||||
// this._setLocation(x, y);
|
||||
},
|
||||
|
||||
get Name() {
|
||||
|
@ -45,7 +45,9 @@ LayoutManager.prototype = {
|
||||
this.trayBox.connect('allocation-changed',
|
||||
Lang.bind(this, this._updateTrayBarrier));
|
||||
|
||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox' });
|
||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
||||
reactive: true,
|
||||
track_hover: true });
|
||||
this.addChrome(this.keyboardBox, { visibleInFullscreen: true });
|
||||
this._keyboardHeightNotifyId = 0;
|
||||
|
||||
|
@ -607,6 +607,9 @@ Memory.prototype = {
|
||||
this._gjs_closure = new St.Label();
|
||||
this.actor.add(this._gjs_closure);
|
||||
|
||||
this._last_gc_seconds_ago = new St.Label();
|
||||
this.actor.add(this._last_gc_seconds_ago);
|
||||
|
||||
this._gcbutton = new St.Button({ label: 'Full GC',
|
||||
style_class: 'lg-obj-inspector-button' });
|
||||
this._gcbutton.connect('clicked', Lang.bind(this, function () { global.gc(); this._renderText(); }));
|
||||
@ -626,6 +629,7 @@ Memory.prototype = {
|
||||
this._gjs_gobject.text = 'gjs_gobject: ' + memInfo.gjs_gobject;
|
||||
this._gjs_function.text = 'gjs_function: ' + memInfo.gjs_function;
|
||||
this._gjs_closure.text = 'gjs_closure: ' + memInfo.gjs_closure;
|
||||
this._last_gc_seconds_ago.text = 'last_gc_seconds_ago: ' + memInfo.last_gc_seconds_ago;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -595,9 +595,9 @@ function _globalKeyPressHandler(actor, event) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Other bindings are only available when the overview is up and
|
||||
// Other bindings are only available to the user session when the overview is up and
|
||||
// no modal dialog is present.
|
||||
if (!overview.visible || modalCount > 1)
|
||||
if (global.session_type == Shell.SessionType.USER && (!overview.visible || modalCount > 1))
|
||||
return false;
|
||||
|
||||
// This isn't a Meta.KeyBindingAction yet
|
||||
@ -607,7 +607,8 @@ function _globalKeyPressHandler(actor, event) {
|
||||
}
|
||||
|
||||
if (action == Meta.KeyBindingAction.SWITCH_PANELS) {
|
||||
ctrlAltTabManager.popup(modifierState & Clutter.ModifierType.SHIFT_MASK);
|
||||
ctrlAltTabManager.popup(modifierState & Clutter.ModifierType.SHIFT_MASK,
|
||||
modifierState);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -284,7 +284,8 @@ FocusGrabber.prototype = {
|
||||
let source = event.get_source();
|
||||
switch (event.type()) {
|
||||
case Clutter.EventType.BUTTON_PRESS:
|
||||
if (!this.actor.contains(source) && !Main.keyboard.actor.contains(source))
|
||||
if (!this.actor.contains(source) &&
|
||||
!Main.layoutManager.keyboardBox.contains(source))
|
||||
this.emit('button-pressed', source);
|
||||
break;
|
||||
case Clutter.EventType.KEY_PRESS:
|
||||
@ -415,6 +416,7 @@ Notification.prototype = {
|
||||
|
||||
_init: function(source, title, banner, params) {
|
||||
this.source = source;
|
||||
this.title = title;
|
||||
this.urgency = Urgency.NORMAL;
|
||||
this.resident = false;
|
||||
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
|
||||
@ -502,8 +504,11 @@ Notification.prototype = {
|
||||
|
||||
let oldFocus = global.stage.key_focus;
|
||||
|
||||
if (this._icon)
|
||||
if (this._icon && (params.icon || params.clear)) {
|
||||
this._icon.destroy();
|
||||
this._icon = null;
|
||||
}
|
||||
|
||||
// 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.
|
||||
@ -529,14 +534,17 @@ Notification.prototype = {
|
||||
if (!this._scrollArea && !this._actionArea && !this._imageBin)
|
||||
this._table.remove_style_class_name('multi-line-notification');
|
||||
|
||||
this._icon = params.icon || this.source.createNotificationIcon();
|
||||
this._table.add(this._icon, { row: 0,
|
||||
col: 0,
|
||||
x_expand: false,
|
||||
y_expand: false,
|
||||
y_fill: false,
|
||||
y_align: St.Align.START });
|
||||
if (!this._icon) {
|
||||
this._icon = params.icon || this.source.createNotificationIcon();
|
||||
this._table.add(this._icon, { row: 0,
|
||||
col: 0,
|
||||
x_expand: false,
|
||||
y_expand: false,
|
||||
y_fill: false,
|
||||
y_align: St.Align.START });
|
||||
}
|
||||
|
||||
this.title = title;
|
||||
title = title ? _fixMarkup(title.replace(/\n/g, ' '), params.titleMarkup) : '';
|
||||
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
|
||||
|
||||
@ -791,11 +799,12 @@ Notification.prototype = {
|
||||
},
|
||||
|
||||
_bannerBoxAllocate: function(actor, box, flags) {
|
||||
let [titleMinW, titleNatW] = this._titleLabel.get_preferred_width(-1);
|
||||
let [titleMinH, titleNatH] = this._titleLabel.get_preferred_height(-1);
|
||||
let [bannerMinW, bannerNatW] = this._bannerLabel.get_preferred_width(-1);
|
||||
let availWidth = box.x2 - box.x1;
|
||||
|
||||
let [titleMinW, titleNatW] = this._titleLabel.get_preferred_width(-1);
|
||||
let [titleMinH, titleNatH] = this._titleLabel.get_preferred_height(availWidth);
|
||||
let [bannerMinW, bannerNatW] = this._bannerLabel.get_preferred_width(availWidth);
|
||||
|
||||
let titleBox = new Clutter.ActorBox();
|
||||
let titleBoxW = Math.min(titleNatW, availWidth);
|
||||
if (this._titleDirection == St.TextDirection.RTL) {
|
||||
@ -1347,6 +1356,7 @@ MessageTray.prototype = {
|
||||
this._summaryBin.opacity = 0;
|
||||
|
||||
this._summaryMotionId = 0;
|
||||
this._trayMotionId = 0;
|
||||
|
||||
this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
|
||||
{ reactive: true,
|
||||
@ -1386,12 +1396,15 @@ MessageTray.prototype = {
|
||||
}));
|
||||
this._focusGrabber.connect('escape-pressed', Lang.bind(this, this._escapeTray));
|
||||
|
||||
Main.layoutManager.keyboardBox.connect('notify::hover', Lang.bind(this, this._onKeyboardHoverChanged));
|
||||
|
||||
this._trayState = State.HIDDEN;
|
||||
this._locked = false;
|
||||
this._traySummoned = false;
|
||||
this._useLongerTrayLeftTimeout = false;
|
||||
this._trayLeftTimeoutId = 0;
|
||||
this._pointerInTray = false;
|
||||
this._pointerInKeyboard = false;
|
||||
this._summaryState = State.HIDDEN;
|
||||
this._summaryTimeoutId = 0;
|
||||
this._pointerInSummary = false;
|
||||
@ -1494,8 +1507,11 @@ MessageTray.prototype = {
|
||||
// after notifications are done showing. However, we don't want that to happen for
|
||||
// transient sources, which are removed after the notification is shown, but are
|
||||
// not removed fast enough because of the callbacks to avoid the summary popping up.
|
||||
// So we just don't add transient sources to this._newSummaryItems .
|
||||
if (!source.isTransient)
|
||||
// So we just don't add transient sources to this._newSummaryItems.
|
||||
// We don't want that to happen for chat sources neither, because they
|
||||
// can be added when the user starts a chat from Empathy and they are not transient.
|
||||
// The notification will popup on incoming message anyway. See bug #657249.
|
||||
if (!source.isTransient && !source.isChat)
|
||||
this._newSummaryItems.push(summaryItem);
|
||||
|
||||
source.connect('notify', Lang.bind(this, this._onNotify));
|
||||
@ -1838,6 +1854,24 @@ MessageTray.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_onKeyboardHoverChanged: function(keyboard) {
|
||||
this._pointerInKeyboard = keyboard.hover;
|
||||
|
||||
if (!keyboard.hover) {
|
||||
let event = Clutter.get_current_event();
|
||||
if (event && event.type() == Clutter.EventType.LEAVE) {
|
||||
let into = event.get_related();
|
||||
if (into && this.actor.contains(into)) {
|
||||
// Don't call _updateState, because pointerInTray is
|
||||
// still false
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this._updateState();
|
||||
},
|
||||
|
||||
_onStatusChanged: function(presence, status) {
|
||||
this._backFromAway = (this._userStatus == GnomeSession.PresenceStatus.IDLE && this._userStatus != status);
|
||||
this._userStatus = status;
|
||||
@ -1902,7 +1936,7 @@ MessageTray.prototype = {
|
||||
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 notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked && !(this._pointerInKeyboard && notificationExpanded)) || this._notificationRemoved;
|
||||
let canShowNotification = notificationsPending && this._summaryState == State.HIDDEN;
|
||||
|
||||
if (this._notificationState == State.HIDDEN) {
|
||||
@ -2260,6 +2294,8 @@ MessageTray.prototype = {
|
||||
// _clickedSummaryItem.actor can change absolute position without changing allocation
|
||||
this._summaryMotionId = this._summary.connect('allocation-changed',
|
||||
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||
this._trayMotionId = Main.layoutManager.trayBox.connect('notify::anchor-y',
|
||||
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||
|
||||
this._summaryBoxPointer.actor.opacity = 0;
|
||||
this._summaryBoxPointer.actor.show();
|
||||
@ -2291,8 +2327,10 @@ MessageTray.prototype = {
|
||||
if (this._clickedSummaryItemAllocationChangedId) {
|
||||
this._clickedSummaryItem.actor.disconnect(this._clickedSummaryItemAllocationChangedId);
|
||||
this._summary.disconnect(this._summaryMotionId);
|
||||
Main.layoutManager.trayBox.disconnect(this._trayMotionId);
|
||||
this._clickedSummaryItemAllocationChangedId = 0;
|
||||
this._summaryMotionId = 0;
|
||||
this._trayMotionId = 0;
|
||||
}
|
||||
|
||||
if (this._clickedSummaryItem)
|
||||
@ -2311,8 +2349,9 @@ MessageTray.prototype = {
|
||||
}
|
||||
|
||||
this._summaryBoxPointerState = State.HIDING;
|
||||
// Unset this._clickedSummaryItem if we are no longer showing the summary
|
||||
if (this._summaryState != State.SHOWN)
|
||||
// Unset this._clickedSummaryItem if we are no longer showing the summary or if
|
||||
// this._clickedSummaryItem is still the item associated with the currently showing box pointer
|
||||
if (this._summaryState != State.SHOWN || this._summaryBoxPointerItem == this._clickedSummaryItem)
|
||||
this._unsetClickedSummaryItem();
|
||||
|
||||
this._focusGrabber.ungrabFocus();
|
||||
|
@ -110,9 +110,8 @@ ModalDialog.prototype = {
|
||||
this._buttonLayout.destroy_children();
|
||||
this._actionKeys = {};
|
||||
|
||||
let i = 0;
|
||||
for (let index in buttons) {
|
||||
let buttonInfo = buttons[index];
|
||||
for (let i = 0; i < buttons.length; i ++) {
|
||||
let buttonInfo = buttons[i];
|
||||
let label = buttonInfo['label'];
|
||||
let action = buttonInfo['action'];
|
||||
let key = buttonInfo['key'];
|
||||
@ -132,7 +131,9 @@ ModalDialog.prototype = {
|
||||
else
|
||||
x_alignment = St.Align.MIDDLE;
|
||||
|
||||
this._initialKeyFocus = buttonInfo.button;
|
||||
if (this._initialKeyFocus == this._dialogLayout ||
|
||||
this._buttonLayout.contains(this._initialKeyFocus))
|
||||
this._initialKeyFocus = buttonInfo.button;
|
||||
this._buttonLayout.add(buttonInfo.button,
|
||||
{ expand: true,
|
||||
x_fill: false,
|
||||
@ -144,11 +145,10 @@ ModalDialog.prototype = {
|
||||
|
||||
if (key)
|
||||
this._actionKeys[key] = action;
|
||||
i++;
|
||||
}
|
||||
|
||||
// Fade in buttons if there weren't any before
|
||||
if (!hadChildren && i > 0) {
|
||||
if (!hadChildren && buttons.length > 0) {
|
||||
this._buttonLayout.opacity = 0;
|
||||
Tweener.addTween(this._buttonLayout,
|
||||
{ opacity: 255,
|
||||
|
@ -91,6 +91,7 @@ NetworkSecretDialog.prototype = {
|
||||
}
|
||||
|
||||
let secretTable = new St.Table({ style_class: 'network-dialog-secret-table' });
|
||||
let initialFocusSet = false;
|
||||
let pos = 0;
|
||||
for (let i = 0; i < this._content.secrets.length; i++) {
|
||||
let secret = this._content.secrets[i];
|
||||
@ -109,6 +110,12 @@ NetworkSecretDialog.prototype = {
|
||||
secret.valid = secret.value.length > 0;
|
||||
|
||||
if (reactive) {
|
||||
if (!initialFocusSet) {
|
||||
this.setInitialKeyFocus(secret.entry);
|
||||
initialFocusSet = true;
|
||||
}
|
||||
|
||||
secret.entry.clutter_text.connect('activate', Lang.bind(this, this._onOk));
|
||||
secret.entry.clutter_text.connect('text-changed', Lang.bind(this, function() {
|
||||
secret.value = secret.entry.get_text();
|
||||
if (secret.validate)
|
||||
|
136
js/ui/panel.js
136
js/ui/panel.js
@ -16,7 +16,6 @@ const Layout = imports.ui.layout;
|
||||
const Overview = imports.ui.overview;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const UserMenu = imports.ui.userMenu;
|
||||
const DateMenu = imports.ui.dateMenu;
|
||||
const Main = imports.ui.main;
|
||||
const Tweener = imports.ui.tweener;
|
||||
@ -28,29 +27,31 @@ const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
||||
const SPINNER_ANIMATION_TIME = 0.2;
|
||||
|
||||
const STANDARD_TRAY_ICON_ORDER = ['a11y', 'keyboard', 'volume', 'bluetooth', 'network', 'battery'];
|
||||
const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
|
||||
const STANDARD_STATUS_AREA_ORDER = ['a11y', 'keyboard', 'volume', 'bluetooth', 'network', 'battery', 'userMenu'];
|
||||
const STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION = {
|
||||
'a11y': imports.ui.status.accessibility.ATIndicator,
|
||||
'volume': imports.ui.status.volume.Indicator,
|
||||
'battery': imports.ui.status.power.Indicator,
|
||||
'keyboard': imports.ui.status.keyboard.XKBIndicator
|
||||
'keyboard': imports.ui.status.keyboard.XKBIndicator,
|
||||
'userMenu': imports.ui.userMenu.UserMenuButton
|
||||
};
|
||||
|
||||
if (Config.HAVE_BLUETOOTH)
|
||||
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
|
||||
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
|
||||
|
||||
try {
|
||||
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['network'] = imports.ui.status.network.NMApplet;
|
||||
STANDARD_STATUS_AREA_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');
|
||||
}
|
||||
|
||||
const GDM_TRAY_ICON_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'battery'];
|
||||
const GDM_TRAY_ICON_SHELL_IMPLEMENTATION = {
|
||||
const GDM_STATUS_AREA_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'battery', 'powerMenu'];
|
||||
const GDM_STATUS_AREA_SHELL_IMPLEMENTATION = {
|
||||
'a11y': imports.ui.status.accessibility.ATIndicator,
|
||||
'volume': imports.ui.status.volume.Indicator,
|
||||
'battery': imports.ui.status.power.Indicator,
|
||||
'keyboard': imports.ui.status.keyboard.XKBIndicator
|
||||
'keyboard': imports.ui.status.keyboard.XKBIndicator,
|
||||
'powerMenu': imports.gdm.powerMenu.PowerMenuButton
|
||||
};
|
||||
|
||||
// To make sure the panel corners blend nicely with the panel,
|
||||
@ -248,7 +249,7 @@ AppMenuButton.prototype = {
|
||||
this._targetApp = null;
|
||||
|
||||
let bin = new St.Bin({ name: 'appMenu' });
|
||||
this.actor.set_child(bin);
|
||||
this.actor.add_actor(bin);
|
||||
|
||||
this.actor.reactive = false;
|
||||
this._targetIsCurrent = false;
|
||||
@ -563,10 +564,10 @@ ActivitiesButton.prototype = {
|
||||
PanelMenu.Button.prototype._init.call(this, 0.0);
|
||||
|
||||
let container = new Shell.GenericContainer();
|
||||
container.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||
container.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||
container.connect('allocate', Lang.bind(this, this._allocate));
|
||||
this.actor.child = container;
|
||||
container.connect('get-preferred-width', Lang.bind(this, this._containerGetPreferredWidth));
|
||||
container.connect('get-preferred-height', Lang.bind(this, this._containerGetPreferredHeight));
|
||||
container.connect('allocate', Lang.bind(this, this._containerAllocate));
|
||||
this.actor.add_actor(container);
|
||||
this.actor.name = 'panelActivities';
|
||||
|
||||
/* Translators: If there is no suitable word for "Activities"
|
||||
@ -598,15 +599,15 @@ ActivitiesButton.prototype = {
|
||||
this._xdndTimeOut = 0;
|
||||
},
|
||||
|
||||
_getPreferredWidth: function(actor, forHeight, alloc) {
|
||||
_containerGetPreferredWidth: function(actor, forHeight, alloc) {
|
||||
[alloc.min_size, alloc.natural_size] = this._label.get_preferred_width(forHeight);
|
||||
},
|
||||
|
||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
||||
_containerGetPreferredHeight: function(actor, forWidth, alloc) {
|
||||
[alloc.min_size, alloc.natural_size] = this._label.get_preferred_height(forWidth);
|
||||
},
|
||||
|
||||
_allocate: function(actor, box, flags) {
|
||||
_containerAllocate: function(actor, box, flags) {
|
||||
this._label.allocate(box, flags);
|
||||
|
||||
// The hot corner needs to be outside any padding/alignment
|
||||
@ -782,8 +783,10 @@ PanelCorner.prototype = {
|
||||
button = this._findRightmostButton(this._box);
|
||||
|
||||
if (button) {
|
||||
if (this._button && this._buttonStyleChangedSignalId)
|
||||
if (this._button && this._buttonStyleChangedSignalId) {
|
||||
this._button.disconnect(this._buttonStyleChangedSignalId);
|
||||
this._button.style = null;
|
||||
}
|
||||
|
||||
this._button = button;
|
||||
|
||||
@ -801,6 +804,10 @@ PanelCorner.prototype = {
|
||||
let pseudoClass = button.get_style_pseudo_class();
|
||||
this.actor.set_style_pseudo_class(pseudoClass);
|
||||
}));
|
||||
|
||||
// The corner doesn't support theme transitions, so override
|
||||
// the .panel-button default
|
||||
button.style = 'transition-duration: 0';
|
||||
}
|
||||
},
|
||||
|
||||
@ -895,14 +902,6 @@ Panel.prototype = {
|
||||
this.actor.remove_style_class_name('in-overview');
|
||||
}));
|
||||
|
||||
if (global.session_type == Shell.SessionType.GDM) {
|
||||
this._tray_icon_order = GDM_TRAY_ICON_ORDER;
|
||||
this._tray_icon_shell_implementation = GDM_TRAY_ICON_SHELL_IMPLEMENTATION;
|
||||
} else {
|
||||
this._tray_icon_order = STANDARD_TRAY_ICON_ORDER;
|
||||
this._tray_icon_shell_implementation = STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION;
|
||||
}
|
||||
|
||||
this._menus = new PopupMenu.PopupMenuManager(this);
|
||||
|
||||
this._leftBox = new St.BoxLayout({ name: 'panelLeft' });
|
||||
@ -953,21 +952,12 @@ Panel.prototype = {
|
||||
this._menus.addMenu(this._dateMenu.menu);
|
||||
|
||||
/* right */
|
||||
|
||||
// System status applets live in statusBox, while legacy tray icons
|
||||
// live in trayBox
|
||||
// The trayBox is hidden when there are no tray icons.
|
||||
this._trayBox = new St.BoxLayout({ name: 'legacyTray' });
|
||||
this._statusBox = new St.BoxLayout({ name: 'statusTray' });
|
||||
|
||||
this._trayBox.hide();
|
||||
this._rightBox.add(this._trayBox);
|
||||
this._rightBox.add(this._statusBox);
|
||||
|
||||
if (global.session_type == Shell.SessionType.USER) {
|
||||
this._userMenu = new UserMenu.UserMenuButton();
|
||||
this._userMenu.actor.name = 'panelStatus';
|
||||
this._rightBox.add(this._userMenu.actor);
|
||||
if (global.session_type == Shell.SessionType.GDM) {
|
||||
this._status_area_order = GDM_STATUS_AREA_ORDER;
|
||||
this._status_area_shell_implementation = GDM_STATUS_AREA_SHELL_IMPLEMENTATION;
|
||||
} else {
|
||||
this._status_area_order = STANDARD_STATUS_AREA_ORDER;
|
||||
this._status_area_shell_implementation = STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION;
|
||||
}
|
||||
|
||||
Main.statusIconDispatcher.connect('status-icon-added', Lang.bind(this, this._onTrayIconAdded));
|
||||
@ -1053,9 +1043,9 @@ Panel.prototype = {
|
||||
},
|
||||
|
||||
startStatusArea: function() {
|
||||
for (let i = 0; i < this._tray_icon_order.length; i++) {
|
||||
let role = this._tray_icon_order[i];
|
||||
let constructor = this._tray_icon_shell_implementation[role];
|
||||
for (let i = 0; i < this._status_area_order.length; i++) {
|
||||
let role = this._status_area_order[i];
|
||||
let constructor = this._status_area_shell_implementation[role];
|
||||
if (!constructor) {
|
||||
// This icon is not implemented (this is a bug)
|
||||
continue;
|
||||
@ -1064,11 +1054,23 @@ Panel.prototype = {
|
||||
let indicator = new constructor();
|
||||
this.addToStatusArea(role, indicator, i);
|
||||
}
|
||||
},
|
||||
|
||||
// PopupMenuManager depends on menus being added in order for
|
||||
// keyboard navigation
|
||||
if (this._userMenu)
|
||||
this._menus.addMenu(this._userMenu.menu);
|
||||
_insertStatusItem: function(actor, position) {
|
||||
let children = this._rightBox.get_children();
|
||||
let i;
|
||||
for (i = children.length - 1; i >= 0; i--) {
|
||||
let rolePosition = children[i]._rolePosition;
|
||||
if (position > rolePosition) {
|
||||
this._rightBox.insert_actor(actor, i + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == -1) {
|
||||
// If we didn't find a position, we must be first
|
||||
this._rightBox.insert_actor(actor, 0);
|
||||
}
|
||||
actor._rolePosition = position;
|
||||
},
|
||||
|
||||
addToStatusArea: function(role, indicator, position) {
|
||||
@ -1080,8 +1082,7 @@ Panel.prototype = {
|
||||
|
||||
if (!position)
|
||||
position = 0;
|
||||
|
||||
this._statusBox.insert_actor(indicator.actor, position);
|
||||
this._insertStatusItem(indicator.actor, position);
|
||||
this._menus.addMenu(indicator.menu);
|
||||
|
||||
this._statusArea[role] = indicator;
|
||||
@ -1094,39 +1095,24 @@ Panel.prototype = {
|
||||
},
|
||||
|
||||
_onTrayIconAdded: function(o, icon, role) {
|
||||
icon.height = PANEL_ICON_SIZE;
|
||||
|
||||
if (this._tray_icon_shell_implementation[role]) {
|
||||
if (this._status_area_shell_implementation[role]) {
|
||||
// This icon is legacy, and replaced by a Shell version
|
||||
// Hide it
|
||||
return;
|
||||
}
|
||||
// Figure out the index in our well-known order for this icon
|
||||
let position = this._tray_icon_order.indexOf(role);
|
||||
icon._rolePosition = position;
|
||||
let children = this._trayBox.get_children();
|
||||
let i;
|
||||
// Walk children backwards, until we find one that isn't
|
||||
// well-known, or one where we should follow
|
||||
for (i = children.length - 1; i >= 0; i--) {
|
||||
let rolePosition = children[i]._rolePosition;
|
||||
if (!rolePosition || position > rolePosition) {
|
||||
this._trayBox.insert_actor(icon, i + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == -1) {
|
||||
// If we didn't find a position, we must be first
|
||||
this._trayBox.insert_actor(icon, 0);
|
||||
}
|
||||
|
||||
// Make sure the trayBox is shown.
|
||||
this._trayBox.show();
|
||||
icon.height = PANEL_ICON_SIZE;
|
||||
let buttonBox = new PanelMenu.ButtonBox();
|
||||
let box = buttonBox.actor;
|
||||
box.add_actor(icon);
|
||||
|
||||
this._insertStatusItem(box, this._status_area_order.indexOf(role));
|
||||
},
|
||||
|
||||
_onTrayIconRemoved: function(o, icon) {
|
||||
if (icon.get_parent() != null)
|
||||
this._trayBox.remove_actor(icon);
|
||||
let box = icon.get_parent();
|
||||
if (box && box._delegate instanceof PanelMenu.ButtonBox)
|
||||
box.destroy();
|
||||
},
|
||||
|
||||
};
|
||||
|
@ -2,26 +2,110 @@
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Lang = imports.lang;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Main = imports.ui.main;
|
||||
const Params = imports.misc.params;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
function ButtonBox(params) {
|
||||
this._init.apply(this, arguments);
|
||||
};
|
||||
|
||||
ButtonBox.prototype = {
|
||||
_init: function(params) {
|
||||
params = Params.parse(params, { style_class: 'panel-button' }, true);
|
||||
this.actor = new Shell.GenericContainer(params);
|
||||
this.actor._delegate = this;
|
||||
|
||||
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.connect('style-changed', Lang.bind(this, this._onStyleChanged));
|
||||
this._minHPadding = this._natHPadding = 0.0;
|
||||
},
|
||||
|
||||
_onStyleChanged: function(actor) {
|
||||
let themeNode = actor.get_theme_node();
|
||||
|
||||
this._minHPadding = themeNode.get_length('-minimum-hpadding');
|
||||
this._natHPadding = themeNode.get_length('-natural-hpadding');
|
||||
},
|
||||
|
||||
_getPreferredWidth: function(actor, forHeight, alloc) {
|
||||
let children = actor.get_children();
|
||||
let child = children.length > 0 ? children[0] : null;
|
||||
|
||||
if (child) {
|
||||
[alloc.min_size, alloc.natural_size] = child.get_preferred_width(-1);
|
||||
} else {
|
||||
alloc.min_size = alloc.natural_size = 0;
|
||||
}
|
||||
|
||||
alloc.min_size += 2 * this._minHPadding;
|
||||
alloc.natural_size += 2 * this._natHPadding;
|
||||
},
|
||||
|
||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
||||
let children = actor.get_children();
|
||||
let child = children.length > 0 ? children[0] : null;
|
||||
|
||||
if (child) {
|
||||
[alloc.min_size, alloc.natural_size] = child.get_preferred_height(-1);
|
||||
} else {
|
||||
alloc.min_size = alloc.natural_size = 0;
|
||||
}
|
||||
},
|
||||
|
||||
_allocate: function(actor, box, flags) {
|
||||
let children = actor.get_children();
|
||||
if (children.length == 0)
|
||||
return;
|
||||
|
||||
let child = children[0];
|
||||
let [minWidth, natWidth] = child.get_preferred_width(-1);
|
||||
let [minHeight, natHeight] = child.get_preferred_height(-1);
|
||||
|
||||
let availWidth = box.x2 - box.x1;
|
||||
let availHeight = box.y2 - box.y1;
|
||||
|
||||
let childBox = new Clutter.ActorBox();
|
||||
if (natWidth + 2 * this._natHPadding <= availWidth) {
|
||||
childBox.x1 = this._natHPadding;
|
||||
childBox.x2 = availWidth - this._natHPadding;
|
||||
} else {
|
||||
childBox.x1 = this._minHPadding;
|
||||
childBox.x2 = availWidth - this._minHPadding;
|
||||
}
|
||||
|
||||
if (natHeight <= availHeight) {
|
||||
childBox.y1 = Math.floor((availHeight - natHeight) / 2);
|
||||
childBox.y2 = childBox.y1 + natHeight;
|
||||
} else {
|
||||
childBox.y1 = 0;
|
||||
childBox.y2 = availHeight;
|
||||
}
|
||||
|
||||
child.allocate(childBox, flags);
|
||||
},
|
||||
}
|
||||
|
||||
function Button(menuAlignment) {
|
||||
this._init(menuAlignment);
|
||||
}
|
||||
|
||||
Button.prototype = {
|
||||
__proto__: ButtonBox.prototype,
|
||||
|
||||
_init: function(menuAlignment) {
|
||||
this.actor = new St.Bin({ style_class: 'panel-button',
|
||||
reactive: true,
|
||||
can_focus: true,
|
||||
x_fill: true,
|
||||
y_fill: false,
|
||||
track_hover: true });
|
||||
this.actor._delegate = this;
|
||||
ButtonBox.prototype._init.call(this, { reactive: true,
|
||||
can_focus: true,
|
||||
track_hover: true });
|
||||
|
||||
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress));
|
||||
this.menu = new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP);
|
||||
@ -112,7 +196,8 @@ SystemStatusButton.prototype = {
|
||||
this._iconActor = new St.Icon({ icon_name: iconName,
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
style_class: 'system-status-icon' });
|
||||
this.actor.set_child(this._iconActor);
|
||||
this.actor.add_actor(this._iconActor);
|
||||
this.actor.add_style_class_name('panel-status-button');
|
||||
this.setTooltip(tooltipText);
|
||||
},
|
||||
|
||||
|
@ -142,6 +142,7 @@ AuthenticationDialog.prototype = {
|
||||
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
|
||||
this._passwordBox.add(this._passwordEntry,
|
||||
{expand: true });
|
||||
this.setInitialKeyFocus(this._passwordEntry);
|
||||
this._passwordBox.hide();
|
||||
|
||||
this._errorMessageLabel = new St.Label({ style_class: 'polkit-dialog-error-label' });
|
||||
@ -186,13 +187,6 @@ AuthenticationDialog.prototype = {
|
||||
this._session.connect('request', Lang.bind(this, this._onSessionRequest));
|
||||
this._session.connect('show-error', Lang.bind(this, this._onSessionShowError));
|
||||
this._session.connect('show-info', Lang.bind(this, this._onSessionShowInfo));
|
||||
|
||||
// Delay focus grab to avoid ModalDialog stealing focus with
|
||||
// its buttons
|
||||
this.connect('opened',
|
||||
Lang.bind(this, function() {
|
||||
this._passwordEntry.grab_key_focus();
|
||||
}));
|
||||
},
|
||||
|
||||
startAuthentication: function() {
|
||||
|
@ -35,6 +35,7 @@ PopupBaseMenuItem.prototype = {
|
||||
params = Params.parse (params, { reactive: true,
|
||||
activate: true,
|
||||
hover: true,
|
||||
sensitive: true,
|
||||
style_class: null
|
||||
});
|
||||
this.actor = new Shell.GenericContainer({ style_class: 'popup-menu-item',
|
||||
@ -52,11 +53,15 @@ PopupBaseMenuItem.prototype = {
|
||||
this._columnWidths = null;
|
||||
this._spacing = 0;
|
||||
this.active = false;
|
||||
this._activatable = params.reactive && params.activate;
|
||||
this.sensitive = this._activatable && params.sensitive;
|
||||
|
||||
this.setSensitive(this.sensitive);
|
||||
|
||||
if (params.style_class)
|
||||
this.actor.add_style_class_name(params.style_class);
|
||||
|
||||
if (params.reactive && params.activate) {
|
||||
if (this._activatable) {
|
||||
this.actor.connect('button-release-event', Lang.bind(this, this._onButtonReleaseEvent));
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||
}
|
||||
@ -117,6 +122,23 @@ PopupBaseMenuItem.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
setSensitive: function(sensitive) {
|
||||
if (!this._activatable)
|
||||
return;
|
||||
if (this.sensitive == sensitive)
|
||||
return;
|
||||
|
||||
this.sensitive = sensitive;
|
||||
this.actor.reactive = sensitive;
|
||||
this.actor.can_focus = sensitive;
|
||||
|
||||
if (sensitive)
|
||||
this.actor.remove_style_pseudo_class('insensitive');
|
||||
else
|
||||
this.actor.add_style_pseudo_class('insensitive');
|
||||
this.emit('sensitive-changed', sensitive);
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
this.actor.destroy();
|
||||
this.emit('destroy');
|
||||
@ -222,10 +244,25 @@ PopupBaseMenuItem.prototype = {
|
||||
},
|
||||
|
||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
||||
let height = 0;
|
||||
let height = 0, x = 0, minWidth, childWidth;
|
||||
for (let i = 0; i < this._children.length; i++) {
|
||||
let child = this._children[i];
|
||||
let [min, natural] = child.actor.get_preferred_height(forWidth);
|
||||
if (this._columnWidths) {
|
||||
if (child.span == -1) {
|
||||
childWidth = 0;
|
||||
for (let j = i; j < this._columnWidths.length; j++)
|
||||
childWidth += this._columnWidths[j]
|
||||
} else
|
||||
childWidth = this._columnWidths[i];
|
||||
} else {
|
||||
if (child.span == -1)
|
||||
childWidth = forWidth - x;
|
||||
else
|
||||
[minWidth, childWidth] = child.actor.get_preferred_width(-1);
|
||||
}
|
||||
x += childWidth;
|
||||
|
||||
let [min, natural] = child.actor.get_preferred_height(childWidth);
|
||||
if (natural > height)
|
||||
height = natural;
|
||||
}
|
||||
@ -283,7 +320,14 @@ PopupBaseMenuItem.prototype = {
|
||||
}
|
||||
extraWidth = availWidth - naturalWidth;
|
||||
} else {
|
||||
availWidth = naturalWidth;
|
||||
if (child.span == -1) {
|
||||
if (direction == St.TextDirection.LTR)
|
||||
availWidth = box.x2 - x;
|
||||
else
|
||||
availWidth = x - box.x1;
|
||||
} else {
|
||||
availWidth = naturalWidth;
|
||||
}
|
||||
extraWidth = 0;
|
||||
}
|
||||
|
||||
@ -291,7 +335,7 @@ PopupBaseMenuItem.prototype = {
|
||||
if (child.expand) {
|
||||
childBox.x1 = x;
|
||||
childBox.x2 = x + availWidth;
|
||||
} else if (child.align === St.Align.CENTER) {
|
||||
} else if (child.align === St.Align.MIDDLE) {
|
||||
childBox.x1 = x + Math.round(extraWidth / 2);
|
||||
childBox.x2 = childBox.x1 + naturalWidth;
|
||||
} else if (child.align === St.Align.END) {
|
||||
@ -305,7 +349,7 @@ PopupBaseMenuItem.prototype = {
|
||||
if (child.expand) {
|
||||
childBox.x1 = x - availWidth;
|
||||
childBox.x2 = x;
|
||||
} else if (child.align === St.Align.CENTER) {
|
||||
} else if (child.align === St.Align.MIDDLE) {
|
||||
childBox.x1 = x - Math.round(extraWidth / 2);
|
||||
childBox.x2 = childBox.x1 + naturalWidth;
|
||||
} else if (child.align === St.Align.END) {
|
||||
@ -899,6 +943,17 @@ PopupMenuBase.prototype = {
|
||||
this.emit('active-changed', null);
|
||||
}
|
||||
}));
|
||||
menuItem._sensitiveChangeId = menuItem.connect('sensitive-changed', Lang.bind(this, function(menuItem, sensitive) {
|
||||
if (!sensitive && this._activeMenuItem == menuItem) {
|
||||
if (!this.actor.navigate_focus(menuItem.actor,
|
||||
Gtk.DirectionType.TAB_FORWARD,
|
||||
true))
|
||||
this.actor.grab_key_focus();
|
||||
} else if (sensitive && this._activeMenuItem == null) {
|
||||
if (global.stage.get_key_focus() == this.actor)
|
||||
menuItem.actor.grab_key_focus();
|
||||
}
|
||||
}));
|
||||
menuItem._activateId = menuItem.connect('activate', Lang.bind(this, function (menuItem, event) {
|
||||
this.emit('activate', menuItem);
|
||||
this.close(true);
|
||||
@ -906,6 +961,7 @@ PopupMenuBase.prototype = {
|
||||
menuItem.connect('destroy', Lang.bind(this, function(emitter) {
|
||||
menuItem.disconnect(menuItem._activateId);
|
||||
menuItem.disconnect(menuItem._activeChangeId);
|
||||
menuItem.disconnect(menuItem._sensitiveChangeId);
|
||||
if (menuItem.menu) {
|
||||
menuItem.menu.disconnect(menuItem._subMenuActivateId);
|
||||
menuItem.menu.disconnect(menuItem._subMenuActiveChangeId);
|
||||
@ -1528,7 +1584,8 @@ PopupComboBoxMenuItem.prototype = {
|
||||
this.addActor(this._itemBox);
|
||||
|
||||
let expander = new St.Label({ text: '\u2304' });
|
||||
this.addActor(expander, { align: St.Align.END });
|
||||
this.addActor(expander, { align: St.Align.END,
|
||||
span: -1 });
|
||||
|
||||
this._menu = new PopupComboMenu(this.actor);
|
||||
Main.uiGroup.add_actor(this._menu.actor);
|
||||
|
@ -68,9 +68,9 @@ ATIndicator.prototype = {
|
||||
// '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);
|
||||
|
@ -49,10 +49,11 @@ XKBIndicator.prototype = {
|
||||
PanelMenu.Button.prototype._init.call(this, St.Align.START);
|
||||
|
||||
this._container = new Shell.GenericContainer();
|
||||
this._container.connect('get-preferred-width', Lang.bind(this, this._get_preferred_width));
|
||||
this._container.connect('get-preferred-height', Lang.bind(this, this._get_preferred_height));
|
||||
this._container.connect('allocate', Lang.bind(this, this._allocate));
|
||||
this.actor.set_child(this._container);
|
||||
this._container.connect('get-preferred-width', Lang.bind(this, this._containerGetPreferredWidth));
|
||||
this._container.connect('get-preferred-height', Lang.bind(this, this._containerGetPreferredHeight));
|
||||
this._container.connect('allocate', Lang.bind(this, this._containerAllocate));
|
||||
this.actor.add_actor(this._container);
|
||||
this.actor.add_style_class_name('panel-status-button');
|
||||
|
||||
this._iconActor = new St.Icon({ icon_name: 'keyboard', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
|
||||
this._container.add_actor(this._iconActor);
|
||||
@ -61,21 +62,23 @@ XKBIndicator.prototype = {
|
||||
|
||||
this._showFlags = false;
|
||||
this._config = Gkbd.Configuration.get();
|
||||
this._config.connect('changed', Lang.bind(this, this._sync_config));
|
||||
this._config.connect('group-changed', Lang.bind(this, this._sync_group));
|
||||
this._config.connect('changed', Lang.bind(this, this._syncConfig));
|
||||
this._config.connect('group-changed', Lang.bind(this, this._syncGroup));
|
||||
this._config.start_listen();
|
||||
|
||||
this._sync_config();
|
||||
this._syncConfig();
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() {
|
||||
Main.overview.hide();
|
||||
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
|
||||
}));
|
||||
if (global.session_type == Shell.SessionType.USER) {
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() {
|
||||
Main.overview.hide();
|
||||
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
|
||||
}));
|
||||
}
|
||||
this.menu.addSettingsAction(_("Region and Language Settings"), 'gnome-region-panel.desktop');
|
||||
},
|
||||
|
||||
_adjust_group_names: function(names) {
|
||||
_adjustGroupNames: function(names) {
|
||||
// Disambiguate duplicate names with a subscript
|
||||
// This is O(N^2) to avoid sorting names
|
||||
// but N <= 4 so who cares?
|
||||
@ -97,7 +100,7 @@ XKBIndicator.prototype = {
|
||||
return names;
|
||||
},
|
||||
|
||||
_sync_config: function() {
|
||||
_syncConfig: function() {
|
||||
this._showFlags = this._config.if_flags_shown();
|
||||
if (this._showFlags) {
|
||||
this._container.set_skip_paint(this._iconActor, false);
|
||||
@ -119,7 +122,7 @@ XKBIndicator.prototype = {
|
||||
for (let i = 0; i < this._labelActors.length; i++)
|
||||
this._labelActors[i].destroy();
|
||||
|
||||
let short_names = this._adjust_group_names(this._config.get_short_group_names());
|
||||
let short_names = this._adjustGroupNames(this._config.get_short_group_names());
|
||||
|
||||
this._selectedLayout = null;
|
||||
this._layoutItems = [ ];
|
||||
@ -144,10 +147,10 @@ XKBIndicator.prototype = {
|
||||
this._container.set_skip_paint(shortLabel, true);
|
||||
}
|
||||
|
||||
this._sync_group();
|
||||
this._syncGroup();
|
||||
},
|
||||
|
||||
_sync_group: function() {
|
||||
_syncGroup: function() {
|
||||
let selected = this._config.get_current_group();
|
||||
|
||||
if (this._selectedLayout) {
|
||||
@ -170,10 +173,10 @@ XKBIndicator.prototype = {
|
||||
this._selectedLayout = item;
|
||||
},
|
||||
|
||||
_get_preferred_width: function(container, for_height, alloc) {
|
||||
/* Here, and in _get_preferred_height, we need to query for the
|
||||
height of all children, but we ignore the results for those
|
||||
we don't actually display. */
|
||||
_containerGetPreferredWidth: function(container, for_height, alloc) {
|
||||
// Here, and in _containerGetPreferredHeight, we need to query
|
||||
// for the height of all children, but we ignore the results
|
||||
// for those we don't actually display.
|
||||
let max_min_width = 0, max_natural_width = 0;
|
||||
if (this._showFlags)
|
||||
[max_min_width, max_natural_width] = this._iconActor.get_preferred_width(for_height);
|
||||
@ -190,7 +193,7 @@ XKBIndicator.prototype = {
|
||||
alloc.natural_size = max_natural_width;
|
||||
},
|
||||
|
||||
_get_preferred_height: function(container, for_width, alloc) {
|
||||
_containerGetPreferredHeight: function(container, for_width, alloc) {
|
||||
let max_min_height = 0, max_natural_height = 0;
|
||||
if (this._showFlags)
|
||||
[max_min_height, max_natural_height] = this._iconActor.get_preferred_height(for_width);
|
||||
@ -207,7 +210,7 @@ XKBIndicator.prototype = {
|
||||
alloc.natural_size = max_natural_height;
|
||||
},
|
||||
|
||||
_allocate: function(container, box, flags) {
|
||||
_containerAllocate: function(container, box, flags) {
|
||||
// translate box to (0, 0)
|
||||
box.x2 -= box.x1;
|
||||
box.x1 = 0;
|
||||
|
@ -1291,6 +1291,9 @@ NMDeviceWireless.prototype = {
|
||||
apObj.accessPoints.splice(i, 1);
|
||||
|
||||
if (apObj.accessPoints.length == 0) {
|
||||
if (this._activeNetwork == apObj)
|
||||
this._activeNetwork = null;
|
||||
|
||||
if (apObj.item)
|
||||
apObj.item.destroy();
|
||||
|
||||
@ -1480,6 +1483,11 @@ NMDeviceWireless.prototype = {
|
||||
},
|
||||
|
||||
_createNetworkItem: function(apObj, position) {
|
||||
if(!apObj.accessPoints || apObj.accessPoints.length == 0) {
|
||||
// this should not happen, but I have no idea why it happens
|
||||
return;
|
||||
}
|
||||
|
||||
if(apObj.connections.length > 0) {
|
||||
if (apObj.connections.length == 1)
|
||||
apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
|
||||
@ -1742,13 +1750,6 @@ NMApplet.prototype = {
|
||||
if (wrapperClass) {
|
||||
let wrapper = new wrapperClass(this._client, device, this._connections);
|
||||
|
||||
wrapper._networkLostId = wrapper.connect('network-lost', Lang.bind(this, function(device) {
|
||||
this._notifyForDevice(device, 'network-offline',
|
||||
_("Connectivity lost"),
|
||||
_("You are no longer connected to the network"),
|
||||
// set critical urgency to popup the notification automatically
|
||||
MessageTray.Urgency.CRITICAL);
|
||||
}));
|
||||
wrapper._activationFailedId = wrapper.connect('activation-failed', Lang.bind(this, function(device, reason) {
|
||||
// XXX: nm-applet has no special text depending on reason
|
||||
// but I'm not sure of this generic message
|
||||
@ -1761,7 +1762,6 @@ NMApplet.prototype = {
|
||||
this._syncSectionTitle(dev.category);
|
||||
}));
|
||||
wrapper._destroyId = wrapper.connect('destroy', function(wrapper) {
|
||||
wrapper.disconnect(wrapper._networkLostId);
|
||||
wrapper.disconnect(wrapper._activationFailedId);
|
||||
wrapper.disconnect(wrapper._deviceStateChangedId);
|
||||
wrapper.disconnect(wrapper._destroyId);
|
||||
|
@ -83,6 +83,9 @@ Client.prototype = {
|
||||
this._chatSources = {};
|
||||
this._chatState = Tp.ChannelChatState.ACTIVE;
|
||||
|
||||
// account path -> AccountNotification
|
||||
this._accountNotifications = {};
|
||||
|
||||
// Set up a SimpleObserver, which will call _observeChannels whenever a
|
||||
// channel matching its filters is detected.
|
||||
// The second argument, recover, means _observeChannels will be run
|
||||
@ -302,6 +305,8 @@ Client.prototype = {
|
||||
Shell.get_tp_contacts(conn, [targetHandle],
|
||||
contactFeatures,
|
||||
Lang.bind(this, this._createAudioVideoSource, channel, context, dispatchOp));
|
||||
|
||||
context.delay();
|
||||
},
|
||||
|
||||
_createAudioVideoSource: function(connection, contacts, failed, channel, context, dispatchOp) {
|
||||
@ -335,6 +340,8 @@ Client.prototype = {
|
||||
Shell.get_tp_contacts(conn, [targetHandle],
|
||||
contactFeatures,
|
||||
Lang.bind(this, this._createFileTransferSource, channel, context, dispatchOp));
|
||||
|
||||
context.delay();
|
||||
},
|
||||
|
||||
_createFileTransferSource: function(connection, contacts, failed, channel, context, dispatchOp) {
|
||||
@ -420,7 +427,6 @@ Client.prototype = {
|
||||
|
||||
/* Display notification to ask user to accept/reject request */
|
||||
let source = this._ensureSubscriptionSource();
|
||||
Main.messageTray.add(source);
|
||||
|
||||
let notif = new SubscriptionRequestNotification(source, contact);
|
||||
source.notify(notif);
|
||||
@ -430,6 +436,7 @@ Client.prototype = {
|
||||
if (this._subscriptionSource == null) {
|
||||
this._subscriptionSource = new MultiNotificationSource(
|
||||
_("Subscription request"), 'gtk-dialog-question');
|
||||
Main.messageTray.add(this._subscriptionSource);
|
||||
this._subscriptionSource.connect('destroy', Lang.bind(this, function () {
|
||||
this._subscriptionSource = null;
|
||||
}));
|
||||
@ -446,11 +453,18 @@ Client.prototype = {
|
||||
return;
|
||||
}
|
||||
|
||||
let notif = this._accountNotifications[account.get_object_path()];
|
||||
if (notif)
|
||||
return;
|
||||
|
||||
/* Display notification that account failed to connect */
|
||||
let source = this._ensureAccountSource();
|
||||
Main.messageTray.add(source);
|
||||
|
||||
let notif = new AccountNotification(source, account, connectionError);
|
||||
notif = new AccountNotification(source, account, connectionError);
|
||||
this._accountNotifications[account.get_object_path()] = notif;
|
||||
notif.connect('destroy', Lang.bind(this, function() {
|
||||
delete this._accountNotifications[account.get_object_path()];
|
||||
}));
|
||||
source.notify(notif);
|
||||
},
|
||||
|
||||
@ -458,6 +472,7 @@ Client.prototype = {
|
||||
if (this._accountSource == null) {
|
||||
this._accountSource = new MultiNotificationSource(
|
||||
_("Connection error"), 'gtk-dialog-error');
|
||||
Main.messageTray.add(this._accountSource);
|
||||
this._accountSource.connect('destroy', Lang.bind(this, function () {
|
||||
this._accountSource = null;
|
||||
}));
|
||||
@ -532,13 +547,6 @@ ChatSource.prototype = {
|
||||
createNotificationIcon: function() {
|
||||
this._iconBox = new St.Bin({ style_class: 'avatar-box' });
|
||||
this._iconBox._size = this.ICON_SIZE;
|
||||
|
||||
this._updateAvatarIcon();
|
||||
|
||||
return this._iconBox;
|
||||
},
|
||||
|
||||
_updateAvatarIcon: function() {
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
let file = this._contact.get_avatar_file();
|
||||
|
||||
@ -550,6 +558,13 @@ ChatSource.prototype = {
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: this._iconBox._size });
|
||||
}
|
||||
|
||||
return this._iconBox;
|
||||
},
|
||||
|
||||
_updateAvatarIcon: function() {
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
this._notification.update(this._notification.title, null, { customContent: true, icon: this.createNotificationIcon() });
|
||||
},
|
||||
|
||||
open: function(notification) {
|
||||
@ -1448,17 +1463,12 @@ AccountNotification.prototype = {
|
||||
_("Connection to %s failed").format(account.get_display_name()),
|
||||
null, { customContent: true });
|
||||
|
||||
let message;
|
||||
if (connectionError in _connectionErrorMessages) {
|
||||
message = _connectionErrorMessages[connectionError];
|
||||
} else {
|
||||
message = _("Unknown reason");
|
||||
}
|
||||
this._label = new St.Label();
|
||||
this.addActor(this._label);
|
||||
this._updateMessage(connectionError);
|
||||
|
||||
this._account = account;
|
||||
|
||||
this.addBody(message);
|
||||
|
||||
this.addButton('reconnect', _("Reconnect"));
|
||||
this.addButton('edit', _("Edit account"));
|
||||
|
||||
@ -1492,11 +1502,25 @@ AccountNotification.prototype = {
|
||||
|
||||
this._connectionStatusId = account.connect('notify::connection-status',
|
||||
Lang.bind(this, function() {
|
||||
if (account.connection_status != Tp.ConnectionStatus.DISCONNECTED)
|
||||
let status = account.connection_status;
|
||||
if (status == Tp.ConnectionStatus.CONNECTED) {
|
||||
this.destroy();
|
||||
} else if (status == Tp.ConnectionStatus.DISCONNECTED) {
|
||||
this._updateMessage(account.connection_error);
|
||||
}
|
||||
}));
|
||||
},
|
||||
|
||||
_updateMessage: function(connectionError) {
|
||||
let message;
|
||||
if (connectionError in _connectionErrorMessages) {
|
||||
message = _connectionErrorMessages[connectionError];
|
||||
} else {
|
||||
message = _("Unknown reason");
|
||||
}
|
||||
this._label.set_text(message);
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
if (this._enabledId != 0) {
|
||||
this._account.disconnect(this._enabledId);
|
||||
|
@ -5,6 +5,7 @@ const DBus = imports.dbus;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Lang = imports.lang;
|
||||
const Pango = imports.gi.Pango;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Tp = imports.gi.TelepathyGLib;
|
||||
@ -22,7 +23,6 @@ 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 WRAP_WIDTH = 150;
|
||||
const DIALOG_ICON_SIZE = 64;
|
||||
|
||||
const IMStatus = {
|
||||
@ -87,28 +87,20 @@ IMUserNameItem.prototype = {
|
||||
|
||||
this.label = new St.Label();
|
||||
this.label.clutter_text.set_line_wrap(true);
|
||||
this.label.clutter_text.set_ellipsize(Pango.EllipsizeMode.NONE);
|
||||
this._wrapper.add_actor(this.label);
|
||||
},
|
||||
|
||||
_wrapperGetPreferredWidth: function(actor, forHeight, alloc) {
|
||||
[alloc.min_size, alloc.natural_size] = this.label.get_preferred_width(-1);
|
||||
if (alloc.natural_size > WRAP_WIDTH)
|
||||
alloc.natural_size = WRAP_WIDTH;
|
||||
alloc.min_size = 1;
|
||||
alloc.natural_size = 1;
|
||||
},
|
||||
|
||||
_wrapperGetPreferredHeight: function(actor, forWidth, alloc) {
|
||||
let minWidth, natWidth;
|
||||
[alloc.min_size, alloc.natural_size] = this.label.get_preferred_height(forWidth);
|
||||
[minWidth, natWidth] = this.label.get_preferred_width(-1);
|
||||
if (natWidth > WRAP_WIDTH) {
|
||||
alloc.min_size *= 2;
|
||||
alloc.natural_size *= 2;
|
||||
}
|
||||
},
|
||||
|
||||
_wrapperAllocate: function(actor, box, flags) {
|
||||
let availWidth = box.x2 - box.x1;
|
||||
let availHeight = box.y2 - box.y1;
|
||||
this.label.allocate(box, flags);
|
||||
}
|
||||
};
|
||||
@ -194,6 +186,10 @@ IMStatusChooserItem.prototype = {
|
||||
this._userChangedId = this._user.connect('changed',
|
||||
Lang.bind(this,
|
||||
this._updateUser));
|
||||
this.actor.connect('notify::mapped', Lang.bind(this, function() {
|
||||
if (this.actor.mapped)
|
||||
this._updateUser();
|
||||
}));
|
||||
},
|
||||
|
||||
// Override getColumnWidths()/setColumnWidths() to make the item
|
||||
@ -203,9 +199,6 @@ IMStatusChooserItem.prototype = {
|
||||
},
|
||||
|
||||
setColumnWidths: function(widths) {
|
||||
this._columnWidths = PopupMenu.PopupBaseMenuItem.prototype.getColumnWidths.call(this);
|
||||
let sectionWidths = this._section.getColumnWidths();
|
||||
this._section.setColumnWidths(sectionWidths);
|
||||
},
|
||||
|
||||
_updateUser: function() {
|
||||
@ -321,33 +314,35 @@ IMStatusChooserItem.prototype = {
|
||||
this._accountMgr.set_all_requested_presences(newPresence, status, msg);
|
||||
},
|
||||
|
||||
getIMPresenceForSessionStatus: function(sessionStatus) {
|
||||
if (sessionStatus == GnomeSession.PresenceStatus.AVAILABLE)
|
||||
return this._previousPresence;
|
||||
|
||||
if (sessionStatus == GnomeSession.PresenceStatus.BUSY) {
|
||||
// Only change presence if the current one is "more present" than
|
||||
// busy, or if coming back from idle
|
||||
if (this._currentPresence == Tp.ConnectionPresenceType.AVAILABLE ||
|
||||
this._currentPresence == Tp.ConnectionPresenceType.EXTENDED_AWAY)
|
||||
return Tp.ConnectionPresenceType.BUSY;
|
||||
}
|
||||
|
||||
if (sessionStatus == GnomeSession.PresenceStatus.IDLE) {
|
||||
// Only change presence if the current one is "more present" than
|
||||
// idle
|
||||
if (this._currentPresence != Tp.ConnectionPresenceType.OFFLINE)
|
||||
return Tp.ConnectionPresenceType.EXTENDED_AWAY;
|
||||
}
|
||||
|
||||
return this._currentPresence;
|
||||
},
|
||||
|
||||
_sessionStatusChanged: function(sessionPresence, sessionStatus) {
|
||||
let [presence, s, msg] = this._accountMgr.get_most_available_presence();
|
||||
let newPresence, status;
|
||||
|
||||
if (sessionStatus == GnomeSession.PresenceStatus.AVAILABLE) {
|
||||
newPresence = this._previousPresence;
|
||||
} else if (sessionStatus == GnomeSession.PresenceStatus.BUSY) {
|
||||
// Only change presence if the current one is "more present" than
|
||||
// busy, or if coming back from idle
|
||||
if (presence == Tp.ConnectionPresenceType.AVAILABLE ||
|
||||
presence == Tp.ConnectionPresenceType.EXTENDED_AWAY) {
|
||||
newPresence = Tp.ConnectionPresenceType.BUSY;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} else if (sessionStatus == GnomeSession.PresenceStatus.IDLE) {
|
||||
// Only change presence if the current one is "more present" than
|
||||
// idle
|
||||
if (presence != Tp.ConnectionPresenceType.OFFLINE)
|
||||
newPresence = Tp.ConnectionPresenceType.EXTENDED_AWAY;
|
||||
else
|
||||
return;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
let newPresence = this.getIMPresenceForSessionStatus(sessionStatus);
|
||||
|
||||
if (newPresence == undefined)
|
||||
if (!newPresence || newPresence == presence)
|
||||
return;
|
||||
|
||||
status = this._statusForPresence(newPresence);
|
||||
@ -368,8 +363,8 @@ UserMenuButton.prototype = {
|
||||
|
||||
_init: function() {
|
||||
PanelMenu.Button.prototype._init.call(this, 0.0);
|
||||
let box = new St.BoxLayout({ name: 'panelStatusMenu' });
|
||||
this.actor.set_child(box);
|
||||
let box = new St.BoxLayout({ name: 'panelUserMenu' });
|
||||
this.actor.add_actor(box);
|
||||
|
||||
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
|
||||
|
||||
@ -419,6 +414,7 @@ UserMenuButton.prototype = {
|
||||
box.add(this._name, { y_align: St.Align.MIDDLE, y_fill: false });
|
||||
this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUserName));
|
||||
this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUserName));
|
||||
this._updateUserName();
|
||||
|
||||
this._createSubMenu();
|
||||
this._userManager.connect('notify::is-loaded',
|
||||
@ -547,6 +543,7 @@ UserMenuButton.prototype = {
|
||||
item = new IMStatusChooserItem();
|
||||
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._statusChooser = item;
|
||||
|
||||
item = new PopupMenu.PopupSwitchMenuItem(_("Notifications"));
|
||||
item.connect('activate', Lang.bind(this, this._updatePresenceStatus));
|
||||
@ -594,8 +591,21 @@ UserMenuButton.prototype = {
|
||||
},
|
||||
|
||||
_updatePresenceStatus: function(item, event) {
|
||||
let status = item.state ? GnomeSession.PresenceStatus.AVAILABLE
|
||||
: GnomeSession.PresenceStatus.BUSY;
|
||||
let status;
|
||||
|
||||
if (item.state) {
|
||||
status = GnomeSession.PresenceStatus.AVAILABLE;
|
||||
} else {
|
||||
status = GnomeSession.PresenceStatus.BUSY;
|
||||
|
||||
let [presence, s, msg] = this._account_mgr.get_most_available_presence();
|
||||
let newPresence = this._statusChooser.getIMPresenceForSessionStatus(status);
|
||||
if (newPresence != presence &&
|
||||
newPresence == Tp.ConnectionPresenceType.BUSY)
|
||||
Main.notify(_("Your chat status will be set to busy"),
|
||||
_("Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."));
|
||||
}
|
||||
|
||||
this._presence.setStatus(status);
|
||||
},
|
||||
|
||||
|
@ -19,47 +19,47 @@ const UNDIM_TIME = 0.250;
|
||||
|
||||
var dimShader = undefined;
|
||||
|
||||
function getDimShader() {
|
||||
if (dimShader === null)
|
||||
return null;
|
||||
if (!dimShader) {
|
||||
let source = Shell.get_file_contents_utf8_sync(global.datadir + '/shaders/dim-window.glsl');
|
||||
try {
|
||||
let shader = new Clutter.Shader();
|
||||
shader.set_fragment_source(source, -1);
|
||||
shader.compile();
|
||||
|
||||
dimShader = shader;
|
||||
} catch (e) {
|
||||
log(e.message);
|
||||
dimShader = null;
|
||||
}
|
||||
}
|
||||
function getDimShaderSource() {
|
||||
if (!dimShader)
|
||||
dimShader = Shell.get_file_contents_utf8_sync(global.datadir + '/shaders/dim-window.glsl');
|
||||
return dimShader;
|
||||
}
|
||||
|
||||
function getTopInvisibleBorder(metaWindow) {
|
||||
let outerRect = metaWindow.get_outer_rect();
|
||||
let inputRect = metaWindow.get_input_rect();
|
||||
return outerRect.y - inputRect.y;
|
||||
}
|
||||
|
||||
function WindowDimmer(actor) {
|
||||
this._init(actor);
|
||||
}
|
||||
|
||||
WindowDimmer.prototype = {
|
||||
_init: function(actor) {
|
||||
this.effect = new Clutter.ShaderEffect({ shader_type: Clutter.ShaderType.FRAGMENT_SHADER });
|
||||
this.effect.set_shader_source(getDimShaderSource());
|
||||
|
||||
this.actor = actor;
|
||||
},
|
||||
|
||||
set dimFraction(fraction) {
|
||||
this._dimFraction = fraction;
|
||||
let shader = getDimShader();
|
||||
if (!Meta.prefs_get_attach_modal_dialogs() || !shader) {
|
||||
this.actor.set_shader(null);
|
||||
if (!Meta.prefs_get_attach_modal_dialogs()) {
|
||||
this.effect.enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (fraction > 0.01) {
|
||||
this.actor.set_shader(shader);
|
||||
this.actor.set_shader_param_float('height', this.actor.get_height());
|
||||
this.actor.set_shader_param_float('fraction', fraction);
|
||||
} else
|
||||
this.actor.set_shader(null);
|
||||
Shell.shader_effect_set_double_uniform(this.effect, 'height', this.actor.get_height());
|
||||
Shell.shader_effect_set_double_uniform(this.effect, 'fraction', fraction);
|
||||
|
||||
if (!this.effect.actor)
|
||||
this.actor.add_effect(this.effect);
|
||||
} else {
|
||||
if (this.effect.actor)
|
||||
this.actor.remove_effect(this.effect);
|
||||
}
|
||||
},
|
||||
|
||||
get dimFraction() {
|
||||
@ -69,11 +69,11 @@ WindowDimmer.prototype = {
|
||||
_dimFraction: 0.0
|
||||
};
|
||||
|
||||
function getWindowDimmer(texture) {
|
||||
if (!texture._windowDimmer)
|
||||
texture._windowDimmer = new WindowDimmer(texture);
|
||||
function getWindowDimmer(actor) {
|
||||
if (!actor._windowDimmer)
|
||||
actor._windowDimmer = new WindowDimmer(actor);
|
||||
|
||||
return texture._windowDimmer;
|
||||
return actor._windowDimmer;
|
||||
}
|
||||
|
||||
function WindowManager() {
|
||||
@ -268,30 +268,28 @@ WindowManager.prototype = {
|
||||
let actor = window.get_compositor_private();
|
||||
if (!actor)
|
||||
return;
|
||||
let texture = actor.get_texture();
|
||||
if (animate)
|
||||
Tweener.addTween(getWindowDimmer(texture),
|
||||
Tweener.addTween(getWindowDimmer(actor),
|
||||
{ dimFraction: 1.0,
|
||||
time: DIM_TIME,
|
||||
transition: 'linear'
|
||||
});
|
||||
else
|
||||
getWindowDimmer(texture).dimFraction = 1.0;
|
||||
getWindowDimmer(actor).dimFraction = 1.0;
|
||||
},
|
||||
|
||||
_undimWindow: function(window, animate) {
|
||||
let actor = window.get_compositor_private();
|
||||
if (!actor)
|
||||
return;
|
||||
let texture = actor.get_texture();
|
||||
if (animate)
|
||||
Tweener.addTween(getWindowDimmer(texture),
|
||||
Tweener.addTween(getWindowDimmer(actor),
|
||||
{ dimFraction: 0.0,
|
||||
time: UNDIM_TIME,
|
||||
transition: 'linear'
|
||||
});
|
||||
else
|
||||
getWindowDimmer(texture).dimFraction = 0.0;
|
||||
getWindowDimmer(actor).dimFraction = 0.0;
|
||||
},
|
||||
|
||||
_mapWindow : function(shellwm, actor) {
|
||||
@ -528,22 +526,22 @@ WindowManager.prototype = {
|
||||
shellwm.completed_switch_workspace();
|
||||
},
|
||||
|
||||
_startAppSwitcher : function(shellwm, binding, window, backwards) {
|
||||
_startAppSwitcher : function(shellwm, binding, mask, window, backwards) {
|
||||
/* prevent a corner case where both popups show up at once */
|
||||
if (this._workspaceSwitcherPopup != null)
|
||||
this._workspaceSwitcherPopup.actor.hide();
|
||||
|
||||
let tabPopup = new AltTab.AltTabPopup();
|
||||
|
||||
if (!tabPopup.show(backwards, binding))
|
||||
if (!tabPopup.show(backwards, binding, mask))
|
||||
tabPopup.destroy();
|
||||
},
|
||||
|
||||
_startA11ySwitcher : function(shellwm, binding, window, backwards) {
|
||||
Main.ctrlAltTabManager.popup(backwards);
|
||||
_startA11ySwitcher : function(shellwm, binding, mask, window, backwards) {
|
||||
Main.ctrlAltTabManager.popup(backwards, mask);
|
||||
},
|
||||
|
||||
_showWorkspaceSwitcher : function(shellwm, binding, window, backwards) {
|
||||
_showWorkspaceSwitcher : function(shellwm, binding, mask, window, backwards) {
|
||||
if (global.screen.n_workspaces == 1)
|
||||
return;
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
af
|
||||
an
|
||||
ar
|
||||
as
|
||||
be
|
||||
bg
|
||||
bn
|
||||
|
@ -1,6 +1,7 @@
|
||||
data/gnome-shell.desktop.in.in
|
||||
data/org.gnome.shell.gschema.xml.in
|
||||
js/gdm/loginDialog.js
|
||||
js/gdm/powerMenu.js
|
||||
js/misc/util.js
|
||||
js/ui/appDisplay.js
|
||||
js/ui/appFavorites.js
|
||||
|
382
po/be.po
382
po/be.po
@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-09-14 22:03+0300\n"
|
||||
"PO-Revision-Date: 2011-09-14 22:03+0300\n"
|
||||
"POT-Creation-Date: 2011-09-21 22:18+0300\n"
|
||||
"PO-Revision-Date: 2011-09-21 22:18+0300\n"
|
||||
"Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n"
|
||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
||||
"Language: be\n"
|
||||
@ -60,22 +60,18 @@ msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "If true, display onscreen keyboard."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@ -90,46 +86,42 @@ msgid ""
|
||||
"at the optimal thread count on the system."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the onscreen keyboard"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
@ -137,54 +129,75 @@ msgid ""
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "UUID-значэнні пашырэнняў, якія трэба ўключыць"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/gdm/loginDialog.js:604
|
||||
#: ../js/gdm/loginDialog.js:617
|
||||
msgid "Session..."
|
||||
msgstr "Сеанс..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:761
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Уваход"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:818
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(або правядзіце пальцам)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:848
|
||||
msgid "Not listed?"
|
||||
msgstr "Няма ў спісе?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:165
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:171 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "Скасаваць"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:933
|
||||
#: ../js/gdm/loginDialog.js:1009
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Увайсці"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1253
|
||||
#: ../js/gdm/loginDialog.js:1358
|
||||
msgid "Login Window"
|
||||
msgstr "Акно ўваходу"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:514
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:585
|
||||
msgid "Suspend"
|
||||
msgstr "Прыпыніць камп'ютар"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "Перазапусціць сістэму"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "Выключыць камп'ютар"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
msgid "Command not found"
|
||||
msgstr "Загад не знойдзены"
|
||||
@ -213,15 +226,15 @@ msgstr "ПРАГРАМЫ"
|
||||
msgid "SETTINGS"
|
||||
msgstr "НАСТРОЙКІ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:685
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
msgid "New Window"
|
||||
msgstr "Новае акно"
|
||||
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
#: ../js/ui/appDisplay.js:687
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Выдаліць са спіса ўпадабанага"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Дадаць у спіс упадабанага"
|
||||
|
||||
@ -235,12 +248,16 @@ msgstr "%s дададзены ў ваш спіс упадабанага."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s выдалены з вашага спіса ўпадабанага."
|
||||
|
||||
#: ../js/ui/autorunManager.js:592
|
||||
#: ../js/ui/autorunManager.js:280
|
||||
msgid "Removable Devices"
|
||||
msgstr "Зменныя прыстасаванні"
|
||||
|
||||
#: ../js/ui/autorunManager.js:590
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Адкрыць у %s"
|
||||
|
||||
#: ../js/ui/autorunManager.js:618
|
||||
#: ../js/ui/autorunManager.js:616
|
||||
msgid "Eject"
|
||||
msgstr "Выняць"
|
||||
|
||||
@ -395,15 +412,15 @@ msgstr "На наступным тыдні"
|
||||
msgid "Unknown"
|
||||
msgstr "Невядома"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:139
|
||||
msgid "Available"
|
||||
msgstr "Даступны"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:148
|
||||
msgid "Away"
|
||||
msgstr "Адсутны"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Заняты"
|
||||
|
||||
@ -415,7 +432,7 @@ msgstr "Па-за сеткай"
|
||||
msgid "CONTACTS"
|
||||
msgstr "КАНТАКТЫ"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1197
|
||||
msgid "Remove"
|
||||
msgstr "Выдаліць"
|
||||
|
||||
@ -513,10 +530,6 @@ msgstr[2] "Вы аўтаматычна скончыце сеанс працы з
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Заканчэнне сеанса працы з сістэмай."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "Выключыць камп'ютар"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
@ -535,11 +548,6 @@ msgstr[2] "Сістэма аўтаматычна выключыцца праз %
|
||||
msgid "Powering off the system."
|
||||
msgstr "Выключэнне сістэмы."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "Перазапусціць сістэму"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:98
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
@ -567,96 +575,96 @@ msgstr "Усталяваць"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "Сцягнуць і ўсталяваць \"%s\" з extensions.gnome.org?"
|
||||
|
||||
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
|
||||
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "Клавіятура"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:641
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
msgid "No extensions installed"
|
||||
msgstr "Няма ўсталяваных пашырэнняў"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:687
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
msgid "Enabled"
|
||||
msgstr "Уключана"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "Выключана"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
msgid "Error"
|
||||
msgstr "Памылка"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
msgid "Out of date"
|
||||
msgstr "Састарэла"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
msgid "Downloading"
|
||||
msgstr "Сцягванне"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:720
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
msgid "View Source"
|
||||
msgstr "Паглядзець выточны код"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:726
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
msgid "Web Page"
|
||||
msgstr "Сеціўная старонка"
|
||||
|
||||
#: ../js/ui/messageTray.js:1188
|
||||
#: ../js/ui/messageTray.js:1190
|
||||
msgid "Open"
|
||||
msgstr "Адкрыць"
|
||||
|
||||
#: ../js/ui/messageTray.js:2367
|
||||
#: ../js/ui/messageTray.js:2372
|
||||
msgid "System Information"
|
||||
msgstr "Сістэмная інфармацыя"
|
||||
|
||||
#: ../js/ui/networkAgent.js:138
|
||||
#: ../js/ui/networkAgent.js:145
|
||||
msgid "Show password"
|
||||
msgstr "Паказваць пароль"
|
||||
|
||||
#: ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/networkAgent.js:160
|
||||
msgid "Connect"
|
||||
msgstr "Злучыць"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
|
||||
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
|
||||
#: ../js/ui/networkAgent.js:317
|
||||
#: ../js/ui/networkAgent.js:255 ../js/ui/networkAgent.js:267
|
||||
#: ../js/ui/networkAgent.js:294 ../js/ui/networkAgent.js:314
|
||||
#: ../js/ui/networkAgent.js:324
|
||||
msgid "Password: "
|
||||
msgstr "Пароль: "
|
||||
|
||||
#. static WEP
|
||||
#: ../js/ui/networkAgent.js:253
|
||||
#: ../js/ui/networkAgent.js:260
|
||||
msgid "Key: "
|
||||
msgstr "Ключ: "
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
|
||||
#: ../js/ui/networkAgent.js:292 ../js/ui/networkAgent.js:310
|
||||
msgid "Username: "
|
||||
msgstr "Імя карыстальніка: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:291
|
||||
#: ../js/ui/networkAgent.js:298
|
||||
msgid "Identity: "
|
||||
msgstr "Ідэнтычнасць: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:293
|
||||
#: ../js/ui/networkAgent.js:300
|
||||
msgid "Private key password: "
|
||||
msgstr "Пароль да прыватнага ключа: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:305
|
||||
#: ../js/ui/networkAgent.js:312
|
||||
msgid "Service: "
|
||||
msgstr "Паслуга: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:334
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "Для бесправадной сеткі патрэбная ідэнтыфікацыя"
|
||||
|
||||
#: ../js/ui/networkAgent.js:335
|
||||
#: ../js/ui/networkAgent.js:342
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
@ -665,37 +673,37 @@ msgstr ""
|
||||
"Для доступу да бесправадной сеткі \"%s\" патрэбны пароль або ключы "
|
||||
"шыфравання."
|
||||
|
||||
#: ../js/ui/networkAgent.js:339
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Правадная ідэнтыфікацыя 802.1X"
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#: ../js/ui/networkAgent.js:348
|
||||
msgid "Network name: "
|
||||
msgstr "Назва сеткі: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
msgid "DSL authentication"
|
||||
msgstr "DSL-ідэнтыфікацыя"
|
||||
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
#: ../js/ui/networkAgent.js:360
|
||||
msgid "PIN code required"
|
||||
msgstr "Патрэбны PIN-код"
|
||||
|
||||
#: ../js/ui/networkAgent.js:354
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr ""
|
||||
"Для прыстасавання для доступу да шырокапалоснай мабільнай сеткі патрэбны PIN-"
|
||||
"код"
|
||||
|
||||
#: ../js/ui/networkAgent.js:355
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
msgid "PIN: "
|
||||
msgstr "PIN-код: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
#: ../js/ui/networkAgent.js:368
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Пароль да шырокапалоснай мабільнай сеткі"
|
||||
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
#: ../js/ui/networkAgent.js:369
|
||||
#, c-format
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "Каб злучыцца з \"%s\", патрэбны пароль."
|
||||
@ -719,14 +727,14 @@ msgid "Dash"
|
||||
msgstr "Прыборная дошка"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:538
|
||||
#: ../js/ui/panel.js:539
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s: выйсці"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:574
|
||||
#: ../js/ui/panel.js:575
|
||||
msgid "Activities"
|
||||
msgstr "Заняткі"
|
||||
|
||||
@ -759,7 +767,7 @@ msgstr "Патрэбная ідэнтыфікацыя"
|
||||
msgid "Administrator"
|
||||
msgstr "Адміністратар"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:174
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175
|
||||
msgid "Authenticate"
|
||||
msgstr "Ідэнтыфікаваць"
|
||||
|
||||
@ -767,11 +775,11 @@ msgstr "Ідэнтыфікаваць"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:262
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:256
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "На жаль, ідэнтыфікацыя не адбылася. Паўтарыце спробу."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:274
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:268
|
||||
msgid "Password:"
|
||||
msgstr "Пароль:"
|
||||
|
||||
@ -780,7 +788,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:687
|
||||
#: ../js/ui/popupMenu.js:727
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -807,9 +815,10 @@ 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:71
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Экранная клавіятура"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:75
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Візуальныя сігналы"
|
||||
@ -929,7 +938,7 @@ msgstr "Заўсёды даваць дазвол"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Даць дазвол аднойчы"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
|
||||
msgid "Reject"
|
||||
msgstr "Адмовіць"
|
||||
|
||||
@ -969,11 +978,11 @@ msgstr "Увядзіце PIN, які паказвае прыстасаванне
|
||||
msgid "OK"
|
||||
msgstr "Добра"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:71
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Паказаць раскладку"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:75
|
||||
#: ../js/ui/status/keyboard.js:78
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "Настройкі мясцовасці і мовы"
|
||||
|
||||
@ -1018,13 +1027,13 @@ msgstr "недаступна"
|
||||
msgid "connection failed"
|
||||
msgstr "не ўдалося злучыцца"
|
||||
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
|
||||
msgid "More..."
|
||||
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:611 ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
|
||||
msgid "Connected (private)"
|
||||
msgstr "Злучана (прыватна)"
|
||||
|
||||
@ -1041,7 +1050,7 @@ msgid "Auto dial-up"
|
||||
msgstr "Аўтаматычна: мадэм"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Аўтаматычна: %s"
|
||||
@ -1050,47 +1059,39 @@ msgstr "Аўтаматычна: %s"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Аўтаматычна: Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1472
|
||||
msgid "Auto wireless"
|
||||
msgstr "Аўтаматычна: wireless"
|
||||
|
||||
#: ../js/ui/status/network.js:1558
|
||||
#: ../js/ui/status/network.js:1566
|
||||
msgid "Enable networking"
|
||||
msgstr "Уключыць сеткавыя функцыі"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1578
|
||||
msgid "Wired"
|
||||
msgstr "Правадное злучэнне"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1589
|
||||
msgid "Wireless"
|
||||
msgstr "Бесправадное злучэнне"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Мабільны broadband"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1609
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-злучэнні"
|
||||
|
||||
#: ../js/ui/status/network.js:1612
|
||||
#: ../js/ui/status/network.js:1620
|
||||
msgid "Network Settings"
|
||||
msgstr "Сеткавыя настройкі"
|
||||
|
||||
#: ../js/ui/status/network.js:1747
|
||||
msgid "Connectivity lost"
|
||||
msgstr "Злучэнне страчана"
|
||||
|
||||
#: ../js/ui/status/network.js:1748
|
||||
msgid "You are no longer connected to the network"
|
||||
msgstr "Вы больш не злучаны з сеткай"
|
||||
|
||||
#: ../js/ui/status/network.js:1756
|
||||
#: ../js/ui/status/network.js:1757
|
||||
msgid "Connection failed"
|
||||
msgstr "Не ўдалося злучыцца"
|
||||
|
||||
#: ../js/ui/status/network.js:1757
|
||||
#: ../js/ui/status/network.js:1758
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Не ўдалося ўключыць сеткавае злучэнне"
|
||||
|
||||
@ -1205,44 +1206,44 @@ msgstr "Мікрафон"
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:256
|
||||
#: ../js/ui/telepathyClient.js:259
|
||||
msgid "Invitation"
|
||||
msgstr "Запрашэнне"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:322
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
msgid "Call"
|
||||
msgstr "Званок"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:350
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
msgid "File Transfer"
|
||||
msgstr "Перадача файла"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:432
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
msgid "Subscription request"
|
||||
msgstr "Запыт на падпіску"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:460
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
msgid "Connection error"
|
||||
msgstr "Памылка злучэння"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:722
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s у сетцы."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:727
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s па-за сеткай."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:730
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s далёка ад камп'ютара."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s мае пільныя справы."
|
||||
@ -1250,35 +1251,35 @@ 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:967
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Адпраўлена ў <b>%X</b>, <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:973
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Адпраўлена ў <b>%A</b>, <b>%d %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Адпраўлена ў <b>%A</b>, <b>%d %B</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1020
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s змяніў імя на %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1129
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Запрашэнне ў %s"
|
||||
@ -1286,34 +1287,34 @@ msgstr "Запрашэнне ў %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1137
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "Удзельнік %s запрашае вас далучыцца да %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
msgid "Decline"
|
||||
msgstr "Адмовіцца"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
msgid "Accept"
|
||||
msgstr "Прыняць"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1173
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Відэазванок ад %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1176
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Званок ад %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1186
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
msgid "Answer"
|
||||
msgstr "Адказаць"
|
||||
|
||||
@ -1322,108 +1323,108 @@ msgstr "Адказаць"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1222
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s пасылае вам %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s просіць дазволу на прагляд вашага сеткавага стану"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
msgid "Network error"
|
||||
msgstr "Сеткавая памылка"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
msgid "Authentication failed"
|
||||
msgstr "Няўдалая ідэнтыфікацыя"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
msgid "Encryption error"
|
||||
msgstr "Памылка шыфравання"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Сертыфікат не пададзены"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Сертыфікат не заслугоўвае даверу"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
msgid "Certificate expired"
|
||||
msgstr "Сертыфікат састарэў"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Сертыфікат не актывізаваны"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Назва камп'ютара ў сертыфікаце не адпавядае патрэбнай"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1411
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Адбітак сертыфіката не адпавядае патрэбнаму"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1413
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Сертыфікат уласнаручна падпісаны"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Уключаны рэжым па-за сеткай"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Шыфраванне недаступнае"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Хібны сертыфікат"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Адмоўлена ў злучэнні"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Не ўдалося ўсталяваць злучэнне"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Злучэнне страчана"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Гэты рэсурс ужо злучаны з серверам"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Злучэнне заменена новым для таго ж самага рэсурсу"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Такі конт ужо існуе на серверы"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Сервер надта заняты і не можа абслужыць гэта злучэнне"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Сертыфікат быў адкліканы"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "Для сертыфіката выкарыстаны слабы або небяспечны алгарытм шыфравання"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1433,67 +1434,76 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "не ўдалося злучыцца з %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
msgid "Unknown reason"
|
||||
msgstr "Невядомая прычына"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1462
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
msgid "Reconnect"
|
||||
msgstr "Перазлучыцца"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1463
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
msgid "Edit account"
|
||||
msgstr "Рэдагаваць конт"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
msgid "Unknown reason"
|
||||
msgstr "Невядомая прычына"
|
||||
|
||||
#: ../js/ui/userMenu.js:145
|
||||
msgid "Hidden"
|
||||
msgstr "Схаваны"
|
||||
|
||||
#: ../js/ui/userMenu.js:159
|
||||
#: ../js/ui/userMenu.js:151
|
||||
msgid "Idle"
|
||||
msgstr "Бяздзейны"
|
||||
|
||||
#: ../js/ui/userMenu.js:162
|
||||
#: ../js/ui/userMenu.js:154
|
||||
msgid "Unavailable"
|
||||
msgstr "Недаступны"
|
||||
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
|
||||
#: ../js/ui/userMenu.js:512 ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:586
|
||||
msgid "Power Off..."
|
||||
msgstr "Выключыць камп'ютар..."
|
||||
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
|
||||
msgid "Suspend"
|
||||
msgstr "Прыпыніць камп'ютар"
|
||||
|
||||
#: ../js/ui/userMenu.js:551
|
||||
#: ../js/ui/userMenu.js:548
|
||||
msgid "Notifications"
|
||||
msgstr "Апавяшчэнні"
|
||||
|
||||
#: ../js/ui/userMenu.js:559
|
||||
#: ../js/ui/userMenu.js:556
|
||||
msgid "Online Accounts"
|
||||
msgstr "Сеціўныя конты"
|
||||
|
||||
#: ../js/ui/userMenu.js:563
|
||||
#: ../js/ui/userMenu.js:560
|
||||
msgid "System Settings"
|
||||
msgstr "Сістэмныя настройкі"
|
||||
|
||||
#: ../js/ui/userMenu.js:570
|
||||
#: ../js/ui/userMenu.js:567
|
||||
msgid "Lock Screen"
|
||||
msgstr "Замкнуць экран"
|
||||
|
||||
#: ../js/ui/userMenu.js:575
|
||||
#: ../js/ui/userMenu.js:572
|
||||
msgid "Switch User"
|
||||
msgstr "Перамяніць карыстальніка"
|
||||
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:577
|
||||
msgid "Log Out..."
|
||||
msgstr "Скончыць сеанс..."
|
||||
|
||||
#: ../js/ui/userMenu.js:605
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Вам прызначаны стан занятасці для чату"
|
||||
|
||||
#: ../js/ui/userMenu.js:606
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
msgstr ""
|
||||
"Апавяшчэнні выключаныя, у тым ліку аб новых паведамленнях у чаце. Ваш "
|
||||
"сеціўны стан абноўлены інфармацыяй аб тым, што вы можаце не ўбачыць чужых "
|
||||
"паведамленняў у час."
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1584,9 +1594,3 @@ msgstr "Файлавая сістэма"
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "calendar:week_start:0"
|
||||
#~ msgstr "calendar:week_start:1"
|
||||
|
||||
#~ msgid "Do Not Disturb"
|
||||
#~ msgstr "Не турбаваць"
|
||||
|
1063
po/ca@valencia.po
1063
po/ca@valencia.po
File diff suppressed because it is too large
Load Diff
393
po/fa.po
393
po/fa.po
@ -1,22 +1,22 @@
|
||||
# Persian translation for gnome-shell.
|
||||
# Copyright (C) 2010-2011 Iranian Free Software Users Group (IFSUG.org)translation team.
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Arash Mousavi <mousavi.arash@gmail.com>, 2010,2011
|
||||
# Mahyar Moghimi <mahyar.moqimi@gmail.com>, 2010.
|
||||
# Arash Mousavi <mousavi.arash@gmail.com>, 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&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-09-06 15:20+0000\n"
|
||||
"PO-Revision-Date: 2011-09-07 01:33+0330\n"
|
||||
"POT-Creation-Date: 2011-09-19 03:42+0000\n"
|
||||
"PO-Revision-Date: 2011-09-19 14:32+0330\n"
|
||||
"Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
|
||||
"Language-Team: Persian <translate@ifsug.org>\n"
|
||||
"Language-Team: Persian <>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: fa\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
"X-Poedit-Language: Persian\n"
|
||||
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
@ -62,7 +62,6 @@ msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "اگر روی «درست» تنظیم شود، تاریخ را در کنار ساعت نشان میدهد."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
#| msgid "If true, display seconds in time."
|
||||
msgid "If true, display onscreen keyboard."
|
||||
msgstr "در صورت تنظیم بر روی «درست»، صفحهکلید مجازی نمایش داده میشود."
|
||||
|
||||
@ -139,44 +138,76 @@ msgstr "استفاده از کدام صفحهکلید"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "غیرفعال کردنِ تامینکنندهگان OpenSearch"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:601
|
||||
#| msgid "Searching..."
|
||||
#: ../js/gdm/loginDialog.js:614
|
||||
msgid "Session..."
|
||||
msgstr "نشست..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:758
|
||||
#: ../js/gdm/loginDialog.js:931
|
||||
#: ../js/gdm/loginDialog.js:776
|
||||
#| msgid "Sign In"
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "ورود"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:816
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:821
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(یا انگشتتان را بکشید)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:839
|
||||
msgid "Not listed?"
|
||||
msgstr "فهرست نشده؟"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:926
|
||||
#: ../js/ui/endSessionDialog.js:410
|
||||
#: ../js/gdm/loginDialog.js:980
|
||||
#: ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477
|
||||
#: ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170
|
||||
#: ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "لغو"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1251
|
||||
#| msgid "New Window"
|
||||
#: ../js/gdm/loginDialog.js:985
|
||||
#| msgid "Sign In"
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "ورود"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1324
|
||||
msgid "Login Window"
|
||||
msgstr "پنجرهی ورود به سیستم"
|
||||
|
||||
#: ../js/misc/util.js:68
|
||||
#: ../js/gdm/powerMenu.js:116
|
||||
#: ../js/ui/userMenu.js:520
|
||||
#: ../js/ui/userMenu.js:522
|
||||
#: ../js/ui/userMenu.js:591
|
||||
msgid "Suspend"
|
||||
msgstr "تعلیق"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:121
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "راهاندازی مجدد"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:126
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "خاموش کردن"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
msgid "Command not found"
|
||||
msgstr "فرمان پیدا نشد"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:95
|
||||
#: ../js/misc/util.js:119
|
||||
msgid "Could not parse command:"
|
||||
msgstr "عدم توانایی در تجزیه فرمان:"
|
||||
|
||||
#: ../js/misc/util.js:103
|
||||
#: ../js/misc/util.js:127
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "اجرای «%s» شکست خورد:"
|
||||
@ -194,15 +225,15 @@ msgstr "برنامهها"
|
||||
msgid "SETTINGS"
|
||||
msgstr "تنظیمات"
|
||||
|
||||
#: ../js/ui/appDisplay.js:685
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
msgid "New Window"
|
||||
msgstr "پنجرهی جدید"
|
||||
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
#: ../js/ui/appDisplay.js:687
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "حذف از مورد پسندها"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
msgid "Add to Favorites"
|
||||
msgstr "اضافه کردن به مورد پسندها"
|
||||
|
||||
@ -402,7 +433,7 @@ msgid "CONTACTS"
|
||||
msgstr "CONTACTS"
|
||||
|
||||
#: ../js/ui/dash.js:172
|
||||
#: ../js/ui/messageTray.js:1197
|
||||
#: ../js/ui/messageTray.js:1196
|
||||
msgid "Remove"
|
||||
msgstr "حذف"
|
||||
|
||||
@ -471,7 +502,7 @@ msgid "Log Out %s"
|
||||
msgstr "خروج از %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:61
|
||||
#: ../js/ui/endSessionDialog.js:67
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Log Out"
|
||||
msgstr "خروج از سیستم"
|
||||
|
||||
@ -479,112 +510,120 @@ msgstr "خروج از سیستم"
|
||||
msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgstr "بر روی خروج از سیستم کلیک کنید تا از این برنامهها خارج و از سیستم خارج شوید."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:63
|
||||
#, c-format
|
||||
msgid "%s will be logged out automatically in %d seconds."
|
||||
msgstr "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64
|
||||
#, c-format
|
||||
msgid "You will be logged out automatically in %d seconds."
|
||||
msgstr "شما در مدت %Id ثانیه به طور خودکار از سیستم خارج میشوید."
|
||||
#| msgid "%s will be logged out automatically in %d seconds."
|
||||
msgid "%s will be logged out automatically in %d second."
|
||||
msgid_plural "%s will be logged out automatically in %d seconds."
|
||||
msgstr[0] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
|
||||
msgstr[1] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:65
|
||||
#: ../js/ui/endSessionDialog.js:69
|
||||
#, c-format
|
||||
#| msgid "You will be logged out automatically in %d seconds."
|
||||
msgid "You will be logged out automatically in %d second."
|
||||
msgid_plural "You will be logged out automatically in %d seconds."
|
||||
msgstr[0] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج میشوید."
|
||||
msgstr[1] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج میشوید."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:73
|
||||
msgid "Logging out of the system."
|
||||
msgstr "درحال خروج از سیستم."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:72
|
||||
#: ../js/ui/endSessionDialog.js:79
|
||||
msgid "Power Off"
|
||||
msgstr "خاموش کردن"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:73
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "بر روی خاموش کردن کلیک کنید تا از این برنامهها خارج و سیستم خاموش شود."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "سیستم در مدت %Id ثانیه به طور خودکار خاموش میشود."
|
||||
#| msgid "The system will power off automatically in %d seconds."
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار خاموش میشود."
|
||||
msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار خاموش میشود."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
msgid "Powering off the system."
|
||||
msgstr "درحال خاموش کردن سیستم."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgid "Restart"
|
||||
msgstr "راهاندازی مجدد"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:98
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr "بر روی راهاندازی مجدد کلیک کنید تا از این برنامهها خارج و سیستم مجددا راهاندازی گردد."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:100
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "سیستم در مدت %Id ثانیه به طور خودکار مجددا راهاندازی میشود."
|
||||
#| msgid "The system will restart automatically in %d seconds."
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار مجددا راهاندازی میشود."
|
||||
msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار مجددا راهاندازی میشود."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:104
|
||||
msgid "Restarting the system."
|
||||
msgstr "درحال راهاندازی مجدد سیستم."
|
||||
|
||||
#: ../js/ui/keyboard.js:508
|
||||
#: ../js/ui/extensionSystem.js:481
|
||||
msgid "Install"
|
||||
msgstr "نصب"
|
||||
|
||||
#: ../js/ui/extensionSystem.js:485
|
||||
#, c-format
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "بارگیری و نصب «%s» از extensions.gnome.org؟"
|
||||
|
||||
#: ../js/ui/keyboard.js:513
|
||||
#: ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "صفحهکلید"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:640
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
msgid "No extensions installed"
|
||||
msgstr "هیچ افزونهای نصب نشده است"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:686
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
msgid "Enabled"
|
||||
msgstr "به کار انداختن"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:688
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
#: ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "از کار انداختن"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:690
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
msgid "Error"
|
||||
msgstr "خطا"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:692
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
msgid "Out of date"
|
||||
msgstr "قدیمی"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:694
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
msgid "Downloading"
|
||||
msgstr "در حال بارگیری"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:719
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
msgid "View Source"
|
||||
msgstr "نمایش منبع"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:725
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
msgid "Web Page"
|
||||
msgstr "صفحهی وب"
|
||||
|
||||
#: ../js/ui/messageTray.js:1190
|
||||
#: ../js/ui/messageTray.js:1189
|
||||
msgid "Open"
|
||||
msgstr "بازکردن"
|
||||
|
||||
#: ../js/ui/messageTray.js:2352
|
||||
#: ../js/ui/messageTray.js:2368
|
||||
msgid "System Information"
|
||||
msgstr "اطلاعات سیستم"
|
||||
|
||||
#: ../js/ui/networkAgent.js:138
|
||||
#| msgid "Password:"
|
||||
msgid "Show password"
|
||||
msgstr "نمایش گذرواژه"
|
||||
|
||||
#: ../js/ui/networkAgent.js:153
|
||||
#| msgid "Connection"
|
||||
msgid "Connect"
|
||||
msgstr "اتصال"
|
||||
|
||||
@ -594,7 +633,6 @@ msgstr "اتصال"
|
||||
#: ../js/ui/networkAgent.js:287
|
||||
#: ../js/ui/networkAgent.js:307
|
||||
#: ../js/ui/networkAgent.js:317
|
||||
#| msgid "Password:"
|
||||
msgid "Password: "
|
||||
msgstr "گذرواژه: "
|
||||
|
||||
@ -624,7 +662,6 @@ msgid "Service: "
|
||||
msgstr "سرویس: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:334
|
||||
#| msgid "Authentication Required"
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "تایید هویت برای شبکه بیسیم لازم است"
|
||||
|
||||
@ -635,17 +672,15 @@ msgstr "گذرواژه یا کلیدهای رمزنگاری برای دسترس
|
||||
|
||||
#: ../js/ui/networkAgent.js:339
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "تصدیق هویت 802.1X سیمی"
|
||||
msgstr "تایید هویت 802.1X سیمی"
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#| msgid "Network Manager"
|
||||
msgid "Network name: "
|
||||
msgstr "نام شبکه: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
#| msgid "authentication required"
|
||||
msgid "DSL authentication"
|
||||
msgstr "تصدیق هویت DSL"
|
||||
msgstr "تایید هویت DSL"
|
||||
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
msgid "PIN code required"
|
||||
@ -660,13 +695,11 @@ msgid "PIN: "
|
||||
msgstr "پین: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
#| msgid "Mobile broadband"
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "گذرواژه شبکه پهنباند تلفن همراه"
|
||||
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
#, c-format
|
||||
#| msgid "You're now connected to '%s'"
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "برای اتصال به «%s» گذرواژه لازم است."
|
||||
|
||||
@ -689,14 +722,14 @@ msgid "Dash"
|
||||
msgstr "دَش"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:538
|
||||
#: ../js/ui/panel.js:539
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "خروج از %s"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:574
|
||||
#: ../js/ui/panel.js:575
|
||||
msgid "Activities"
|
||||
msgstr "فعالیتها"
|
||||
|
||||
@ -731,7 +764,7 @@ msgstr "مدیر"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:174
|
||||
msgid "Authenticate"
|
||||
msgstr "هویت تایید لازم است"
|
||||
msgstr "تایید هویت"
|
||||
|
||||
#. Translators: "that didn't work" refers to the fact that the
|
||||
#. * requested authentication was not gained; this can happen
|
||||
@ -889,7 +922,7 @@ msgstr "تنظیمات صدا"
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "درخواست تصدیق هویت از %s"
|
||||
msgstr "درخواست تایید هویت از %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:388
|
||||
#, c-format
|
||||
@ -905,7 +938,7 @@ msgid "Grant this time only"
|
||||
msgstr "موافقت تنها در همین زمان"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392
|
||||
#: ../js/ui/telepathyClient.js:1185
|
||||
#: ../js/ui/telepathyClient.js:1196
|
||||
msgid "Reject"
|
||||
msgstr "رد کردن"
|
||||
|
||||
@ -946,11 +979,11 @@ msgstr "لطفا PIN ذکر شده در دستگاه را وارد کنید."
|
||||
msgid "OK"
|
||||
msgstr "تایید"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:71
|
||||
#: ../js/ui/status/keyboard.js:72
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "نمایش چیدمان صفحهکلید"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:75
|
||||
#: ../js/ui/status/keyboard.js:77
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "تنظیمات ناحیه و زبان"
|
||||
|
||||
@ -972,7 +1005,7 @@ msgstr "مدیریت نشده"
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:495
|
||||
msgid "authentication required"
|
||||
msgstr "تصدیق هویت لازم است"
|
||||
msgstr "تایید هویت لازم است"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
@ -1058,31 +1091,19 @@ msgstr "اتصالهای ویپیان"
|
||||
msgid "Network Settings"
|
||||
msgstr "تنظیمات شبکه"
|
||||
|
||||
#: ../js/ui/status/network.js:1747
|
||||
#| msgid "Connection"
|
||||
msgid "Connectivity lost"
|
||||
msgstr "اتصال از دست رفت"
|
||||
|
||||
#: ../js/ui/status/network.js:1748
|
||||
#| msgid "You're now connected to wired network '%s'"
|
||||
msgid "You're no longer connected to the network"
|
||||
msgstr "شما دیگر به شبکه متصل نیستید"
|
||||
|
||||
#: ../js/ui/status/network.js:1756
|
||||
#| msgid "connection failed"
|
||||
#: ../js/ui/status/network.js:1749
|
||||
msgid "Connection failed"
|
||||
msgstr "اتصال شکست خورد"
|
||||
|
||||
#: ../js/ui/status/network.js:1757
|
||||
#| msgid "connection failed"
|
||||
#: ../js/ui/status/network.js:1750
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "فعالسازی اتصال شبکه شکست خورد"
|
||||
|
||||
#: ../js/ui/status/network.js:1992
|
||||
#: ../js/ui/status/network.js:2000
|
||||
msgid "Networking is disabled"
|
||||
msgstr "غیرفعالسازی شبکه"
|
||||
|
||||
#: ../js/ui/status/network.js:2117
|
||||
#: ../js/ui/status/network.js:2125
|
||||
msgid "Network Manager"
|
||||
msgstr "مدیریت شبکه"
|
||||
|
||||
@ -1101,6 +1122,7 @@ msgstr "درحال برآورد..."
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%Id ساعت مانده"
|
||||
msgstr[1] "%Id ساعت مانده"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:113
|
||||
@ -1112,17 +1134,27 @@ msgstr "%Id %s %Id %s باقیمانده"
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "ساعت"
|
||||
msgstr[1] "ساعت"
|
||||
|
||||
#: ../js/ui/status/power.js:115
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "%Id دقیقه"
|
||||
msgstr[1] "%Id دقیقه"
|
||||
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%Id دقیقهی مانده"
|
||||
msgstr[1] "%Id دقیقهی مانده"
|
||||
|
||||
#: ../js/ui/status/power.js:121
|
||||
#: ../js/ui/status/power.js:194
|
||||
#, c-format
|
||||
msgctxt "percent of battery remaining"
|
||||
msgid "%d%%"
|
||||
msgstr "٪%Id"
|
||||
|
||||
#: ../js/ui/status/power.js:201
|
||||
msgid "AC adapter"
|
||||
@ -1175,46 +1207,44 @@ msgstr "میکروفون"
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:256
|
||||
#: ../js/ui/telepathyClient.js:259
|
||||
msgid "Invitation"
|
||||
msgstr "دعوتنامه"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:322
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
msgid "Call"
|
||||
msgstr "تماس"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:350
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
msgid "File Transfer"
|
||||
msgstr "انتقال پرونده"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:432
|
||||
#| msgid "Authorization request from %s"
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
msgid "Subscription request"
|
||||
msgstr "درخواست اشتراک"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:460
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
msgid "Connection error"
|
||||
msgstr "خطا اتصال"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:722
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s بر خط است."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:727
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s برون خط است."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:730
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s غایب است."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s مشغول است."
|
||||
@ -1222,35 +1252,35 @@ 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:967
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "ارسال در <b>%OH:%OM</b> در <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:973
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "ارسال در <b>%A</b>, <b>%B %d</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "ارسال در <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1020
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s با عنوان %s شناخته میشود"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1129
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "دعوتنامه به %s"
|
||||
@ -1258,36 +1288,36 @@ msgstr "دعوتنامه به %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1137
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s از شما دعوت میکند که به %s بپیوندید"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1139
|
||||
#: ../js/ui/telepathyClient.js:1228
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
#: ../js/ui/telepathyClient.js:1150
|
||||
#: ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
msgid "Decline"
|
||||
msgstr "رد کردن"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1229
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
#: ../js/ui/telepathyClient.js:1151
|
||||
#: ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
msgid "Accept"
|
||||
msgstr "پذیرفتن"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1173
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "تماس ویدئویی از طریق %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1176
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "تماس از طرف %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1186
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
msgid "Answer"
|
||||
msgstr "پاسخگویی"
|
||||
|
||||
@ -1296,138 +1326,128 @@ msgstr "پاسخگویی"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1222
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s در حال ارسال %s به شما است"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s اجازه دسترسی برای دیدن زمانهایی که شما برخط هستید را دارد"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#| msgid "Network Manager"
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
msgid "Network error"
|
||||
msgstr "خطا شبکه"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#| msgid "Authentication Required"
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
msgid "Authentication failed"
|
||||
msgstr "تایید هویت شکست خورد"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
msgid "Encryption error"
|
||||
msgstr "خطا رمزنگاری"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
msgid "Certificate not provided"
|
||||
msgstr "گواهینامه ارائه نشده"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "گواهینامه نامعتبر است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
msgid "Certificate expired"
|
||||
msgstr "گواهینامه منقضی شده"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
msgid "Certificate not activated"
|
||||
msgstr "گواهینامه فعال نشده"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "نام کارگزار گواهینامه نامنطبق است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1411
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "اثرانگشت گواهینامه نامنطبق است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1413
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "گواهینامه خود-امضا شده"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
#| msgid "%s is offline."
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
msgid "Status is set to offline"
|
||||
msgstr "وضعیت بر روی برون خط تنظیم شده"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
msgid "Encryption is not available"
|
||||
msgstr "رمزنگاری موجود نیست"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "گواهینامه نامعتبر است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
#| msgid "Connection established"
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
msgid "Connection has been refused"
|
||||
msgstr "اتصال رد شده است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
#| msgid "Connection established"
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
msgid "Connection can't be established"
|
||||
msgstr "اتصال نمیتواند برقرار شود"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
#| msgid "Connection established"
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
msgid "Connection has been lost"
|
||||
msgstr "اتصال از دست رفته است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "این منبع از قبل به کارگزار متصل شده است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
msgid "Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "اتصال توسط یک اتصال جدید که از منبع مشابه استفاده میکند، جایگزین شده است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "حساب از قبل بر روی کارگزار وجود دارد"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "کارگزار در حال حاضر برای دست گرفتن اتصال بسیار مشغول است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "گواهینامه لغو شده است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "گواهینامه از الگوریتم رمزی نامطمئنی استفاده میکند یا از نظر cryptography ضعیف است"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
|
||||
msgstr "اندازه گواهینامه کارگزار، یا عمق حلقهی گواهینامه کارگزار، از محدودیت اعمال شده توسط کتابخانه cryptography تجاوز کرد"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#, c-format
|
||||
#| msgid "connection failed"
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "اتصال به %s شکست خورد"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
#| msgid "Unknown"
|
||||
msgid "Unknown reason"
|
||||
msgstr "دلیل ناشناخته"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1462
|
||||
#| msgid "Reject"
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
msgid "Reconnect"
|
||||
msgstr "اتصال مجدد"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1463
|
||||
#| msgid "My Account"
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
msgid "Edit account"
|
||||
msgstr "ویرایش حساب"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
msgid "Unknown reason"
|
||||
msgstr "دلیل ناشناخته"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
msgid "Hidden"
|
||||
msgstr "نامرئی"
|
||||
@ -1437,48 +1457,47 @@ msgid "Idle"
|
||||
msgstr "بیکار"
|
||||
|
||||
#: ../js/ui/userMenu.js:162
|
||||
#| msgid "unavailable"
|
||||
msgid "Unavailable"
|
||||
msgstr "خارج از دسترس"
|
||||
|
||||
#: ../js/ui/userMenu.js:516
|
||||
#: ../js/ui/userMenu.js:520
|
||||
#: ../js/ui/userMenu.js:589
|
||||
#: ../js/ui/userMenu.js:518
|
||||
#: ../js/ui/userMenu.js:522
|
||||
#: ../js/ui/userMenu.js:592
|
||||
msgid "Power Off..."
|
||||
msgstr "خاموش کردن..."
|
||||
|
||||
#: ../js/ui/userMenu.js:518
|
||||
#: ../js/ui/userMenu.js:520
|
||||
#: ../js/ui/userMenu.js:588
|
||||
msgid "Suspend"
|
||||
msgstr "تعلیق"
|
||||
|
||||
#: ../js/ui/userMenu.js:551
|
||||
#| msgid "Applications"
|
||||
#: ../js/ui/userMenu.js:554
|
||||
msgid "Notifications"
|
||||
msgstr "اعلانها"
|
||||
|
||||
#: ../js/ui/userMenu.js:559
|
||||
#| msgid "My Account"
|
||||
#: ../js/ui/userMenu.js:562
|
||||
msgid "Online Accounts"
|
||||
msgstr "حسابهای برخط"
|
||||
|
||||
#: ../js/ui/userMenu.js:563
|
||||
#: ../js/ui/userMenu.js:566
|
||||
msgid "System Settings"
|
||||
msgstr "تنظیمات سیستم"
|
||||
|
||||
#: ../js/ui/userMenu.js:570
|
||||
#: ../js/ui/userMenu.js:573
|
||||
msgid "Lock Screen"
|
||||
msgstr "قفل کردن صفحه"
|
||||
|
||||
#: ../js/ui/userMenu.js:575
|
||||
#: ../js/ui/userMenu.js:578
|
||||
msgid "Switch User"
|
||||
msgstr "تعویض کاربر"
|
||||
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:583
|
||||
msgid "Log Out..."
|
||||
msgstr "خروج از سیستم..."
|
||||
|
||||
#: ../js/ui/userMenu.js:611
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "وضعیت گپ شما «مشغول» تنظیم میشود"
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
msgid "Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."
|
||||
msgstr "هماکنون اعلانها، از جمله پیامهای گپ، غیرفعال هستند. وضعیتِ برخطِ شما به گونهای تنظیم شده است که به دیگران نشان دهد ممکن است شما پیامهایشان را نبینید."
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1509,6 +1528,7 @@ msgstr "«%s» آماده است"
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "%Iu خروجی"
|
||||
msgstr[1] "%Iu خروجی"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
@ -1517,6 +1537,7 @@ msgstr[0] "%Iu خروجی"
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%Iu ورودی"
|
||||
msgstr[1] "%Iu ورودی"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1408
|
||||
msgid "System Sounds"
|
||||
@ -1545,7 +1566,7 @@ msgstr "پیشفرض"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "محاوره تصدیق هویت از طرف کاربر رد شد"
|
||||
msgstr "محاوره تایید هویت از طرف کاربر رد شد"
|
||||
|
||||
#: ../src/shell-util.c:100
|
||||
msgid "Home Folder"
|
||||
@ -1567,7 +1588,3 @@ msgstr "سیستم پروندهها"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#: ../src/shell-util.c:600
|
||||
msgid "calendar:week_start:0"
|
||||
msgstr "calendar:week_start:0"
|
||||
|
||||
|
374
po/fr.po
374
po/fr.po
@ -15,7 +15,7 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master fr\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-09-14 13:45+0000\n"
|
||||
"POT-Creation-Date: 2011-09-23 12:02+0000\n"
|
||||
"PO-Revision-Date: 2011-09-14 18:35+0200\n"
|
||||
"Last-Translator: Bruno Brouard <annoa.b@gmail.com>\n"
|
||||
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
|
||||
@ -78,23 +78,19 @@ msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Si vrai, afficher la date dans l'horloge, en plus de l'heure."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "If true, display onscreen keyboard."
|
||||
msgstr "Si vrai, afficher le clavier visuel."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Si vrai, afficher les secondes dans l'horloge."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Si vrai, afficher le numéro de semaine ISO dans le calendrier."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr ""
|
||||
"Liste d'identifiants de fichiers desktop pour les applications favorites"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@ -121,23 +117,19 @@ msgstr ""
|
||||
"et le codec VP8. %T est utilisé comme paramètre pour une supposition quant "
|
||||
"au nombre optimal de threads à utiliser sur le système."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Afficher la date dans l'horloge"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the onscreen keyboard"
|
||||
msgstr "Afficher le clavier visuel"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Afficher la numérotation des semaines dans le calendrier"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Afficher l'heure avec les secondes"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
@ -145,7 +137,7 @@ msgstr ""
|
||||
"Les applications correspondant à ces identifiants sont affichées dans la "
|
||||
"zone des favoris."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -155,7 +147,7 @@ msgstr ""
|
||||
"utilise cette extension. Elle devrait être modifiée si le format du "
|
||||
"conteneur utilisé pour l'enregistrement est différent."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -163,11 +155,11 @@ msgstr ""
|
||||
"Le nombre d'images par seconde des animations d'écran enregistrées par "
|
||||
"l'outil idoine de GNOME Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Le pipeline GStreamer utilisé pour coder l'animation d'écran"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
@ -180,54 +172,75 @@ msgstr ""
|
||||
"pousser à désactiver cette fonctionnalité. Remarquez que cette désactivation "
|
||||
"ne supprime pas d'éventuelles données déjà enregistrées."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Le type de clavier utilisé."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "Identifiants UUID des extensions à activer"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Collecter des statistiques sur l'utilisation des applications"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Le clavier utilisé"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "fournisseurs OpenSearch désactivés"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:604
|
||||
#: ../js/gdm/loginDialog.js:617
|
||||
msgid "Session..."
|
||||
msgstr "Session..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:761
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Connexion"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:818
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(ou faites glisser le doigt)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:848
|
||||
msgid "Not listed?"
|
||||
msgstr "Absent de la liste ?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:165
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:171 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:933
|
||||
#: ../js/gdm/loginDialog.js:1009
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Se connecter"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1253
|
||||
#: ../js/gdm/loginDialog.js:1358
|
||||
msgid "Login Window"
|
||||
msgstr "Fenêtre de connexion"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:514
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:585
|
||||
msgid "Suspend"
|
||||
msgstr "Mettre en veille"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "Redémarrer"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "Éteindre"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
msgid "Command not found"
|
||||
msgstr "Commande non trouvée"
|
||||
@ -256,15 +269,15 @@ msgstr "APPLICATIONS"
|
||||
msgid "SETTINGS"
|
||||
msgstr "PARAMÈTRES"
|
||||
|
||||
#: ../js/ui/appDisplay.js:685
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
msgid "New Window"
|
||||
msgstr "Nouvelle fenêtre"
|
||||
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
#: ../js/ui/appDisplay.js:687
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Enlever des favoris"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Ajouter aux favoris"
|
||||
|
||||
@ -278,12 +291,16 @@ msgstr "%s a été ajouté à vos favoris."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s a été supprimé de vos favoris."
|
||||
|
||||
#: ../js/ui/autorunManager.js:592
|
||||
#: ../js/ui/autorunManager.js:280
|
||||
msgid "Removable Devices"
|
||||
msgstr "Périphériques amovibles"
|
||||
|
||||
#: ../js/ui/autorunManager.js:590
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Ouvrir avec %s"
|
||||
|
||||
#: ../js/ui/autorunManager.js:618
|
||||
#: ../js/ui/autorunManager.js:616
|
||||
msgid "Eject"
|
||||
msgstr "Éjecter"
|
||||
|
||||
@ -461,15 +478,15 @@ msgstr "La semaine prochaine"
|
||||
msgid "Unknown"
|
||||
msgstr "Inconnu"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:139
|
||||
msgid "Available"
|
||||
msgstr "Disponible"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:148
|
||||
msgid "Away"
|
||||
msgstr "Absent"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Occupé"
|
||||
|
||||
@ -481,7 +498,7 @@ msgstr "Déconnecté"
|
||||
msgid "CONTACTS"
|
||||
msgstr "CONTACTS"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1204
|
||||
msgid "Remove"
|
||||
msgstr "Enlever"
|
||||
|
||||
@ -583,10 +600,6 @@ msgstr[1] "Vous allez être déconnecté automatiquement dans %d secondes."
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Déconnexion du système."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "Éteindre"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
@ -604,11 +617,6 @@ msgstr[1] "Cet ordinateur s'éteindra automatiquement dans %d secondes."
|
||||
msgid "Powering off the system."
|
||||
msgstr "Extinction du système."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "Redémarrer"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:98
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
@ -635,96 +643,96 @@ msgstr "Installer"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org ?"
|
||||
|
||||
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
|
||||
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "Clavier"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:641
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
msgid "No extensions installed"
|
||||
msgstr "Aucune extension installée"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:687
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
msgid "Enabled"
|
||||
msgstr "Activé"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "Désactivé"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
msgid "Out of date"
|
||||
msgstr "Périmé"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
msgid "Downloading"
|
||||
msgstr "Téléchargement"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:720
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
msgid "View Source"
|
||||
msgstr "Afficher la source"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:726
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
msgid "Web Page"
|
||||
msgstr "Page Web"
|
||||
|
||||
#: ../js/ui/messageTray.js:1188
|
||||
#: ../js/ui/messageTray.js:1197
|
||||
msgid "Open"
|
||||
msgstr "Ouvrir"
|
||||
|
||||
#: ../js/ui/messageTray.js:2367
|
||||
#: ../js/ui/messageTray.js:2405
|
||||
msgid "System Information"
|
||||
msgstr "Informations du système"
|
||||
|
||||
#: ../js/ui/networkAgent.js:138
|
||||
#: ../js/ui/networkAgent.js:145
|
||||
msgid "Show password"
|
||||
msgstr "Afficher le mot de passe"
|
||||
|
||||
#: ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/networkAgent.js:160
|
||||
msgid "Connect"
|
||||
msgstr "Se connecter"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
|
||||
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
|
||||
#: ../js/ui/networkAgent.js:317
|
||||
#: ../js/ui/networkAgent.js:255 ../js/ui/networkAgent.js:267
|
||||
#: ../js/ui/networkAgent.js:294 ../js/ui/networkAgent.js:314
|
||||
#: ../js/ui/networkAgent.js:324
|
||||
msgid "Password: "
|
||||
msgstr "Mot de passe : "
|
||||
|
||||
#. static WEP
|
||||
#: ../js/ui/networkAgent.js:253
|
||||
#: ../js/ui/networkAgent.js:260
|
||||
msgid "Key: "
|
||||
msgstr "Clé : "
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
|
||||
#: ../js/ui/networkAgent.js:292 ../js/ui/networkAgent.js:310
|
||||
msgid "Username: "
|
||||
msgstr "Nom d'utilisateur : "
|
||||
|
||||
#: ../js/ui/networkAgent.js:291
|
||||
#: ../js/ui/networkAgent.js:298
|
||||
msgid "Identity: "
|
||||
msgstr "Identité : "
|
||||
|
||||
#: ../js/ui/networkAgent.js:293
|
||||
#: ../js/ui/networkAgent.js:300
|
||||
msgid "Private key password: "
|
||||
msgstr "Mot de passe de la clé privée : "
|
||||
|
||||
#: ../js/ui/networkAgent.js:305
|
||||
#: ../js/ui/networkAgent.js:312
|
||||
msgid "Service: "
|
||||
msgstr "Service : "
|
||||
|
||||
#: ../js/ui/networkAgent.js:334
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "L'authentification est requise par le réseau sans fil"
|
||||
|
||||
#: ../js/ui/networkAgent.js:335
|
||||
#: ../js/ui/networkAgent.js:342
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network '%"
|
||||
@ -733,35 +741,35 @@ msgstr ""
|
||||
"Il faut un mot de passe ou une clé de chiffrement pour accéder au réseau "
|
||||
"sans fil « %s »"
|
||||
|
||||
#: ../js/ui/networkAgent.js:339
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Authentification filaire 802.1X"
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#: ../js/ui/networkAgent.js:348
|
||||
msgid "Network name: "
|
||||
msgstr "Nom du réseau : "
|
||||
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
msgid "DSL authentication"
|
||||
msgstr "Authentification DSL"
|
||||
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
#: ../js/ui/networkAgent.js:360
|
||||
msgid "PIN code required"
|
||||
msgstr "Code PIN requis"
|
||||
|
||||
#: ../js/ui/networkAgent.js:354
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "Un code PIN est nécessaire pour les téléphones mobiles à large bande"
|
||||
|
||||
#: ../js/ui/networkAgent.js:355
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
msgid "PIN: "
|
||||
msgstr "PIN : "
|
||||
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
#: ../js/ui/networkAgent.js:368
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Mot de passe du téléphone mobile à large bande"
|
||||
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
#: ../js/ui/networkAgent.js:369
|
||||
#, c-format
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "Un mot de passe est requis pour se connecter à « %s »."
|
||||
@ -785,14 +793,14 @@ msgid "Dash"
|
||||
msgstr "Dash"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:538
|
||||
#: ../js/ui/panel.js:539
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Quitter %s"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:574
|
||||
#: ../js/ui/panel.js:575
|
||||
msgid "Activities"
|
||||
msgstr "Activités"
|
||||
|
||||
@ -825,7 +833,7 @@ msgstr "Authentification nécessaire"
|
||||
msgid "Administrator"
|
||||
msgstr "Administrateur"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:174
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175
|
||||
msgid "Authenticate"
|
||||
msgstr "S'authentifier"
|
||||
|
||||
@ -833,11 +841,11 @@ msgstr "S'authentifier"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:262
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:256
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Échec de l'authentification. Essayez à nouveau."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:274
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:268
|
||||
msgid "Password:"
|
||||
msgstr "Mot de passe :"
|
||||
|
||||
@ -846,7 +854,7 @@ msgstr "Mot de passe :"
|
||||
#. "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:687
|
||||
#: ../js/ui/popupMenu.js:731
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -873,9 +881,10 @@ msgstr "Zoom"
|
||||
#. 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:71
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Clavier visuel"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:75
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Alertes visuelles"
|
||||
@ -994,7 +1003,7 @@ msgstr "Toujours accorder l'accès"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Accorder l'accès cette fois uniquement"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
|
||||
msgid "Reject"
|
||||
msgstr "Refuser"
|
||||
|
||||
@ -1038,11 +1047,11 @@ msgstr ""
|
||||
msgid "OK"
|
||||
msgstr "Valider"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:71
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Afficher la disposition du clavier"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:75
|
||||
#: ../js/ui/status/keyboard.js:78
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "Paramètres de région et de langue"
|
||||
|
||||
@ -1087,13 +1096,13 @@ msgstr "non disponible"
|
||||
msgid "connection failed"
|
||||
msgstr "échec de connexion"
|
||||
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
|
||||
msgid "More..."
|
||||
msgstr "Plus..."
|
||||
|
||||
#. 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:611 ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
|
||||
msgid "Connected (private)"
|
||||
msgstr "Connecté (privé)"
|
||||
|
||||
@ -1110,7 +1119,7 @@ msgid "Auto dial-up"
|
||||
msgstr "Connexion par téléphone automatique"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Auto %s"
|
||||
@ -1119,47 +1128,39 @@ msgstr "Auto %s"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automatique"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1472
|
||||
msgid "Auto wireless"
|
||||
msgstr "Sans fil automatique"
|
||||
|
||||
#: ../js/ui/status/network.js:1558
|
||||
#: ../js/ui/status/network.js:1566
|
||||
msgid "Enable networking"
|
||||
msgstr "Activer le réseau"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1578
|
||||
msgid "Wired"
|
||||
msgstr "Filaire"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1589
|
||||
msgid "Wireless"
|
||||
msgstr "Sans fil"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Téléphone mobile à large bande"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1609
|
||||
msgid "VPN Connections"
|
||||
msgstr "Connexions par VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1612
|
||||
#: ../js/ui/status/network.js:1620
|
||||
msgid "Network Settings"
|
||||
msgstr "Paramètres du réseau"
|
||||
|
||||
#: ../js/ui/status/network.js:1747
|
||||
msgid "Connectivity lost"
|
||||
msgstr "Connexion perdue"
|
||||
|
||||
#: ../js/ui/status/network.js:1748
|
||||
msgid "You are no longer connected to the network"
|
||||
msgstr "Vous n'êtes plus connecté au réseau"
|
||||
|
||||
#: ../js/ui/status/network.js:1756
|
||||
#: ../js/ui/status/network.js:1757
|
||||
msgid "Connection failed"
|
||||
msgstr "Échec de connexion"
|
||||
|
||||
#: ../js/ui/status/network.js:1757
|
||||
#: ../js/ui/status/network.js:1758
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "L'activation de la connexion réseau a échoué"
|
||||
|
||||
@ -1270,46 +1271,46 @@ msgstr "Microphone"
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:256
|
||||
#: ../js/ui/telepathyClient.js:259
|
||||
msgid "Invitation"
|
||||
msgstr "Invitation"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:322
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
msgid "Call"
|
||||
msgstr "Appel"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:350
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
msgid "File Transfer"
|
||||
msgstr "Transfert de fichiers"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:432
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
msgid "Subscription request"
|
||||
msgstr "Demande d'abonnement"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:460
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
msgid "Connection error"
|
||||
msgstr "Erreur de connexion"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:722
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s est en ligne."
|
||||
|
||||
#
|
||||
# luc: note: Empathy utilise « déconnecté »
|
||||
#: ../js/ui/telepathyClient.js:727
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s est hors ligne."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:730
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s est absent."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s est occupé."
|
||||
@ -1319,35 +1320,35 @@ msgstr "%s est occupé."
|
||||
#. 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:967
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Envoyé <b>%A</b> à <b>%X</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:973
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Envoyé le <b>%A %-d %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Envoyé le <b>%A %-d %B %Y</b>"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1020
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s est maintenant connu sous le nom de %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1129
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Invitation vers %s"
|
||||
@ -1355,34 +1356,34 @@ msgstr "Invitation vers %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1137
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s vous invite à rejoindre %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
msgid "Decline"
|
||||
msgstr "Refuser"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
msgid "Accept"
|
||||
msgstr "Accepter"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1173
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Appel vidéo de %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1176
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Appel provenant de %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1186
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
msgid "Answer"
|
||||
msgstr "Répondre"
|
||||
|
||||
@ -1391,112 +1392,112 @@ msgstr "Répondre"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1222
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s vous envoie %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s aimerait être autorisé à savoir lorsque vous êtes en ligne"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
msgid "Network error"
|
||||
msgstr "Erreur réseau"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
msgid "Authentication failed"
|
||||
msgstr "L'authentification a échoué"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
msgid "Encryption error"
|
||||
msgstr "Erreur de chiffrement"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Certificat non fourni"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Certificat non validé"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
msgid "Certificate expired"
|
||||
msgstr "Certificat expiré"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Certificat non activé"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Le nom de l'hôte du certificat ne correspond pas"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1411
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "L'empreinte du certificat ne correspond pas"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1413
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Certificat auto-signé"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Le statut est hors ligne"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Chiffrement non disponible"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Certificat non valide"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
msgid "Connection has been refused"
|
||||
msgstr "La connexion a été refusée"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
msgid "Connection can't be established"
|
||||
msgstr "La connexion ne peut pas être établie"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
msgid "Connection has been lost"
|
||||
msgstr "La connexion a été perdue"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Cette ressource est déjà connectée au serveur"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"La connexion a été remplacée par une nouvelle connexion utilisant la même "
|
||||
"ressource"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Ce compte existe déjà sur le serveur"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Le serveur est actuellement trop chargé pour traiter la connexion"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Le certificat a été révoqué"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Le certificat utilise un algorithme de chiffrement douteux, ou est faible "
|
||||
"cryptographiquement"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1506,67 +1507,76 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "La connexion à %s a échoué"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
msgid "Unknown reason"
|
||||
msgstr "Raison inconnue"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1462
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
msgid "Reconnect"
|
||||
msgstr "Se reconnecter"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1463
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
msgid "Edit account"
|
||||
msgstr "Modifier le compte"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
msgid "Unknown reason"
|
||||
msgstr "Raison inconnue"
|
||||
|
||||
#: ../js/ui/userMenu.js:145
|
||||
msgid "Hidden"
|
||||
msgstr "Invisible"
|
||||
|
||||
#: ../js/ui/userMenu.js:159
|
||||
#: ../js/ui/userMenu.js:151
|
||||
msgid "Idle"
|
||||
msgstr "Inactif"
|
||||
|
||||
#: ../js/ui/userMenu.js:162
|
||||
#: ../js/ui/userMenu.js:154
|
||||
msgid "Unavailable"
|
||||
msgstr "Non disponible"
|
||||
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
|
||||
#: ../js/ui/userMenu.js:512 ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:586
|
||||
msgid "Power Off..."
|
||||
msgstr "Éteindre..."
|
||||
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
|
||||
msgid "Suspend"
|
||||
msgstr "Mettre en veille"
|
||||
|
||||
#: ../js/ui/userMenu.js:551
|
||||
#: ../js/ui/userMenu.js:548
|
||||
msgid "Notifications"
|
||||
msgstr "Notifications"
|
||||
|
||||
#: ../js/ui/userMenu.js:559
|
||||
#: ../js/ui/userMenu.js:556
|
||||
msgid "Online Accounts"
|
||||
msgstr "Comptes en ligne"
|
||||
|
||||
#: ../js/ui/userMenu.js:563
|
||||
#: ../js/ui/userMenu.js:560
|
||||
msgid "System Settings"
|
||||
msgstr "Paramètres système"
|
||||
|
||||
#: ../js/ui/userMenu.js:570
|
||||
#: ../js/ui/userMenu.js:567
|
||||
msgid "Lock Screen"
|
||||
msgstr "Verrouiller l'écran"
|
||||
|
||||
#: ../js/ui/userMenu.js:575
|
||||
#: ../js/ui/userMenu.js:572
|
||||
msgid "Switch User"
|
||||
msgstr "Changer d'utilisateur"
|
||||
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:577
|
||||
msgid "Log Out..."
|
||||
msgstr "Fermer la session..."
|
||||
|
||||
#: ../js/ui/userMenu.js:605
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Votre statut pour les discussions sera défini à occupé"
|
||||
|
||||
#: ../js/ui/userMenu.js:606
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
msgstr ""
|
||||
"Les notifications sont maintenant désactivées, y compris les messages de "
|
||||
"discussion. Votre statut en ligne a été modifié afin que les autres sachent "
|
||||
"qu'il se peut que vous ne voyez pas leurs messages."
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
|
393
po/gl.po
393
po/gl.po
@ -12,8 +12,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-09-14 23:01+0200\n"
|
||||
"PO-Revision-Date: 2011-09-14 23:03+0200\n"
|
||||
"POT-Creation-Date: 2011-09-21 22:50+0200\n"
|
||||
"PO-Revision-Date: 2011-09-21 22:51+0200\n"
|
||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
||||
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
|
||||
"Language: gl\n"
|
||||
@ -76,22 +76,18 @@ msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Se é verdadeiro, móstrase a data no reloxo, ademais da hora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "If true, display onscreen keyboard."
|
||||
msgstr "Se é verdadeiro, móstranse o teclado en pantalla."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Se é verdadeiro, móstranse os segundos na hora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Se é verdadeiro, móstrase a data da semana ISO no calendario."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Mostra os ID de ficheiros desktop para os aplicativos preferidos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@ -117,23 +113,19 @@ msgstr ""
|
||||
"códec VP8. Úsase %T como suposición para o número de fillos óptimos no "
|
||||
"sistema."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Mostrar a data no reloxo"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the onscreen keyboard"
|
||||
msgstr "Mostrar o teclado en pantalla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Mostrar a data da semana no calendario"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Mostrar a hora con segundos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
@ -141,7 +133,7 @@ msgstr ""
|
||||
"Os aplicativos que corresponden a estes identificadores mostraranse na área "
|
||||
"de preferidos."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -151,7 +143,7 @@ msgstr ""
|
||||
"baseado na data actual e usa esta extensión. Debería cambiar ao grabar nun "
|
||||
"formato de contedor diferente."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -159,11 +151,11 @@ msgstr ""
|
||||
"A taxa de marcos do screencast resultante grabado polo grabador de "
|
||||
"screencasts de GNOME Shell en marcos-por-segundo."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "A tubería de gstreamer usada para codificar o screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
@ -175,54 +167,75 @@ msgstr ""
|
||||
"privados, vostede pode desactivar isto por motivos de privacidade. Teña en "
|
||||
"conta que facendo isto non eliminará os datos gardados."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "O tipo de teclado a usar."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "Uuid das extensións que activar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Que teclado usar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "fornecedores de OpenSearch desactivados"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:604
|
||||
#: ../js/gdm/loginDialog.js:617
|
||||
msgid "Session..."
|
||||
msgstr "Sesión…"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:761
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:818
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(ou pase o dedo)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:848
|
||||
msgid "Not listed?"
|
||||
msgstr "Non está na lista?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:165
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:171 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:933
|
||||
#: ../js/gdm/loginDialog.js:1009
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1253
|
||||
#: ../js/gdm/loginDialog.js:1358
|
||||
msgid "Login Window"
|
||||
msgstr "Xanela de inicio de sesión"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:514
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:585
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
msgid "Command not found"
|
||||
msgstr "Orde non atopada"
|
||||
@ -251,15 +264,15 @@ msgstr "APLICATIVOS"
|
||||
msgid "SETTINGS"
|
||||
msgstr "CONFIGURACIÓN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:685
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
msgid "New Window"
|
||||
msgstr "Xanela nova"
|
||||
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
#: ../js/ui/appDisplay.js:687
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Eliminar dos favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Engadir aos favoritos"
|
||||
|
||||
@ -273,12 +286,16 @@ msgstr "%s foi engadido aos seus favoritos."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s foi eliminado dos seus favoritos."
|
||||
|
||||
#: ../js/ui/autorunManager.js:592
|
||||
#: ../js/ui/autorunManager.js:280
|
||||
msgid "Removable Devices"
|
||||
msgstr "Dispositivos extraíbeis"
|
||||
|
||||
#: ../js/ui/autorunManager.js:590
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Abrir con %s"
|
||||
|
||||
#: ../js/ui/autorunManager.js:618
|
||||
#: ../js/ui/autorunManager.js:616
|
||||
msgid "Eject"
|
||||
msgstr "Expulsar"
|
||||
|
||||
@ -433,15 +450,15 @@ msgstr "A vindeira semana"
|
||||
msgid "Unknown"
|
||||
msgstr "Descoñecido"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:139
|
||||
msgid "Available"
|
||||
msgstr "Dispoñíbel"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:148
|
||||
msgid "Away"
|
||||
msgstr "Ausente"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
@ -453,7 +470,7 @@ msgstr "Desconectado"
|
||||
msgid "CONTACTS"
|
||||
msgstr "CONTACTOS"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1197
|
||||
msgid "Remove"
|
||||
msgstr "Eliminar"
|
||||
|
||||
@ -548,10 +565,6 @@ msgstr[1] "A súa sesión pecharase automaticamente en %d segundos."
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Saíndo da sesión."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
@ -568,11 +581,6 @@ msgstr[1] "O seu computador apagarase automaticamente en %d segundos."
|
||||
msgid "Powering off the system."
|
||||
msgstr "Apagando o sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:98
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
@ -599,96 +607,96 @@ msgstr "Instalar"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "Desexa descargar e instalar «%s» desde extensions.gnome.org?"
|
||||
|
||||
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
|
||||
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "Teclado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:641
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
msgid "No extensions installed"
|
||||
msgstr "Non hai ningunha extensión instalada"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:687
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
msgid "Enabled"
|
||||
msgstr "Activado"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
msgid "Out of date"
|
||||
msgstr "Desactualizado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
msgid "Downloading"
|
||||
msgstr "Descargando"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:720
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
msgid "View Source"
|
||||
msgstr "Ver fonte"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:726
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
msgid "Web Page"
|
||||
msgstr "Páxina web"
|
||||
|
||||
#: ../js/ui/messageTray.js:1188
|
||||
#: ../js/ui/messageTray.js:1190
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
|
||||
#: ../js/ui/messageTray.js:2367
|
||||
#: ../js/ui/messageTray.js:2372
|
||||
msgid "System Information"
|
||||
msgstr "Información do sistema"
|
||||
|
||||
#: ../js/ui/networkAgent.js:138
|
||||
#: ../js/ui/networkAgent.js:145
|
||||
msgid "Show password"
|
||||
msgstr "Mostrar contrasinal"
|
||||
|
||||
#: ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/networkAgent.js:160
|
||||
msgid "Connect"
|
||||
msgstr "Conectar"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
|
||||
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
|
||||
#: ../js/ui/networkAgent.js:317
|
||||
#: ../js/ui/networkAgent.js:255 ../js/ui/networkAgent.js:267
|
||||
#: ../js/ui/networkAgent.js:294 ../js/ui/networkAgent.js:314
|
||||
#: ../js/ui/networkAgent.js:324
|
||||
msgid "Password: "
|
||||
msgstr "Contrasinal: "
|
||||
|
||||
#. static WEP
|
||||
#: ../js/ui/networkAgent.js:253
|
||||
#: ../js/ui/networkAgent.js:260
|
||||
msgid "Key: "
|
||||
msgstr "Chave: "
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
|
||||
#: ../js/ui/networkAgent.js:292 ../js/ui/networkAgent.js:310
|
||||
msgid "Username: "
|
||||
msgstr "Nome de usuario: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:291
|
||||
#: ../js/ui/networkAgent.js:298
|
||||
msgid "Identity: "
|
||||
msgstr "Identidade: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:293
|
||||
#: ../js/ui/networkAgent.js:300
|
||||
msgid "Private key password: "
|
||||
msgstr "Contrasinal da chave privada: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:305
|
||||
#: ../js/ui/networkAgent.js:312
|
||||
msgid "Service: "
|
||||
msgstr "Servizo: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:334
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "A rede sen fíos require autenticación"
|
||||
|
||||
#: ../js/ui/networkAgent.js:335
|
||||
#: ../js/ui/networkAgent.js:342
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
@ -697,35 +705,35 @@ msgstr ""
|
||||
"Son necesarios contrasinais ou chaves de codificación para acceder á rede "
|
||||
"sen fíos '%s'."
|
||||
|
||||
#: ../js/ui/networkAgent.js:339
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Autenticación con fíos 802.1X"
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#: ../js/ui/networkAgent.js:348
|
||||
msgid "Network name: "
|
||||
msgstr "Nome da rede:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
msgid "DSL authentication"
|
||||
msgstr "Autenticación DSL"
|
||||
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
#: ../js/ui/networkAgent.js:360
|
||||
msgid "PIN code required"
|
||||
msgstr "Requírese un código PIN"
|
||||
|
||||
#: ../js/ui/networkAgent.js:354
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "É necesario un código PIN para o dispositivo de banda larga móbil"
|
||||
|
||||
#: ../js/ui/networkAgent.js:355
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
msgid "PIN: "
|
||||
msgstr "PIN:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
#: ../js/ui/networkAgent.js:368
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Contrasinal da rede de banda larga móbil"
|
||||
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
#: ../js/ui/networkAgent.js:369
|
||||
#, c-format
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "Requírese un contrasinal para conectarse a «%s»."
|
||||
@ -749,18 +757,18 @@ msgid "Dash"
|
||||
msgstr "Panel"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:538
|
||||
#: ../js/ui/panel.js:539
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Saír de %s"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:574
|
||||
#: ../js/ui/panel.js:575
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
#: ../js/ui/panel.js:977
|
||||
#: ../js/ui/panel.js:967
|
||||
msgid "Top Bar"
|
||||
msgstr "Barra superior"
|
||||
|
||||
@ -789,7 +797,7 @@ msgstr "Autenticación requirida"
|
||||
msgid "Administrator"
|
||||
msgstr "Administrador"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:174
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175
|
||||
msgid "Authenticate"
|
||||
msgstr "Autenticar"
|
||||
|
||||
@ -797,11 +805,11 @@ msgstr "Autenticar"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:262
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:256
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Desculpe, iso non funcionou. Ténteo de novo."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:274
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:268
|
||||
msgid "Password:"
|
||||
msgstr "Contrasinal:"
|
||||
|
||||
@ -810,7 +818,7 @@ msgstr "Contrasinal:"
|
||||
#. "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:687
|
||||
#: ../js/ui/popupMenu.js:727
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -837,9 +845,10 @@ msgstr "Ampliación"
|
||||
#. 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:71
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Lector de pantalla"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:75
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Alertas visuais"
|
||||
@ -958,7 +967,7 @@ msgstr "Conceder acceso sempre"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder só esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
|
||||
msgid "Reject"
|
||||
msgstr "Rexeitar"
|
||||
|
||||
@ -998,11 +1007,11 @@ msgstr "Introduza o PIN mencionado no dispositivo."
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:71
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Mostrar a distribución do teclado"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:75
|
||||
#: ../js/ui/status/keyboard.js:78
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "Configuración rexional e de idioma"
|
||||
|
||||
@ -1047,13 +1056,13 @@ msgstr "non dispoñíbel"
|
||||
msgid "connection failed"
|
||||
msgstr "conexión fallida"
|
||||
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
|
||||
msgid "More..."
|
||||
msgstr "Máis..."
|
||||
|
||||
#. 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:611 ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
|
||||
msgid "Connected (private)"
|
||||
msgstr "Conectado (privado)"
|
||||
|
||||
@ -1070,7 +1079,7 @@ msgid "Auto dial-up"
|
||||
msgstr "Por liña conmutada automática"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automática"
|
||||
@ -1079,47 +1088,39 @@ msgstr "%s automática"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1472
|
||||
msgid "Auto wireless"
|
||||
msgstr "Sen fíos automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1558
|
||||
#: ../js/ui/status/network.js:1566
|
||||
msgid "Enable networking"
|
||||
msgstr "Activar rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1578
|
||||
msgid "Wired"
|
||||
msgstr "Con fíos"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1589
|
||||
msgid "Wireless"
|
||||
msgstr "Sen fíos"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda larga móbil"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1609
|
||||
msgid "VPN Connections"
|
||||
msgstr "Conexións VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1612
|
||||
#: ../js/ui/status/network.js:1620
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuracións da rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1747
|
||||
msgid "Connectivity lost"
|
||||
msgstr "Conectividade perdida"
|
||||
|
||||
#: ../js/ui/status/network.js:1748
|
||||
msgid "You are no longer connected to the network"
|
||||
msgstr "Xa non está conectado á rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1756
|
||||
#: ../js/ui/status/network.js:1757
|
||||
msgid "Connection failed"
|
||||
msgstr "Produciuse un fallo na conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:1757
|
||||
#: ../js/ui/status/network.js:1758
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Produciuse un fallo na activación da conexión de rede"
|
||||
|
||||
@ -1230,44 +1231,44 @@ msgstr "Micrófono"
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:256
|
||||
#: ../js/ui/telepathyClient.js:259
|
||||
msgid "Invitation"
|
||||
msgstr "Convite"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:322
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
msgid "Call"
|
||||
msgstr "Chamar"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:350
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
msgid "File Transfer"
|
||||
msgstr "Transferencia de ficheiro"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:432
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
msgid "Subscription request"
|
||||
msgstr "Solicitude de autorización"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:460
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
msgid "Connection error"
|
||||
msgstr "Erro de conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:722
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:727
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:730
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado/a."
|
||||
@ -1275,35 +1276,35 @@ 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:967
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Enviado ás <b>%X</b> o <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:973
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1020
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s é coñecido agora como %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1129
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Convidado a %s"
|
||||
@ -1311,34 +1312,34 @@ msgstr "Convidado a %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1137
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s esta convidando a unirse a %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
msgid "Decline"
|
||||
msgstr "Rexeitar"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
msgid "Accept"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1173
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videochamada de %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1176
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Chamada de %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1186
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
msgid "Answer"
|
||||
msgstr "Respostar"
|
||||
|
||||
@ -1347,111 +1348,111 @@ msgstr "Respostar"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1222
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s esta enviándolle %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s solicita permiso para ver cando vostede está dispoñíbel"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
msgid "Network error"
|
||||
msgstr "Erro de rede"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
msgid "Authentication failed"
|
||||
msgstr "A autenticación fallou"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
msgid "Encryption error"
|
||||
msgstr "Erro de cifrado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Non se forneceu o certificado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Certificado non fiábel"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
msgid "Certificate expired"
|
||||
msgstr "O certificado caducou"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
msgid "Certificate not activated"
|
||||
msgstr "O certificado non está activado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Certificado de cliente SSL"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1411
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "A impresión dixital do certificado non coincide"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1413
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Certificado autoasinado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
msgid "Status is set to offline"
|
||||
msgstr "O estado está definido a desconectado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
msgid "Encryption is not available"
|
||||
msgstr "O cifrado non está dispoñíbel"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "O certificado non é válido"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Rexeitouse a conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Non é posíbel estabelecer a conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Perdeuse a conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Este recurso xa está conectado ao servidor"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"A conexión foi substituída por unha nova conexión empregando o mesmo recurso"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Esta conta xa existe no servidor"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Nestes intres o servidor está moi ocupado para xesionar a conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "O certificado foi revocado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"O certificado usa un algoritmo de cifrado inseguro ou é criptográficamente "
|
||||
"débil"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1462,67 +1463,76 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Produciuse un fallo na conexión a %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
msgid "Unknown reason"
|
||||
msgstr "Razón descoñecido"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1462
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
msgid "Reconnect"
|
||||
msgstr "Reconectar"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1463
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
msgid "Edit account"
|
||||
msgstr "Editar conta"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
msgid "Unknown reason"
|
||||
msgstr "Razón descoñecido"
|
||||
|
||||
#: ../js/ui/userMenu.js:145
|
||||
msgid "Hidden"
|
||||
msgstr "Oculto"
|
||||
|
||||
#: ../js/ui/userMenu.js:159
|
||||
#: ../js/ui/userMenu.js:151
|
||||
msgid "Idle"
|
||||
msgstr "Inactivo"
|
||||
|
||||
#: ../js/ui/userMenu.js:162
|
||||
#: ../js/ui/userMenu.js:154
|
||||
msgid "Unavailable"
|
||||
msgstr "Non dispoñíbel"
|
||||
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
|
||||
#: ../js/ui/userMenu.js:512 ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:586
|
||||
msgid "Power Off..."
|
||||
msgstr "Apagar…"
|
||||
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
#: ../js/ui/userMenu.js:551
|
||||
#: ../js/ui/userMenu.js:548
|
||||
msgid "Notifications"
|
||||
msgstr "Notificacións"
|
||||
|
||||
#: ../js/ui/userMenu.js:559
|
||||
#: ../js/ui/userMenu.js:556
|
||||
msgid "Online Accounts"
|
||||
msgstr "Contas en liña"
|
||||
|
||||
#: ../js/ui/userMenu.js:563
|
||||
#: ../js/ui/userMenu.js:560
|
||||
msgid "System Settings"
|
||||
msgstr "Configuracións do sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:570
|
||||
#: ../js/ui/userMenu.js:567
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear pantalla"
|
||||
|
||||
#: ../js/ui/userMenu.js:575
|
||||
#: ../js/ui/userMenu.js:572
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:577
|
||||
msgid "Log Out..."
|
||||
msgstr "Saír da sesión…"
|
||||
|
||||
#: ../js/ui/userMenu.js:605
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "O seu estado de chat será estabelecido a «ocupado»"
|
||||
|
||||
#: ../js/ui/userMenu.js:606
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
msgstr ""
|
||||
"Agora as notificacións están desactivadas, incluíndo os mensaxes de "
|
||||
"conversa. O seu estado en liña foi axustado para dicirlle ás outras persoas "
|
||||
"que non quere ver as súas mensaxes."
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1612,6 +1622,18 @@ msgstr "Sistema de ficheiros"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "If true, display onscreen keyboard."
|
||||
#~ msgstr "Se é verdadeiro, móstranse o teclado en pantalla."
|
||||
|
||||
#~ msgid "Show the onscreen keyboard"
|
||||
#~ msgstr "Mostrar o teclado en pantalla"
|
||||
|
||||
#~ msgid "Connectivity lost"
|
||||
#~ msgstr "Conectividade perdida"
|
||||
|
||||
#~ msgid "You are no longer connected to the network"
|
||||
#~ msgstr "Xa non está conectado á rede"
|
||||
|
||||
#~ msgid "Do Not Disturb"
|
||||
#~ msgstr "Non molestar"
|
||||
|
||||
@ -1691,9 +1713,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Non existe o aplicativo"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Lector de pantalla"
|
||||
|
||||
#~ msgid "Clip the crosshairs at the center"
|
||||
#~ msgstr "Poñer o punto de mira no centro"
|
||||
|
||||
|
567
po/pt_BR.po
567
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
1228
po/sr@latin.po
1228
po/sr@latin.po
File diff suppressed because it is too large
Load Diff
302
po/ta.po
302
po/ta.po
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-09-14 21:13+0530\n"
|
||||
"PO-Revision-Date: 2011-09-14 21:16+0530\n"
|
||||
"POT-Creation-Date: 2011-09-19 17:49+0530\n"
|
||||
"PO-Revision-Date: 2011-09-19 17:51+0530\n"
|
||||
"Last-Translator: Dr.T.Vasudevan <agnihot3@gmail.com>\n"
|
||||
"Language-Team: American English <kde-i18n-doc@kde.org>\n"
|
||||
"Language: ta\n"
|
||||
@ -71,22 +71,18 @@ msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "உண்மையெனில், கடிகாரத்தில் மணியுடன் நாளை காட்டு."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "If true, display onscreen keyboard."
|
||||
msgstr "உண்மையானால் திரை விசைப்பலகையை காட்டவும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "உண்மையானால் நேரத்தில் வினாடிகளை காட்டவும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "உண்மையானால் நாட்காட்டியில் ஐஎஸ்ஓ வார எண்களை காட்டவும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "விருப்ப பயன்பாடுகளுக்கு மேல்மேசை கோப்பு அடையாளங்கள்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@ -110,29 +106,25 @@ msgstr ""
|
||||
"webmmux' ஆகும்; இதுVP8 கோடக் ஐ பயன்படுத்தி WEBM க்கு பதிவுசெய்யும். கணினியில் "
|
||||
"பொருத்தமான இழை கணக்குக்கு ஊகம் செய்வதற்கு %T இடப்பிடிப்பானாக வேலை செய்யும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "தேதியை கடிகாரத்தில் காட்டுக"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the onscreen keyboard"
|
||||
msgstr "திரை விசைப்பலகையை காட்டவும்"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "நாட்காட்டியில் வார நாளை காட்டவும்"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "நொடிகளுடன் நேரம் காட்டுக"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr "இந்த அடையாளங் காட்டிகளுக்கு பொருத்தமான பயன்பாடுகள் விருப்ப இடத்தில் காட்டப்படும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -142,18 +134,18 @@ msgstr ""
|
||||
"அடிப்படையாக கொண்டது; இந்த பின்னொட்டை பயன்படுத்தும். பதிவதை வேறு கொள்கலத்தின் ஒழுங்கில் "
|
||||
"மாற்றுகையில் இதையும் மாற்ற வேண்டும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"க்னோம்ஷெல் இன் ஸ்க்ரீன்காஸ்ட் பதிவரில் ஸ்க்ரீன்காட் ஐ பதிகையில் வினாடிக்கு சட்டங்களின் விகிதம்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "ஸ்க்ரீன்காஸ்டை குறியாக்க பயனாகும் ஜிஸ்ட்ரீமர் குழாய்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
@ -164,54 +156,75 @@ msgstr ""
|
||||
"நிரல்கள் (எ-டு: துவக்கிகள்) முன் வைக்கப்படும். இந்த தரவு அந்தரங்கமாக வைக்கப்பட்டாலும் நீங்கள் "
|
||||
"இதை நீக்க விரும்பலாம். அப்படிச் செய்வது முன்னே சேகரித்த தரவை நீக்காஅது என் அறியவும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "பயன்படுத்த வேண்டிய விசைப்பலகை வகை"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "செயல் ஆக்க வேண்டிய நீட்சிகளின் யூயூஐடிக்கள்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "நிரல்களின் பயன்பாடு குறித்த புள்ளிவிவரம் சேகரிக்க வேண்டுமா"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "எந்த விசைப்பலகையை பயன்படுத்த வேண்டும்?"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "ஓபன்செர்ச் வழங்குவோர் செயல்நீக்கம் செய்யபட்டனர்."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:604
|
||||
#: ../js/gdm/loginDialog.js:617
|
||||
msgid "Session..."
|
||||
msgstr "அமர்வு..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:761
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "உள்நுழை"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:818
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(அல்லது விரல் தீய்ப்பு)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:848
|
||||
msgid "Not listed?"
|
||||
msgstr "பட்டியலில் இல்லை?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "ரத்துசெய்க"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:933
|
||||
#: ../js/gdm/loginDialog.js:1009
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "உள்நுழை"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1253
|
||||
#: ../js/gdm/loginDialog.js:1358
|
||||
msgid "Login Window"
|
||||
msgstr "உள்புகு சாளரம்"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:520
|
||||
#: ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:591
|
||||
msgid "Suspend"
|
||||
msgstr "இடைநிறுத்தம்."
|
||||
|
||||
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "மறு துவக்கம்"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "மின்சக்தி நிறுத்தம்"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
msgid "Command not found"
|
||||
msgstr "கட்டளை காணப்படவில்லை"
|
||||
@ -240,15 +253,15 @@ msgstr "APPLICATIONS"
|
||||
msgid "SETTINGS"
|
||||
msgstr "SETTINGS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:685
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
msgid "New Window"
|
||||
msgstr "புதிய சாளரம்"
|
||||
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
#: ../js/ui/appDisplay.js:687
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "விருப்பத்தில் இருந்து நீக்கு"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
msgid "Add to Favorites"
|
||||
msgstr "விருப்பங்களுக்கு சேர்"
|
||||
|
||||
@ -442,7 +455,7 @@ msgstr "இணைப்பு விலகி"
|
||||
msgid "CONTACTS"
|
||||
msgstr "CONTACTS"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1196
|
||||
msgid "Remove"
|
||||
msgstr "நீக்கு"
|
||||
|
||||
@ -536,10 +549,6 @@ msgstr[1] "நீங்கள் தானியங்கியாக %d வி
|
||||
msgid "Logging out of the system."
|
||||
msgstr "கணினியில் இருந்து வெளியேறுகிறது"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "மின்சக்தி நிறுத்தம்"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "இந்த பயன்பாடுகளை மூடி கணினி மின் நிறுத்தம் செய்ய மின் நிறுத்தம் ஐ சொடுக்கவும்"
|
||||
@ -555,11 +564,6 @@ msgstr[1] "கணினி தானியங்கியாக %d வினா
|
||||
msgid "Powering off the system."
|
||||
msgstr "கணினி மின் நிறுத்தப்படுகிறது"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "மறு துவக்கம்"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:98
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr "இந்த பயன்பாடுகளை மூடி கணினி மீள் துவக்கம் செய்ய செய்ய மீள் துவக்கம் ஐ சொடுக்கவும்"
|
||||
@ -584,49 +588,49 @@ msgstr "நிறுவு"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "'%s' ஐ எக்ஸ்டென்ஷன்ஸ்.க்னோம்.ஆர்க். இலிருந்து தரவிறக்கி நிறுவவா?"
|
||||
|
||||
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
|
||||
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "விசைப்பலகை"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:641
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
msgid "No extensions installed"
|
||||
msgstr "நீட்சிகள் ஏதும் நிறுவப்படவில்லை"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:687
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
msgid "Enabled"
|
||||
msgstr "செயலாக்கப்பட்டது"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "செயல்நீக்கப்பட்டது"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
msgid "Error"
|
||||
msgstr "பிழை"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
msgid "Out of date"
|
||||
msgstr "காலாவதியானது"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
msgid "Downloading"
|
||||
msgstr "பதிவிறக்குகிறது"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:720
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
msgid "View Source"
|
||||
msgstr "மூலத்தை பார்க்க"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:726
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
msgid "Web Page"
|
||||
msgstr "இணைய பக்கம்"
|
||||
|
||||
#: ../js/ui/messageTray.js:1188
|
||||
#: ../js/ui/messageTray.js:1189
|
||||
msgid "Open"
|
||||
msgstr "திற"
|
||||
|
||||
#: ../js/ui/messageTray.js:2367
|
||||
#: ../js/ui/messageTray.js:2368
|
||||
msgid "System Information"
|
||||
msgstr "கணினி தகவல்கள்"
|
||||
|
||||
@ -732,14 +736,14 @@ msgid "Dash"
|
||||
msgstr "டேஷ்போர்ட்"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:538
|
||||
#: ../js/ui/panel.js:539
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s லிருந்து வெளியேறு"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:574
|
||||
#: ../js/ui/panel.js:575
|
||||
msgid "Activities"
|
||||
msgstr "செயல்பாடுகள்"
|
||||
|
||||
@ -820,9 +824,10 @@ 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:71
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "திரை விசைப்பலகை"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:75
|
||||
msgid "Visual Alerts"
|
||||
msgstr "காட்சி எச்சரிக்கைகள்"
|
||||
@ -941,7 +946,7 @@ msgstr "எப்போதும் அணுகலை அளி"
|
||||
msgid "Grant this time only"
|
||||
msgstr "இம்முறை மட்டும் அணுகலை அளி"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
|
||||
msgid "Reject"
|
||||
msgstr "மறு"
|
||||
|
||||
@ -981,11 +986,11 @@ msgstr "சாதனத்தின் சொல்லும் பின் ஐ
|
||||
msgid "OK"
|
||||
msgstr "சரி"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:71
|
||||
#: ../js/ui/status/keyboard.js:72
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "விசைப்பலகை இடவமைவை காட்டுக"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:75
|
||||
#: ../js/ui/status/keyboard.js:77
|
||||
msgid "Region and Language Settings"
|
||||
msgstr " வட்டாரம் மற்றும் மொழி அமைப்பு"
|
||||
|
||||
@ -1090,27 +1095,19 @@ msgstr "விபிஎன் இணைப்புகள்"
|
||||
msgid "Network Settings"
|
||||
msgstr "வலைப்பின்னல் அமைப்புகள்"
|
||||
|
||||
#: ../js/ui/status/network.js:1747
|
||||
msgid "Connectivity lost"
|
||||
msgstr "இணைப்பு அற்றுப்போயிற்று"
|
||||
|
||||
#: ../js/ui/status/network.js:1748
|
||||
msgid "You are no longer connected to the network"
|
||||
msgstr "நீங்கள் இப்போது பிணையத்துடன் இணைக்கப்படவில்லை"
|
||||
|
||||
#: ../js/ui/status/network.js:1756
|
||||
#: ../js/ui/status/network.js:1749
|
||||
msgid "Connection failed"
|
||||
msgstr "இணைப்பு தோல்வியுற்றது"
|
||||
|
||||
#: ../js/ui/status/network.js:1757
|
||||
#: ../js/ui/status/network.js:1750
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "வலைப்பின்னல் இணைப்பு செயலாக்கம் தோல்வி அடைந்தது"
|
||||
|
||||
#: ../js/ui/status/network.js:2008
|
||||
#: ../js/ui/status/network.js:2000
|
||||
msgid "Networking is disabled"
|
||||
msgstr "வலைப்பின்னல் செயல் நீக்கப்பட்டது"
|
||||
|
||||
#: ../js/ui/status/network.js:2133
|
||||
#: ../js/ui/status/network.js:2125
|
||||
msgid "Network Manager"
|
||||
msgstr "வலைப்பின்னல் மேலாளர்"
|
||||
|
||||
@ -1213,44 +1210,44 @@ msgstr "ஒலிவாங்கி"
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:256
|
||||
#: ../js/ui/telepathyClient.js:259
|
||||
msgid "Invitation"
|
||||
msgstr "அழைப்பு"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:322
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
msgid "Call"
|
||||
msgstr "அழை"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:350
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
msgid "File Transfer"
|
||||
msgstr "கோப்பு பறிமாற்றம் "
|
||||
|
||||
#: ../js/ui/telepathyClient.js:432
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
msgid "Subscription request"
|
||||
msgstr "சந்தா வேண்டுதல்"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:460
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
msgid "Connection error"
|
||||
msgstr "இணைப்பு பிழை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:722
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s இணைப்பில்"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:727
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s இணைப்பு விலகி"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:730
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s வெளியே "
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s வேலையில்"
|
||||
@ -1258,35 +1255,35 @@ 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:967
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr " <b>%X</b> போது <b>%A</b> %A அன்று அனுப்பியது"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:973
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "<b>%A</b>, <b>%B %d</b> அன்று அனுப்பியது"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr " <b>%A</b>, <b>%B %d</b>, %Y அன்று அனுப்பியது"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1020
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s இப்போது %s ஆனார்"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1129
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "%s க்கு அழைப்பு"
|
||||
@ -1294,34 +1291,34 @@ msgstr "%s க்கு அழைப்பு"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1137
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s உங்களை %s உடன் சேர அழைக்கிறார்."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
msgid "Decline"
|
||||
msgstr "நிராகரி"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
msgid "Accept"
|
||||
msgstr "ஏற்றுக்கொள்"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1173
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "%s இடமிருந்து விடியோ அழைப்பு"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1176
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "%s இடமிருந்து அழைப்பு"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1186
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
msgid "Answer"
|
||||
msgstr "பதிலளி"
|
||||
|
||||
@ -1330,108 +1327,108 @@ msgstr "பதிலளி"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1222
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s உங்களுக்கு %s அனுப்புகிறார்"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s நீங்கள் இணைப்பில் இருக்கும் போது காண அனுமதி வேண்டுகிறார். "
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
msgid "Network error"
|
||||
msgstr "வலையமைப்பு பிழை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
msgid "Authentication failed"
|
||||
msgstr "உறுதி செய்தல் தோல்வி"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
msgid "Encryption error"
|
||||
msgstr "மறையாக்க பிழை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
msgid "Certificate not provided"
|
||||
msgstr "சான்றிதழ் தரப்படவில்லை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "சான்றிதழில் நம்பக தன்மை இல்லை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
msgid "Certificate expired"
|
||||
msgstr "சான்றிதழ் காலாவதியானது"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
msgid "Certificate not activated"
|
||||
msgstr "சான்றிதழ் செயல்படுத்தப்படவில்லை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "சான்றிதழ் புரவலன் பெயர் ஒத்திசையவில்லை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1411
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "சான்றிதழ் அடையாளம் ஒத்திசையவில்லை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1413
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "சான்றிதழ் தானே கையெழுத்திட்டது"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
msgid "Status is set to offline"
|
||||
msgstr "நிலை இப்போது இணைப்பு விலகி "
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
msgid "Encryption is not available"
|
||||
msgstr "குறீயீட்டுமுறை கிடைப்பில் இல்லை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "சான்றிதழ் செல்லுபடியாகாது"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
msgid "Connection has been refused"
|
||||
msgstr "இணைப்பு மறுக்கப்பட்டது"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
msgid "Connection can't be established"
|
||||
msgstr "இணைக்க முடியவில்லை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
msgid "Connection has been lost"
|
||||
msgstr "இணைப்பு அற்றுப்போயிற்று"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "இந்த மூலம் ஏற்கனவே சேவையகத்துக்கு இணைக்கப்பட்டது"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
msgid "Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "இணைப்பு அதே முலத்துடன் புதிய இணைப்பால் மாற்றப்பட்டது."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "இந்த கணக்கு ஏற்கனவே சேவையகத்தில் உள்ளது"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "இணைப்பை கையாள சேவையகம் இப்போது மிகவும் வேலை பளுவில் உள்ளது."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "சான்றிதழ் ரத்து செய்யப்பட்டது"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"சான்றிதழ் பாதுகாப்பில்லாத சைபர் அல்கோரிதத்தை பயன்படுத்துகிறது. இது மறையாக்கத்தில் "
|
||||
"பலகீனமானது."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1441,23 +1438,23 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr " %s க்கு இணைப்பு தோல்வி அடைந்தது"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
msgid "Unknown reason"
|
||||
msgstr "தெரியாத காரணம்"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1462
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
msgid "Reconnect"
|
||||
msgstr "மீள் இணை"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1463
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
msgid "Edit account"
|
||||
msgstr "கணக்கை திருத்துக"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
msgid "Unknown reason"
|
||||
msgstr "தெரியாத காரணம்"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
msgid "Hidden"
|
||||
msgstr "மறைக்கப்பட்டது"
|
||||
@ -1470,38 +1467,46 @@ msgstr "சும்மாயிருத்தல் "
|
||||
msgid "Unavailable"
|
||||
msgstr "இருப்பில் இல்லை"
|
||||
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:592
|
||||
msgid "Power Off..."
|
||||
msgstr "மின்சக்தி நிறுத்து..."
|
||||
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
|
||||
msgid "Suspend"
|
||||
msgstr "இடைநிறுத்தம்."
|
||||
|
||||
#: ../js/ui/userMenu.js:551
|
||||
#: ../js/ui/userMenu.js:554
|
||||
msgid "Notifications"
|
||||
msgstr "அறிவிப்புகள்"
|
||||
|
||||
#: ../js/ui/userMenu.js:559
|
||||
#: ../js/ui/userMenu.js:562
|
||||
msgid "Online Accounts"
|
||||
msgstr "ஆன் லைன் கணக்குகள்"
|
||||
|
||||
#: ../js/ui/userMenu.js:563
|
||||
#: ../js/ui/userMenu.js:566
|
||||
msgid "System Settings"
|
||||
msgstr "கணினி அமைப்புகள்"
|
||||
|
||||
#: ../js/ui/userMenu.js:570
|
||||
#: ../js/ui/userMenu.js:573
|
||||
msgid "Lock Screen"
|
||||
msgstr "திரையைப் பூட்டுக."
|
||||
|
||||
#: ../js/ui/userMenu.js:575
|
||||
#: ../js/ui/userMenu.js:578
|
||||
msgid "Switch User"
|
||||
msgstr "பயனர் மாற்று"
|
||||
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:583
|
||||
msgid "Log Out..."
|
||||
msgstr "வெளியேறு..."
|
||||
|
||||
#: ../js/ui/userMenu.js:611
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "உங்கள் நடப்பு நிலையை வேலையில் என அமைக்கப்பட்டது"
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
msgstr ""
|
||||
"அறிவிப்புகள் இப்போது செயல் நீக்கப்பட்டன. இது அரட்டை செய்திகளையும் உள்லடக்கும். உங்கள் "
|
||||
"வலைஇணைப்பு நிலை நீங்கள் மற்றவர் செய்திகளை காணமாட்டீர்கள் என மாற்றி அமைக்கப்பட்டது"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1591,6 +1596,18 @@ msgstr "கோப்பு அமைப்பு"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "If true, display onscreen keyboard."
|
||||
#~ msgstr "உண்மையானால் திரை விசைப்பலகையை காட்டவும்."
|
||||
|
||||
#~ msgid "Show the onscreen keyboard"
|
||||
#~ msgstr "திரை விசைப்பலகையை காட்டவும்"
|
||||
|
||||
#~ msgid "Connectivity lost"
|
||||
#~ msgstr "இணைப்பு அற்றுப்போயிற்று"
|
||||
|
||||
#~ msgid "You are no longer connected to the network"
|
||||
#~ msgstr "நீங்கள் இப்போது பிணையத்துடன் இணைக்கப்படவில்லை"
|
||||
|
||||
#~ msgid "Do Not Disturb"
|
||||
#~ msgstr "தொந்திரவு செய்யாதே"
|
||||
|
||||
@ -1833,9 +1850,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Shut Down..."
|
||||
#~ msgstr "நிறுத்தவும்... "
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "திரைபடிப்பான்"
|
||||
|
||||
#~ msgid "Search your computer"
|
||||
#~ msgstr "உங்கள் கணினியில் தேடுக"
|
||||
|
||||
|
317
po/zh_CN.po
317
po/zh_CN.po
@ -14,16 +14,15 @@
|
||||
msgid ""
|
||||
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-09-11 10:39+0000\n"
|
||||
"PO-Revision-Date: 2011-09-13 11:51+0800\n"
|
||||
"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-09-19 09:24+0000\n"
|
||||
"PO-Revision-Date: 2011-09-19 09:25+0000\n"
|
||||
"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
|
||||
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
|
||||
"Language: zh_CN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bits\n"
|
||||
"Language: zh_CN\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
@ -185,36 +184,55 @@ msgstr "使用哪个键盘"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "已禁用的 OpenSearch 提供商"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:604
|
||||
#: ../js/gdm/loginDialog.js:617
|
||||
msgid "Session..."
|
||||
msgstr "会话..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:761
|
||||
#| msgid "Sign In"
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "登录"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:818
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(或滑动手指)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:848
|
||||
msgid "Not listed?"
|
||||
msgstr "未列出?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:410
|
||||
#: ../js/ui/networkAgent.js:158 ../js/ui/polkitAuthenticationAgent.js:170
|
||||
#: ../js/ui/status/bluetooth.js:480
|
||||
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:933
|
||||
#| msgid "Sign In"
|
||||
#: ../js/gdm/loginDialog.js:1009
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "登录"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1253
|
||||
#: ../js/gdm/loginDialog.js:1358
|
||||
msgid "Login Window"
|
||||
msgstr "登录窗口"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:520
|
||||
#: ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:591
|
||||
msgid "Suspend"
|
||||
msgstr "挂起"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "重启"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "关机"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
msgid "Command not found"
|
||||
msgstr "命令未找到"
|
||||
@ -243,15 +261,15 @@ msgstr "应用程序"
|
||||
msgid "SETTINGS"
|
||||
msgstr "设置"
|
||||
|
||||
#: ../js/ui/appDisplay.js:685
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
msgid "New Window"
|
||||
msgstr "新窗口"
|
||||
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
#: ../js/ui/appDisplay.js:687
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "从收藏夹中移除"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
#: ../js/ui/appDisplay.js:688
|
||||
msgid "Add to Favorites"
|
||||
msgstr "添加到收藏夹"
|
||||
|
||||
@ -445,7 +463,7 @@ msgstr "离线"
|
||||
msgid "CONTACTS"
|
||||
msgstr "联系人"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1196
|
||||
msgid "Remove"
|
||||
msgstr "移除"
|
||||
|
||||
@ -513,7 +531,7 @@ msgstr "最近项目"
|
||||
msgid "Log Out %s"
|
||||
msgstr "注销 %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:61 ../js/ui/endSessionDialog.js:67
|
||||
#: ../js/ui/endSessionDialog.js:61 ../js/ui/endSessionDialog.js:75
|
||||
msgid "Log Out"
|
||||
msgstr "注销"
|
||||
|
||||
@ -521,98 +539,102 @@ msgstr "注销"
|
||||
msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgstr "点“注销“来退出这些应用程序及系统"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:63
|
||||
#, c-format
|
||||
msgid "%s will be logged out automatically in %d seconds."
|
||||
msgstr "%s 将在 %d 秒后自动注销。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64
|
||||
#, c-format
|
||||
msgid "You will be logged out automatically in %d seconds."
|
||||
msgstr "您将在 %d 秒后自动注销。"
|
||||
msgid "%s will be logged out automatically in %d second."
|
||||
msgid_plural "%s will be logged out automatically in %d seconds."
|
||||
msgstr[0] "%s 将在 %d 秒后自动注销。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:65
|
||||
#: ../js/ui/endSessionDialog.js:69
|
||||
#, c-format
|
||||
msgid "You will be logged out automatically in %d second."
|
||||
msgid_plural "You will be logged out automatically in %d seconds."
|
||||
msgstr[0] "您将在 %d 秒后自动注销。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:73
|
||||
msgid "Logging out of the system."
|
||||
msgstr "从系统注销"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:72 ../js/ui/endSessionDialog.js:79
|
||||
msgid "Power Off"
|
||||
msgstr "关机"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:73
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "点击关机以退出应用程序并关闭系统。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr "系统将在 %d 秒后自动关机。"
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "系统将在 %d 秒后自动关机。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
msgid "Powering off the system."
|
||||
msgstr "关闭系统。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77 ../js/ui/endSessionDialog.js:85
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgid "Restart"
|
||||
msgstr "重启"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:86
|
||||
#: ../js/ui/endSessionDialog.js:98
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr "点“重启“来退出这些应用程序并重启系统"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87
|
||||
#: ../js/ui/endSessionDialog.js:100
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d seconds."
|
||||
msgstr "系统将在 %d 秒后自动重启。"
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "系统将在 %d 秒后自动重启。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:104
|
||||
msgid "Restarting the system."
|
||||
msgstr "重启计算机。"
|
||||
msgstr "重启系统。"
|
||||
|
||||
#: ../js/ui/extensionSystem.js:481
|
||||
msgid "Install"
|
||||
msgstr "安装"
|
||||
|
||||
#: ../js/ui/extensionSystem.js:485
|
||||
#, c-format
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "从 extensions.gnome.org 下载并安装 %s?"
|
||||
|
||||
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "键盘"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:641
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
msgid "No extensions installed"
|
||||
msgstr "未安装扩展"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:687
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
msgid "Enabled"
|
||||
msgstr "已启用"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "已禁用"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
msgid "Out of date"
|
||||
msgstr "过时"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
msgid "Downloading"
|
||||
msgstr "正在下载"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:720
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
msgid "View Source"
|
||||
msgstr "查看源"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:726
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
msgid "Web Page"
|
||||
msgstr "网页"
|
||||
|
||||
#: ../js/ui/messageTray.js:1188
|
||||
#: ../js/ui/messageTray.js:1189
|
||||
msgid "Open"
|
||||
msgstr "打开"
|
||||
|
||||
#: ../js/ui/messageTray.js:2367
|
||||
#: ../js/ui/messageTray.js:2368
|
||||
msgid "System Information"
|
||||
msgstr "系统信息"
|
||||
|
||||
@ -718,14 +740,14 @@ msgid "Dash"
|
||||
msgstr "Dash"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:538
|
||||
#: ../js/ui/panel.js:539
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "退出 %s"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:574
|
||||
#: ../js/ui/panel.js:575
|
||||
msgid "Activities"
|
||||
msgstr "活动"
|
||||
|
||||
@ -927,7 +949,7 @@ msgstr "始终允许"
|
||||
msgid "Grant this time only"
|
||||
msgstr "允许一次"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
|
||||
msgid "Reject"
|
||||
msgstr "拒绝"
|
||||
|
||||
@ -967,11 +989,11 @@ msgstr "请输入设备上的 PIN 码。"
|
||||
msgid "OK"
|
||||
msgstr "确定"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:71
|
||||
#: ../js/ui/status/keyboard.js:72
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "显示键盘布局"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:75
|
||||
#: ../js/ui/status/keyboard.js:77
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "区域和语言设置"
|
||||
|
||||
@ -1076,27 +1098,19 @@ msgstr "VPN 连接"
|
||||
msgid "Network Settings"
|
||||
msgstr "网络设置"
|
||||
|
||||
#: ../js/ui/status/network.js:1747
|
||||
msgid "Connectivity lost"
|
||||
msgstr "连接丢失"
|
||||
|
||||
#: ../js/ui/status/network.js:1748
|
||||
msgid "You're no longer connected to the network"
|
||||
msgstr "您已不再连接到该网络"
|
||||
|
||||
#: ../js/ui/status/network.js:1756
|
||||
#: ../js/ui/status/network.js:1749
|
||||
msgid "Connection failed"
|
||||
msgstr "连接失败"
|
||||
|
||||
#: ../js/ui/status/network.js:1757
|
||||
#: ../js/ui/status/network.js:1750
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "启用网络连接失败"
|
||||
|
||||
#: ../js/ui/status/network.js:2008
|
||||
#: ../js/ui/status/network.js:2000
|
||||
msgid "Networking is disabled"
|
||||
msgstr "联网已禁用"
|
||||
|
||||
#: ../js/ui/status/network.js:2133
|
||||
#: ../js/ui/status/network.js:2125
|
||||
msgid "Network Manager"
|
||||
msgstr "网络管理器"
|
||||
|
||||
@ -1138,6 +1152,12 @@ msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "剩余 %d 分钟"
|
||||
|
||||
#: ../js/ui/status/power.js:121 ../js/ui/status/power.js:194
|
||||
#, c-format
|
||||
msgctxt "percent of battery remaining"
|
||||
msgid "%d%%"
|
||||
msgstr "%d%%"
|
||||
|
||||
#: ../js/ui/status/power.js:201
|
||||
msgid "AC adapter"
|
||||
msgstr "AC 适配器"
|
||||
@ -1189,44 +1209,44 @@ msgstr "麦克风"
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:256
|
||||
#: ../js/ui/telepathyClient.js:259
|
||||
msgid "Invitation"
|
||||
msgstr "邀请"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:322
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
msgid "Call"
|
||||
msgstr "呼叫"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:350
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
msgid "File Transfer"
|
||||
msgstr "文件传送"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:432
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
msgid "Subscription request"
|
||||
msgstr "订阅请求"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:460
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
msgid "Connection error"
|
||||
msgstr "连接错误"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:722
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s 在线。"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:727
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s 离线。"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:730
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s 离开。"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s 忙碌。"
|
||||
@ -1234,35 +1254,35 @@ 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:967
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "发送于 <b>%X</b>,在 <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:973
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "发送于 <b>%A</b>,<b>%B %d</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:978
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "发送于 <b>%A</b>,<b>%B %d</b>,%Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1020
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s 现在叫做 %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1129
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "邀请 %s"
|
||||
@ -1270,34 +1290,34 @@ msgstr "邀请 %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1137
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s 要请您加入 %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
msgid "Decline"
|
||||
msgstr "拒绝"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
msgid "Accept"
|
||||
msgstr "接受"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1173
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "来自 %s 的视频呼叫"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1176
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "来自 %s 的呼叫"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1186
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
msgid "Answer"
|
||||
msgstr "接听"
|
||||
|
||||
@ -1306,108 +1326,108 @@ msgstr "接听"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1222
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s 正在向您发送 %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s 想得到授权来查看您的在线状态"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
msgid "Network error"
|
||||
msgstr "网络错误"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
msgid "Authentication failed"
|
||||
msgstr "认证失败"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
msgid "Encryption error"
|
||||
msgstr "加密错误"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
msgid "Certificate not provided"
|
||||
msgstr "未提供证书"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "证书不受信任"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
msgid "Certificate expired"
|
||||
msgstr "证书过期"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
msgid "Certificate not activated"
|
||||
msgstr "证书未激活"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "证书的主机名不匹配"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1411
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "证书的指纹不匹配"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1413
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "证书是自已签发的"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
msgid "Status is set to offline"
|
||||
msgstr "已将状态设为离线。"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
msgid "Encryption is not available"
|
||||
msgstr "加密不可用"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "证书无效"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
msgid "Connection has been refused"
|
||||
msgstr "连接被拒绝"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
msgid "Connection can't be established"
|
||||
msgstr "无法建立连接"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
msgid "Connection has been lost"
|
||||
msgstr "连接丢失"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "此资源已经连接到服务器"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "连接已经被使用相同资源的新连接所替换"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "服务器上已经存在该账户"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "服务器太忙,暂时无法处理该连接"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "证书已撤销"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "证书使用了不安全的加密算法或加密很弱"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1415,23 +1435,23 @@ msgstr "服务器证书的长度或证书链的长度超过了加密算法库的
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "连接 %s 失败"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
msgid "Unknown reason"
|
||||
msgstr "未知原因"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1462
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
msgid "Reconnect"
|
||||
msgstr "重新连接"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1463
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
msgid "Edit account"
|
||||
msgstr "编辑帐户"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
msgid "Unknown reason"
|
||||
msgstr "未知原因"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
msgid "Hidden"
|
||||
msgstr "隐身"
|
||||
@ -1444,39 +1464,46 @@ msgstr "空闲"
|
||||
msgid "Unavailable"
|
||||
msgstr "不可用"
|
||||
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:592
|
||||
msgid "Power Off..."
|
||||
msgstr "关机..."
|
||||
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
|
||||
msgid "Suspend"
|
||||
msgstr "挂起"
|
||||
|
||||
#: ../js/ui/userMenu.js:551
|
||||
#| msgid "Applications"
|
||||
#: ../js/ui/userMenu.js:554
|
||||
msgid "Notifications"
|
||||
msgstr "提示"
|
||||
|
||||
#: ../js/ui/userMenu.js:559
|
||||
#: ../js/ui/userMenu.js:562
|
||||
msgid "Online Accounts"
|
||||
msgstr "在线帐户"
|
||||
|
||||
#: ../js/ui/userMenu.js:563
|
||||
#: ../js/ui/userMenu.js:566
|
||||
msgid "System Settings"
|
||||
msgstr "系统设置"
|
||||
|
||||
#: ../js/ui/userMenu.js:570
|
||||
#: ../js/ui/userMenu.js:573
|
||||
msgid "Lock Screen"
|
||||
msgstr "锁定"
|
||||
|
||||
#: ../js/ui/userMenu.js:575
|
||||
#: ../js/ui/userMenu.js:578
|
||||
msgid "Switch User"
|
||||
msgstr "切换用户"
|
||||
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:583
|
||||
msgid "Log Out..."
|
||||
msgstr "注销..."
|
||||
|
||||
#: ../js/ui/userMenu.js:611
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "您的聊天状态将被设置为忙碌"
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
msgstr ""
|
||||
"提示现已禁用,聊天消息也同时被禁用。您的在线状态已被自动调整,以便他人知道您"
|
||||
"可能无法看到消息。"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1564,6 +1591,12 @@ msgstr "文件系统"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Connectivity lost"
|
||||
#~ msgstr "连接丢失"
|
||||
|
||||
#~ msgid "You're no longer connected to the network"
|
||||
#~ msgstr "您已不再连接到该网络"
|
||||
|
||||
#~ msgid "Do Not Disturb"
|
||||
#~ msgstr "请勿打扰"
|
||||
|
||||
|
460
po/zh_HK.po
460
po/zh_HK.po
File diff suppressed because it is too large
Load Diff
454
po/zh_TW.po
454
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@ -19,7 +19,7 @@ typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
|
||||
servicedir = $(datadir)/dbus-1/services
|
||||
service_DATA = $(service_in_files:.service.in=.service)
|
||||
|
||||
$(service_DATA): $(service_in_files) Makefile
|
||||
%.service: %.service.in Makefile
|
||||
$(AM_V_GEN) \
|
||||
[ -d $(@D) ] || $(mkdir_p) $(@D) ; \
|
||||
sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@.tmp && mv $@.tmp $@
|
||||
|
@ -120,7 +120,7 @@ shell_dbus_init (gboolean replace)
|
||||
/* ...and the on-screen keyboard service */
|
||||
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
||||
G_TYPE_STRING, "org.gnome.Caribou.Keyboard",
|
||||
G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING | request_name_flags,
|
||||
G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING,
|
||||
G_TYPE_INVALID,
|
||||
G_TYPE_UINT, &request_name_result,
|
||||
G_TYPE_INVALID))
|
||||
|
@ -14,6 +14,8 @@ ShellApp* _shell_app_new_for_window (MetaWindow *window);
|
||||
|
||||
ShellApp* _shell_app_new (GMenuTreeEntry *entry);
|
||||
|
||||
void _shell_app_set_entry (ShellApp *app, GMenuTreeEntry *entry);
|
||||
|
||||
void _shell_app_handle_startup_sequence (ShellApp *app, SnStartupSequence *sequence);
|
||||
|
||||
void _shell_app_add_window (ShellApp *app, MetaWindow *window);
|
||||
|
@ -43,14 +43,13 @@ static guint signals[LAST_SIGNAL] = { 0 };
|
||||
struct _ShellAppSystemPrivate {
|
||||
GMenuTree *apps_tree;
|
||||
|
||||
GHashTable *entry_to_app;
|
||||
|
||||
GHashTable *running_apps;
|
||||
GHashTable *id_to_app;
|
||||
|
||||
GSList *known_vendor_prefixes;
|
||||
|
||||
GMenuTree *settings_tree;
|
||||
GHashTable *setting_entry_to_app;
|
||||
GHashTable *setting_id_to_app;
|
||||
};
|
||||
|
||||
static void shell_app_system_finalize (GObject *object);
|
||||
@ -94,15 +93,13 @@ shell_app_system_init (ShellAppSystem *self)
|
||||
SHELL_TYPE_APP_SYSTEM,
|
||||
ShellAppSystemPrivate);
|
||||
|
||||
priv->running_apps = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
NULL, (GDestroyNotify) g_object_unref);
|
||||
|
||||
priv->entry_to_app = g_hash_table_new_full (NULL, NULL,
|
||||
(GDestroyNotify)gmenu_tree_item_unref,
|
||||
(GDestroyNotify)g_object_unref);
|
||||
priv->setting_entry_to_app = g_hash_table_new_full (NULL, NULL,
|
||||
(GDestroyNotify)gmenu_tree_item_unref,
|
||||
(GDestroyNotify)g_object_unref);
|
||||
priv->running_apps = g_hash_table_new_full (NULL, NULL, (GDestroyNotify) g_object_unref, NULL);
|
||||
priv->id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
NULL,
|
||||
(GDestroyNotify)g_object_unref);
|
||||
priv->setting_id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
NULL,
|
||||
(GDestroyNotify)g_object_unref);
|
||||
|
||||
/* For now, we want to pick up Evince, Nautilus, etc. We'll
|
||||
* handle NODISPLAY semantics at a higher level or investigate them
|
||||
@ -128,8 +125,8 @@ shell_app_system_finalize (GObject *object)
|
||||
g_object_unref (priv->settings_tree);
|
||||
|
||||
g_hash_table_destroy (priv->running_apps);
|
||||
g_hash_table_destroy (priv->entry_to_app);
|
||||
g_hash_table_destroy (priv->setting_entry_to_app);
|
||||
g_hash_table_destroy (priv->id_to_app);
|
||||
g_hash_table_destroy (priv->setting_id_to_app);
|
||||
|
||||
g_slist_foreach (priv->known_vendor_prefixes, (GFunc)g_free, NULL);
|
||||
g_slist_free (priv->known_vendor_prefixes);
|
||||
@ -245,42 +242,10 @@ get_prefix_for_entry (GMenuTreeEntry *entry)
|
||||
}
|
||||
|
||||
static void
|
||||
load_app_entry (ShellAppSystem *self,
|
||||
GMenuTreeEntry *entry)
|
||||
get_flattened_entries_recurse (GMenuTreeDirectory *dir,
|
||||
GHashTable *entry_set)
|
||||
{
|
||||
char *prefix;
|
||||
ShellApp *app;
|
||||
|
||||
if (g_hash_table_lookup (self->priv->entry_to_app, entry))
|
||||
return;
|
||||
|
||||
prefix = get_prefix_for_entry (entry);
|
||||
|
||||
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);
|
||||
|
||||
/* Here we check to see whether the app is still running; if so, we
|
||||
* keep the old data around.
|
||||
*/
|
||||
app = g_hash_table_lookup (self->priv->running_apps, gmenu_tree_entry_get_desktop_file_id (entry));
|
||||
if (app != NULL)
|
||||
app = g_object_ref (app);
|
||||
else
|
||||
app = _shell_app_new (entry);
|
||||
|
||||
g_hash_table_insert (self->priv->entry_to_app, gmenu_tree_item_ref (entry), app);
|
||||
}
|
||||
|
||||
static void
|
||||
gather_apps_recurse (ShellAppSystem *self,
|
||||
GMenuTreeDirectory *root)
|
||||
{
|
||||
GMenuTreeIter *iter = gmenu_tree_directory_iter (root);
|
||||
GMenuTreeIter *iter = gmenu_tree_directory_iter (dir);
|
||||
GMenuTreeItemType next_type;
|
||||
|
||||
while ((next_type = gmenu_tree_iter_next (iter)) != GMENU_TREE_ITEM_INVALID)
|
||||
@ -291,14 +256,18 @@ gather_apps_recurse (ShellAppSystem *self,
|
||||
{
|
||||
case GMENU_TREE_ITEM_ENTRY:
|
||||
{
|
||||
item = gmenu_tree_iter_get_entry (iter);
|
||||
load_app_entry (self, (GMenuTreeEntry*)item);
|
||||
GMenuTreeEntry *entry;
|
||||
item = entry = gmenu_tree_iter_get_entry (iter);
|
||||
/* Key is owned by entry */
|
||||
g_hash_table_replace (entry_set,
|
||||
(char*)gmenu_tree_entry_get_desktop_file_id (entry),
|
||||
gmenu_tree_item_ref (entry));
|
||||
}
|
||||
break;
|
||||
case GMENU_TREE_ITEM_DIRECTORY:
|
||||
{
|
||||
item = gmenu_tree_iter_get_directory (iter);
|
||||
gather_apps_recurse (self, (GMenuTreeDirectory*)item);
|
||||
get_flattened_entries_recurse ((GMenuTreeDirectory*)item, entry_set);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -311,46 +280,24 @@ gather_apps_recurse (ShellAppSystem *self,
|
||||
gmenu_tree_iter_unref (iter);
|
||||
}
|
||||
|
||||
static void
|
||||
gather_settings_recurse (ShellAppSystem *self,
|
||||
GMenuTreeDirectory *root)
|
||||
static GHashTable *
|
||||
get_flattened_entries_from_tree (GMenuTree *tree)
|
||||
{
|
||||
GMenuTreeIter *iter = gmenu_tree_directory_iter (root);
|
||||
GMenuTreeItemType next_type;
|
||||
GHashTable *table;
|
||||
GMenuTreeDirectory *root;
|
||||
|
||||
while ((next_type = gmenu_tree_iter_next (iter)) != GMENU_TREE_ITEM_INVALID)
|
||||
{
|
||||
gpointer item = NULL;
|
||||
table = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
(GDestroyNotify) NULL,
|
||||
(GDestroyNotify) gmenu_tree_item_unref);
|
||||
|
||||
switch (next_type)
|
||||
{
|
||||
case GMENU_TREE_ITEM_ENTRY:
|
||||
{
|
||||
ShellApp *app;
|
||||
root = gmenu_tree_get_root_directory (tree);
|
||||
|
||||
if (root != NULL)
|
||||
get_flattened_entries_recurse (root, table);
|
||||
|
||||
item = gmenu_tree_iter_get_entry (iter);
|
||||
if (g_hash_table_lookup (self->priv->setting_entry_to_app, item))
|
||||
return;
|
||||
|
||||
app = _shell_app_new (item);
|
||||
|
||||
g_hash_table_insert (self->priv->setting_entry_to_app, gmenu_tree_item_ref (item), app);
|
||||
}
|
||||
break;
|
||||
case GMENU_TREE_ITEM_DIRECTORY:
|
||||
{
|
||||
item = gmenu_tree_iter_get_directory (iter);
|
||||
gather_settings_recurse (self, (GMenuTreeDirectory*)item);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (item != NULL)
|
||||
gmenu_tree_item_unref (item);
|
||||
}
|
||||
|
||||
gmenu_tree_iter_unref (iter);
|
||||
gmenu_tree_item_unref (root);
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -359,11 +306,14 @@ on_apps_tree_changed_cb (GMenuTree *tree,
|
||||
{
|
||||
ShellAppSystem *self = SHELL_APP_SYSTEM (user_data);
|
||||
GError *error = NULL;
|
||||
GMenuTreeDirectory *root;
|
||||
GHashTable *new_apps;
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
GSList *removed_apps = NULL;
|
||||
GSList *removed_node;
|
||||
|
||||
g_assert (tree == self->priv->apps_tree);
|
||||
|
||||
g_hash_table_remove_all (self->priv->entry_to_app);
|
||||
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;
|
||||
@ -374,13 +324,74 @@ on_apps_tree_changed_cb (GMenuTree *tree,
|
||||
return;
|
||||
}
|
||||
|
||||
root = gmenu_tree_get_root_directory (self->priv->apps_tree);
|
||||
|
||||
if (root)
|
||||
new_apps = get_flattened_entries_from_tree (self->priv->apps_tree);
|
||||
g_hash_table_iter_init (&iter, new_apps);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
gather_apps_recurse (self, root);
|
||||
gmenu_tree_item_unref (root);
|
||||
const char *id = key;
|
||||
GMenuTreeEntry *entry = value;
|
||||
GMenuTreeEntry *old_entry;
|
||||
char *prefix;
|
||||
ShellApp *app;
|
||||
|
||||
prefix = get_prefix_for_entry (entry);
|
||||
|
||||
if (prefix != NULL
|
||||
&& !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);
|
||||
|
||||
app = g_hash_table_lookup (self->priv->id_to_app, id);
|
||||
if (app != NULL)
|
||||
{
|
||||
/* We hold a reference to the original entry temporarily,
|
||||
* because otherwise the hash table would be referencing
|
||||
* potentially free'd memory until we replace it below with
|
||||
* the new data.
|
||||
*/
|
||||
old_entry = shell_app_get_tree_entry (app);
|
||||
gmenu_tree_item_ref (old_entry);
|
||||
_shell_app_set_entry (app, entry);
|
||||
g_object_ref (app); /* Extra ref, removed in _replace below */
|
||||
}
|
||||
else
|
||||
{
|
||||
old_entry = NULL;
|
||||
app = _shell_app_new (entry);
|
||||
}
|
||||
/* Note that "id" is owned by app->entry. Since we're always
|
||||
* setting a new entry, even if the app already exists in the
|
||||
* hash table we need to replace the key so that the new id
|
||||
* string is pointed to.
|
||||
*/
|
||||
g_hash_table_replace (self->priv->id_to_app, (char*)id, app);
|
||||
|
||||
if (old_entry)
|
||||
gmenu_tree_item_unref (old_entry);
|
||||
}
|
||||
/* Now iterate over the apps again; we need to unreference any apps
|
||||
* which have been removed. The JS code may still be holding a
|
||||
* reference; that's fine.
|
||||
*/
|
||||
g_hash_table_iter_init (&iter, self->priv->id_to_app);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
const char *id = key;
|
||||
|
||||
if (!g_hash_table_lookup (new_apps, id))
|
||||
removed_apps = g_slist_prepend (removed_apps, (char*)id);
|
||||
}
|
||||
for (removed_node = removed_apps; removed_node; removed_node = removed_node->next)
|
||||
{
|
||||
const char *id = removed_node->data;
|
||||
g_hash_table_remove (self->priv->id_to_app, id);
|
||||
}
|
||||
g_slist_free (removed_apps);
|
||||
|
||||
g_hash_table_destroy (new_apps);
|
||||
|
||||
g_signal_emit (self, signals[INSTALLED_CHANGED], 0);
|
||||
}
|
||||
@ -391,24 +402,32 @@ on_settings_tree_changed_cb (GMenuTree *tree,
|
||||
{
|
||||
ShellAppSystem *self = SHELL_APP_SYSTEM (user_data);
|
||||
GError *error = NULL;
|
||||
GMenuTreeDirectory *root;
|
||||
GHashTable *new_settings;
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
|
||||
g_assert (tree == self->priv->settings_tree);
|
||||
|
||||
g_hash_table_remove_all (self->priv->setting_entry_to_app);
|
||||
g_hash_table_remove_all (self->priv->setting_id_to_app);
|
||||
if (!gmenu_tree_load_sync (self->priv->settings_tree, &error))
|
||||
{
|
||||
g_warning ("Failed to load settings: %s", error->message);
|
||||
return;
|
||||
}
|
||||
|
||||
root = gmenu_tree_get_root_directory (self->priv->settings_tree);
|
||||
new_settings = get_flattened_entries_from_tree (tree);
|
||||
|
||||
if (root)
|
||||
g_hash_table_iter_init (&iter, new_settings);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
gather_settings_recurse (self, root);
|
||||
gmenu_tree_item_unref (root);
|
||||
const char *id = key;
|
||||
GMenuTreeEntry *entry = value;
|
||||
ShellApp *app;
|
||||
|
||||
app = _shell_app_new (entry);
|
||||
g_hash_table_replace (self->priv->setting_id_to_app, (char*)id, app);
|
||||
}
|
||||
g_hash_table_destroy (new_settings);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -444,7 +463,6 @@ ShellApp *
|
||||
shell_app_system_lookup_setting (ShellAppSystem *self,
|
||||
const char *id)
|
||||
{
|
||||
GMenuTreeEntry *entry;
|
||||
ShellApp *app;
|
||||
|
||||
/* Actually defer to the main app set if there's overlap */
|
||||
@ -452,18 +470,7 @@ shell_app_system_lookup_setting (ShellAppSystem *self,
|
||||
if (app != NULL)
|
||||
return app;
|
||||
|
||||
entry = gmenu_tree_get_entry_by_id (self->priv->settings_tree, id);
|
||||
if (entry == NULL)
|
||||
return NULL;
|
||||
|
||||
app = g_hash_table_lookup (self->priv->setting_entry_to_app, entry);
|
||||
if (app != NULL)
|
||||
return app;
|
||||
|
||||
app = _shell_app_new (entry);
|
||||
g_hash_table_insert (self->priv->setting_entry_to_app, gmenu_tree_item_ref (entry), app);
|
||||
|
||||
return app;
|
||||
return g_hash_table_lookup (self->priv->setting_id_to_app, id);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -493,13 +500,7 @@ ShellApp *
|
||||
shell_app_system_lookup_app (ShellAppSystem *self,
|
||||
const char *id)
|
||||
{
|
||||
GMenuTreeEntry *entry;
|
||||
|
||||
entry = gmenu_tree_get_entry_by_id (self->priv->apps_tree, id);
|
||||
if (entry == NULL)
|
||||
return NULL;
|
||||
|
||||
return g_hash_table_lookup (self->priv->entry_to_app, entry);
|
||||
return g_hash_table_lookup (self->priv->id_to_app, id);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -604,7 +605,7 @@ shell_app_system_get_all (ShellAppSystem *self)
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
|
||||
g_hash_table_iter_init (&iter, self->priv->entry_to_app);
|
||||
g_hash_table_iter_init (&iter, self->priv->id_to_app);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
ShellApp *app = value;
|
||||
@ -624,13 +625,12 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
|
||||
switch (state)
|
||||
{
|
||||
case SHELL_APP_STATE_RUNNING:
|
||||
/* key is owned by the app */
|
||||
g_hash_table_insert (self->priv->running_apps, (char*)shell_app_get_id (app), g_object_ref (app));
|
||||
g_hash_table_insert (self->priv->running_apps, g_object_ref (app), NULL);
|
||||
break;
|
||||
case SHELL_APP_STATE_STARTING:
|
||||
break;
|
||||
case SHELL_APP_STATE_STOPPED:
|
||||
g_hash_table_remove (self->priv->running_apps, shell_app_get_id (app));
|
||||
g_hash_table_remove (self->priv->running_apps, app);
|
||||
break;
|
||||
}
|
||||
g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app);
|
||||
@ -658,7 +658,7 @@ shell_app_system_get_running (ShellAppSystem *self)
|
||||
ret = NULL;
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
ShellApp *app = value;
|
||||
ShellApp *app = key;
|
||||
|
||||
ret = g_slist_prepend (ret, app);
|
||||
}
|
||||
@ -767,7 +767,7 @@ GSList *
|
||||
shell_app_system_initial_search (ShellAppSystem *self,
|
||||
GSList *terms)
|
||||
{
|
||||
return search_tree (self, terms, self->priv->entry_to_app);
|
||||
return search_tree (self, terms, self->priv->id_to_app);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -825,5 +825,5 @@ GSList *
|
||||
shell_app_system_search_settings (ShellAppSystem *self,
|
||||
GSList *terms)
|
||||
{
|
||||
return search_tree (self, terms, self->priv->setting_entry_to_app);
|
||||
return search_tree (self, terms, self->priv->setting_id_to_app);
|
||||
}
|
||||
|
@ -819,12 +819,25 @@ _shell_app_new (GMenuTreeEntry *info)
|
||||
ShellApp *app;
|
||||
|
||||
app = g_object_new (SHELL_TYPE_APP, NULL);
|
||||
app->entry = gmenu_tree_item_ref (info);
|
||||
app->name_collation_key = g_utf8_collate_key (shell_app_get_name (app), -1);
|
||||
|
||||
_shell_app_set_entry (app, info);
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
void
|
||||
_shell_app_set_entry (ShellApp *app,
|
||||
GMenuTreeEntry *entry)
|
||||
{
|
||||
if (app->entry != NULL)
|
||||
gmenu_tree_item_unref (app->entry);
|
||||
app->entry = gmenu_tree_item_ref (entry);
|
||||
|
||||
if (app->name_collation_key != NULL)
|
||||
g_free (app->name_collation_key);
|
||||
app->name_collation_key = g_utf8_collate_key (shell_app_get_name (app), -1);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_app_state_transition (ShellApp *app,
|
||||
ShellAppState state)
|
||||
@ -1171,6 +1184,9 @@ trim_exec_line (const char *str)
|
||||
{
|
||||
const char *start, *end, *pos;
|
||||
|
||||
if (str == NULL)
|
||||
return NULL;
|
||||
|
||||
end = strchr (str, ' ');
|
||||
if (end == NULL)
|
||||
end = str + strlen (str);
|
||||
|
@ -42,6 +42,8 @@
|
||||
static ShellGlobal *the_object = NULL;
|
||||
|
||||
static void grab_notify (GtkWidget *widget, gboolean is_grab, gpointer user_data);
|
||||
static void shell_global_on_gc (GjsContext *context,
|
||||
ShellGlobal *global);
|
||||
|
||||
struct _ShellGlobal {
|
||||
GObject parent;
|
||||
@ -87,6 +89,8 @@ struct _ShellGlobal {
|
||||
ca_context *sound_context;
|
||||
|
||||
guint32 xdnd_timestamp;
|
||||
|
||||
gint64 last_gc_end_time;
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -270,7 +274,10 @@ shell_global_init (ShellGlobal *global)
|
||||
global->js_context = g_object_new (GJS_TYPE_CONTEXT,
|
||||
"search-path", search_path,
|
||||
"js-version", "1.8",
|
||||
"gc-notifications", TRUE,
|
||||
NULL);
|
||||
g_signal_connect (global->js_context, "gc", G_CALLBACK (shell_global_on_gc), global);
|
||||
|
||||
g_strfreev (search_path);
|
||||
}
|
||||
|
||||
@ -1149,6 +1156,13 @@ shell_global_maybe_gc (ShellGlobal *global)
|
||||
gjs_context_maybe_gc (global->js_context);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_global_on_gc (GjsContext *context,
|
||||
ShellGlobal *global)
|
||||
{
|
||||
global->last_gc_end_time = g_get_monotonic_time ();
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_get_memory_info:
|
||||
* @global:
|
||||
@ -1161,6 +1175,7 @@ shell_global_get_memory_info (ShellGlobal *global,
|
||||
ShellMemoryInfo *meminfo)
|
||||
{
|
||||
JSContext *context;
|
||||
gint64 now;
|
||||
|
||||
memset (meminfo, 0, sizeof (meminfo));
|
||||
#ifdef HAVE_MALLINFO
|
||||
@ -1178,6 +1193,10 @@ shell_global_get_memory_info (ShellGlobal *global,
|
||||
meminfo->gjs_gobject = (unsigned int) gjs_counter_object.value;
|
||||
meminfo->gjs_function = (unsigned int) gjs_counter_function.value;
|
||||
meminfo->gjs_closure = (unsigned int) gjs_counter_closure.value;
|
||||
|
||||
now = g_get_monotonic_time ();
|
||||
|
||||
meminfo->last_gc_seconds_ago = (now - global->last_gc_end_time) / G_TIME_SPAN_SECOND;
|
||||
}
|
||||
|
||||
|
||||
@ -1410,11 +1429,12 @@ run_leisure_functions (gpointer data)
|
||||
if (global->work_count > 0)
|
||||
return FALSE;
|
||||
|
||||
/*
|
||||
* We do call MAYBE_GC() here to free up some memory and
|
||||
* prevent the GC from running when we are busy doing other things.
|
||||
/* Previously we called gjs_maybe_gc(). However, it simply doesn't
|
||||
* trigger often enough. Garbage collection is very fast here, so
|
||||
* let's just aggressively GC. This will help avoid both heap
|
||||
* fragmentation, and the GC kicking in when we don't want it to.
|
||||
*/
|
||||
shell_global_maybe_gc (global);
|
||||
gjs_context_gc (global->js_context);
|
||||
|
||||
/* No leisure closures, so we are done */
|
||||
if (global->leisure_closures == NULL)
|
||||
|
@ -96,6 +96,9 @@ typedef struct {
|
||||
guint gjs_gobject;
|
||||
guint gjs_function;
|
||||
guint gjs_closure;
|
||||
|
||||
/* 32 bit to avoid js conversion problems with 64 bit */
|
||||
guint last_gc_seconds_ago;
|
||||
} ShellMemoryInfo;
|
||||
|
||||
void shell_global_get_memory_info (ShellGlobal *global,
|
||||
|
@ -3,7 +3,7 @@ VOID:OBJECT,INT,INT,INT,INT
|
||||
VOID:BOXED
|
||||
VOID:BOXED,OBJECT
|
||||
VOID:OBJECT,OBJECT
|
||||
VOID:STRING,OBJECT,BOOLEAN
|
||||
VOID:STRING,UINT,OBJECT,BOOLEAN
|
||||
VOID:INT,INT
|
||||
VOID:STRING,STRING,STRING,STRING,BOXED
|
||||
VOID:STRING,OBJECT,STRING,BOXED
|
||||
|
@ -324,8 +324,23 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
|
||||
gpointer callback_data)
|
||||
{
|
||||
ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent);
|
||||
ShellAgentRequest *request = g_slice_new (ShellAgentRequest);
|
||||
ShellAgentRequest *request;
|
||||
NMSettingConnection *setting_connection;
|
||||
const char *connection_type;
|
||||
|
||||
/* VPN secrets are currently unimplemented - bail out early */
|
||||
setting_connection = nm_connection_get_setting_connection (connection);
|
||||
connection_type = nm_setting_connection_get_connection_type (setting_connection);
|
||||
if (strcmp (connection_type, "vpn") == 0)
|
||||
{
|
||||
GError *error = g_error_new (NM_SECRET_AGENT_ERROR,
|
||||
NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
|
||||
"VPN secrets are currently unhandled.");
|
||||
callback (NM_SECRET_AGENT (self), connection, NULL, error, callback_data);
|
||||
return;
|
||||
}
|
||||
|
||||
request = g_slice_new (ShellAgentRequest);
|
||||
request->self = g_object_ref (self);
|
||||
request->connection = g_object_ref (connection);
|
||||
request->setting_name = g_strdup (setting_name);
|
||||
|
@ -850,3 +850,31 @@ shell_parse_search_provider (const char *data,
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_shader_effect_set_double_uniform:
|
||||
* @effect: The #ClutterShaderEffect
|
||||
* @name: The name of the uniform
|
||||
* @value: The value to set it to.
|
||||
*
|
||||
* Set a double uniform on a ClutterShaderEffect.
|
||||
*
|
||||
* The problem here is that JavaScript doesn't have more than
|
||||
* one number type, and gjs tries to automatically guess what
|
||||
* type we want to set a GValue to. If the number is "1.0" or
|
||||
* something, it will use an integer, which will cause errors
|
||||
* in GLSL.
|
||||
*/
|
||||
void
|
||||
shell_shader_effect_set_double_uniform (ClutterShaderEffect *effect,
|
||||
const gchar *name,
|
||||
gdouble value)
|
||||
{
|
||||
GValue gvalue = G_VALUE_INIT;
|
||||
g_value_init (&gvalue, G_TYPE_DOUBLE);
|
||||
g_value_set_double (&gvalue, value);
|
||||
|
||||
clutter_shader_effect_set_uniform_value (effect,
|
||||
name,
|
||||
&gvalue);
|
||||
}
|
||||
|
@ -50,6 +50,10 @@ gboolean shell_parse_search_provider (const char *data,
|
||||
char **icon_data_uri,
|
||||
GError **error);
|
||||
|
||||
void shell_shader_effect_set_double_uniform (ClutterShaderEffect *effect,
|
||||
const gchar *name,
|
||||
gdouble value);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_UTIL_H__ */
|
||||
|
@ -131,6 +131,7 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
* ShellWM::keybinding:
|
||||
* @shellwm: the #ShellWM
|
||||
* @binding: the keybinding name
|
||||
* @mask: the modifier mask used
|
||||
* @window: for window keybindings, the #MetaWindow
|
||||
* @backwards: for "reversible" keybindings, whether or not
|
||||
* the backwards (Shifted) variant was invoked
|
||||
@ -147,9 +148,10 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
|
||||
0,
|
||||
NULL, NULL,
|
||||
_shell_marshal_VOID__STRING_OBJECT_BOOLEAN,
|
||||
G_TYPE_NONE, 3,
|
||||
_shell_marshal_VOID__STRING_UINT_OBJECT_BOOLEAN,
|
||||
G_TYPE_NONE, 4,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_UINT,
|
||||
META_TYPE_WINDOW,
|
||||
G_TYPE_BOOLEAN);
|
||||
}
|
||||
@ -336,7 +338,7 @@ shell_wm_key_handler (MetaDisplay *display,
|
||||
|
||||
g_signal_emit (wm, shell_wm_signals[KEYBINDING],
|
||||
g_quark_from_string (binding->name),
|
||||
binding->name, window, backwards);
|
||||
binding->name, binding->mask, window, backwards);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,6 +25,8 @@
|
||||
|
||||
#include "st-scroll-view-fade.h"
|
||||
#include "st-scroll-view.h"
|
||||
#include "st-widget.h"
|
||||
#include "st-theme-node.h"
|
||||
#include "st-scroll-bar.h"
|
||||
#include "st-scrollable.h"
|
||||
|
||||
@ -39,11 +41,18 @@ static const gchar *fade_glsl_shader =
|
||||
"uniform sampler2D tex;\n"
|
||||
"uniform float height;\n"
|
||||
"uniform float width;\n"
|
||||
"uniform float scrollbar_width;\n"
|
||||
"uniform float scrollbar_height;\n"
|
||||
"uniform float offset_bottom;\n"
|
||||
"uniform float offset_top;\n"
|
||||
"uniform bool rtl;\n"
|
||||
/*
|
||||
* Used to pass the fade area to the shader
|
||||
*
|
||||
* [0][0] = x1
|
||||
* [0][1] = y1
|
||||
* [1][0] = x2
|
||||
* [1][1] = y2
|
||||
*
|
||||
*/
|
||||
"uniform mat2 fade_area;\n"
|
||||
"\n"
|
||||
"void main ()\n"
|
||||
"{\n"
|
||||
@ -51,18 +60,19 @@ static const gchar *fade_glsl_shader =
|
||||
" float y = height * cogl_tex_coord_in[0].y;\n"
|
||||
" float x = width * cogl_tex_coord_in[0].x;\n"
|
||||
" float ratio = 1.0;\n"
|
||||
" float fade_bottom_start = height - offset_bottom;\n"
|
||||
" float fade_bottom_start = fade_area[1][1] - offset_bottom;\n"
|
||||
" float ratio_top = y / offset_top;\n"
|
||||
" float ratio_bottom = (height - scrollbar_height - y)/(height - scrollbar_height - fade_bottom_start);\n"
|
||||
" bool in_scroll_area = ((rtl && x > scrollbar_width) || (!rtl && x < (width - scrollbar_width)));\n"
|
||||
" bool fade_top = y < offset_top && in_scroll_area;\n"
|
||||
" bool fade_bottom = y > fade_bottom_start && in_scroll_area && (y < (height - scrollbar_height));\n"
|
||||
" float ratio_bottom = (fade_area[1][1] - y)/(fade_area[1][1] - fade_bottom_start);\n"
|
||||
" bool in_scroll_area = fade_area[0][0] <= x && fade_area[1][0] >= x;\n"
|
||||
" bool fade_top = y < offset_top && in_scroll_area && (y >= fade_area[0][1]);\n"
|
||||
" bool fade_bottom = y > fade_bottom_start && in_scroll_area && (y <= fade_area[1][1]);\n"
|
||||
"\n"
|
||||
" if (fade_top) {\n"
|
||||
" ratio = ratio_top;\n"
|
||||
" ratio *= ratio_top;\n"
|
||||
" }\n"
|
||||
" else if (fade_bottom) {\n"
|
||||
" ratio = ratio_bottom;\n"
|
||||
"\n"
|
||||
" if (fade_bottom) {\n"
|
||||
" ratio *= ratio_bottom;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" cogl_color_out = color * ratio;\n"
|
||||
@ -81,11 +91,9 @@ struct _StScrollViewFade
|
||||
gint tex_uniform;
|
||||
gint height_uniform;
|
||||
gint width_uniform;
|
||||
gint scrollbar_width_uniform;
|
||||
gint scrollbar_height_uniform;
|
||||
gint fade_area_uniform;
|
||||
gint offset_top_uniform;
|
||||
gint offset_bottom_uniform;
|
||||
gint rtl_uniform;
|
||||
|
||||
StAdjustment *vadjustment;
|
||||
|
||||
@ -145,12 +153,8 @@ st_scroll_view_fade_pre_paint (ClutterEffect *effect)
|
||||
cogl_program_get_uniform_location (self->program, "height");
|
||||
self->width_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "width");
|
||||
self->scrollbar_width_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "scrollbar_width");
|
||||
self->scrollbar_height_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "scrollbar_height");
|
||||
self->rtl_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "rtl");
|
||||
self->fade_area_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "fade_area");
|
||||
self->offset_top_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "offset_top");
|
||||
self->offset_bottom_uniform =
|
||||
@ -184,13 +188,54 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
|
||||
ClutterActor *hscroll = st_scroll_view_get_hscroll_bar (ST_SCROLL_VIEW (self->actor));
|
||||
gboolean h_scroll_visible, v_scroll_visible;
|
||||
|
||||
ClutterActorBox allocation, content_box, paint_box;
|
||||
|
||||
/*
|
||||
* Used to pass the fade area to the shader
|
||||
*
|
||||
* [0][0] = x1
|
||||
* [0][1] = y1
|
||||
* [1][0] = x2
|
||||
* [1][1] = y2
|
||||
*
|
||||
*/
|
||||
float fade_area[2][2];
|
||||
ClutterVertex verts[4];
|
||||
|
||||
if (self->program == COGL_INVALID_HANDLE)
|
||||
goto out;
|
||||
|
||||
clutter_actor_get_paint_box (self->actor, &paint_box);
|
||||
clutter_actor_get_abs_allocation_vertices (self->actor, verts);
|
||||
|
||||
clutter_actor_get_allocation_box (self->actor, &allocation);
|
||||
st_theme_node_get_content_box (st_widget_get_theme_node (ST_WIDGET (self->actor)),
|
||||
(const ClutterActorBox *)&allocation, &content_box);
|
||||
|
||||
/*
|
||||
* The FBO is based on the paint_volume's size which can be larger then the actual
|
||||
* allocation, so we have to account for that when passing the positions
|
||||
*/
|
||||
fade_area[0][0] = content_box.x1 + (verts[0].x - paint_box.x1);
|
||||
fade_area[0][1] = content_box.y1 + (verts[0].y - paint_box.y1);
|
||||
fade_area[1][0] = content_box.x2 + (verts[3].x - paint_box.x2);
|
||||
fade_area[1][1] = content_box.y2 + (verts[3].y - paint_box.y2);
|
||||
|
||||
g_object_get (ST_SCROLL_VIEW (self->actor),
|
||||
"hscrollbar-visible", &h_scroll_visible,
|
||||
"vscrollbar-visible", &v_scroll_visible,
|
||||
NULL);
|
||||
|
||||
if (self->program == COGL_INVALID_HANDLE)
|
||||
goto out;
|
||||
if (v_scroll_visible)
|
||||
{
|
||||
if (st_widget_get_direction (ST_WIDGET (self->actor)) == ST_TEXT_DIRECTION_RTL)
|
||||
fade_area[0][0] += clutter_actor_get_width (vscroll);
|
||||
|
||||
fade_area[1][0] -= clutter_actor_get_width (vscroll);
|
||||
}
|
||||
|
||||
if (h_scroll_visible)
|
||||
fade_area[1][1] -= clutter_actor_get_height (hscroll);
|
||||
|
||||
st_adjustment_get_values (self->vadjustment, &value, &lower, &upper, NULL, NULL, &page_size);
|
||||
|
||||
@ -214,12 +259,8 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
|
||||
cogl_program_set_uniform_1f (self->program, self->height_uniform, clutter_actor_get_height (self->actor));
|
||||
if (self->width_uniform > -1)
|
||||
cogl_program_set_uniform_1f (self->program, self->width_uniform, clutter_actor_get_width (self->actor));
|
||||
if (self->scrollbar_width_uniform > -1)
|
||||
cogl_program_set_uniform_1f (self->program, self->scrollbar_width_uniform, v_scroll_visible ? clutter_actor_get_width (vscroll) : 0);
|
||||
if (self->scrollbar_height_uniform > -1)
|
||||
cogl_program_set_uniform_1f (self->program, self->scrollbar_height_uniform, h_scroll_visible ? clutter_actor_get_height (hscroll) : 0);
|
||||
if (self->rtl_uniform > -1)
|
||||
cogl_program_set_uniform_1i (self->program, self->rtl_uniform, (st_widget_get_direction (ST_WIDGET (self->actor)) == ST_TEXT_DIRECTION_RTL));
|
||||
if (self->fade_area_uniform > -1)
|
||||
cogl_program_set_uniform_matrix (self->program, self->fade_area_uniform, 2, 1, FALSE, (const float *)fade_area);
|
||||
|
||||
material = clutter_offscreen_effect_get_target (effect);
|
||||
cogl_material_set_user_program (material, self->program);
|
||||
@ -428,9 +469,7 @@ st_scroll_view_fade_init (StScrollViewFade *self)
|
||||
self->tex_uniform = -1;
|
||||
self->height_uniform = -1;
|
||||
self->width_uniform = -1;
|
||||
self->scrollbar_width_uniform = -1;
|
||||
self->scrollbar_height_uniform = -1;
|
||||
self->rtl_uniform = -1;
|
||||
self->fade_area_uniform = -1;
|
||||
self->offset_top_uniform = -1;
|
||||
self->offset_bottom_uniform = -1;
|
||||
self->fade_offset = DEFAULT_FADE_OFFSET;
|
||||
|
@ -641,9 +641,10 @@ st_table_preferred_allocate (ClutterActor *self,
|
||||
*/
|
||||
if (col + col_span > priv->n_cols)
|
||||
g_warning ("StTable: col-span exceeds number of columns");
|
||||
#if 0
|
||||
if (row + row_span > priv->n_rows)
|
||||
g_warning ("StTable: row-span exceeds number of rows");
|
||||
|
||||
#endif
|
||||
if (col_span > 1)
|
||||
{
|
||||
for (i = col + 1; i < col + col_span && i < priv->n_cols; i++)
|
||||
|
@ -328,6 +328,9 @@ st_theme_node_transition_paint (StThemeNodeTransition *transition,
|
||||
|
||||
calculate_offscreen_box (transition, allocation);
|
||||
priv->needs_setup = !setup_framebuffers (transition, allocation);
|
||||
|
||||
if (priv->needs_setup) /* setting up framebuffers failed */
|
||||
return;
|
||||
}
|
||||
|
||||
cogl_color_set_from_4f (&constant, 0., 0., 0.,
|
||||
|
@ -15,6 +15,7 @@ TEST_JS = \
|
||||
interactive/scrolling.js \
|
||||
interactive/scroll-view-sizing.js \
|
||||
interactive/table.js \
|
||||
interactive/transitions.js \
|
||||
testcommon/border-image.png \
|
||||
testcommon/face-plain.png \
|
||||
testcommon/ui.js \
|
||||
|
@ -325,10 +325,52 @@ mainBox.add(fadeBox);
|
||||
spacer = new St.Bin();
|
||||
fadeBox.add(spacer, { expand: true });
|
||||
|
||||
fadeBox.add(new St.Label({ text: 'Padding: '}));
|
||||
let paddingButton = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;padding-right:3px;' });
|
||||
fadeBox.add(paddingButton);
|
||||
|
||||
fadeBox.add(new St.Label({ text: 'Borders: '}));
|
||||
let borderButton = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;padding-right:3px;' });
|
||||
fadeBox.add(borderButton);
|
||||
|
||||
fadeBox.add(new St.Label({ text: 'Vertical Fade: '}));
|
||||
let vfade = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;' });
|
||||
fadeBox.add(vfade);
|
||||
|
||||
function togglePadding(button) {
|
||||
switch(button.label) {
|
||||
case 'No':
|
||||
button.label = 'Yes';
|
||||
break;
|
||||
case 'Yes':
|
||||
button.label = 'No';
|
||||
break;
|
||||
}
|
||||
if (scrollView.style == null)
|
||||
scrollView.style = (button.label == 'Yes' ? 'padding: 10px;' : 'padding: 0;');
|
||||
else
|
||||
scrollView.style += (button.label == 'Yes' ? 'padding: 10px;' : 'padding: 0;');
|
||||
}
|
||||
|
||||
paddingButton.connect('clicked', function() { togglePadding(paddingButton); });
|
||||
|
||||
function toggleBorders(button) {
|
||||
switch(button.label) {
|
||||
case 'No':
|
||||
button.label = 'Yes';
|
||||
break;
|
||||
case 'Yes':
|
||||
button.label = 'No';
|
||||
break;
|
||||
}
|
||||
if (scrollView.style == null)
|
||||
scrollView.style = (button.label == 'Yes' ? 'border: 2px solid red;' : 'border: 0;');
|
||||
else
|
||||
scrollView.style += (button.label == 'Yes' ? 'border: 2px solid red;' : 'border: 0;');
|
||||
}
|
||||
|
||||
borderButton.connect('clicked', function() { toggleBorders(borderButton); });
|
||||
|
||||
function toggleFade(button) {
|
||||
switch(button.label) {
|
||||
case 'No':
|
||||
|
34
tests/interactive/transitions.js
Normal file
34
tests/interactive/transitions.js
Normal file
@ -0,0 +1,34 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const UI = imports.testcommon.ui;
|
||||
|
||||
UI.init();
|
||||
let stage = Clutter.Stage.get_default();
|
||||
|
||||
let hbox = new St.BoxLayout({ name: 'transition-container',
|
||||
reactive: true,
|
||||
track_hover: true,
|
||||
width: stage.width,
|
||||
height: stage.height,
|
||||
style: 'padding: 10px;'
|
||||
+ 'spacing: 10px;' });
|
||||
stage.add_actor(hbox);
|
||||
|
||||
for (let i = 0; i < 5; i ++) {
|
||||
let label = new St.Label({ text: (i+1).toString(),
|
||||
name: "label" + i,
|
||||
style_class: 'transition-label',
|
||||
reactive: true,
|
||||
track_hover: true });
|
||||
|
||||
hbox.add(label, { x_fill: false,
|
||||
y_fill: false });
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
stage.show();
|
||||
Clutter.main();
|
@ -71,4 +71,25 @@ stage {
|
||||
|
||||
.vfade {
|
||||
-st-fade-offset: 68px;
|
||||
}
|
||||
}
|
||||
|
||||
#transition-container .transition-label {
|
||||
color: white;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
padding: 1em;
|
||||
background-color: #333;
|
||||
border: 2px solid black;
|
||||
border-radius: 8px;
|
||||
transition-duration: 1000; /* One second */
|
||||
}
|
||||
|
||||
#transition-container:hover .transition-label {
|
||||
background-color: blue;
|
||||
border: 2px solid red;
|
||||
}
|
||||
|
||||
#transition-container .transition-label:hover {
|
||||
background-color: green;
|
||||
border: 2px solid blue;
|
||||
}
|
||||
|
@ -150,7 +150,7 @@
|
||||
</autotools>
|
||||
|
||||
<autotools id="cogl">
|
||||
<branch repo="git.gnome.org" module="cogl"/>
|
||||
<branch repo="git.gnome.org" module="cogl" revision="cogl-1.8"/>
|
||||
<dependencies>
|
||||
<dep package="glib"/>
|
||||
<dep package="gobject-introspection"/>
|
||||
@ -161,7 +161,7 @@
|
||||
</autotools>
|
||||
|
||||
<autotools id="clutter">
|
||||
<branch repo="git.gnome.org" module="clutter"/>
|
||||
<branch repo="git.gnome.org" module="clutter" revision="clutter-1.8"/>
|
||||
<dependencies>
|
||||
<dep package="cogl"/>
|
||||
<dep package="json-glib"/>
|
||||
|
Reference in New Issue
Block a user