Compare commits

..

37 Commits

Author SHA1 Message Date
946d95b3e9 Added Occitan translation 2016-03-21 18:55:13 +00:00
4bc9cbaa0b [l10n] Update Catalan translation 2014-02-21 23:11:12 +01:00
9d5c04e2d8 Updated Serbian translation 2014-01-13 09:39:15 +01:00
2881e4d7aa Updated Serbian translation 2014-01-13 09:34:28 +01:00
14d48f563b Updated Serbian translation 2014-01-13 09:19:57 +01:00
7306918531 Updated Serbian translation 2013-11-03 08:58:01 +01:00
1a93ebc3e2 Updated Hungarian translation 2013-10-13 13:36:15 +02:00
03f53d1919 Updated Danish translation 2013-10-07 22:45:21 +02:00
451d679b62 Updated Galician translations 2013-09-28 16:28:21 +02:00
36eb51b594 Bump version to 3.4.2
Updated NEWS
2012-07-20 20:03:44 +02:00
04f03ee7d8 Assamese translation reviewed 2012-07-05 20:28:30 +05:30
d144f5d7df Assamese translation reviewed 2012-07-05 15:33:02 +05:30
aec4c6a388 Assamese translation reviewed 2012-07-04 21:52:41 +05:30
63f6800115 Assamese translation reviewed 2012-07-04 21:40:56 +05:30
f52c5fc4fe mount-operation: fix exceptions when showing password entry
This is a fallout from some changes in MessageTray.Source, which now
requires either defining the iconName/iconType properties on it, or
implementing createNotificationIcon, and we're not doing any of those.
Fix it by storing the gicon of the source object and using a helper
method to create the icon actor on demand, to avoid any case when the
same actor might be added twice to different containers.

https://bugzilla.gnome.org/show_bug.cgi?id=678428
2012-06-20 10:13:18 -04:00
717aedec5d popupMenu: do not overflow the currentItems
Do not overflow currentItems array. If the Menu section is filled
via model items-changed callback the position in the model passed to
the RemoteMenu _modelChanged can be a to be added asynchronously
action-added. Thus the item does not yet exists in the currentItems.

https://bugzilla.gnome.org/show_bug.cgi?id=676447
2012-06-18 10:05:18 +02:00
66fa24c340 popupMenu: bypass changeSignal callback if action is already handled
https://bugzilla.gnome.org/show_bug.cgi?id=676447
2012-06-18 10:05:18 +02:00
7e73a52505 telepathyClient: ignore invalidated channels
There is a race if a channel is invalidated during its preparation: the
'invalidated' signal is already emitted so the Shell will never notice.
We fix this by simply checking if the channel is already invalidated when
receiving it from telepathy-glib.

In the approving case, we reject the full ChannelDispatchOperation as we only
support approving one channel at the time.

https://bugzilla.gnome.org/show_bug.cgi?id=677457
2012-06-18 09:47:18 +02:00
42366ab025 telepathyClient: decline dispatch op when approving unsupported channel type
It shouldn't happen in theory but best to be safe than sorry.

https://bugzilla.gnome.org/show_bug.cgi?id=677457
2012-06-18 09:45:42 +02:00
69a63f208e notificationDaemon: Fix copy-paste typo
Since this line was introduced in 7458d3e, "Approve file transfer channels",
it's quite obvious that the line was meant to filter out transfer channel
notifications.

https://bugzilla.gnome.org/show_bug.cgi?id=676175
2012-06-06 16:28:00 +02:00
98c3f6b3bf add missing _shell_link_to_shell_js() declaration
Fix missing-prototypes warning.

https://bugzilla.gnome.org/show_bug.cgi?id=677441
2012-06-05 09:38:35 +02:00
406db1902c notificationDaemon.js: convert the hints dict at the beginning of the function
It's used right away to discard some Empathy notifications.

This regression has been introduced during the 3.4 cycle when 'hints' has been
turned to a GVariant.

https://bugzilla.gnome.org/show_bug.cgi?id=675370
2012-05-31 11:30:24 +02:00
37c7c04efb Updated Lithuanian translation 2012-05-26 23:13:38 +03:00
af0ec7e089 Updated Korean translation 2012-05-19 22:57:53 +09:00
ae28bf7c25 [l10n] Really update Indonesian translation 2012-05-19 16:31:47 +07:00
29c8add696 [l10n] Updated Indonesian translation 2012-05-19 16:20:51 +07:00
ecb9c881be Prevent the link to libgnome-shell-js.so from being removed
Add a dummy call to shell_js_add_extension_importer() to ensure that the
link to libgnome-shell-js.so is not removed when using -Wl,--as-needed,
which is the default on many distros.

https://bugzilla.gnome.org/show_bug.cgi?id=670477
2012-05-18 18:35:07 -04:00
4cf79088a5 Link the gnome-shell binary to libgnome-shell-js.so
Depending on the exact linker options and versions, rpath's written
into the binary may, or may not, be honored by dlopen(). Work around
this by simply linking the gnome-shell binary to gnome-shell-js, since
then dlopen() doesn't need to search paths.

https://bugzilla.gnome.org/show_bug.cgi?id=670477
2012-05-18 18:35:07 -04:00
05800773bc Updated Japanese translation. 2012-05-15 00:52:42 +09:00
2237f66c44 Updated Marathi Translations 2012-05-10 10:09:59 +05:30
2c51d42acf gdm: don't fail if fprintd unavailable
fingerprint support is optional so we shouldn't try to start
fprintd upfront and croak if it fails.

https://bugzilla.gnome.org/show_bug.cgi?id=675006
(cherry picked from commit e333263fd6)
2012-05-07 15:09:54 -04:00
49809d1e64 l10n: Updated Italian translation 2012-04-30 15:33:44 +02:00
2605e49591 Updated Brazilian Portuguese translation 2012-04-28 10:46:14 -03:00
40abd98840 data: Add Evolution calendar settings gschema to EXTRA_DIST
3d95e7bb11 forgot to add this
gschema file to dist
2012-04-26 08:46:04 +02:00
a64c84395f Mirror Evolution calendar settings into our own schema
Right now, we are hard-depending on the presence of Evolution by
using its settings schemas. This is likely to be unpopular, and
also causes instability if someone happens not to have Evolution
installed, so install a schema that has the same data path as
the Evolution schema, but a different name and install that
for the keys we need.

To avoid a string-freeze break, we rely on the translations in
Evolution - if Evolution isn't installed, the key descriptions
will be untranslated in dconf-editor.

https://bugzilla.gnome.org/show_bug.cgi?id=674424
2012-04-25 14:39:38 -04:00
39d2202521 Updated Korean translation 2012-04-26 01:06:12 +09:00
4edd77cd1f [l10n] Update Japanese translation
Fix a typo
2012-04-21 22:41:26 +09:00
62 changed files with 6527 additions and 5024 deletions

3
.gitignore vendored
View File

@ -23,8 +23,6 @@ data/gnome-shell-extension-prefs.desktop.in
data/gschemas.compiled
data/org.gnome.shell.gschema.xml
data/org.gnome.shell.gschema.valid
data/org.gnome.shell.evolution.calendar.gschema.xml
data/org.gnome.shell.evolution.calendar.gschema.valid
docs/reference/*/*.args
docs/reference/*/*.bak
docs/reference/*/*.hierarchy
@ -70,7 +68,6 @@ src/gnome-shell-extension-prefs
src/gnome-shell-hotplug-sniffer
src/gnome-shell-jhbuild
src/gnome-shell-perf-helper
src/gnome-shell-perf-tool
src/gnome-shell-real
src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service
src/run-js-test

20
NEWS
View File

@ -1,3 +1,23 @@
3.4.2
=====
* Mirror Evolution calendar settings into our own schema [Owen; #674424]
* gdm: don't fail if fprintd unavailable [Ray; #675006]
* Fix broken extension loading [Owen, Alexandre; #670477]
* Fix filtering of Empathy notifications [Guillaume; #675370]
* telepathyClient: Ignore invalidated channels [Guillaume; #677457]
* popupMenu: Fix freeze when appMenu is not populated in one go [Alban; #676447]
* mount-operation: fix exceptions when showing password entry [Cosimo; #678428]
* Misc. fixes [Guillaume, Jasper, Rico; #677441, #676175]
Contributors:
Alban Browaeys, Cosimo Cecchi, Guillaume Desmottes, Alexandre Rostovtsev,
Jasper St. Pierre, Ray Strode, Owen Taylor, Rico Tzschichholz
Translations:
OKANO Takayoshi [ja], Changwoo Ryu [ko], Jonh Wendell [pt_BR],
Luca Ferretti [it], Sandeep Sheshrao Shedmake [mr], Takanori MATSUURA [ja],
Andika Triwidada [id], Mantas Kriaučiūnas [lt], Nilamdyuti Goswami [as]
3.4.1
=====
* Fix crash that occurred when an icon theme change caused unexpected

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.4.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.4.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -108,6 +108,8 @@ AC_DEFINE_UNQUOTED([GJS_VERSION], ["$GJS_VERSION"], [The version of GJS we're li
AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
JHBUILD_TYPELIBDIR="$INTROSPECTION_TYPELIBDIR"
AC_SUBST(JHBUILD_TYPELIBDIR)
saved_CFLAGS=$CFLAGS
saved_LIBS=$LIBS

View File

@ -88,13 +88,6 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
Keybinding to open the application menu.
</_description>
</key>
<key name="toggle-recording" type="as">
<default><![CDATA[['<Control><Shift><Alt>r']]]></default>
<_summary>Keybinding to toggle the screen recorder</_summary>
<_description>
Keybinding to start/stop the builtin screen recorder.
</_description>
</key>
</schema>
<schema id="org.gnome.shell.keyboard" path="/org/gnome/shell/keyboard/"

View File

@ -1203,8 +1203,7 @@ StScrollBar StButton#vhandle:hover
height: 36px;
}
.notification {
font-size: 11pt;
#notification {
border-radius: 10px 10px 0px 0px;
background: rgba(0,0,0,0.8);
padding: 8px 8px 4px 8px;
@ -1213,7 +1212,7 @@ StScrollBar StButton#vhandle:hover
width: 34em;
}
.notification.multi-line-notification {
#notification.multi-line-notification {
padding-bottom: 8px;
}
@ -1235,7 +1234,7 @@ StScrollBar StButton#vhandle:hover
color: white;
}
.summary-boxpointer .notification {
.summary-boxpointer #notification {
border-radius: 9px;
background: rgba(0,0,0,0) !important;
padding-bottom: 12px;
@ -1252,6 +1251,10 @@ StScrollBar StButton#vhandle:hover
padding-bottom: 6px;
}
#summary-notification-stack-scrollview > .top-shadow, #summary-notification-stack-scrollview > .bottom-shadow {
height: 1em;
}
#summary-notification-stack-scrollview:ltr {
padding-right: 8px;
}
@ -1260,24 +1263,28 @@ StScrollBar StButton#vhandle:hover
padding-left: 8px;
}
.notification-scrollview {
#notification-scrollview {
max-height: 10em;
-st-vfade-offset: 24px;
}
.notification-scrollview:ltr > StScrollBar {
#notification-scrollview > .top-shadow, #notification-scrollview > .bottom-shadow {
height: 1em;
}
#notification-scrollview:ltr > StScrollBar {
padding-left: 6px;
}
.notification-scrollview:rtl > StScrollBar {
#notification-scrollview:rtl > StScrollBar {
padding-right: 6px;
}
.notification-body {
#notification-body {
spacing: 5px;
}
.notification-actions {
#notification-actions {
spacing: 10px;
}
@ -1404,7 +1411,7 @@ StScrollBar StButton#vhandle:hover
font-style: italic;
}
.notification StEntry {
#notification StEntry {
padding: 4px;
border-radius: 4px;
color: #a8a8a8;
@ -1420,7 +1427,7 @@ StScrollBar StButton#vhandle:hover
caret-size: 1px;
}
.notification StEntry:focus {
#notification StEntry:focus {
border: 1px solid #8b8b8b;
color: #333333;
background-gradient-direction: vertical;
@ -2040,30 +2047,3 @@ StScrollBar StButton#vhandle:hover
-arrow-rise: 10px;
-boxpointer-gap: 5px;
}
/* Candidate Window */
.candidate-panel {
min-width: 100px;
padding: .5em;
spacing: 0;
}
.candidate-area {
padding-top: 5px;
}
.candidate-label {
cursor: pointer;
}
.candidate-hlabel-content {
padding: 0em .5em 0em 0em;
}
.candidate-htext-content {
padding: 0em;
}
.candidate-vcontent {
padding: 0em .5em 0em 0em;
}

View File

@ -84,7 +84,6 @@ nobase_dist_js_DATA = \
ui/shellDBus.js \
ui/statusIconDispatcher.js \
ui/status/accessibility.js \
ui/status/candidatePanel.js \
ui/status/keyboard.js \
ui/status/network.js \
ui/status/power.js \

View File

@ -60,8 +60,10 @@ const PowerMenuButton = new Lang.Class({
},
_updateVisibility: function() {
let shouldBeVisible = (this._haveSuspend || this._haveShutdown || this._haveRestart);
this.actor.visible = shouldBeVisible;
if (!this._haveSuspend && !this._haveShutdown && !this._haveRestart)
this.actor.hide();
else
this.actor.show();
},
_updateHaveShutdown: function() {
@ -74,7 +76,11 @@ const PowerMenuButton = new Lang.Class({
else
this._haveShutdown = false;
this._powerOffItem.actor.visible = this._haveShutdown;
if (this._haveShutdown)
this._powerOffItem.actor.show();
else
this._powerOffItem.actor.hide();
this._updateVisibility();
}));
} else {
@ -85,7 +91,12 @@ const PowerMenuButton = new Lang.Class({
else
this._haveShutdown = false;
this._powerOffItem.actor.visible = this._haveShutdown;
if (this._haveShutdown) {
this._powerOffItem.actor.show();
} else {
this._powerOffItem.actor.hide();
}
this._updateVisibility();
}));
}
@ -101,7 +112,11 @@ const PowerMenuButton = new Lang.Class({
else
this._haveRestart = false;
this._restartItem.actor.visible = this._haveRestart;
if (this._haveRestart)
this._restartItem.actor.show();
else
this._restartItem.actor.hide();
this._updateVisibility();
}));
} else {
@ -112,7 +127,12 @@ const PowerMenuButton = new Lang.Class({
else
this._haveRestart = false;
this._restartItem.actor.visible = this._haveRestart;
if (this._haveRestart) {
this._restartItem.actor.show();
} else {
this._restartItem.actor.hide();
}
this._updateVisibility();
}));
}
@ -120,7 +140,12 @@ const PowerMenuButton = new Lang.Class({
_updateHaveSuspend: function() {
this._haveSuspend = this._upClient.get_can_suspend();
this._suspendItem.actor.visible = this._haveSuspend;
if (this._haveSuspend)
this._suspendItem.actor.show();
else
this._suspendItem.actor.hide();
this._updateVisibility();
},

View File

@ -168,17 +168,7 @@ const DashItemContainer = new Lang.Class({
});
},
destroy: function() {
if (this.label)
this.label.destroy();
this.actor.destroy();
},
animateOutAndDestroy: function() {
if (this.label)
this.label.destroy();
if (this.child == null) {
this.actor.destroy();
return;
@ -701,7 +691,7 @@ const Dash = new Lang.Class({
if (Main.overview.visible)
item.animateOutAndDestroy();
else
item.destroy();
item.actor.destroy();
}
this._adjustIconSize();

View File

@ -39,19 +39,11 @@ function _patchContainerClass(containerClass) {
};
}
function _makeLoggingFunc(func) {
return function() {
return func([].join.call(arguments, ', '));
};
}
function init() {
// Add some bindings to the global JS namespace; (gjs keeps the web
// browser convention of having that namespace be called 'window'.)
window.global = Shell.Global.get();
window.log = _makeLoggingFunc(window.log);
window._ = Gettext.gettext;
window.C_ = Gettext.pgettext;
window.ngettext = Gettext.ngettext;

View File

@ -634,6 +634,45 @@ const Inspector = new Lang.Class({
Signals.addSignalMethods(Inspector.prototype);
const ErrorLog = new Lang.Class({
Name: 'ErrorLog',
_init: function() {
this.actor = new St.BoxLayout();
this.text = new St.Label();
this.actor.add(this.text);
// We need to override StLabel's default ellipsization when
// using line_wrap; otherwise ClutterText's layout is going
// to constrain both the width and height, which prevents
// scrolling.
this.text.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
this.text.clutter_text.line_wrap = true;
this.actor.connect('notify::mapped', Lang.bind(this, this._renderText));
},
_formatTime: function(d){
function pad(n) { return n < 10 ? '0' + n : n; }
return d.getUTCFullYear()+'-'
+ pad(d.getUTCMonth()+1)+'-'
+ pad(d.getUTCDate())+'T'
+ pad(d.getUTCHours())+':'
+ pad(d.getUTCMinutes())+':'
+ pad(d.getUTCSeconds())+'Z';
},
_renderText: function() {
if (!this.actor.mapped)
return;
let text = this.text.text;
let stack = Main._getAndClearErrorStack();
for (let i = 0; i < stack.length; i++) {
let logItem = stack[i];
text += logItem.category + ' t=' + this._formatTime(new Date(logItem.timestamp)) + ' ' + logItem.message + '\n';
}
this.text.text = text;
}
});
const Memory = new Lang.Class({
Name: 'Memory',
@ -908,6 +947,9 @@ const LookingGlass = new Lang.Class({
}));
notebook.appendPage('Windows', this._windowList.actor);
this._errorLog = new ErrorLog();
notebook.appendPage('Errors', this._errorLog.actor);
this._memory = new Memory();
notebook.appendPage('Memory', this._memory.actor);

View File

@ -1228,7 +1228,10 @@ const Crosshairs = new Lang.Class({
crosshairsActor = new Clutter.Clone({ source: this._actor });
this._clones.push(crosshairsActor);
}
crosshairsActor.visible = this._actor.visible;
if (this._actor.visible)
crosshairsActor.show();
else
crosshairsActor.hide();
container.add_actor(crosshairsActor);
container.raise_child(magnifiedMouse, crosshairsActor);

View File

@ -67,6 +67,7 @@ let statusIconDispatcher = null;
let keyboard = null;
let layoutManager = null;
let networkAgent = null;
let _errorLogStack = [];
let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
@ -100,17 +101,14 @@ function _createGDMSession() {
function _initRecorder() {
let recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
let bindingSettings = new Gio.Settings({ schema: 'org.gnome.shell.keybindings' });
global.display.add_keybinding('toggle-recording',
bindingSettings,
Meta.KeyBindingFlags.NONE, function() {
global.screen.connect('toggle-recording', function() {
if (recorder == null) {
recorder = new Shell.Recorder({ stage: global.stage });
}
if (recorder.is_recording()) {
recorder.close();
recorder.pause();
Meta.enable_unredirect_for_screen(global.screen);
} else {
// read the parameters from GSettings always in case they have changed
@ -152,9 +150,11 @@ function _initUserSession() {
}
function start() {
// These are here so we don't break compatibility.
global.logError = window.log;
global.log = window.log;
// Monkey patch utility functions into the global proxy;
// This is easier and faster than indirecting down into global
// if we want to call back up into JS.
global.logError = _logError;
global.log = _logDebug;
// Chain up async errors reported from C
global.connect('notify-error', function (global, msg, detail) { notifyError(msg, detail); });
@ -251,6 +251,7 @@ function start() {
global.stage.connect('captured-event', _globalKeyPressHandler);
_log('info', 'loaded at ' + _startDate);
log('GNOME Shell started at ' + _startDate);
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
@ -536,6 +537,59 @@ function notifyError(msg, details) {
notify(msg, details);
}
/**
* _log:
* @category: string message type ('info', 'error')
* @msg: A message string
* ...: Any further arguments are converted into JSON notation,
* and appended to the log message, separated by spaces.
*
* Log a message into the LookingGlass error
* stream. This is primarily intended for use by the
* extension system as well as debugging.
*/
function _log(category, msg) {
let text = msg;
if (arguments.length > 2) {
text += ': ';
for (let i = 2; i < arguments.length; i++) {
text += JSON.stringify(arguments[i]);
if (i < arguments.length - 1)
text += ' ';
}
}
_errorLogStack.push({timestamp: new Date().getTime(),
category: category,
message: text });
}
function _logError(msg) {
return _log('error', msg);
}
function _logDebug(msg) {
return _log('debug', msg);
}
// Used by the error display in lookingGlass.js
function _getAndClearErrorStack() {
let errors = _errorLogStack;
_errorLogStack = [];
return errors;
}
function logStackTrace(msg) {
try {
throw new Error();
} catch (e) {
// e.stack must have at least two lines, with the first being
// logStackTrace() (which we strip off), and the second being
// our caller.
let trace = e.stack.substr(e.stack.indexOf('\n') + 1);
log(msg ? (msg + '\n' + trace) : trace);
}
}
function isWindowActorDisplayedOnWorkspace(win, workspaceIndex) {
return win.get_workspace() == workspaceIndex ||
(win.get_meta_window() && win.get_meta_window().is_on_all_workspaces());

View File

@ -441,7 +441,7 @@ const Notification = new Lang.Class({
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._table = new St.Table({ style_class: 'notification',
this._table = new St.Table({ name: 'notification',
reactive: true });
this._table.connect('style-changed', Lang.bind(this, this._styleChanged));
this.actor.set_child(this._table);
@ -586,21 +586,19 @@ const Notification = new Lang.Class({
enableScrolling: function(enableScrolling) {
this._scrollPolicy = enableScrolling ? Gtk.PolicyType.AUTOMATIC : Gtk.PolicyType.NEVER;
if (this._scrollArea) {
if (this._scrollArea)
this._scrollArea.vscrollbar_policy = this._scrollPolicy;
this._scrollArea.enable_mouse_scrolling = enableScrolling;
}
},
_createScrollArea: function() {
this._table.add_style_class_name('multi-line-notification');
this._scrollArea = new St.ScrollView({ style_class: 'notification-scrollview',
this._scrollArea = new St.ScrollView({ name: 'notification-scrollview',
vscrollbar_policy: this._scrollPolicy,
hscrollbar_policy: Gtk.PolicyType.NEVER });
this._table.add(this._scrollArea, { row: 1,
col: 2 });
this._updateLastColumnSettings();
this._contentArea = new St.BoxLayout({ style_class: 'notification-body',
this._contentArea = new St.BoxLayout({ name: 'notification-body',
vertical: true });
this._scrollArea.add_actor(this._contentArea);
// If we know the notification will be expandable, we need to add
@ -736,7 +734,7 @@ const Notification = new Lang.Class({
addButton: function(id, label) {
if (!this._buttonBox) {
let box = new St.BoxLayout({ style_class: 'notification-actions' });
let box = new St.BoxLayout({ name: 'notification-actions' });
this.setActionArea(box, { x_expand: false,
y_expand: false,
x_fill: false,

View File

@ -221,12 +221,19 @@ const NotificationDaemon = new Lang.Class({
let [appName, replacesId, icon, summary, body, actions, hints, timeout] = params;
let id;
for (let hint in hints) {
// unpack the variants
hints[hint] = hints[hint].deep_unpack();
}
hints = Params.parse(hints, { urgency: Urgency.NORMAL }, true);
// Filter out chat, presence, calls and invitation notifications from
// Empathy, since we handle that information from telepathyClient.js
if (appName == 'Empathy' && (hints['category'] == 'im.received' ||
hints['category'] == 'x-empathy.im.room-invitation' ||
hints['category'] == 'x-empathy.call.incoming' ||
hints['category'] == 'x-empathy.call.incoming"' ||
hints['category'] == 'x-empathy.transfer.incoming' ||
hints['category'] == 'x-empathy.im.subscription-request' ||
hints['category'] == 'presence.online' ||
hints['category'] == 'presence.offline')) {
@ -249,13 +256,6 @@ const NotificationDaemon = new Lang.Class({
}
}
for (let hint in hints) {
// unpack the variants
hints[hint] = hints[hint].deep_unpack();
}
hints = Params.parse(hints, { urgency: Urgency.NORMAL }, true);
// Be compatible with the various hints for image data and image path
// 'image-data' and 'image-path' are the latest name of these hints, introduced in 1.2
@ -578,27 +578,11 @@ const Source = new Lang.Class({
return true;
},
_getApp: function() {
let app;
app = Shell.WindowTracker.get_default().get_app_from_pid(this.pid);
if (app != null)
return app;
if (this.trayIcon) {
app = Shell.AppSystem.get_default().lookup_wmclass(this.trayIcon.wmclass);
if (app != null)
return app;
}
return null;
},
_setApp: function() {
if (this.app)
return;
this.app = this._getApp();
this.app = Shell.WindowTracker.get_default().get_app_from_pid(this.pid);
if (!this.app)
return;

View File

@ -37,7 +37,7 @@ 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.InputSourceIndicator,
'keyboard': imports.ui.status.keyboard.XKBIndicator,
'userMenu': imports.ui.userMenu.UserMenuButton
};
@ -55,7 +55,7 @@ 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.InputSourceIndicator,
'keyboard': imports.ui.status.keyboard.XKBIndicator,
'powerMenu': imports.gdm.powerMenu.PowerMenuButton
};

View File

@ -546,10 +546,6 @@ const PopupSliderMenuItem = new Lang.Class({
this._slider.connect('repaint', Lang.bind(this, this._sliderRepaint));
this.actor.connect('button-press-event', Lang.bind(this, this._startDragging));
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this.actor.connect('notify::mapped', Lang.bind(this, function() {
if (!this.actor.mapped)
this._endDragging();
}));
this._releaseId = this._motionId = 0;
this._dragging = false;
@ -1921,7 +1917,7 @@ const RemoteMenu = new Lang.Class({
while (k0 < currentItems.length && currentItems[k0]._ignored)
k0++;
// find the right menu item matching the model item
for (j0 = 0; j0 < position; j0++, k0++) {
for (j0 = 0; k0 < currentItems.length && j0 < position; j0++, k0++) {
if (currentItems[k0]._ignored)
k0++;
}
@ -1931,7 +1927,7 @@ const RemoteMenu = new Lang.Class({
for (k = k0; k < currentItems.length; k++)
currentItems[k].destroy();
} else {
for (j = j0, k = k0; j < j0 + removed; j++, k++) {
for (j = j0, k = k0; k < currentItems.length && j < j0 + removed; j++, k++) {
currentItems[k].destroy();
if (currentItems[k]._ignored)
@ -1962,8 +1958,9 @@ const RemoteMenu = new Lang.Class({
k++;
}
} else if (changeSignal) {
let signalId = this.actionGroup.connect(changeSignal, Lang.bind(this, function() {
this.actionGroup.disconnect(signalId);
let signalId = this.actionGroup.connect(changeSignal, Lang.bind(this, function(actionGroup, actionName) {
actionGroup.disconnect(signalId);
if (this._actions[actionName]) return;
// force a full update
this._modelChanged(model, 0, -1, model.get_n_items(), target);

View File

@ -395,17 +395,10 @@ const SearchResults = new Lang.Class({
function(metas) {
this._clearDisplayForProvider(provider);
meta.actor.show();
// Hinding drops the key focus if we have it
let focus = global.stage.get_key_focus();
this._content.hide();
meta.resultDisplay.renderResults(metas);
this._maybeSetInitialSelection();
this._content.show();
if (this._content.contains(focus))
global.stage.set_key_focus(focus);
}));
} else {
let metas = provider.getResultMetas(results);

View File

@ -48,6 +48,11 @@ function _setLabelsForMessage(dialog, message) {
_setLabelText(dialog.descriptionLabel, labels[1]);
}
function _createIcon(gicon) {
return new St.Icon({ gicon: gicon,
style_class: 'shell-mount-operation-icon' })
}
/* -------------------------------------------------------- */
const ListItem = new Lang.Class({
@ -109,12 +114,11 @@ const ShellMountOperation = new Lang.Class({
this.mountOp.connect('aborted',
Lang.bind(this, this._onAborted));
this._icon = new St.Icon({ gicon: source.get_icon(),
style_class: 'shell-mount-operation-icon' });
this._gicon = source.get_icon();
},
_onAskQuestion: function(op, message, choices) {
this._dialog = new ShellMountQuestionDialog(this._icon);
this._dialog = new ShellMountQuestionDialog(this._gicon);
this._dialog.connect('response',
Lang.bind(this, function(object, choice) {
@ -131,7 +135,7 @@ const ShellMountOperation = new Lang.Class({
_onAskPassword: function(op, message) {
this._notificationShowing = true;
this._source = new ShellMountPasswordSource(message, this._icon, this._reaskPassword);
this._source = new ShellMountPasswordSource(message, this._gicon, this._reaskPassword);
this._source.connect('password-ready',
Lang.bind(this, function(source, password) {
@ -166,7 +170,7 @@ const ShellMountOperation = new Lang.Class({
let message = op.get_show_processes_message();
if (!this._processesDialog) {
this._processesDialog = new ShellProcessesDialog(this._icon);
this._processesDialog = new ShellProcessesDialog(this._gicon);
this._dialog = this._processesDialog;
this._processesDialog.connect('response',
@ -192,14 +196,14 @@ const ShellMountQuestionDialog = new Lang.Class({
Name: 'ShellMountQuestionDialog',
Extends: ModalDialog.ModalDialog,
_init: function(icon) {
_init: function(gicon) {
this.parent({ styleClass: 'mount-question-dialog' });
let mainContentLayout = new St.BoxLayout();
this.contentLayout.add(mainContentLayout, { x_fill: true,
y_fill: false });
this._iconBin = new St.Bin({ child: icon });
this._iconBin = new St.Bin({ child: _createIcon(gicon) });
mainContentLayout.add(this._iconBin,
{ x_fill: true,
y_fill: false,
@ -238,16 +242,21 @@ const ShellMountPasswordSource = new Lang.Class({
Name: 'ShellMountPasswordSource',
Extends: MessageTray.Source,
_init: function(message, icon, reaskPassword) {
_init: function(message, gicon, reaskPassword) {
this._gicon = gicon;
let strings = message.split('\n');
this.parent(strings[0]);
this._notification = new ShellMountPasswordNotification(this, strings, icon, reaskPassword);
this._notification = new ShellMountPasswordNotification(this, strings, reaskPassword);
// add ourselves as a source, and popup the notification
Main.messageTray.add(this);
this.notify(this._notification);
},
createNotificationIcon: function() {
return _createIcon(this._gicon);
},
});
Signals.addSignalMethods(ShellMountPasswordSource.prototype);
@ -255,8 +264,8 @@ const ShellMountPasswordNotification = new Lang.Class({
Name: 'ShellMountPasswordNotification',
Extends: MessageTray.Notification,
_init: function(source, strings, icon, reaskPassword) {
this.parent(source, strings[0], null, { customContent: true, icon: icon });
_init: function(source, strings, reaskPassword) {
this.parent(source, strings[0], null, { customContent: true });
// set the notification to transient and urgent, so that it
// expands out
@ -297,14 +306,14 @@ const ShellProcessesDialog = new Lang.Class({
Name: 'ShellProcessesDialog',
Extends: ModalDialog.ModalDialog,
_init: function(icon) {
_init: function(gicon) {
this.parent({ styleClass: 'show-processes-dialog' });
let mainContentLayout = new St.BoxLayout();
this.contentLayout.add(mainContentLayout, { x_fill: true,
y_fill: false });
this._iconBin = new St.Bin({ child: icon });
this._iconBin = new St.Bin({ child: _createIcon(gicon) });
mainContentLayout.add(this._iconBin,
{ x_fill: true,
y_fill: false,

View File

@ -106,7 +106,10 @@ const Indicator = new Lang.Class({
/* TRANSLATORS: this means that bluetooth was disabled by hardware rfkill */
this._killswitch.setStatus(_("hardware disabled"));
this.actor.visible = has_adapter;
if (has_adapter)
this.actor.show();
else
this.actor.hide();
if (on) {
this._discoverable.actor.show();

View File

@ -1,584 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/*
* Copyright 2012 Red Hat, Inc.
* Copyright 2012 Peng Huang <shawn.p.huang@gmail.com>
* Copyright 2012 Takao Fujiwara <tfujiwar@redhat.com>
* Copyright 2012 Tiger Soldier <tigersoldi@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 2.1 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
* more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
const St = imports.gi.St;
const GLib = imports.gi.GLib;
const IBus = imports.gi.IBus;
const Lang = imports.lang;
const Signals = imports.signals;
const Shell = imports.gi.Shell;
const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const ORIENTATION_HORIZONTAL = 0;
const ORIENTATION_VERTICAL = 1;
const ORIENTATION_SYSTEM = 2;
const StCandidateArea = new Lang.Class({
Name: 'StCandidateArea',
_init: function(orientation) {
this.actor = new St.BoxLayout({ style_class: 'candidate-area' });
this._orientation = orientation;
this._labels = [];
this._labelBoxes = [];
this._createUI();
},
_removeOldWidgets: function() {
this.actor.destroy_all_children();
this._labels = [];
this._labelBoxes = [];
},
_createUI: function() {
let vbox = null;
let hbox = null;
if (this._orientation == ORIENTATION_VERTICAL) {
vbox = new St.BoxLayout({ vertical: true,
style_class: 'candidate-vertical' });
this.actor.add_child(vbox,
{ expand: true,
x_fill: true,
y_fill: true
});
} else {
hbox = new St.BoxLayout({ vertical: false,
style_class: 'candidate-horizontal' });
this.actor.add_child(hbox,
{ expand: true,
x_fill: true,
y_fill: true
});
}
for (let i = 0; i < 16; i++) {
let label1 = new St.Label({ text: '1234567890abcdef'.charAt(i) + '.',
style_class: 'popup-menu-item',
reactive: true });
let label2 = new St.Label({ text: '' ,
style_class: 'popup-menu-item',
reactive: true });
if (this._orientation == ORIENTATION_VERTICAL) {
let candidateHBox = new St.BoxLayout({vertical: false});
let labelBox = new St.Bin({ style_class: 'candidate-hlabel-content' });
labelBox.set_child(label1);
labelBox.set_fill(true, true);
let textBox = new St.Bin({ style_class: 'candidate-htext-content' });
textBox.set_child(label2);
textBox.set_fill(true, true);
candidateHBox.add_child(labelBox,
{ expand: false,
x_fill: false,
y_fill: true
});
candidateHBox.add_child(textBox,
{ expand: true,
x_fill: true,
y_fill: true
});
vbox.add_child(candidateHBox);
this._labelBoxes.push(candidateHBox);
} else {
let candidateHBox = new St.BoxLayout({ style_class: 'candidate-vcontent',
vertical: false });
candidateHBox.add_child(label1);
candidateHBox.add_child(label2);
hbox.add_child(candidateHBox);
this._labelBoxes.push(candidateHBox);
}
this._labels.push([label1, label2]);
}
for (let i = 0; i < this._labels.length; i++) {
for(let j = 0; j < this._labels[i].length; j++) {
let widget = this._labels[i][j];
widget.candidateIndex = i;
widget.connect('button-press-event',
Lang.bind(this, function (widget, event) {
this._candidateClickedCB(widget, event);
}));
widget.connect('enter-event',
function(widget, event) {
widget.add_style_pseudo_class('hover');
});
widget.connect('leave-event',
function(widget, event) {
widget.remove_style_pseudo_class('hover');
});
}
}
},
_recreateUI: function() {
this._removeOldWidgets();
this._createUI();
},
_candidateClickedCB: function(widget, event) {
this.emit('candidate-clicked',
widget.candidateIndex,
event.get_button(),
event.get_state());
},
setLabels: function(labels) {
if (!labels || labels.length == 0) {
for (let i = 0; i < 16; i++) {
this._labels[i][0].set_text('1234567890abcdef'.charAt(i) + '.');
}
return;
}
for (let i = 0; i < labels.length && i < this._labels.length; i++) {
/* Use a ClutterActor attribute of Shell's theme instead of
* Pango.AttrList for the lookup window GUI and
* can ignore 'attrs' simply from IBus engines?
*/
let [text, attrs] = labels[i];
this._labels[i][0].set_text(text);
}
},
setCandidates: function(candidates, focusCandidate, showCursor) {
if (focusCandidate == undefined) {
focusCandidate = 0;
}
if (showCursor == undefined) {
showCursor = true;
}
if (candidates.length > this._labels.length) {
assert();
}
for (let i = 0; i < candidates.length; i++) {
/* Use a ClutterActor attribute of Shell's theme instead of
* Pango.AttrList for the lookup window GUI and
* can ignore 'attrs' simply from IBus engines?
*/
let [text, attrs] = candidates[i];
if (i == focusCandidate && showCursor) {
this._labels[i][1].add_style_pseudo_class('active');
} else {
this._labels[i][1].remove_style_pseudo_class('active');
}
this._labels[i][1].set_text(text);
this._labelBoxes[i].show();
}
for (let i = this._labelBoxes.length - 1; i >= candidates.length; i--) {
this._labelBoxes[i].hide();
}
},
setOrientation: function(orientation) {
if (orientation == this._orientation)
return;
this._orientation = orientation;
this._recreateUI();
},
showAll: function() {
this.actor.show();
},
hideAll: function() {
this.actor.hide();
},
});
Signals.addSignalMethods(StCandidateArea.prototype);
const CandidatePanel = new Lang.Class({
Name: 'CandidatePanel',
_init: function() {
this._orientation = ORIENTATION_VERTICAL;
this._currentOrientation = this._orientation;
this._preeditVisible = false;
this._auxStringVisible = false;
this._lookupTableVisible = false;
this._lookupTable = null;
this._cursorLocation = [0, 0, 0, 0];
this._movedCursorLocation = null;
this._initSt();
},
_initSt: function() {
this._arrowSide = St.Side.TOP;
this._arrowAlignment = 0.0;
this._boxPointer = new BoxPointer.BoxPointer(this._arrowSide,
{ x_fill: true,
y_fill: true,
x_align: St.Align.START });
this.actor = this._boxPointer.actor;
this.actor._delegate = this;
this.actor.style_class = 'popup-menu-boxpointer';
this.actor.add_style_class_name('popup-menu');
this.actor.add_style_class_name('candidate-panel');
this._cursorActor = new Shell.GenericContainer();
Main.uiGroup.add_actor(this.actor);
Main.uiGroup.add_actor(this._cursorActor);
this._stCandidatePanel = new St.BoxLayout({ style_class: 'candidate-panel',
vertical: true });
this._boxPointer.bin.set_child(this._stCandidatePanel);
this._stPreeditLabel = new St.Label({ style_class: 'popup-menu-item',
text: '' });
if (!this._preeditVisible) {
this._stPreeditLabel.hide();
}
this._stAuxLabel = new St.Label({ style_class: 'popup-menu-item',
text: '' });
if (!this._auxVisible) {
this._stAuxLabel.hide();
}
this._separator = new PopupMenu.PopupSeparatorMenuItem();
if (!this._preeditVisible && !this._auxVisible) {
this._separator.actor.hide();
}
// create candidates area
this._stCandidateArea = new StCandidateArea(this._currentOrientation);
this._stCandidateArea.connect('candidate-clicked',
Lang.bind(this, function(x, i, b, s) {
this.emit('candidate-clicked', i, b, s);}));
this.updateLookupTable(this._lookupTable, this._lookupTableVisible);
// TODO: page up/down GUI
this._packAllStWidgets();
this._isVisible = true;
this.hideAll();
this._checkShowStates();
},
_packAllStWidgets: function() {
this._stCandidatePanel.add_child(this._stPreeditLabel,
{ x_fill: true,
y_fill: false,
x_align: St.Align.MIDDLE,
y_align: St.Align.START });
this._stCandidatePanel.add_child(this._stAuxLabel,
{ x_fill: true,
y_fill: false,
x_align: St.Align.MIDDLE,
y_align: St.Align.MIDDLE });
this._stCandidatePanel.add_child(this._separator.actor,
{ x_fill: true,
y_fill: false,
x_align: St.Align.MIDDLE,
y_align: St.Align.MIDDLE });
this._stCandidatePanel.add_child(this._stCandidateArea.actor,
{ x_fill: true,
y_fill: false,
x_align: St.Align.MIDDLE,
y_align: St.Align.END });
},
showPreeditText: function() {
this._preeditVisible = true;
this._stPreeditLabel.show();
this._checkShowStates();
},
hidePreeditText: function() {
this._preeditVisible = false;
this._checkShowStates();
this._stPreeditLabel.hide();
},
updatePreeditText: function(text, cursorPos, visible) {
if (visible) {
this.showPreeditText();
} else {
this.hidePreeditText();
}
let str = text.get_text();
this._stPreeditLabel.set_text(str);
let attrs = text.get_attributes();
for (let i = 0; attrs != null && attrs.get(i) != null; i++) {
let attr = attrs.get(i);
if (attr.get_attr_type() == IBus.AttrType.BACKGROUND) {
let startIndex = attr.get_start_index();
let endIndex = attr.get_end_index();
let len = GLib.utf8_strlen(str, -1);
let markup = '';
if (startIndex == 0 &&
endIndex == GLib.utf8_strlen(str, -1)) {
markup = markup.concat(str);
} else {
if (startIndex > 0) {
markup = markup.concat(GLib.utf8_substring(str,
0,
startIndex));
}
if (startIndex != endIndex) {
markup = markup.concat('<span background=\"#555555\">');
markup = markup.concat(GLib.utf8_substring(str,
startIndex,
endIndex));
markup = markup.concat('</span>');
}
if (endIndex < len) {
markup = markup.concat(GLib.utf8_substring(str,
endIndex,
len));
}
}
let clutter_text = this._stPreeditLabel.get_clutter_text();
clutter_text.set_markup(markup);
clutter_text.queue_redraw();
}
}
},
showAuxiliaryText: function() {
this._auxStringVisible = true;
this._stAuxLabel.show();
this._checkShowStates();
},
hideAuxiliaryText: function() {
this._auxStringVisible = false;
this._checkShowStates();
this._stAuxLabel.hide();
},
updateAuxiliaryText: function(text, show) {
if (show) {
this.showAuxiliaryText();
} else {
this.hideAuxiliaryText();
}
this._stAuxLabel.set_text(text.get_text());
},
_refreshLabels: function() {
let newLabels = [];
for (let i = 0; this._lookupTable.get_label(i) != null; i++) {
let label = this._lookupTable.get_label(i);
newLabels.push([label.get_text(), label.get_attributes()]);
}
this._stCandidateArea.setLabels(newLabels);
},
_getCandidatesInCurrentPage: function() {
let cursorPos = this._lookupTable.get_cursor_pos();
let pageSize = this._lookupTable.get_page_size();
let page = ((cursorPos == 0) ? 0 : Math.floor(cursorPos / pageSize));
let startIndex = page * pageSize;
let endIndex = Math.min((page + 1) * pageSize,
this._lookupTable.get_number_of_candidates());
let candidates = [];
for (let i = startIndex; i < endIndex; i++) {
candidates.push(this._lookupTable.get_candidate(i));
}
return candidates;
},
_getCursorPosInCurrentPage: function() {
let cursorPos = this._lookupTable.get_cursor_pos();
let pageSize = this._lookupTable.get_page_size();
let posInPage = cursorPos % pageSize;
return posInPage;
},
_refreshCandidates: function() {
let candidates = this._getCandidatesInCurrentPage();
let newCandidates = [];
for (let i = 0; i < candidates.length; i++) {
let candidate = candidates[i];
newCandidates.push([candidate.get_text(),
candidate.get_attributes()]);
}
this._stCandidateArea.setCandidates(newCandidates,
this._getCursorPosInCurrentPage(),
this._lookupTable.is_cursor_visible());
},
updateLookupTable: function(lookupTable, visible) {
// hide lookup table
if (!visible) {
this.hideLookupTable();
}
this._lookupTable = lookupTable || new IBus.LookupTable();
let orientation = this._lookupTable.get_orientation();
if (orientation != ORIENTATION_HORIZONTAL &&
orientation != ORIENTATION_VERTICAL) {
orientation = this._orientation;
}
this.setCurrentOrientation(orientation);
this._refreshCandidates();
this._refreshLabels();
// show lookup table
if (visible) {
this.showLookupTable();
}
},
showLookupTable: function() {
this._lookupTableVisible = true;
this._stCandidateArea.showAll();
this._checkShowStates();
},
hideLookupTable: function() {
this._lookupTableVisible = false;
this._checkShowStates();
this._stCandidateArea.hideAll();
},
pageUpLookupTable: function() {
this._lookupTable.page_up();
this._refreshCandidates();
},
pageDownLookup_table: function() {
this._lookupTable.page_down();
this._refreshCandidates();
},
cursorUpLookupTable: function() {
this._lookupTable.cursor_up();
this._refreshCandidates();
},
cursorDownLookupTable: function() {
this._lookupTable.cursor_down();
this._refreshCandidates();
},
setCursorLocation: function(x, y, w, h) {
// if cursor location is changed, we reset the moved cursor location
if (this._cursorLocation.join() != [x, y, w, h].join()) {
this._cursorLocation = [x, y, w, h];
this._movedCursorLocation = null;
this._checkPosition();
}
},
_checkShowStates: function() {
this._checkSeparatorShowStates();
if (this._preeditVisible ||
this._auxStringVisible ||
this._lookupTableVisible) {
this._checkPosition();
this.showAll();
this.emit('show');
} else {
this.hideAll();
this.emit('hide');
}
},
_checkSeparatorShowStates: function() {
if (this._preeditVisible || this._auxStringVisible) {
this._separator.actor.show();
}
else
this._separator.actor.hide();
},
reset: function() {
let text = IBus.Text.new_from_string('');
this.updatePreeditText(text, 0, false);
text = IBus.Text.new_from_string('');
this.updateAuxiliaryText(text, false);
this.updateLookupTable(null, false);
this.hideAll();
},
setCurrentOrientation: function(orientation) {
if (this._currentOrientation == orientation) {
return;
}
this._currentOrientation = orientation;
this._stCandidateArea.setOrientation(orientation);
},
setOrientation: function(orientation) {
this._orientation = orientation;
this.updateLookupTable(this._lookupTable, this._lookupTableVisible);
},
getCurrentOrientation: function() {
return this._currentOrientation;
},
_checkPosition: function() {
let cursorLocation = this._movedCursorLocation || this._cursorLocation;
let [cursorX, cursorY, cursorWidth, cursorHeight] = cursorLocation;
let windowRight = cursorX + cursorWidth + this.actor.get_width();
let windowBottom = cursorY + cursorHeight + this.actor.get_height();
this._cursorActor.set_position(cursorX, cursorY);
this._cursorActor.set_size(cursorWidth, cursorHeight);
let monitor = Main.layoutManager.findMonitorForActor(this._cursorActor);
let [sx, sy] = [monitor.x + monitor.width, monitor.y + monitor.height];
if (windowBottom > sy) {
this._arrowSide = St.Side.BOTTOM;
} else {
this._arrowSide = St.Side.TOP;
}
this._boxPointer._arrowSide = this._arrowSide;
this._boxPointer.setArrowOrigin(this._arrowSide);
this._boxPointer.setPosition(this._cursorActor, this._arrowAlignment);
},
showAll: function() {
if (!this._isVisible) {
this.actor.opacity = 255;
this.actor.show();
this._isVisible = true;
}
},
hideAll: function() {
if (this._isVisible) {
this.actor.opacity = 0;
this.actor.hide();
this._isVisible = false;
}
},
move: function(x, y) {
this.actor.set_position(x, y);
}
});
Signals.addSignalMethods(CandidatePanel.prototype);

View File

@ -2,52 +2,42 @@
const Clutter = imports.gi.Clutter;
const GdkPixbuf = imports.gi.GdkPixbuf;
const Gkbd = imports.gi.Gkbd;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
try {
var IBus = imports.gi.IBus;
const CandidatePanel = imports.ui.status.candidatePanel;
} catch (e) {
var IBus = null;
}
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu;
const Util = imports.misc.util;
const DESKTOP_INPUT_SOURCES_KEYBINDINGS_SCHEMA = 'org.gnome.desktop.input-sources.keybindings';
const DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources';
const KEY_CURRENT_IS = 'current';
const KEY_INPUT_SOURCES = 'sources';
const LayoutMenuItem = new Lang.Class({
Name: 'LayoutMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
_init: function(name, shortName, xkbLayout, xkbVariant, ibusEngine) {
_init: function(config, id, indicator, long_name) {
this.parent();
this.label = new St.Label({ text: name });
this.indicator = new St.Label({ text: shortName });
this._config = config;
this._id = id;
this.label = new St.Label({ text: long_name });
this.indicator = indicator;
this.addActor(this.label);
this.addActor(this.indicator);
},
this.sourceName = name;
this.shortName = shortName;
this.xkbLayout = xkbLayout;
this.xkbVariant = xkbVariant;
this.ibusEngine = ibusEngine;
activate: function(event) {
this.parent(event);
this._config.lock_group(this._id);
}
});
const InputSourceIndicator = new Lang.Class({
Name: 'InputSourceIndicator',
const XKBIndicator = new Lang.Class({
Name: 'XKBIndicator',
Extends: PanelMenu.Button,
_init: function() {
@ -60,237 +50,61 @@ const InputSourceIndicator = new Lang.Class({
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);
this._labelActors = [ ];
this._layoutItems = [ ];
this._settings = new Gio.Settings({ schema: DESKTOP_INPUT_SOURCES_SCHEMA });
this._settings.connect('changed::' + KEY_CURRENT_IS, Lang.bind(this, this._currentISChanged));
this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));
this._showFlags = false;
this._config = Gkbd.Configuration.get();
this._config.connect('changed', Lang.bind(this, this._syncConfig));
this._config.connect('group-changed', Lang.bind(this, this._syncGroup));
this._config.start_listen();
if (IBus)
this._ibusInit();
this._inputSourcesChanged();
this._syncConfig();
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();
let description = this._selectedLayout.xkbLayout;
if (this._selectedLayout.xkbVariant.length > 0)
description = description + '\t' + this._selectedLayout.xkbVariant;
Util.spawn(['gkbd-keyboard-display', '-l', description]);
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
}));
}
this.menu.addSettingsAction(_("Region and Language Settings"), 'gnome-region-panel.desktop');
global.display.add_keybinding('switch-next',
new Gio.Settings({ schema: DESKTOP_INPUT_SOURCES_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE,
Lang.bind(this, this._switchNext));
global.display.add_keybinding('switch-previous',
new Gio.Settings({ schema: DESKTOP_INPUT_SOURCES_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE,
Lang.bind(this, this._switchPrevious));
},
_ibusInit: function() {
IBus.init();
this._ibus = new IBus.Bus();
if (!this._ibus.is_connected()) {
log('ibus-daemon is not running');
return;
}
_adjustGroupNames: function(names) {
// Disambiguate duplicate names with a subscript
// This is O(N^2) to avoid sorting names
// but N <= 4 so who cares?
this._ibus.request_name(IBus.SERVICE_PANEL,
IBus.BusNameFlag.ALLOW_REPLACEMENT |
IBus.BusNameFlag.REPLACE_EXISTING);
this._panel = new IBus.PanelService({ connection: this._ibus.get_connection(),
object_path: IBus.PATH_PANEL });
this._ibusInitPanelService();
this._candidatePanel = new CandidatePanel.CandidatePanel();
this._ibusInitCandidatePanel();
},
_ibusInitCandidatePanel: function() {
this._candidatePanel.connect('cursor-up',
Lang.bind(this, function(widget) {
this.cursorUp();
}));
this._candidatePanel.connect('cursor-down',
Lang.bind(this, function(widget) {
this.cursorDown();
}));
this._candidatePanel.connect('page-up',
Lang.bind(this, function(widget) {
this.pageUp();
}));
this._candidatePanel.connect('page-down',
Lang.bind(this, function(widget) {
this.pageDown();
}));
this._candidatePanel.connect('candidate-clicked',
Lang.bind(this, function(widget, index, button, state) {
this.candidateClicked(index, button, state);
}));
},
_ibusInitPanelService: function() {
this._panel.connect('set-cursor-location',
Lang.bind(this, this.setCursorLocation));
this._panel.connect('update-preedit-text',
Lang.bind(this, this.updatePreeditText));
this._panel.connect('show-preedit-text',
Lang.bind(this, this.showPreeditText));
this._panel.connect('hide-preedit-text',
Lang.bind(this, this.hidePreeditText));
this._panel.connect('update-auxiliary-text',
Lang.bind(this, this.updateAuxiliaryText));
this._panel.connect('show-auxiliary-text',
Lang.bind(this, this.showAuxiliaryText));
this._panel.connect('hide-auxiliary-text',
Lang.bind(this, this.hideAuxiliaryText));
this._panel.connect('update-lookup-table',
Lang.bind(this, this.updateLookupTable));
this._panel.connect('show-lookup-table',
Lang.bind(this, this.showLookupTable));
this._panel.connect('hide-lookup-table',
Lang.bind(this, this.hideLookupTable));
this._panel.connect('page-up-lookup-table',
Lang.bind(this, this.pageUpLookupTable));
this._panel.connect('page-down-lookup-table',
Lang.bind(this, this.pageDownLookupTable));
this._panel.connect('cursor-up-lookup-table',
Lang.bind(this, this.cursorUpLookupTable));
this._panel.connect('cursor-down-lookup-table',
Lang.bind(this, this.cursorDownLookupTable));
this._panel.connect('focus-in', Lang.bind(this, this.focusIn));
this._panel.connect('focus-out', Lang.bind(this, this.focusOut));
},
setCursorLocation: function(panel, x, y, w, h) {
this._candidatePanel.setCursorLocation(x, y, w, h);
},
updatePreeditText: function(panel, text, cursorPos, visible) {
this._candidatePanel.updatePreeditText(text, cursorPos, visible);
},
showPreeditText: function(panel) {
this._candidatePanel.showPreeditText();
},
hidePreeditText: function(panel) {
this._candidatePanel.hidePreeditText();
},
updateAuxiliaryText: function(panel, text, visible) {
this._candidatePanel.updateAuxiliaryText(text, visible);
},
showAuxiliaryText: function(panel) {
this._candidatePanel.showAuxiliaryText();
},
hideAuxiliaryText: function(panel) {
this._candidatePanel.hideAuxiliaryText();
},
updateLookupTable: function(panel, lookupTable, visible) {
this._candidatePanel.updateLookupTable(lookupTable, visible);
},
showLookupTable: function(panel) {
this._candidatePanel.showLookupTable();
},
hideLookupTable: function(panel) {
this._candidatePanel.hideLookupTable();
},
pageUpLookupTable: function(panel) {
this._candidatePanel.pageUpLookupTable();
},
pageDownLookupTable: function(panel) {
this._candidatePanel.pageDownLookupTable();
},
cursorUpLookupTable: function(panel) {
this._candidatePanel.cursorUpLookupTable();
},
cursorDownLookupTable: function(panel) {
this._candidatePanel.cursorDownLookupTable();
},
focusIn: function(panel, path) {
},
focusOut: function(panel, path) {
this._candidatePanel.reset();
},
cursorUp: function() {
this._panel.cursor_up();
},
cursorDown: function() {
this._panel.cursor_down();
},
pageUp: function() {
this._panel.page_up();
},
pageDown: function() {
this._panel.page_down();
},
candidateClicked: function(index, button, state) {
this._panel.candidate_clicked(index, button, state);
},
_currentISChanged: function() {
let source = this._settings.get_value(KEY_CURRENT_IS);
let name = source.get_child_value(0).get_string()[0];
if (this._selectedLayout) {
this._selectedLayout.setShowDot(false);
this._selectedLayout = null;
}
if (this._selectedLabel) {
this._container.set_skip_paint(this._selectedLabel, true);
this._selectedLabel = null;
}
for (let i = 0; i < this._layoutItems.length; ++i) {
let item = this._layoutItems[i];
if (item.sourceName == name) {
item.setShowDot(true);
this._selectedLayout = item;
break;
for (let i = 0; i < names.length; i++) {
let name = names[i];
let cnt = 0;
for (let j = i + 1; j < names.length; j++) {
if (names[j] == name) {
cnt++;
// U+2081 SUBSCRIPT ONE
names[j] = name + String.fromCharCode(0x2081 + cnt);
}
}
if (cnt != 0)
names[i] = name + '\u2081';
}
for (let i = 0; i < this._labelActors.length; ++i) {
let actor = this._labelActors[i];
if (actor.sourceName == name) {
this._selectedLabel = actor;
this._container.set_skip_paint(actor, false);
break;
}
}
if (!this._selectedLayout || !this._selectedLabel)
this._layoutItems[0].activate();
return names;
},
_inputSourcesChanged: function() {
let sources = this._settings.get_value(KEY_INPUT_SOURCES);
if (sources.n_children() > 1) {
_syncConfig: function() {
this._showFlags = this._config.if_flags_shown();
if (this._showFlags) {
this._container.set_skip_paint(this._iconActor, false);
} else {
this._container.set_skip_paint(this._iconActor, true);
}
let groups = this._config.get_group_names();
if (groups.length > 1) {
this.actor.show();
} else {
this.menu.close();
@ -303,69 +117,55 @@ const InputSourceIndicator = new Lang.Class({
for (let i = 0; i < this._labelActors.length; i++)
this._labelActors[i].destroy();
let short_names = this._adjustGroupNames(this._config.get_short_group_names());
this._selectedLayout = null;
this._layoutItems = [ ];
this._selectedLabel = null;
this._labelActors = [ ];
for (let i = 0; i < sources.n_children(); ++i) {
let name = sources.get_child_value(i).get_child_value(0).get_string()[0];
let shortName = sources.get_child_value(i).get_child_value(1).get_string()[0];
let xkbLayout = sources.get_child_value(i).get_child_value(2).get_string()[0];
let xkbVariant = sources.get_child_value(i).get_child_value(3).get_string()[0];
let ibusEngine = sources.get_child_value(i).get_child_value(4).get_string()[0];
let item = new LayoutMenuItem(name, shortName, xkbLayout, xkbVariant, ibusEngine);
for (let i = 0; i < groups.length; i++) {
let icon_name = this._config.get_group_name(i);
let actor;
if (this._showFlags)
actor = new St.Icon({ icon_name: icon_name, icon_type: St.IconType.SYMBOLIC, style_class: 'popup-menu-icon' });
else
actor = new St.Label({ text: short_names[i] });
let item = new LayoutMenuItem(this._config, i, actor, groups[i]);
item._short_group_name = short_names[i];
item._icon_name = icon_name;
this._layoutItems.push(item);
this.menu.addMenuItem(item, i);
item.connect('activate', Lang.bind(this, function() {
if (this._selectedLayout == null || item.sourceName != this._selectedLayout.sourceName) {
let name = GLib.Variant.new_string(item.sourceName);
let shortName = GLib.Variant.new_string(item.shortName);
let xkbLayout = GLib.Variant.new_string(item.xkbLayout);
let xkbVariant = GLib.Variant.new_string(item.xkbVariant);
let ibusEngine = GLib.Variant.new_string(item.ibusEngine);
let tuple = GLib.Variant.new_tuple([name, shortName, xkbLayout, xkbVariant, ibusEngine], 5);
this._settings.set_value(KEY_CURRENT_IS, tuple);
}
}));
let shortLabel = new St.Label({ text: shortName });
shortLabel.sourceName = name;
let shortLabel = new St.Label({ text: short_names[i] });
this._labelActors.push(shortLabel);
this._container.add_actor(shortLabel);
this._container.set_skip_paint(shortLabel, true);
}
this._currentISChanged();
this._syncGroup();
},
_switchNext: function() {
if (!this._selectedLayout || !this._selectedLabel) {
this._layoutItems[0].activate();
return;
}
for (let i = 0; i < this._layoutItems.length; ++i) {
let item = this._layoutItems[i];
if (item.sourceName == this._selectedLayout.sourceName) {
this._layoutItems[(++i == this._layoutItems.length) ? 0 : i].activate();
break;
}
}
},
_syncGroup: function() {
let selected = this._config.get_current_group();
_switchPrevious: function() {
if (!this._selectedLayout || !this._selectedLabel) {
this._layoutItems[0].activate();
return;
if (this._selectedLayout) {
this._selectedLayout.setShowDot(false);
this._selectedLayout = null;
}
for (let i = 0; i < this._layoutItems.length; ++i) {
let item = this._layoutItems[i];
if (item.sourceName == this._selectedLayout.sourceName) {
this._layoutItems[(--i == -1) ? (this._layoutItems.length - 1) : i].activate();
break;
}
if (this._selectedLabel) {
this._container.set_skip_paint(this._selectedLabel, true);
this._selectedLabel = null;
}
let item = this._layoutItems[selected];
item.setShowDot(true);
this._iconActor.icon_name = item._icon_name;
this._selectedLabel = this._labelActors[selected];
this._container.set_skip_paint(this._selectedLabel, this._showFlags);
this._selectedLayout = item;
},
_containerGetPreferredWidth: function(container, for_height, alloc) {
@ -373,11 +173,15 @@ const InputSourceIndicator = new Lang.Class({
// 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);
for (let i = 0; i < this._labelActors.length; i++) {
let [min_width, natural_width] = this._labelActors[i].get_preferred_width(for_height);
max_min_width = Math.max(max_min_width, min_width);
max_natural_width = Math.max(max_natural_width, natural_width);
if (!this._showFlags) {
max_min_width = Math.max(max_min_width, min_width);
max_natural_width = Math.max(max_natural_width, natural_width);
}
}
alloc.min_size = max_min_width;
@ -386,11 +190,15 @@ const InputSourceIndicator = new Lang.Class({
_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);
for (let i = 0; i < this._labelActors.length; i++) {
let [min_height, natural_height] = this._labelActors[i].get_preferred_height(for_width);
max_min_height = Math.max(max_min_height, min_height);
max_natural_height = Math.max(max_natural_height, natural_height);
if (!this._showFlags) {
max_min_height = Math.max(max_min_height, min_height);
max_natural_height = Math.max(max_natural_height, natural_height);
}
}
alloc.min_size = max_min_height;
@ -404,6 +212,7 @@ const InputSourceIndicator = new Lang.Class({
box.y2 -= box.y1;
box.y1 = 0;
this._iconActor.allocate_align_fill(box, 0.5, 0, false, false, flags);
for (let i = 0; i < this._labelActors.length; i++)
this._labelActors[i].allocate_align_fill(box, 0.5, 0, false, false, flags);
}

View File

@ -707,7 +707,10 @@ const NMDeviceWired = new Lang.Class({
// the device
// we can do it here because addConnection and removeConnection
// both call _createSection at some point
this.section.actor.visible = this._connections.length > 1;
if (this._connections.length <= 1)
this.section.actor.hide();
else
this.section.actor.show();
},
_createAutomaticConnection: function() {
@ -1035,8 +1038,13 @@ const NMDeviceWireless = new Lang.Class({
},
setEnabled: function(enabled) {
this.statusItem.actor.visible = enabled;
this.section.actor.visible = enabled;
if (enabled) {
this.statusItem.actor.show();
this.section.actor.show();
} else {
this.statusItem.actor.hide();
this.section.actor.hide();
}
},
activate: function() {
@ -1530,7 +1538,7 @@ const NMApplet = new Lang.Class({
Extends: PanelMenu.SystemStatusButton,
_init: function() {
this.parent('network-offline', _("Network"));
this.parent('network-error', _("Network"));
this._client = NMClient.Client.new();

View File

@ -149,9 +149,13 @@ const Indicator = new Lang.Class({
}
}
}
this._inputTitle.actor.visible = showInput;
this._inputSlider.actor.visible = showInput;
if (showInput) {
this._inputTitle.actor.show();
this._inputSlider.actor.show();
} else {
this._inputTitle.actor.hide();
this._inputSlider.actor.hide();
}
},
_volumeToIcon: function(volume) {

View File

@ -132,6 +132,9 @@ const Client = new Lang.Class({
let channel = channels[i];
let [targetHandle, targetHandleType] = channel.get_handle();
if (Shell.is_channel_invalidated(channel))
continue;
/* Only observe contact text channels */
if ((!(channel instanceof Tp.TextChannel)) ||
targetHandleType != Tp.HandleType.CONTACT)
@ -181,6 +184,9 @@ const Client = new Lang.Class({
continue;
}
if (Shell.is_channel_invalidated(channel))
continue;
// 'notify' will be true when coming from an actual HandleChannels
// call, and not when from a successful Claim call. The point is
// we don't want to notify for a channel we just claimed which
@ -231,12 +237,19 @@ const Client = new Lang.Class({
let channel = channels[0];
let chanType = channel.get_channel_type();
if (Shell.is_channel_invalidated(channel)) {
Shell.decline_dispatch_op(context, 'Channel is invalidated');
return;
}
if (chanType == Tp.IFACE_CHANNEL_TYPE_TEXT)
this._approveTextChannel(account, conn, channel, dispatchOp, context);
else if (chanType == Tp.IFACE_CHANNEL_TYPE_CALL)
this._approveCall(account, conn, channel, dispatchOp, context);
else if (chanType == Tp.IFACE_CHANNEL_TYPE_FILE_TRANSFER)
this._approveFileTransfer(account, conn, channel, dispatchOp, context);
else
Shell.decline_dispatch_op(context, 'Unsupported channel type');
},
_approveTextChannel: function(account, conn, channel, dispatchOp, context) {

View File

@ -554,12 +554,18 @@ const UserMenuButton = new Lang.Class({
_updateLogout: function() {
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
this._logoutItem.actor.visible = allowLogout;
if (allowLogout)
this._logoutItem.actor.show();
else
this._logoutItem.actor.hide();
},
_updateLockScreen: function() {
let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
this._logoutItem.actor.visible = allowLockScreen;
if (allowLockScreen)
this._lockScreenItem.actor.show();
else
this._lockScreenItem.actor.hide();
},
_updateHaveShutdown: function() {
@ -578,7 +584,10 @@ const UserMenuButton = new Lang.Class({
if (!this._suspendOrPowerOffItem)
return;
this._suspendOrPowerOffItem.actor.visible = this._haveShutdown || this._haveSuspend;
if (!this._haveShutdown && !this._haveSuspend)
this._suspendOrPowerOffItem.actor.hide();
else
this._suspendOrPowerOffItem.actor.show();
// If we can't suspend show Power Off... instead
// and disable the alt key

View File

@ -1134,6 +1134,7 @@ const Workspace = new Lang.Class({
_hideAllOverlays: function() {
for (let i = 0; i < this._windows.length; i++) {
let clone = this._windows[i];
Tweener.removeTweens(clone.actor);
let overlay = this._windowOverlays[i];
if (overlay)
overlay.hide();
@ -1251,7 +1252,7 @@ const Workspace = new Lang.Class({
if (!this._isMyWindow(win) || !this._isOverviewWindow(win))
return;
let [clone, overlay] = this._addWindowClone(win);
let clone = this._addWindowClone(win);
if (win._overviewHint) {
let x = win._overviewHint.x - this.actor.x;
@ -1261,7 +1262,6 @@ const Workspace = new Lang.Class({
clone.actor.set_position (x, y);
clone.actor.set_scale (scale, scale);
this._updateWindowOverlayPositions(clone, overlay, x, y, scale, false);
} else {
// Position new windows at the top corner of the workspace rather
// than where they were placed for real to avoid the window
@ -1321,10 +1321,7 @@ const Workspace = new Lang.Class({
this.leavingOverview = true;
for (let i = 0; i < this._windows.length; i++) {
let clone = this._windows[i];
Tweener.removeTweens(clone.actor);
}
this._hideAllOverlays();
if (this._repositionWindowsId > 0) {
Mainloop.source_remove(this._repositionWindowsId);
@ -1364,7 +1361,6 @@ const Workspace = new Lang.Class({
}
}
this._hideAllOverlays();
},
destroy : function() {
@ -1455,7 +1451,7 @@ const Workspace = new Lang.Class({
this._windows.push(clone);
this._windowOverlays.push(overlay);
return [clone, overlay];
return clone;
},
_onShowOverlayClose: function (windowOverlay) {

View File

@ -844,7 +844,10 @@ const WorkspacesDisplay = new Lang.Class({
if (!primaryView)
return;
primaryView.actor.opacity = opacity;
primaryView.actor.visible = opacity != 0;
if (opacity == 0)
primaryView.actor.hide();
else
primaryView.actor.show();
}));
}));
},

View File

@ -43,6 +43,7 @@ ms
nb
nl
nn
oc
or
pa
pl

311
po/as.po
View File

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
"cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-03-19 14:09+0000\n"
"PO-Revision-Date: 2012-03-19 20:17+0530\n"
"POT-Creation-Date: 2012-04-19 21:14+0000\n"
"PO-Revision-Date: 2012-07-05 20:28+0530\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: as_IN <kde-i18n-doc@kde.org>\n"
"MIME-Version: 1.0\n"
@ -39,7 +39,7 @@ msgstr "GNOME শ্বেল সম্প্ৰসাৰনসমূহ সং
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
"Alt-F2 -ৰ পৰা উন্নয়নকাৰী আৰু পৰীক্ষকসমূহৰ কাৰণে লাভদায়ক অভ্যন্তৰীক সঁজুলিসমূহ "
"Alt-F2 ৰ পৰা উন্নয়নকাৰী আৰু পৰীক্ষকসমূহৰ কাৰণে লাভদায়ক অভ্যন্তৰীক সঁজুলিসমূহ "
"সামৰ্থবান কৰক"
#: ../data/org.gnome.shell.gschema.xml.in.h:2
@ -61,7 +61,7 @@ msgid ""
"list. You can also manipulate this list with the EnableExtension and "
"DisableExtension DBus methods on org.gnome.Shell."
msgstr ""
"GNOME শ্বেল সম্প্ৰসাৰণসমূহৰ এটা uuid বৈশিষ্ট আছে; এই চাবিয়ে ল'ড হব লগিয়া "
"GNOME শ্বেল সম্প্ৰসাৰণসমূহৰ এটা uuid বৈশিষ্ট আছে; এই কি'য়ে ল'ড হব লগিয়া "
"সমপ্ৰসাৰণসমূহ তালিকাভুক্ত কৰে। যিকোনো সম্প্ৰসাৰন যি ল'ড হব বিচাৰে এই তালিকাত থাকিব "
"লাগিব। আপুনি এই তালিকাক org.gnome.Shell ত EnableExtension আৰু DisableExtension "
"DBus পদ্ধতিসমূহৰ সৈতে সলনি কৰিব পাৰিব।"
@ -77,7 +77,7 @@ msgid ""
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
"শ্বেলে সাধাৰত সক্ৰিয় অনুপ্ৰয়োগসমূহ মনিটৰ কৰে যাতে সকলোতকৈ অধিক ব্যৱহৃতসমূহ "
"শ্বেলে সাধাৰত সক্ৰিয় অনুপ্ৰয়োগসমূহ মনিটৰ কৰে যাতে সকলোতকৈ অধিক ব্যৱহৃতসমূহ "
"(উদাহৰনস্বৰুপে লঞ্চাৰসমূহত) ক দেখুৱাব পাৰে। যত এই তথ্য গোপন ৰখা হব, আপুনি ইয়াক "
"গোপনীয়তা কাৰণসমূহৰ কাৰণে অসামৰ্থবান কৰিব পাৰে। অনুগ্ৰহ কৰি মন কৰিব যে এনেকুৱা "
"কৰাত ইতিমধ্যে সংৰক্ষীত তথ্য আতৰি নাযায়।"
@ -129,46 +129,54 @@ msgid "If true, display the ISO week date in the calendar."
msgstr "যদি সত্য, ISO সপ্তাহ তাৰিখক কেলেণ্ডাৰত দেখুৱাওক।"
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Keybinding to open the application menu"
msgstr "অনুপ্ৰয়োগ মেনু খোলিবলে Keybinding"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid "Keybinding to open the application menu."
msgstr "অনুপ্ৰয়োগ মেনু খোলিবলে Keybinding।"
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "Which keyboard to use"
msgstr "কোনটো কিবৰ্ড ব্যৱহাৰ কৰা হব"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "The type of keyboard to use."
msgstr "ব্যৱহাৰ কৰিব লগিয়া কিবৰ্ডৰ ধৰণ।"
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Show time with seconds"
msgstr "সময়ক ছেকেণ্ডসমূহৰ সৈতে দেখুৱাওক"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "If true, display seconds in time."
msgstr "যদি সত্য, ছেকেণ্ডসমূহ সময়ত দেখুৱাওক।"
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "Show date in clock"
msgstr "ঘড়িত তাৰিখ দেখুৱাওক"
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "If true, display date in the clock, in addition to time."
msgstr "যদি সত্য, ঘড়িত তাৰিখ প্ৰদৰ্শন কৰক, সময়ৰ অতিৰিক্তভাৱে।"
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Framerate used for recording screencasts."
msgstr "screencasts ৰেকৰ্ড কৰাৰ কাৰণে ব্যৱহৃত Framerate"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
"GNOME শ্বেলৰ screencast ৰেকৰ্ডাৰে ফ্ৰেইম-প্ৰতি ছেকেণ্ডত ৰেকৰ্ড কৰা পৰিণাম "
"screencast -ৰ framerate।"
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "screencast এনকোড কৰিবলে ব্যৱহাৰ কৰা gstreamer পাইপলাইন"
"screencast ৰ framerate।"
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "screencast এনক'ড কৰিবলে ব্যৱহাৰ কৰা gstreamer পাইপলাইন"
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -182,29 +190,29 @@ msgid ""
"using the VP8 codec. %T is used as a placeholder for a guess at the optimal "
"thread count on the system."
msgstr ""
"ৰেকৰ্ডিংসমূহ এনকড কৰোতে ব্যৱহৃত GStreamer পাইপলাইন সংহতি কৰে। ই gst-launch -ৰ "
"ৰেকৰ্ডিংসমূহ এনক'ড কৰোতে ব্যৱহৃত GStreamer পাইপলাইন সংহতি কৰে। ই gst-launch ৰ "
"কাৰণে ব্যৱহৃত বাক্যবিন্যাস অনুকৰন কৰে। পাইপলাইনৰ এটা অসংযোগিত চিঙ্ক পেড থাকিব লাগে "
"যত ৰেকৰ্ড কৰা ভিডিঅ' ৰেকৰ্ড কৰা হয়। ইয়াৰ সাধাৰত এটা অসংযোগিত উৎস পেড থাকিব; "
"যত ৰেকৰ্ড কৰা ভিডিঅ' ৰেকৰ্ড কৰা হয়। ইয়াৰ সাধাৰত এটা অসংযোগিত উৎস পেড থাকিব; "
"সেই পেডৰ পৰা আউটপুট এটা আউটপুট নথিপত্ৰলে লিখা হব। যি কি নহওক পাইপলাইনে নিজৰ "
"আউটপুটৰ যত্ন লব পাৰে - ইয়াৰ হওতো আউটপুটক shout2send অথবা সমসাময়িকৰে এটা icecast "
"চাৰ্ভাৰত পঠাবলে ব্যৱহাৰ হব পাৰে। যেতিয়া এটা ৰিক্ত মানলে অসংহিত বা সংহিত, "
"অবিকল্পিত পাইপলাইন ব্যৱহাৰ কৰা হব। এইটো বৰ্তমানত 'vp8enc quality=8 speed=6 "
"threads=%T ! queue ! webmmux' আৰু VP8 কডেক ব্যৱহাৰ কৰি WEBM -ত ৰেকৰ্ড কৰে। %T -"
"threads=%T ! queue ! webmmux' আৰু VP8 কডেক ব্যৱহাৰ কৰি WEBM ত ৰেকৰ্ড কৰে। %T -"
"ক চিস্টেমত অনুকূলিত থ্ৰেড কাওন্টত এটা অনুমানৰ প্লেইচহল্ডাৰ হিচাপে ব্যৱহাৰ কৰা হয়। "
#: ../data/org.gnome.shell.gschema.xml.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.h:29
msgid "File extension used for storing the screencast"
msgstr "screencast সংৰক্ষণ কৰাৰ কাৰণে লথিপত্ৰ সম্প্ৰসাৰন"
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.h:30
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 ""
"ৰেকৰ্ড কৰা screencasts -ৰ কাৰণে নথিপত্ৰ নাম বৰ্তমান তাৰিখৰ উপৰত ভিত্তি কৰি এটা "
"ৰেকৰ্ড কৰা screencasts ৰ কাৰণে নথিপত্ৰ নাম বৰ্তমান তাৰিখৰ উপৰত ভিত্তি কৰি এটা "
"অবিকল্প নথিপত্ৰ নাম হব, আৰু এই সম্প্ৰসাৰন ব্যৱহাৰ কৰিব। ইয়াক এটা ভিন্ন অন্তৰ্ভুক্তক "
"বিন্যাসত েকৰ্ড কৰোতে পৰিৱৰ্তন কৰিব লাগিব।"
"বিন্যাসত েকৰ্ড কৰোতে পৰিৱৰ্তন কৰিব লাগিব।"
#: ../js/extensionPrefs/main.js:125
#, c-format
@ -219,40 +227,40 @@ msgstr "<b>সম্প্ৰসাৰন</b>"
msgid "Select an extension to configure using the combobox above."
msgstr "উপৰত দিয়া কম্বোবাকচ ব্যৱহাৰ কৰি সংৰূপণ কৰিবলে এটা সম্প্ৰসাৰন বাছক।"
#: ../js/gdm/loginDialog.js:624
#: ../js/gdm/loginDialog.js:627
msgid "Session..."
msgstr "অধিবেশন..."
#: ../js/gdm/loginDialog.js:786
#: ../js/gdm/loginDialog.js:789
msgctxt "title"
msgid "Sign In"
msgstr "ছাইন ইন কৰক"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:831
#: ../js/gdm/loginDialog.js:834
msgid "(or swipe finger)"
msgstr "(অথবা আঙুলি স্বাইপ কৰক)"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:852
#: ../js/gdm/loginDialog.js:855
msgid "Not listed?"
msgstr "তালিকাভুক্ত নহয়?"
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:401
#: ../js/ui/extensionSystem.js:399 ../js/ui/networkAgent.js:153
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
msgid "Cancel"
msgstr "বাতিল কৰক"
#: ../js/gdm/loginDialog.js:1025
#: ../js/gdm/loginDialog.js:1028
msgctxt "button"
msgid "Sign In"
msgstr "ছাইন ইন কৰক"
#: ../js/gdm/loginDialog.js:1377
#: ../js/gdm/loginDialog.js:1380
msgid "Login Window"
msgstr "লগিন উইন্ডো"
@ -282,7 +290,7 @@ msgstr "কমান্ড বিশ্লেষন কৰিব নোৱাৰ
#: ../js/misc/util.js:127
#, c-format
msgid "Execution of '%s' failed:"
msgstr "'%s' -ৰ প্ৰেৰণ ব্যৰ্থ হল:"
msgstr "'%s' ৰ প্ৰেৰণ ব্যৰ্থ হল:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:255
@ -312,12 +320,12 @@ msgstr "পছন্দলে যোগ কৰক"
#: ../js/ui/appFavorites.js:87
#, c-format
msgid "%s has been added to your favorites."
msgstr "%s -ক আপোনাৰ পছন্দলে যোগ কৰা হৈছে।"
msgstr "%s ক আপোনাৰ পছন্দলে যোগ কৰা হৈছে।"
#: ../js/ui/appFavorites.js:118
#, c-format
msgid "%s has been removed from your favorites."
msgstr "%s -ক আপোনাৰ পছন্দৰ পৰা আতৰোৱা হৈছে।"
msgstr "%s ক আপোনাৰ পছন্দৰ পৰা আতৰোৱা হৈছে।"
#: ../js/ui/autorunManager.js:265
msgid "Removable Devices"
@ -326,7 +334,7 @@ msgstr "আতৰাব পৰা ডিভাইচসমূহ"
#: ../js/ui/autorunManager.js:560
#, c-format
msgid "Open with %s"
msgstr "%s -ৰ সৈতে খোলক"
msgstr "%s ৰ সৈতে খোলক"
#: ../js/ui/autorunManager.js:586
msgid "Eject"
@ -588,8 +596,8 @@ msgstr[1] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ
#, 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 ছেকেণ্ডসমূহৰ পিছত লগ আউট হৈ যাব।"
msgstr[1] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।"
msgstr[0] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।"
msgstr[1] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।"
#: ../js/ui/endSessionDialog.js:74
msgid "Logging out of the system."
@ -613,7 +621,7 @@ msgstr "এই অনুপ্ৰয়োগসমূহক প্ৰস্থা
#, c-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "চিস্টেম %d ছেকেণ্ডসমূহৰ পিছত স্বচালিতভাৱে পাৱাৰ অফ হব। "
msgstr[0] "চিস্টেম %d ছেকেণ্ড পিছত স্বচালিতভাৱে পাৱাৰ অফ হব। "
msgstr[1] "চিস্টেম %d ছেকেণ্ডৰ পিছত স্বচালিতভাৱে বন্ধ হব। "
#: ../js/ui/endSessionDialog.js:88
@ -643,27 +651,28 @@ msgstr "এই অনুপ্ৰয়োগসমূহক প্ৰস্থা
#, c-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "চিস্টেম %d ছেকেণ্ডসমূহত স্বচালিতভাৱে পুনৰাম্ভ হব।"
msgstr[0] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।"
msgstr[1] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।"
#: ../js/ui/endSessionDialog.js:105
msgid "Restarting the system."
msgstr "চিস্টেম পুনৰাম্ভ কৰা হৈ আছে।"
#: ../js/ui/extensionSystem.js:403
#: ../js/ui/extensionSystem.js:404
msgid "Install"
msgstr "ইনস্টল কৰক"
#: ../js/ui/extensionSystem.js:407
#: ../js/ui/extensionSystem.js:408
#, c-format
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "extensions.gnome.org -ৰ পৰা '%s' -ক ডাউনল'ড আৰু ইনস্টল কৰিব নে?"
msgstr "extensions.gnome.org ৰ পৰা '%s' ক ডাউনল'ড আৰু ইনস্টল কৰিব নে?"
#: ../js/ui/keyboard.js:327
msgid "tray"
msgstr "ট্ৰে"
#: ../js/ui/keyboard.js:544 ../js/ui/status/power.js:203
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
#: ../js/ui/status/power.js:203
msgid "Keyboard"
msgstr "কিবৰ্ড"
@ -675,51 +684,51 @@ msgstr "পাছৱাৰ্ড:"
msgid "Type again:"
msgstr "আকৌ টাইপ কৰক:"
#: ../js/ui/lookingGlass.js:725
#: ../js/ui/lookingGlass.js:732
msgid "No extensions installed"
msgstr "কোনো সম্প্ৰসাৰন ইনস্টল কৰা হোৱা নাই"
#. Translators: argument is an extension UUID.
#: ../js/ui/lookingGlass.js:779
#: ../js/ui/lookingGlass.js:786
#, c-format
msgid "%s has not emitted any errors."
msgstr "%s এ কোনো ত্ৰুটি প্ৰেৰণ কৰা নাই।"
#: ../js/ui/lookingGlass.js:785
#: ../js/ui/lookingGlass.js:792
msgid "Hide Errors"
msgstr "ত্ৰুটিসমূহ লুকুৱাওক"
#: ../js/ui/lookingGlass.js:789 ../js/ui/lookingGlass.js:840
#: ../js/ui/lookingGlass.js:796 ../js/ui/lookingGlass.js:847
msgid "Show Errors"
msgstr "ত্ৰুটিসমূহ দেখুৱাওক"
#: ../js/ui/lookingGlass.js:798
#: ../js/ui/lookingGlass.js:805
msgid "Enabled"
msgstr "সামৰ্থবান কৰা আছে"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:801 ../src/gvc/gvc-mixer-control.c:1093
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
msgid "Disabled"
msgstr "অসামৰ্থবান কৰা আছে"
#: ../js/ui/lookingGlass.js:803
#: ../js/ui/lookingGlass.js:810
msgid "Error"
msgstr "ত্ৰুটি"
#: ../js/ui/lookingGlass.js:805
#: ../js/ui/lookingGlass.js:812
msgid "Out of date"
msgstr "পুৰনি"
#: ../js/ui/lookingGlass.js:807
#: ../js/ui/lookingGlass.js:814
msgid "Downloading"
msgstr "ডাউনলড কৰা হৈ আছে"
msgstr "ডাউনল'ড কৰা হৈ আছে"
#: ../js/ui/lookingGlass.js:828
#: ../js/ui/lookingGlass.js:835
msgid "View Source"
msgstr "উৎস দৰ্শন কৰক"
#: ../js/ui/lookingGlass.js:834
#: ../js/ui/lookingGlass.js:841
msgid "Web Page"
msgstr "ৱেব পৃষ্ঠা"
@ -759,7 +768,7 @@ msgstr "পাছৱাৰ্ড: "
#. static WEP
#: ../js/ui/networkAgent.js:248
msgid "Key: "
msgstr "চাবি: "
msgstr "কি': "
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
@ -774,7 +783,7 @@ msgstr "পৰিচয়: "
#: ../js/ui/networkAgent.js:288
msgid "Private key password: "
msgstr "ব্যক্তিগত চাবি পাছৱাৰ্ড: "
msgstr "ব্যক্তিগত কি' পাছৱাৰ্ড: "
#: ../js/ui/networkAgent.js:300
msgid "Service: "
@ -790,7 +799,7 @@ msgid ""
"Passwords or encryption keys are required to access the wireless network '%"
"s'."
msgstr ""
"বেতাঁৰ নেটৱাৰ্ক '%s' অভিগম কৰিবলে পাছৱাৰ্ডসমূহ অথবা ইনক্ৰিপষণ চাবিসমূহৰ প্ৰয়োজন।"
"বেতাঁৰ নেটৱাৰ্ক '%s' অভিগম কৰিবলে পাছৱাৰ্ডসমূহ অথবা ইনক্ৰিপষণ কি'সমূহৰ প্ৰয়োজন।"
#: ../js/ui/networkAgent.js:334
msgid "Wired 802.1X authentication"
@ -806,11 +815,11 @@ msgstr "DSL প্ৰমাণীকৰণ"
#: ../js/ui/networkAgent.js:348
msgid "PIN code required"
msgstr "PIN কডৰ প্ৰয়োজন"
msgstr "PIN ক'ডৰ প্ৰয়োজন"
#: ../js/ui/networkAgent.js:349
msgid "PIN code is needed for the mobile broadband device"
msgstr "মবাইল ব্ৰডবেণ্ড সেৱাৰ বাবে PIN কডৰ প্ৰয়োজন"
msgstr "মবাইল ব্ৰডবেণ্ড সেৱাৰ বাবে PIN ক'ডৰ প্ৰয়োজন"
#: ../js/ui/networkAgent.js:350
msgid "PIN: "
@ -823,7 +832,7 @@ msgstr "মবাইল ব্ৰডবেণ্ড নেটৱাৰ্ক প
#: ../js/ui/networkAgent.js:357
#, c-format
msgid "A password is required to connect to '%s'."
msgstr "'%s' -লে সংযোগ কৰিবলে এটা পাছৱাৰ্ডৰ প্ৰয়োজন।"
msgstr "'%s' লে সংযোগ কৰিবলে এটা পাছৱাৰ্ডৰ প্ৰয়োজন।"
#: ../js/ui/overview.js:90
msgid "Undo"
@ -847,17 +856,17 @@ msgstr "অনুপ্ৰয়োগসমূহ"
msgid "Dash"
msgstr "ডেশ"
#: ../js/ui/panel.js:591
#: ../js/ui/panel.js:592
msgid "Quit"
msgstr "প্ৰস্থান কৰক"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:623
#: ../js/ui/panel.js:624
msgid "Activities"
msgstr "কাৰ্য্যসমূহ"
#: ../js/ui/panel.js:998
#: ../js/ui/panel.js:999
msgid "Top Bar"
msgstr "উপৰৰ বাৰ"
@ -872,7 +881,7 @@ msgstr "পুনৰ চেষ্টা কৰক"
#: ../js/ui/placeDisplay.js:156
msgid "Connect to..."
msgstr "-লে সংযোগ কৰক..."
msgstr "লে সংযোগ কৰক..."
#: ../js/ui/placeDisplay.js:367
msgid "PLACES & DEVICES"
@ -909,13 +918,13 @@ msgstr "toggle-switch-us"
#: ../js/ui/runDialog.js:205
msgid "Please enter a command:"
msgstr "অনুগ্ৰহ কৰি এটা কমান্ড সোমাওক:"
msgstr "অনুগ্ৰহ কৰি এটা কমান্ড সুমুৱাওক:"
#: ../js/ui/searchDisplay.js:331
#: ../js/ui/searchDisplay.js:332
msgid "Searching..."
msgstr "বিচৰা হৈছে..."
msgstr "সন্ধান কৰা হৈছে..."
#: ../js/ui/searchDisplay.js:413
#: ../js/ui/searchDisplay.js:415
msgid "No matching results."
msgstr "কোনো মিল থকা ফলাফল নাই।"
@ -960,19 +969,19 @@ msgstr "চক্ষ সতৰ্কবাৰ্তাসমূহ"
#: ../js/ui/status/accessibility.js:70
msgid "Sticky Keys"
msgstr "স্টিকি চাবিসমূহ"
msgstr "স্টিকি কি'সমূহ"
#: ../js/ui/status/accessibility.js:73
msgid "Slow Keys"
msgstr "মন্থৰ চাবিসমূহ"
msgstr "মন্থৰ কি'সমূহ"
#: ../js/ui/status/accessibility.js:76
msgid "Bounce Keys"
msgstr "বাউঞ্চ চাবিসমূহ"
msgstr "বাউঞ্চ কি'সমূহ"
#: ../js/ui/status/accessibility.js:79
msgid "Mouse Keys"
msgstr "মাউচ চাবিসমূহ"
msgstr "মাউছ কি'সমূহ"
#: ../js/ui/status/accessibility.js:83
msgid "Universal Access Settings"
@ -1049,7 +1058,7 @@ msgstr "কিবৰ্ড সংহতিসমূহ"
#: ../js/ui/status/bluetooth.js:271
msgid "Mouse Settings"
msgstr "মাউ আৰু টাচপেড সংহতিসমূহ"
msgstr "মাউ আৰু টাচপেড সংহতিসমূহ"
#: ../js/ui/status/bluetooth.js:276 ../js/ui/status/volume.js:59
msgid "Sound Settings"
@ -1058,12 +1067,12 @@ msgstr "শব্দ সংহতিসমূহ"
#: ../js/ui/status/bluetooth.js:372
#, c-format
msgid "Authorization request from %s"
msgstr "%s -ৰ পৰা প্ৰমাণীকৰণ অনুৰোধ"
msgstr "%s ৰ পৰা প্ৰমাণীকৰণ অনুৰোধ"
#: ../js/ui/status/bluetooth.js:378
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "ডিভাইচ %s -এ সেৱা '%s' -লে অভিগম বিচাৰে"
msgstr "ডিভাইচ %s এ সেৱা '%s' লে অভিগম বিচাৰে"
#: ../js/ui/status/bluetooth.js:380
msgid "Always grant access"
@ -1073,24 +1082,24 @@ msgstr "সদায় অভিগম প্ৰদান কৰক"
msgid "Grant this time only"
msgstr "কেৱল এইবাৰৰ কাৰণে প্ৰদান কৰক"
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1091
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
msgid "Reject"
msgstr "নাকচ কৰক"
#: ../js/ui/status/bluetooth.js:408
#, c-format
msgid "Pairing confirmation for %s"
msgstr "%s -ৰ কাৰণে যোৰ প্ৰতিশ্ৰুতি"
msgstr "%s ৰ কাৰণে যোৰ প্ৰতিশ্ৰুতি"
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:444
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "ডিভাইচ %s -এ এই কমপিউটাৰৰ লগত সংযোগ কৰিব বিচাৰে"
msgstr "ডিভাইচ %s এ এই কমপিউটাৰৰ লগত সংযোগ কৰিব বিচাৰে"
#: ../js/ui/status/bluetooth.js:415
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "অনুগ্ৰহ কৰি সুনিশ্চিত কৰক যে PIN '%s' ডিভাইচত থকাটোৰ লগত মিল খায়।"
msgstr "অনুগ্ৰহ কৰি সুনিশ্চিত কৰক যে PIN '%s' ডিভাইচত থকাটোৰ সৈতে মিল খায়।"
#: ../js/ui/status/bluetooth.js:417
msgid "Matches"
@ -1103,11 +1112,11 @@ msgstr "মিল নাখায়"
#: ../js/ui/status/bluetooth.js:437
#, c-format
msgid "Pairing request for %s"
msgstr "%s -ৰ কাৰণে যোৰ অনুৰোধ"
msgstr "%s ৰ কাৰণে যোৰ অনুৰোধ"
#: ../js/ui/status/bluetooth.js:445
msgid "Please enter the PIN mentioned on the device."
msgstr "অনুগ্ৰহ কৰি ডিভাইচত উল্লেখ কৰা PIN সোমাওক।"
msgstr "অনুগ্ৰহ কৰি ডিভাইচত উল্লেখ কৰা PIN সুমুৱাওক।"
#: ../js/ui/status/bluetooth.js:461
msgid "OK"
@ -1261,7 +1270,7 @@ msgstr "অনুমান কৰা হৈ আছে..."
msgid "%d hour remaining"
msgid_plural "%d hours remaining"
msgstr[0] "%d ঘন্টা অৱশিষ্ট"
msgstr[1] "%d ঘন্টাসমূহ অৱশিষ্ট"
msgstr[1] "%d ঘন্টা অৱশিষ্ট"
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
#: ../js/ui/status/power.js:108
@ -1273,20 +1282,20 @@ msgstr "%d %s %d %s অৱশিষ্ট"
msgid "hour"
msgid_plural "hours"
msgstr[0] "ঘন্টা"
msgstr[1] "ঘন্টাসমূহ"
msgstr[1] "ঘন্টা"
#: ../js/ui/status/power.js:110
msgid "minute"
msgid_plural "minutes"
msgstr[0] "মিনিট"
msgstr[1] "মিনিটসমূহ"
msgstr[1] "মিনিট"
#: ../js/ui/status/power.js:113
#, c-format
msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
msgstr[0] "%d মিনিট অৱশিষ্ট"
msgstr[1] "%d মিনিটসমূহ অৱশিষ্ট"
msgstr[1] "%d মিনিট অৱশিষ্ট"
#: ../js/ui/status/power.js:116 ../js/ui/status/power.js:186
#, c-format
@ -1337,7 +1346,7 @@ msgstr "কমপিউটাৰ"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:25 ../js/ui/status/volume.js:39
msgid "Volume"
msgstr "আয়তন"
msgstr "ভলিউম"
#: ../js/ui/status/volume.js:51
msgid "Microphone"
@ -1390,71 +1399,71 @@ 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:887
#: ../js/ui/telepathyClient.js:889
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "<b>%X</b> on <b>%A</b> -ত পঠোৱা হৈছে"
msgstr "<b>%X</b> on <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:893
#: ../js/ui/telepathyClient.js:895
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "<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:898
#: ../js/ui/telepathyClient.js:900
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "<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:940
#: ../js/ui/telepathyClient.js:942
#, 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:1042
#: ../js/ui/telepathyClient.js:1044
#, c-format
msgid "Invitation to %s"
msgstr "%s -লে নিমন্ত্ৰণ"
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:1050
#: ../js/ui/telepathyClient.js:1052
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s -এ আপোনাক %s -ত অংশগ্ৰহণ কৰিবলে আমন্ত্ৰণ জনাইছে"
msgstr "%s এ আপোনাক %s ত অংশগ্ৰহণ কৰিবলে আমন্ত্ৰণ জনাইছে"
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
#: ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1054 ../js/ui/telepathyClient.js:1133
#: ../js/ui/telepathyClient.js:1231
msgid "Decline"
msgstr "নাকচ কৰক"
#: ../js/ui/telepathyClient.js:1053 ../js/ui/telepathyClient.js:1132
#: ../js/ui/telepathyClient.js:1230
#: ../js/ui/telepathyClient.js:1055 ../js/ui/telepathyClient.js:1134
#: ../js/ui/telepathyClient.js:1232
msgid "Accept"
msgstr "গ্ৰহন কৰক"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1083
#: ../js/ui/telepathyClient.js:1085
#, c-format
msgid "Video call from %s"
msgstr "%s -ৰ পৰা ভিডিঅ' কল"
msgstr "%s ৰ পৰা ভিডিঅ' কল"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1086
#: ../js/ui/telepathyClient.js:1088
#, c-format
msgid "Call from %s"
msgstr "%s - পৰা কল"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/telepathyClient.js:1093
#: ../js/ui/telepathyClient.js:1095
msgid "Answer"
msgstr "উত্তৰ"
@ -1463,107 +1472,107 @@ msgstr "উত্তৰ"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1125
#: ../js/ui/telepathyClient.js:1127
#, c-format
msgid "%s is sending you %s"
msgstr "%s -এ আপোনাক %s পঠাই আছে"
msgstr "%s এ আপোনাক %s পঠাই আছে"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1194
#: ../js/ui/telepathyClient.js:1196
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "আপুনি কেতিয়া অনলাইন আছে চাবলে %s -এ অনুমতি বিচাৰিব"
msgstr "আপুনি কেতিয়া অনলাইন আছে চাবলে %s এ অনুমতি বিচাৰিব"
#: ../js/ui/telepathyClient.js:1287
#: ../js/ui/telepathyClient.js:1289
msgid "Network error"
msgstr "নেটৱাৰ্ক ত্ৰুটি"
#: ../js/ui/telepathyClient.js:1289
#: ../js/ui/telepathyClient.js:1291
msgid "Authentication failed"
msgstr "প্ৰমাণীকৰণ ব্যৰ্থ"
#: ../js/ui/telepathyClient.js:1291
#: ../js/ui/telepathyClient.js:1293
msgid "Encryption error"
msgstr "ইনক্ৰিপষণ ত্ৰুটি"
#: ../js/ui/telepathyClient.js:1293
#: ../js/ui/telepathyClient.js:1295
msgid "Certificate not provided"
msgstr "প্ৰমাণপত্ৰ প্ৰদান কৰা হোৱা নাই"
#: ../js/ui/telepathyClient.js:1295
#: ../js/ui/telepathyClient.js:1297
msgid "Certificate untrusted"
msgstr "প্ৰমাণপত্ৰক ভৰষা কৰিব নোৱাৰি"
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1299
msgid "Certificate expired"
msgstr "প্ৰমাণপত্ৰৰ অৱসান ঘটিছে"
#: ../js/ui/telepathyClient.js:1299
#: ../js/ui/telepathyClient.js:1301
msgid "Certificate not activated"
msgstr "প্ৰমাণপত্ৰ সক্ৰিয় কৰা হোৱা নাই"
#: ../js/ui/telepathyClient.js:1301
#: ../js/ui/telepathyClient.js:1303
msgid "Certificate hostname mismatch"
msgstr "প্ৰমাণপত্ৰ হস্টনাম অমিল"
#: ../js/ui/telepathyClient.js:1303
msgid "Certificate fingerprint mismatch"
msgstr "প্ৰমাণপত্ৰ ফিন্গাৰপ্ৰিন্ট অমিল"
#: ../js/ui/telepathyClient.js:1305
msgid "Certificate self-signed"
msgstr "প্ৰমাণপত্ৰ স্বস্বাক্ষৰীত"
msgid "Certificate fingerprint mismatch"
msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰিন্ট অমিল"
#: ../js/ui/telepathyClient.js:1307
msgid "Certificate self-signed"
msgstr "প্ৰমাণপত্ৰ স্ব-স্বাক্ষৰীত"
#: ../js/ui/telepathyClient.js:1309
msgid "Status is set to offline"
msgstr "অৱস্থা অফলাইনলে সংহতি কৰা হৈছে"
#: ../js/ui/telepathyClient.js:1309
#: ../js/ui/telepathyClient.js:1311
msgid "Encryption is not available"
msgstr "ইনক্ৰিপষণ উপলব্ধ নহয়"
#: ../js/ui/telepathyClient.js:1311
#: ../js/ui/telepathyClient.js:1313
msgid "Certificate is invalid"
msgstr "প্ৰমাণপত্ৰ অবৈধ"
#: ../js/ui/telepathyClient.js:1313
#: ../js/ui/telepathyClient.js:1315
msgid "Connection has been refused"
msgstr "সংযোগ নাকচ কৰা হৈছে"
#: ../js/ui/telepathyClient.js:1315
#: ../js/ui/telepathyClient.js:1317
msgid "Connection can't be established"
msgstr "সংযোগ স্থাপন কৰিব নোৱাৰি"
#: ../js/ui/telepathyClient.js:1317
#: ../js/ui/telepathyClient.js:1319
msgid "Connection has been lost"
msgstr "সংযোগ হেৰাইছে"
#: ../js/ui/telepathyClient.js:1319
#: ../js/ui/telepathyClient.js:1321
msgid "This account is already connected to the server"
msgstr "এই একাওন্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত"
#: ../js/ui/telepathyClient.js:1321
#: ../js/ui/telepathyClient.js:1323
msgid "Connection has been replaced by a new connection using the same resource"
msgstr "সংযোগক একে সম্পদ ব্যৱহাৰ কৰি এটা নতুন সংযোগৰে প্ৰতিস্থাপন কৰা হৈছে"
#: ../js/ui/telepathyClient.js:1323
#: ../js/ui/telepathyClient.js:1325
msgid "The account already exists on the server"
msgstr "একাওন্ট ইতিমধ্যে চাৰ্ভাৰত উপস্থিত"
#: ../js/ui/telepathyClient.js:1325
#: ../js/ui/telepathyClient.js:1327
msgid "Server is currently too busy to handle the connection"
msgstr "চাৰ্ভাৰ সংযোগ ব্যৱস্থাপনা কৰিবলে বৰ্তমানে অতি ব্যস্ত"
#: ../js/ui/telepathyClient.js:1327
#: ../js/ui/telepathyClient.js:1329
msgid "Certificate has been revoked"
msgstr "প্ৰমাণপত্ৰ প্ৰত্যাহাৰ কৰা হৈছে"
#: ../js/ui/telepathyClient.js:1329
#: ../js/ui/telepathyClient.js:1331
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"প্ৰমাণপত্ৰয় এটা অসুৰক্ষিত চিফাৰ এলগৰিথম ব্যৱহাৰ কৰে অথবা ক্ৰিপ্টোগ্ৰাফিয়ভাৱে দুৰ্বল"
#: ../js/ui/telepathyClient.js:1331
#: ../js/ui/telepathyClient.js:1333
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1571,26 +1580,26 @@ msgstr ""
"চাৰ্ভাৰ প্ৰমাণপত্ৰৰ দৈৰ্ঘ, অথবা চাৰ্ভাৰ প্ৰমাণপত্ৰ শৃংখলৰ গভীৰতা, ক্ৰিপ্টোগ্ৰাফী "
"লাইব্ৰেৰীয়ে প্ৰণয়ন কৰা সীমাসমূহত অতিক্ৰম কৰে"
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1335
msgid "Internal error"
msgstr "অভ্যন্তৰীক ত্ৰুটি"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1343
#: ../js/ui/telepathyClient.js:1345
#, c-format
msgid "Connection to %s failed"
msgstr "%s -লে সংযোগ ব্যৰ্থ"
msgstr "%s লে সংযোগ ব্যৰ্থ"
#: ../js/ui/telepathyClient.js:1352
#: ../js/ui/telepathyClient.js:1354
msgid "Reconnect"
msgstr "পুনৰ সংযোগ কৰক"
#: ../js/ui/telepathyClient.js:1353
#: ../js/ui/telepathyClient.js:1355
msgid "Edit account"
msgstr "একাওন্ট সম্পাদন কৰক"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1401
msgid "Unknown reason"
msgstr "অজ্ঞাত কাৰণ"
@ -1608,7 +1617,7 @@ msgstr "উপলব্ধ নাই"
#: ../js/ui/userMenu.js:595 ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:669
msgid "Power Off..."
msgstr ""
msgstr "পাৱাৰ অফ"
#: ../js/ui/userMenu.js:631
msgid "Notifications"
@ -1628,11 +1637,11 @@ msgstr "পৰ্দা লক কৰক"
#: ../js/ui/userMenu.js:655
msgid "Switch User"
msgstr "ব্যৱহাৰকাৰী অদল বদল কৰক"
msgstr "ব্যৱহাৰকাৰী পৰিবৰ্তন কৰক"
#: ../js/ui/userMenu.js:660
msgid "Log Out..."
msgstr "লগ আউট..."
msgstr "লগ আউট কৰক..."
#: ../js/ui/userMenu.js:688
msgid "Your chat status will be set to busy"
@ -1653,7 +1662,7 @@ msgstr ""
#. characters.
#: ../js/ui/viewSelector.js:113
msgid "Type to search..."
msgstr "বিচাৰিবলে টাইপ কৰক..."
msgstr "সন্ধান কৰিবলে টাইপ কৰক..."
#: ../js/ui/viewSelector.js:131 ../src/shell-util.c:252
msgid "Search"
@ -1684,7 +1693,7 @@ msgstr "'%s' প্ৰস্তুত"
#. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1100
#: ../src/gvc/gvc-mixer-control.c:1089
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@ -1693,14 +1702,14 @@ msgstr[1] "%u আউটপুটসমূহ"
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1110
#: ../src/gvc/gvc-mixer-control.c:1099
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u ইনপুট"
msgstr[1] "%u ইনপুটসমূহ"
#: ../src/gvc/gvc-mixer-control.c:1408
#: ../src/gvc/gvc-mixer-control.c:1397
msgid "System Sounds"
msgstr "চিস্টেম শব্দসমূহ"
@ -1766,7 +1775,7 @@ msgstr "%1$s: %2$s"
#~ msgstr "পাছৱাৰ্ড দেখুৱাওক"
#~ msgid "%s has finished starting"
#~ msgstr "%s -এ আৰম্ভ কৰা সমাপ্ত কৰিছে"
#~ msgstr "%s এ আৰম্ভ কৰা সমাপ্ত কৰিছে"
#~ msgid "Home Folder"
#~ msgstr "ঘৰ ফোল্ডাৰ"

547
po/ca.po

File diff suppressed because it is too large Load Diff

208
po/da.po
View File

@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-03-22 15:47+0100\n"
"PO-Revision-Date: 2012-03-22 13:02+0100\n"
"POT-Creation-Date: 2013-10-07 22:45+0200\n"
"PO-Revision-Date: 2013-10-06 15:29+0200\n"
"Last-Translator: Kris Thomsen <lakristho@gmail.com>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@ -137,34 +137,42 @@ msgid "If true, display the ISO week date in the calendar."
msgstr "Hvis sand vises ISO-ugenummeret i kalenderen."
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Keybinding to open the application menu"
msgstr "Tastebinding til at åbne programmenuen"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid "Keybinding to open the application menu."
msgstr "Tastebinding til at åbne programmenuen."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "Which keyboard to use"
msgstr "Hvilket tastatur bruges"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "The type of keyboard to use."
msgstr "Tastaturtypen som bruges."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Show time with seconds"
msgstr "Vis tid med sekunder"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "If true, display seconds in time."
msgstr "Hvis sand vises sekunder i klokkeslæt."
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "Show date in clock"
msgstr "Vis dato i uret"
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "If true, display date in the clock, in addition to time."
msgstr "Hvis sand vises datoen i uret, som tillæg til tiden."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Framerate used for recording screencasts."
msgstr "Billedfrekvens brugt til skærmoptagelser."
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -172,11 +180,11 @@ msgstr ""
"Billedfrekvensen på den endelige skærmoptagelse, optaget af GNOME-Shells "
"skærmoptager i billeder-per-sekund."
#: ../data/org.gnome.shell.gschema.xml.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Datakanalen for Gstreamer bruges til indkodning af skærmoptagelsen"
#: ../data/org.gnome.shell.gschema.xml.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -201,11 +209,11 @@ msgstr ""
"webmmux\" og optager i WEBM-formatet med VP8-codec'et. %T bruges som "
"pladsholder for et gæt om det optimale trådantal på systemet."
#: ../data/org.gnome.shell.gschema.xml.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.h:29
msgid "File extension used for storing the screencast"
msgstr "Filendelse til at gemme skærmoptagelser"
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.h:30
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 "
@ -229,40 +237,40 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Vælg en udvidelse at konfigurere ved hjælp af kombinationsboksen ovenfor."
#: ../js/gdm/loginDialog.js:624
#: ../js/gdm/loginDialog.js:627
msgid "Session..."
msgstr "Session..."
#: ../js/gdm/loginDialog.js:786
#: ../js/gdm/loginDialog.js:789
msgctxt "title"
msgid "Sign In"
msgstr "Log ind"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:831
#: ../js/gdm/loginDialog.js:834
msgid "(or swipe finger)"
msgstr "(eller indlæs fingeraftryk)"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:852
#: ../js/gdm/loginDialog.js:855
msgid "Not listed?"
msgstr "Ikke listet?"
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:401
#: ../js/ui/extensionSystem.js:399 ../js/ui/networkAgent.js:153
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
msgid "Cancel"
msgstr "Annullér"
#: ../js/gdm/loginDialog.js:1025
#: ../js/gdm/loginDialog.js:1028
msgctxt "button"
msgid "Sign In"
msgstr "Log ind"
#: ../js/gdm/loginDialog.js:1377
#: ../js/gdm/loginDialog.js:1380
msgid "Login Window"
msgstr "Indlogningsvindue"
@ -660,11 +668,11 @@ msgstr[1] "Systemet vil genstarte automatisk om %d sekunder."
msgid "Restarting the system."
msgstr "Genstarter systemet."
#: ../js/ui/extensionSystem.js:403
#: ../js/ui/extensionSystem.js:404
msgid "Install"
msgstr "Installér"
#: ../js/ui/extensionSystem.js:407
#: ../js/ui/extensionSystem.js:408
#, c-format
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Hent og installér \"%s\" fra extensions.gnome.org?"
@ -673,7 +681,8 @@ msgstr "Hent og installér \"%s\" fra extensions.gnome.org?"
msgid "tray"
msgstr "statusfelt"
#: ../js/ui/keyboard.js:544 ../js/ui/status/power.js:203
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
#: ../js/ui/status/power.js:203
msgid "Keyboard"
msgstr "Tastatur"
@ -685,51 +694,51 @@ msgstr "Adgangskode:"
msgid "Type again:"
msgstr "Indtast igen:"
#: ../js/ui/lookingGlass.js:725
#: ../js/ui/lookingGlass.js:732
msgid "No extensions installed"
msgstr "Ingen udvidelser er installeret"
#. Translators: argument is an extension UUID.
#: ../js/ui/lookingGlass.js:779
#: ../js/ui/lookingGlass.js:786
#, c-format
msgid "%s has not emitted any errors."
msgstr "%s er ikke kommet med nogen fejl."
#: ../js/ui/lookingGlass.js:785
#: ../js/ui/lookingGlass.js:792
msgid "Hide Errors"
msgstr "Skjul fejl"
#: ../js/ui/lookingGlass.js:789 ../js/ui/lookingGlass.js:840
#: ../js/ui/lookingGlass.js:796 ../js/ui/lookingGlass.js:847
msgid "Show Errors"
msgstr "Vis fejl"
#: ../js/ui/lookingGlass.js:798
#: ../js/ui/lookingGlass.js:805
msgid "Enabled"
msgstr "Aktiveret"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:801 ../src/gvc/gvc-mixer-control.c:1093
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
msgid "Disabled"
msgstr "Deaktiveret"
#: ../js/ui/lookingGlass.js:803
#: ../js/ui/lookingGlass.js:810
msgid "Error"
msgstr "Fejl"
#: ../js/ui/lookingGlass.js:805
#: ../js/ui/lookingGlass.js:812
msgid "Out of date"
msgstr "Udløbet"
#: ../js/ui/lookingGlass.js:807
#: ../js/ui/lookingGlass.js:814
msgid "Downloading"
msgstr "Henter"
#: ../js/ui/lookingGlass.js:828
#: ../js/ui/lookingGlass.js:835
msgid "View Source"
msgstr "Vis kilde"
#: ../js/ui/lookingGlass.js:834
#: ../js/ui/lookingGlass.js:841
msgid "Web Page"
msgstr "Webside"
@ -858,17 +867,17 @@ msgstr "Programmer"
msgid "Dash"
msgstr "Favoritområde"
#: ../js/ui/panel.js:591
#: ../js/ui/panel.js:592
msgid "Quit"
msgstr "Afslut"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:623
#: ../js/ui/panel.js:624
msgid "Activities"
msgstr "Aktiviteter"
#: ../js/ui/panel.js:998
#: ../js/ui/panel.js:999
msgid "Top Bar"
msgstr "Toppanel"
@ -926,7 +935,7 @@ msgstr "Indtast en kommando:"
msgid "Searching..."
msgstr "Søger..."
#: ../js/ui/searchDisplay.js:414
#: ../js/ui/searchDisplay.js:415
msgid "No matching results."
msgstr "Ingen resultater fundet."
@ -946,7 +955,7 @@ msgstr "Vis tekst"
msgid "Hide Text"
msgstr "Skjul tekst"
#: ../js/ui/shellMountOperation.js:271
#: ../js/ui/shellMountOperation.js:280
msgid "Wrong password, please try again"
msgstr "Forkert adgangskode, forsøg venligst igen"
@ -1084,7 +1093,7 @@ msgstr "Giv altid adgang"
msgid "Grant this time only"
msgstr "Giv kun lov denne gang"
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1091
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1106
msgid "Reject"
msgstr "Afvis"
@ -1356,44 +1365,44 @@ msgstr "Mikrofon"
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/telepathyClient.js:220
#: ../js/ui/telepathyClient.js:226
msgid "Invitation"
msgstr "Invitation"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:271
#: ../js/ui/telepathyClient.js:284
msgid "Call"
msgstr "Opkald"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:287
#: ../js/ui/telepathyClient.js:300
msgid "File Transfer"
msgstr "Filoverførsel"
#: ../js/ui/telepathyClient.js:369
#: ../js/ui/telepathyClient.js:382
msgid "Subscription request"
msgstr "Godkendelsesforespørgsel"
#: ../js/ui/telepathyClient.js:405
#: ../js/ui/telepathyClient.js:418
msgid "Connection error"
msgstr "Forbindelsesfejl"
#: ../js/ui/telepathyClient.js:663
#: ../js/ui/telepathyClient.js:676
#, c-format
msgid "%s is online."
msgstr "%s er online."
#: ../js/ui/telepathyClient.js:667
#: ../js/ui/telepathyClient.js:680
#, c-format
msgid "%s is offline."
msgstr "%s er offline."
#: ../js/ui/telepathyClient.js:671
#: ../js/ui/telepathyClient.js:684
#, c-format
msgid "%s is away."
msgstr "%s er ikke til stede."
#: ../js/ui/telepathyClient.js:674
#: ../js/ui/telepathyClient.js:687
#, c-format
msgid "%s is busy."
msgstr "%s er optaget."
@ -1401,35 +1410,35 @@ msgstr "%s er optaget."
#. 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:887
#: ../js/ui/telepathyClient.js:902
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Sendt <b>%A</b> kl. <b>%H:%M</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:893
#: ../js/ui/telepathyClient.js:908
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Sendt <b>%A</b> den <b>%e. %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:898
#: ../js/ui/telepathyClient.js:913
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Sendt <b>%A</b> den <b>%e. %B</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:940
#: ../js/ui/telepathyClient.js:955
#, c-format
msgid "%s is now known as %s"
msgstr "%s kalder sig nu %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1042
#: ../js/ui/telepathyClient.js:1057
#, c-format
msgid "Invitation to %s"
msgstr "Invitation til %s"
@ -1437,35 +1446,35 @@ msgstr "Invitation til %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:1050
#: ../js/ui/telepathyClient.js:1065
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s inviterer dig til at deltage i %s"
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
#: ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1067 ../js/ui/telepathyClient.js:1146
#: ../js/ui/telepathyClient.js:1244
msgid "Decline"
msgstr "Afvis"
#: ../js/ui/telepathyClient.js:1053 ../js/ui/telepathyClient.js:1132
#: ../js/ui/telepathyClient.js:1230
#: ../js/ui/telepathyClient.js:1068 ../js/ui/telepathyClient.js:1147
#: ../js/ui/telepathyClient.js:1245
msgid "Accept"
msgstr "Acceptér"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1083
#: ../js/ui/telepathyClient.js:1098
#, c-format
msgid "Video call from %s"
msgstr "Videoopkald fra %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1086
#: ../js/ui/telepathyClient.js:1101
#, c-format
msgid "Call from %s"
msgstr "Opkald fra %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/telepathyClient.js:1093
#: ../js/ui/telepathyClient.js:1108
msgid "Answer"
msgstr "Svar"
@ -1474,111 +1483,111 @@ msgstr "Svar"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1125
#: ../js/ui/telepathyClient.js:1140
#, c-format
msgid "%s is sending you %s"
msgstr "%s sender dig %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1194
#: ../js/ui/telepathyClient.js:1209
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s vil gerne have tilladelse til at se, når du er online"
#: ../js/ui/telepathyClient.js:1287
#: ../js/ui/telepathyClient.js:1302
msgid "Network error"
msgstr "Netværksfejl"
#: ../js/ui/telepathyClient.js:1289
#: ../js/ui/telepathyClient.js:1304
msgid "Authentication failed"
msgstr "Godkendelse mislykkedes"
#: ../js/ui/telepathyClient.js:1291
#: ../js/ui/telepathyClient.js:1306
msgid "Encryption error"
msgstr "Krypteringsfejl"
#: ../js/ui/telepathyClient.js:1293
#: ../js/ui/telepathyClient.js:1308
msgid "Certificate not provided"
msgstr "Certifikat ikke angivet"
#: ../js/ui/telepathyClient.js:1295
#: ../js/ui/telepathyClient.js:1310
msgid "Certificate untrusted"
msgstr "Utroværdigt certifikat"
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1312
msgid "Certificate expired"
msgstr "Certifikat udløbet"
#: ../js/ui/telepathyClient.js:1299
#: ../js/ui/telepathyClient.js:1314
msgid "Certificate not activated"
msgstr "Certifikat ikke aktiveret"
#: ../js/ui/telepathyClient.js:1301
#: ../js/ui/telepathyClient.js:1316
msgid "Certificate hostname mismatch"
msgstr "Certifikat-værtsnavn stemmer ikke"
#: ../js/ui/telepathyClient.js:1303
#: ../js/ui/telepathyClient.js:1318
msgid "Certificate fingerprint mismatch"
msgstr "Certifikat-fingeraftryk stemmer ikke"
#: ../js/ui/telepathyClient.js:1305
#: ../js/ui/telepathyClient.js:1320
msgid "Certificate self-signed"
msgstr "Certifikat selv-underskrevet"
#: ../js/ui/telepathyClient.js:1307
#: ../js/ui/telepathyClient.js:1322
msgid "Status is set to offline"
msgstr "Status er angivet til offline"
#: ../js/ui/telepathyClient.js:1309
#: ../js/ui/telepathyClient.js:1324
msgid "Encryption is not available"
msgstr "Kryptering er ikke tilgængelig"
#: ../js/ui/telepathyClient.js:1311
#: ../js/ui/telepathyClient.js:1326
msgid "Certificate is invalid"
msgstr "Ugyldigt certifikat"
#: ../js/ui/telepathyClient.js:1313
#: ../js/ui/telepathyClient.js:1328
msgid "Connection has been refused"
msgstr "Forbindelse er blevet afvist"
#: ../js/ui/telepathyClient.js:1315
#: ../js/ui/telepathyClient.js:1330
msgid "Connection can't be established"
msgstr "Forbindelse kan ikke oprettes"
#: ../js/ui/telepathyClient.js:1317
#: ../js/ui/telepathyClient.js:1332
msgid "Connection has been lost"
msgstr "Forbindelse er mistet"
#: ../js/ui/telepathyClient.js:1319
#: ../js/ui/telepathyClient.js:1334
msgid "This account is already connected to the server"
msgstr "Denne konto er allerede forbundet til serveren"
#: ../js/ui/telepathyClient.js:1321
#: ../js/ui/telepathyClient.js:1336
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Forbindelsen er blevet erstattet af en ny forbindelse, som bruger samme "
"ressource"
#: ../js/ui/telepathyClient.js:1323
#: ../js/ui/telepathyClient.js:1338
msgid "The account already exists on the server"
msgstr "Kontoen findes allerede på serveren"
#: ../js/ui/telepathyClient.js:1325
#: ../js/ui/telepathyClient.js:1340
msgid "Server is currently too busy to handle the connection"
msgstr "Serveren er i øjeblikket for travl til at behandle forbindelsen"
#: ../js/ui/telepathyClient.js:1327
#: ../js/ui/telepathyClient.js:1342
msgid "Certificate has been revoked"
msgstr "Certifikat er blevet påberåbt"
#: ../js/ui/telepathyClient.js:1329
#: ../js/ui/telepathyClient.js:1344
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Certifikat bruger en usikker cipher-algoritme eller er kryptografisk svag"
#: ../js/ui/telepathyClient.js:1331
#: ../js/ui/telepathyClient.js:1346
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1586,26 +1595,26 @@ msgstr ""
"Længden på servercertifikatet, eller dybden af servercertifikat-kæden, "
"overskrider grænsen, som er fastsat af det kryptografiske-programbibliotek"
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1348
msgid "Internal error"
msgstr "Intern fejl"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1343
#: ../js/ui/telepathyClient.js:1358
#, c-format
msgid "Connection to %s failed"
msgstr "Forbindelse til %s mislykkedes"
#: ../js/ui/telepathyClient.js:1352
#: ../js/ui/telepathyClient.js:1367
msgid "Reconnect"
msgstr "Forbind igen"
#: ../js/ui/telepathyClient.js:1353
#: ../js/ui/telepathyClient.js:1368
msgid "Edit account"
msgstr "Redigér konto"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1414
msgid "Unknown reason"
msgstr "Ukendt årsag"
@ -1699,7 +1708,7 @@ msgstr "\"%s\" er klar"
#. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1100
#: ../src/gvc/gvc-mixer-control.c:1089
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@ -1708,22 +1717,22 @@ msgstr[1] "%u outputs"
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1110
#: ../src/gvc/gvc-mixer-control.c:1099
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u input"
msgstr[1] "%u inputs"
#: ../src/gvc/gvc-mixer-control.c:1408
#: ../src/gvc/gvc-mixer-control.c:1397
msgid "System Sounds"
msgstr "Systemlyde"
#: ../src/main.c:255
#: ../src/main.c:256
msgid "Print version"
msgstr "Udskriv version"
#: ../src/main.c:261
#: ../src/main.c:262
msgid "Mode used by GDM for login screen"
msgstr "Tilstand brugt af GDM til indlogningskærm"
@ -1774,6 +1783,9 @@ msgstr "Filsystem"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "calendar:MY"
#~ msgstr "calendar:MY"
#~ msgid "RECENT ITEMS"
#~ msgstr "SENESTE ELEMENTER"

746
po/el.po

File diff suppressed because it is too large Load Diff

208
po/es.po
View File

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-04-24 15:39+0000\n"
"PO-Revision-Date: 2012-04-25 12:09+0200\n"
"POT-Creation-Date: 2012-03-30 17:59+0000\n"
"PO-Revision-Date: 2012-04-01 19:11+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"MIME-Version: 1.0\n"
@ -141,44 +141,34 @@ msgid "Keybinding to open the application menu."
msgstr "Asociación de teclas para abrir el menú de la aplicación."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#| msgid "Keybinding to open the application menu"
msgid "Keybinding to toggle the screen recorder"
msgstr "Asociación de teclas cambiar el grabador de pantalla"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#| msgid "Keybinding to open the application menu."
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "Asociación de teclas para iniciar/detener el grabador de pantalla."
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Which keyboard to use"
msgstr "Qué teclado usar"
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "The type of keyboard to use."
msgstr "El tipo de teclado que usar."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Show time with seconds"
msgstr "Mostrar la hora con segundos"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "If true, display seconds in time."
msgstr "Si es cierta, muestra los segundos en la hora."
#: ../data/org.gnome.shell.gschema.xml.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "Show date in clock"
msgstr "Mostrar la fecha en el reloj"
#: ../data/org.gnome.shell.gschema.xml.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "If true, display date in the clock, in addition to time."
msgstr "Si es cierta, muestra la fecha en el reloj, además de la hora."
#: ../data/org.gnome.shell.gschema.xml.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Framerate used for recording screencasts."
msgstr "Tasa de fotogramas usada para grabar «screencast»."
#: ../data/org.gnome.shell.gschema.xml.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -186,11 +176,11 @@ msgstr ""
"La tasa de fotogramas de la grabación resultante grabada por el grabador de "
"«screencast» de GNOME Shell, en fotogramas por segundo."
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "La tubería de gstreamer usada para codificar el «screencast»"
#: ../data/org.gnome.shell.gschema.xml.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -205,22 +195,22 @@ msgid ""
"thread count on the system."
msgstr ""
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
"sintaxis usada para gst-launch. La tubería debería tener un sumidero («sink») "
"desconectado donde grabar el vídeo que se está grabando. Generalmente tendrá "
"un punto de origen desconectado; la salida de ese punto se escribirá en el "
"archivo de salida. Sin embargo, la tubería también puede tomar parte en su "
"propia salida; esto se puede usar para enviar la salida a un servidor "
"«icecast» a través de shout2send o similar. Cuando no está establecido o lo "
"está a un valor vacío, se usará la tubería predeterminada. Actualmente es "
"«'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux» y graba en WEBM "
"usando el códec VP8. Se usa %T como marcador de posición para el número de "
"hilos óptimos en el sistema."
"sintaxis usada para gst-launch. La tubería debería tener un sumidero "
"(«sink») desconectado donde grabar el vídeo que se está grabando. "
"Generalmente tendrá un punto de origen desconectado; la salida de ese punto "
"se escribirá en el archivo de salida. Sin embargo, la tubería también puede "
"tomar parte en su propia salida; esto se puede usar para enviar la salida a "
"un servidor «icecast» a través de shout2send o similar. Cuando no está "
"establecido o lo está a un valor vacío, se usará la tubería predeterminada. "
"Actualmente es «'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux» y "
"graba en WEBM usando el códec VP8. Se usa %T como marcador de posición para "
"el número de hilos óptimos en el sistema."
#: ../data/org.gnome.shell.gschema.xml.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.h:29
msgid "File extension used for storing the screencast"
msgstr "Extensión de archivo que usar para almacenar los «screencast»"
#: ../data/org.gnome.shell.gschema.xml.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.h:30
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 "
@ -244,40 +234,40 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Seleccione una extensión que configurar usando la caja combinada de arriba."
#: ../js/gdm/loginDialog.js:627
#: ../js/gdm/loginDialog.js:624
msgid "Session..."
msgstr "Sesión…"
#: ../js/gdm/loginDialog.js:789
#: ../js/gdm/loginDialog.js:786
msgctxt "title"
msgid "Sign In"
msgstr "Iniciar sesión"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:834
#: ../js/gdm/loginDialog.js:831
msgid "(or swipe finger)"
msgstr "(o pase el dedo)"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:855
#: ../js/gdm/loginDialog.js:852
msgid "Not listed?"
msgstr "¿No está en la lista?"
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:401
#: ../js/ui/extensionSystem.js:399 ../js/ui/networkAgent.js:153
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
msgid "Cancel"
msgstr "Cancelar"
#: ../js/gdm/loginDialog.js:1028
#: ../js/gdm/loginDialog.js:1025
msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:1380
#: ../js/gdm/loginDialog.js:1377
msgid "Login Window"
msgstr "Ventana de inicio de sesión"
@ -678,11 +668,11 @@ msgstr[1] "El sistema se reiniciará automáticamente en %d segundos."
msgid "Restarting the system."
msgstr "Reiniciando el sistema."
#: ../js/ui/extensionSystem.js:404
#: ../js/ui/extensionSystem.js:403
msgid "Install"
msgstr "Instalar"
#: ../js/ui/extensionSystem.js:408
#: ../js/ui/extensionSystem.js:407
#, c-format
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
@ -691,8 +681,7 @@ msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
msgid "tray"
msgstr "bandeja"
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
#: ../js/ui/status/power.js:203
#: ../js/ui/keyboard.js:544 ../js/ui/status/power.js:203
msgid "Keyboard"
msgstr "Teclado"
@ -728,7 +717,7 @@ msgstr "Activado"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1093
msgid "Disabled"
msgstr "Desactivado"
@ -753,7 +742,7 @@ msgid "Web Page"
msgstr "Página web"
#. Translators: this is a filename used for screencast recording
#: ../js/ui/main.js:121
#: ../js/ui/main.js:118
#, no-c-format
msgid "Screencast from %d %t"
msgstr "Screencast desde %d %t"
@ -816,8 +805,8 @@ msgstr "La red inalámbrica requiere autenticación"
#: ../js/ui/networkAgent.js:330
#, c-format
msgid ""
"Passwords or encryption keys are required to access the wireless network '%"
"s'."
"Passwords or encryption keys are required to access the wireless network "
"'%s'."
msgstr ""
"Se necesitan contraseñas o claves de cifrado para acceder a la red "
"inalámbrica «%s»."
@ -945,7 +934,7 @@ msgstr "Introduzca un comando:"
msgid "Searching..."
msgstr "Buscando…"
#: ../js/ui/searchDisplay.js:415
#: ../js/ui/searchDisplay.js:414
msgid "No matching results."
msgstr "No se encontró ningún resultado coincidente."
@ -1103,7 +1092,7 @@ msgstr "Conceder acceso siempre"
msgid "Grant this time only"
msgstr "Conceder sólo esta vez"
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1091
msgid "Reject"
msgstr "Rechazar"
@ -1420,35 +1409,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:889
#: ../js/ui/telepathyClient.js:887
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Enviado el <b>%A</b> a las <b>%H:%M</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:895
#: ../js/ui/telepathyClient.js:893
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Enviado el <b>%A</b>, <b>%d de %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:900
#: ../js/ui/telepathyClient.js:898
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b> de %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:942
#: ../js/ui/telepathyClient.js:940
#, c-format
msgid "%s is now known as %s"
msgstr "Ahora %s se llama %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1044
#: ../js/ui/telepathyClient.js:1042
#, c-format
msgid "Invitation to %s"
msgstr "Invitación a %s"
@ -1456,35 +1445,35 @@ msgstr "Invitación 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:1052
#: ../js/ui/telepathyClient.js:1050
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
#: ../js/ui/telepathyClient.js:1054 ../js/ui/telepathyClient.js:1133
#: ../js/ui/telepathyClient.js:1231
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
#: ../js/ui/telepathyClient.js:1229
msgid "Decline"
msgstr "Rechazar"
#: ../js/ui/telepathyClient.js:1055 ../js/ui/telepathyClient.js:1134
#: ../js/ui/telepathyClient.js:1232
#: ../js/ui/telepathyClient.js:1053 ../js/ui/telepathyClient.js:1132
#: ../js/ui/telepathyClient.js:1230
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1085
#: ../js/ui/telepathyClient.js:1083
#, c-format
msgid "Video call from %s"
msgstr "Videollamada de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1088
#: ../js/ui/telepathyClient.js:1086
#, c-format
msgid "Call from %s"
msgstr "Llamada de %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/telepathyClient.js:1095
#: ../js/ui/telepathyClient.js:1093
msgid "Answer"
msgstr "Responder"
@ -1493,112 +1482,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1127
#: ../js/ui/telepathyClient.js:1125
#, c-format
msgid "%s is sending you %s"
msgstr "%s le está enviando %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1196
#: ../js/ui/telepathyClient.js:1194
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicita permiso para ver cuándo está en línea"
#: ../js/ui/telepathyClient.js:1289
#: ../js/ui/telepathyClient.js:1287
msgid "Network error"
msgstr "Error de la red"
#: ../js/ui/telepathyClient.js:1291
#: ../js/ui/telepathyClient.js:1289
msgid "Authentication failed"
msgstr "Falló la autenticación"
#: ../js/ui/telepathyClient.js:1293
#: ../js/ui/telepathyClient.js:1291
msgid "Encryption error"
msgstr "Error de cifrado"
#: ../js/ui/telepathyClient.js:1295
#: ../js/ui/telepathyClient.js:1293
msgid "Certificate not provided"
msgstr "Certificado no proporcionado"
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1295
msgid "Certificate untrusted"
msgstr "No se confía en el certificado"
#: ../js/ui/telepathyClient.js:1299
#: ../js/ui/telepathyClient.js:1297
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/telepathyClient.js:1301
#: ../js/ui/telepathyClient.js:1299
msgid "Certificate not activated"
msgstr "Certificado no activado"
#: ../js/ui/telepathyClient.js:1303
#: ../js/ui/telepathyClient.js:1301
msgid "Certificate hostname mismatch"
msgstr "El nombre del servidor dle certificado no coincide"
#: ../js/ui/telepathyClient.js:1305
#: ../js/ui/telepathyClient.js:1303
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
#: ../js/ui/telepathyClient.js:1307
#: ../js/ui/telepathyClient.js:1305
msgid "Certificate self-signed"
msgstr "Certificado autofirmado"
#: ../js/ui/telepathyClient.js:1309
#: ../js/ui/telepathyClient.js:1307
msgid "Status is set to offline"
msgstr "El estado está establecido a «desconectado»"
#: ../js/ui/telepathyClient.js:1311
#: ../js/ui/telepathyClient.js:1309
msgid "Encryption is not available"
msgstr "El cifrado no está disponible"
#: ../js/ui/telepathyClient.js:1313
#: ../js/ui/telepathyClient.js:1311
msgid "Certificate is invalid"
msgstr "El certificado no es válido"
#: ../js/ui/telepathyClient.js:1315
#: ../js/ui/telepathyClient.js:1313
msgid "Connection has been refused"
msgstr "Se ha rechazado la conexión"
#: ../js/ui/telepathyClient.js:1317
#: ../js/ui/telepathyClient.js:1315
msgid "Connection can't be established"
msgstr "No se puede establecer la conexión"
#: ../js/ui/telepathyClient.js:1319
#: ../js/ui/telepathyClient.js:1317
msgid "Connection has been lost"
msgstr "Se ha perdido la conexión"
#: ../js/ui/telepathyClient.js:1321
#: ../js/ui/telepathyClient.js:1319
msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor"
#: ../js/ui/telepathyClient.js:1323
#: ../js/ui/telepathyClient.js:1321
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
#: ../js/ui/telepathyClient.js:1325
#: ../js/ui/telepathyClient.js:1323
msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor"
#: ../js/ui/telepathyClient.js:1327
#: ../js/ui/telepathyClient.js:1325
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Actualmente el servidor está muy ocupado intentando gestionar la conexión"
#: ../js/ui/telepathyClient.js:1329
#: ../js/ui/telepathyClient.js:1327
msgid "Certificate has been revoked"
msgstr "Se ha revocado el certificado"
#: ../js/ui/telepathyClient.js:1331
#: ../js/ui/telepathyClient.js:1329
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
"débil"
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1331
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1607,26 +1596,26 @@ msgstr ""
"certificado del servidor exceden los límites impuestos por la biblioteca de "
"criptografía"
#: ../js/ui/telepathyClient.js:1335
#: ../js/ui/telepathyClient.js:1333
msgid "Internal error"
msgstr "Error interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1345
#: ../js/ui/telepathyClient.js:1343
#, c-format
msgid "Connection to %s failed"
msgstr "Falló la conexión a %s"
#: ../js/ui/telepathyClient.js:1354
#: ../js/ui/telepathyClient.js:1352
msgid "Reconnect"
msgstr "Reconectar"
#: ../js/ui/telepathyClient.js:1355
#: ../js/ui/telepathyClient.js:1353
msgid "Edit account"
msgstr "Editar cuenta"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1399
msgid "Unknown reason"
msgstr "Razón desconocida"
@ -1720,7 +1709,7 @@ msgstr "«%s» está preparado"
#. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1089
#: ../src/gvc/gvc-mixer-control.c:1100
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@ -1729,14 +1718,14 @@ msgstr[1] "%u salidas"
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1099
#: ../src/gvc/gvc-mixer-control.c:1110
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u entrada"
msgstr[1] "%u entradas"
#: ../src/gvc/gvc-mixer-control.c:1397
#: ../src/gvc/gvc-mixer-control.c:1408
msgid "System Sounds"
msgstr "Sonidos del sistema"
@ -2070,8 +2059,8 @@ msgstr "%1$s: %2$s"
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
#~ "in time."
#~ msgstr ""
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
#~ "en la hora."
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
#~ "segundos en la hora."
#~ msgid ""
#~ "This key specifies the format used by the panel clock when the format key "
@ -2088,18 +2077,19 @@ msgstr "%1$s: %2$s"
#~ msgid ""
#~ "This key specifies the hour format used by the panel clock. Possible "
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
#~ "01-01. If set to \"custom\", the clock will display time according to the "
#~ "format specified in the custom_format key. Note that if set to either "
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
#~ "to the format specified in the custom_format key. Note that if set to "
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
#~ "ignored."
#~ msgstr ""
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
#~ "ignoran las claves «show_date» y «show_seconds»."
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
#~ "especificado en la clave «custom_format». Note que si se establece a "
#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
#~ msgid "Clock Format"
#~ msgstr "Formato del reloj"

558
po/gl.po

File diff suppressed because it is too large Load Diff

311
po/he.po
View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-04-26 15:30+0300\n"
"PO-Revision-Date: 2012-04-26 15:30+0200\n"
"POT-Creation-Date: 2012-04-09 22:48+0300\n"
"PO-Revision-Date: 2012-04-09 22:48+0200\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <sh.yaron@gmail.com>\n"
"Language: he\n"
@ -30,139 +30,131 @@ msgid "Window management and application launching"
msgstr "ניהול חלונות והרצת יישומים"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
msgid "Configure GNOME Shell Extensions"
msgstr "הגדרת הרחבות GNOME Shell"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
#: ../js/extensionPrefs/main.js:153
msgid "GNOME Shell Extension Preferences"
msgstr "העדפות ההרחבות של GNOME Shell"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
msgid "Configure GNOME Shell Extensions"
msgstr "הגדרת הרחבות GNOME Shell"
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "Enable internal tools useful for developers and testers from Alt-F2"
#: ../data/org.gnome.shell.gschema.xml.in.h:2
msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
msgstr "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
#: ../data/org.gnome.shell.gschema.xml.in.h:2
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "Enable internal tools useful for developers and testers from Alt-F2"
#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Uuids of extensions to enable"
msgstr "Uuids of extensions to enable"
msgid "File extension used for storing the screencast"
msgstr "File extension used for storing the screencast"
#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "GNOME Shell extensions have a uuid property; this key lists extensions which should be loaded. Any extension that wants to be loaded needs to be in this list. You can also manipulate this list with the EnableExtension and DisableExtension DBus methods on org.gnome.Shell."
msgstr "GNOME Shell extensions have a uuid property; this key lists extensions which should be loaded. Any extension that wants to be loaded needs to be in this list. You can also manipulate this list with the EnableExtension and DisableExtension DBus methods on org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid "Whether to collect stats about applications usage"
msgstr "Whether to collect stats about applications usage"
#: ../data/org.gnome.shell.gschema.xml.in.h:6
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 want to disable this for privacy reasons. Please note that doing so won't remove already saved data."
msgstr "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 want to disable this for privacy reasons. Please note that doing so won't remove already saved data."
#: ../data/org.gnome.shell.gschema.xml.in.h:7
msgid "List of desktop file IDs for favorite applications"
msgstr "List of desktop file IDs for favorite applications"
#: ../data/org.gnome.shell.gschema.xml.in.h:8
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
msgstr "The applications corresponding to these identifiers will be displayed in the favorites area."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid "disabled OpenSearch providers"
msgstr "disabled OpenSearch providers"
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "History for command (Alt-F2) dialog"
msgstr "History for command (Alt-F2) dialog"
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "History for the looking glass dialog"
msgstr "History for the looking glass dialog"
#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Internally used to store the last IM presence explicitly set by the user. The value here is from the TpConnectionPresenceType enumeration."
msgstr "Internally used to store the last IM presence explicitly set by the user. The value here is from the TpConnectionPresenceType enumeration."
#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Internally used to store the last session presence status for the user. The value here is from the GsmPresenceStatus enumeration."
msgstr "Internally used to store the last session presence status for the user. The value here is from the GsmPresenceStatus enumeration."
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show the week date in the calendar"
msgstr "Show the week date in the calendar"
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "If true, display the ISO week date in the calendar."
msgstr "If true, display the ISO week date in the calendar."
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Keybinding to open the application menu"
msgstr "Keybinding to open the application menu"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid "Keybinding to open the application menu."
msgstr "Keybinding to open the application menu."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "Keybinding to toggle the screen recorder"
msgstr "Keybinding to toggle the screen recorder"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "Keybinding to start/stop the builtin screen recorder."
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Which keyboard to use"
msgstr "באיזו מקלדת להשתמש"
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "The type of keyboard to use."
msgstr "סוג המקלדת לשימוש."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "Show time with seconds"
msgstr "Show time with seconds"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "If true, display seconds in time."
msgstr "If true, display seconds in time."
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Show date in clock"
msgstr "Show date in clock"
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "If true, display date in the clock, in addition to time."
msgstr "If true, display date in the clock, in addition to time."
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "Framerate used for recording screencasts."
msgstr "Framerate used for recording screencasts."
#: ../data/org.gnome.shell.gschema.xml.in.h:27
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
msgstr "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid "GNOME Shell extensions have a uuid property; this key lists extensions which should be loaded. Any extension that wants to be loaded needs to be in this list. You can also manipulate this list with the EnableExtension and DisableExtension DBus methods on org.gnome.Shell."
msgstr "GNOME Shell extensions have a uuid property; this key lists extensions which should be loaded. Any extension that wants to be loaded needs to be in this list. You can also manipulate this list with the EnableExtension and DisableExtension DBus methods on org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.h:28
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "The gstreamer pipeline used to encode the screencast"
#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "History for command (Alt-F2) dialog"
#: ../data/org.gnome.shell.gschema.xml.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.h:7
msgid "History for the looking glass dialog"
msgstr "History for the looking glass dialog"
#: ../data/org.gnome.shell.gschema.xml.in.h:8
msgid "If true, display date in the clock, in addition to time."
msgstr "If true, display date in the clock, in addition to time."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid "If true, display seconds in time."
msgstr "If true, display seconds in time."
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display the ISO week date in the calendar."
msgstr "If true, display the ISO week date in the calendar."
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "Internally used to store the last IM presence explicitly set by the user. The value here is from the TpConnectionPresenceType enumeration."
msgstr "Internally used to store the last IM presence explicitly set by the user. The value here is from the TpConnectionPresenceType enumeration."
#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Internally used to store the last session presence status for the user. The value here is from the GsmPresenceStatus enumeration."
msgstr "Internally used to store the last session presence status for the user. The value here is from the GsmPresenceStatus enumeration."
#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Keybinding to open the application menu"
msgstr "Keybinding to open the application menu"
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Keybinding to open the application menu."
msgstr "Keybinding to open the application menu."
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "List of desktop file IDs for favorite applications"
msgstr "List of desktop file IDs for favorite applications"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#, no-c-format
msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
msgstr "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
#: ../data/org.gnome.shell.gschema.xml.in.h:31
msgid "File extension used for storing the screencast"
msgstr "File extension used for storing the screencast"
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "Show date in clock"
msgstr "Show date in clock"
#: ../data/org.gnome.shell.gschema.xml.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "Show the week date in the calendar"
msgstr "Show the week date in the calendar"
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Show time with seconds"
msgstr "Show time with seconds"
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
msgstr "The applications corresponding to these identifiers will be displayed in the favorites area."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
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 "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."
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
msgstr "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "The gstreamer pipeline used to encode the screencast"
#: ../data/org.gnome.shell.gschema.xml.in.h:25
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 want to disable this for privacy reasons. Please note that doing so won't remove already saved data."
msgstr "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 want to disable this for privacy reasons. Please note that doing so won't remove already saved data."
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "The type of keyboard to use."
msgstr "סוג המקלדת לשימוש."
#: ../data/org.gnome.shell.gschema.xml.in.h:27
msgid "Uuids of extensions to enable"
msgstr "Uuids of extensions to enable"
#: ../data/org.gnome.shell.gschema.xml.in.h:28
msgid "Whether to collect stats about applications usage"
msgstr "Whether to collect stats about applications usage"
#: ../data/org.gnome.shell.gschema.xml.in.h:29
msgid "Which keyboard to use"
msgstr "באיזו מקלדת להשתמש"
#: ../data/org.gnome.shell.gschema.xml.in.h:30
msgid "disabled OpenSearch providers"
msgstr "disabled OpenSearch providers"
#: ../js/extensionPrefs/main.js:125
#, c-format
msgid "There was an error loading the preferences dialog for %s:"
@ -637,7 +629,6 @@ msgid "tray"
msgstr "מגש מערכת"
#: ../js/ui/keyboard.js:544
#: ../js/ui/status/keyboard.js:44
#: ../js/ui/status/power.js:203
msgid "Keyboard"
msgstr "מקלדת"
@ -702,7 +693,7 @@ msgid "Web Page"
msgstr "דף אינטרנט"
#. Translators: this is a filename used for screencast recording
#: ../js/ui/main.js:121
#: ../js/ui/main.js:118
#, no-c-format
msgid "Screencast from %d %t"
msgstr "צילום מסך מהקובץ %d %t"
@ -881,7 +872,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:728
#: ../js/ui/popupMenu.js:724
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1060,7 +1051,7 @@ msgid "Grant this time only"
msgstr "הענקת גישה הפעם בלבד"
#: ../js/ui/status/bluetooth.js:382
#: ../js/ui/telepathyClient.js:1093
#: ../js/ui/telepathyClient.js:1091
msgid "Reject"
msgstr "סירוב"
@ -1387,35 +1378,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:889
#: ../js/ui/telepathyClient.js:887
#, 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:895
#: ../js/ui/telepathyClient.js:893
#, 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:900
#: ../js/ui/telepathyClient.js:898
#, 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:942
#: ../js/ui/telepathyClient.js:940
#, 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:1044
#: ../js/ui/telepathyClient.js:1042
#, c-format
msgid "Invitation to %s"
msgstr "הזמנה ל־%s"
@ -1423,37 +1414,37 @@ 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:1052
#: ../js/ui/telepathyClient.js:1050
#, c-format
msgid "%s is inviting you to join %s"
msgstr "הוזמנת על ידי %s להצטרף אל %s"
#: ../js/ui/telepathyClient.js:1054
#: ../js/ui/telepathyClient.js:1133
#: ../js/ui/telepathyClient.js:1231
#: ../js/ui/telepathyClient.js:1052
#: ../js/ui/telepathyClient.js:1131
#: ../js/ui/telepathyClient.js:1229
msgid "Decline"
msgstr "דחייה"
#: ../js/ui/telepathyClient.js:1055
#: ../js/ui/telepathyClient.js:1134
#: ../js/ui/telepathyClient.js:1232
#: ../js/ui/telepathyClient.js:1053
#: ../js/ui/telepathyClient.js:1132
#: ../js/ui/telepathyClient.js:1230
msgid "Accept"
msgstr "אישור"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1085
#: ../js/ui/telepathyClient.js:1083
#, c-format
msgid "Video call from %s"
msgstr "שיחת וידאו מאת %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1088
#: ../js/ui/telepathyClient.js:1086
#, c-format
msgid "Call from %s"
msgstr "שיחה מאת %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/telepathyClient.js:1095
#: ../js/ui/telepathyClient.js:1093
msgid "Answer"
msgstr "מענה"
@ -1462,129 +1453,129 @@ msgstr "מענה"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1127
#: ../js/ui/telepathyClient.js:1125
#, c-format
msgid "%s is sending you %s"
msgstr "%s שולח/ת אליך %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1196
#: ../js/ui/telepathyClient.js:1194
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s רוצה לקבל הרשאות כדי לראות מתי מצבך הוא מקוון"
#: ../js/ui/telepathyClient.js:1289
#: ../js/ui/telepathyClient.js:1287
msgid "Network error"
msgstr "שגיאת רשת"
#: ../js/ui/telepathyClient.js:1291
#: ../js/ui/telepathyClient.js:1289
msgid "Authentication failed"
msgstr "האימות נכשל"
#: ../js/ui/telepathyClient.js:1293
#: ../js/ui/telepathyClient.js:1291
msgid "Encryption error"
msgstr "שגיאת הצפנה"
#: ../js/ui/telepathyClient.js:1295
#: ../js/ui/telepathyClient.js:1293
msgid "Certificate not provided"
msgstr "לא סופק אישור"
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1295
msgid "Certificate untrusted"
msgstr "האישור אינו מהימן"
#: ../js/ui/telepathyClient.js:1299
#: ../js/ui/telepathyClient.js:1297
msgid "Certificate expired"
msgstr "האישור פג"
#: ../js/ui/telepathyClient.js:1301
#: ../js/ui/telepathyClient.js:1299
msgid "Certificate not activated"
msgstr "האישור לא מופעל"
#: ../js/ui/telepathyClient.js:1303
#: ../js/ui/telepathyClient.js:1301
msgid "Certificate hostname mismatch"
msgstr "שם המארח באישור אינו תואם"
#: ../js/ui/telepathyClient.js:1305
#: ../js/ui/telepathyClient.js:1303
msgid "Certificate fingerprint mismatch"
msgstr "חוסר התאמה בטביעת האצבע של האישור"
#: ../js/ui/telepathyClient.js:1307
#: ../js/ui/telepathyClient.js:1305
msgid "Certificate self-signed"
msgstr "אישור בחתימה עצמית"
#: ../js/ui/telepathyClient.js:1309
#: ../js/ui/telepathyClient.js:1307
msgid "Status is set to offline"
msgstr "המצב הוגדר ל'מנותק'"
#: ../js/ui/telepathyClient.js:1311
#: ../js/ui/telepathyClient.js:1309
msgid "Encryption is not available"
msgstr "ההצפנה אינה זמינה"
#: ../js/ui/telepathyClient.js:1313
#: ../js/ui/telepathyClient.js:1311
msgid "Certificate is invalid"
msgstr "האישור אינו תקף"
#: ../js/ui/telepathyClient.js:1315
#: ../js/ui/telepathyClient.js:1313
msgid "Connection has been refused"
msgstr "ההתחברות נשללה"
#: ../js/ui/telepathyClient.js:1317
#: ../js/ui/telepathyClient.js:1315
msgid "Connection can't be established"
msgstr "לא ניתן להפעיל את החיבור"
#: ../js/ui/telepathyClient.js:1319
#: ../js/ui/telepathyClient.js:1317
msgid "Connection has been lost"
msgstr "החיבור אבד"
#: ../js/ui/telepathyClient.js:1321
#: ../js/ui/telepathyClient.js:1319
msgid "This account is already connected to the server"
msgstr "חשבון זה כבר מחובר לשרת"
#: ../js/ui/telepathyClient.js:1323
#: ../js/ui/telepathyClient.js:1321
msgid "Connection has been replaced by a new connection using the same resource"
msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב"
#: ../js/ui/telepathyClient.js:1325
#: ../js/ui/telepathyClient.js:1323
msgid "The account already exists on the server"
msgstr "החשבון כבר קיים בשרת"
#: ../js/ui/telepathyClient.js:1327
#: ../js/ui/telepathyClient.js:1325
msgid "Server is currently too busy to handle the connection"
msgstr "השרת עסוק ברגע זה מכדי לטפל בחיבור"
#: ../js/ui/telepathyClient.js:1329
#: ../js/ui/telepathyClient.js:1327
msgid "Certificate has been revoked"
msgstr "האישור נשלל"
#: ../js/ui/telepathyClient.js:1331
#: ../js/ui/telepathyClient.js:1329
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "האישור משתמש באלגוריתם הצפנה שאינו בטוח או חלש מבחינת הצפנה"
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1331
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
msgstr "אורך אישור השרת, או עומק שרשרת אישור השרת, חורגים מהמגבלות שנכפו על ידי ספריית ההצפנה"
#: ../js/ui/telepathyClient.js:1335
#: ../js/ui/telepathyClient.js:1333
msgid "Internal error"
msgstr "שגיאה פנימית"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1345
#: ../js/ui/telepathyClient.js:1343
#, c-format
msgid "Connection to %s failed"
msgstr "החיבור אל %s נכשל"
#: ../js/ui/telepathyClient.js:1354
#: ../js/ui/telepathyClient.js:1352
msgid "Reconnect"
msgstr "התחברות מחדש"
#: ../js/ui/telepathyClient.js:1355
#: ../js/ui/telepathyClient.js:1353
msgid "Edit account"
msgstr "עריכת חשבון"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1399
msgid "Unknown reason"
msgstr "סיבה לא ידועה"

770
po/hu.po

File diff suppressed because it is too large Load Diff

1087
po/id.po

File diff suppressed because it is too large Load Diff

View File

@ -6,15 +6,16 @@
# Jiro Matsuzawa <jmatsuzawa@src.gnome.org>, 2011, 2012.
# Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>, 2011, 2012.
# Hideki Yamane <henrich@debian.org>, 2011.
# Takanori MATSUURA <t.matsuu@gmail.com>, 2012.
#
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: 2012-04-19 21:14+0000\n"
"PO-Revision-Date: 2012-04-21 21:35+0900\n"
"Last-Translator: OKANO Takayoshi <kano@na.rim.or.jp>\n"
"POT-Creation-Date: 2012-05-10 04:40+0000\n"
"PO-Revision-Date: 2012-05-15 00:48+0900\n"
"Last-Translator: Takanori MATSUURA <t.matsuu@gmail.com>\n"
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -524,11 +525,11 @@ msgstr "カレンダーを開く"
#. in 24-hour mode.
#: ../js/ui/dateMenu.js:187
msgid "%a %b %e, %R:%S"
msgstr "%m/%d (%a) %R:%S"
msgstr "%B%e日 (%a) %R:%S"
#: ../js/ui/dateMenu.js:188
msgid "%a %b %e, %R"
msgstr "%m/%d (%a) %R"
msgstr "%B%e日 (%a) %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.

View File

@ -13,7 +13,7 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-04-19 21:14+0000\n"
"PO-Revision-Date: 2012-04-26 01:05+0900\n"
"PO-Revision-Date: 2012-05-19 22:57+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
"MIME-Version: 1.0\n"
@ -51,7 +51,7 @@ msgstr "Alt-F2 대화 상자에서 내부 디버깅 및 감시 기능에 접근
#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Uuids of extensions to enable"
msgstr "사용할 확장 기능의 UUID 목록"
msgstr "사용할 확장의 UUID 목록"
#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid ""
@ -71,11 +71,7 @@ msgid ""
"used ones (e.g. in launchers). While this data will be kept private, you may "
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
"셸에서는 최근에 사용한 프로그램을 (실행 메뉴 등에서) 표시하는 목적으로, 현재 "
"사용 중인 프로그램을 감시합니다. 이 데이터는 비공개 데이터이지만 사생활 문제"
"가 걱정된다면 이 기능을 끌 수도 있습니다. 단 이 기능을 사용하지 않더라도 이"
"미 저장된 데이터를 제거하지는 않습니다."
msgstr "셸에서는 최근에 사용한 프로그램을(실행 메뉴 등에서) 표시하는 목적으로, 현재 사용 중인 프로그램을 감시합니다. 이 데이터는 비공개 데이터이지만 사생활 문제가 걱정된다면 이 기능을 끌 수도 있습니다. 단 이 기능을 사용하지 않더라도 이미 저장된 데이터를 제거하지는 않습니다."
#: ../data/org.gnome.shell.gschema.xml.in.h:7
msgid "List of desktop file IDs for favorite applications"
@ -93,7 +89,7 @@ msgstr "사용하지 않는 OpenSearch 서비스"
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "History for command (Alt-F2) dialog"
msgstr "명령어 대화 상자에 (Alt-F2) 기록 기능"
msgstr "명령어 대화 상자에(Alt-F2) 기록 기능"
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "History for the looking glass dialog"
@ -166,7 +162,7 @@ msgid "The gstreamer pipeline used to encode the screencast"
msgstr "스크린 방송 인코딩에 사용할 gstreamer 파이프라인"
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#, no-c-format, fuzzy
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@ -178,45 +174,31 @@ msgid ""
"'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux' and records to WEBM "
"using the VP8 codec. %T is used as a placeholder for a guess at the optimal "
"thread count on the system."
msgstr ""
"녹화 인코딩에 사용할 GStreamer 파이프라인을 지정합니다. gst-launch에 사용하"
"는 문법을 따릅니다. 파이프라인은 녹화한 영상이 있는 싱크 패드를 연결하지 않"
"은 상태여야 합니다. 보통 소스 패드와 연결하지 않았을 것입니다. 이 패드의 출력"
"은 출력 파일에 기록할 것입니다. 그러나 파이프라인은 이 출력을 다룰 수 있기도 "
"합니다 - 아마 shout2send와 같은 것을 통해 icecast 서버로 출력을 보내는데 사용"
"할지도 모릅니다. 만약 설정을 취소하거나 빈 값으로 설정한다면, 기본 파이프라인"
"을 사용할 것입니다. 이것은 현재 'vp8enc quality=8 speed=6 threads=%T ! "
"queue ! webmmux' 이며 VP8 코덱을 사용하여 WEBM으로 녹화합니다. %T는 시스템 상"
"의 최적의 스레드 수를 추측하기 위해 대체기호로 사용합니다."
msgstr "녹화 인코딩에 사용할 GStreamer 파이프라인을 지정합니다. gst-launch 프로그램에 사용하는 문법을 따릅니다. 녹화한 영상이 입력되는 싱크 패드는 이 파이프라인에 연결하지 않은 상태여야 합니다. 보통은 소스 패드도 연결하지 않고, 소스 패드의 출력을 출력 파일에 기록합니다. 하지만 파이프라인에서 이 출력을 처리할 수도 있습니다. shout2send 같은 프로그램을 이용해 아이스캐스트 서버로 출력을 보내거나 하는 용도로 사용할 수 있습니다. 설정을 취소하거나 빈 값으로 설정하면, 기본 파이프라인을 사용합니다. 기본 파이프라인은 'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux'이고 VP8 코덱을 사용해 WEBM 형식으로 녹화합니다. '%T' 기호는 시스템에서 최적으로 생각되는 스레드 수로 대체됩니다."
#: ../data/org.gnome.shell.gschema.xml.in.h:29
msgid "File extension used for storing the screencast"
msgstr "스크린 방송을 저장할 때 사용할 파일 확장자"
#: ../data/org.gnome.shell.gschema.xml.in.h:30
#, fuzzy
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 ""
"스크린 방송 녹화 파일 이름은 현재 날짜와 이 확장자를 사용해서 결정됩니다. 녹"
"화할 때 다른 형식으로 바꿀 수도 있습니다."
msgstr "녹화한 스크린 방송 영상 파일은, 현재 날짜와 여기서 설정하는 확장자를 붙여 파일 이름을 만듭니다. 다른 컨테이너 형식으로 녹화하려면 이 값을 바꿔야 합니다."
#: ../js/extensionPrefs/main.js:125
#, c-format, fuzzy
#, c-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "%s에 대한 기본 설정 대화상자를 불러오는데 오류가 발생했습니다:"
#: ../js/extensionPrefs/main.js:165
#, fuzzy
msgid "<b>Extension</b>"
msgstr "<b>확장</b>"
#: ../js/extensionPrefs/main.js:189
#, fuzzy
msgid "Select an extension to configure using the combobox above."
msgstr "위의 콤보상자를 사용하여 설정할 확장을 선택하십시오."
msgstr "위의 콤보상자를 사용 설정할 확장을 선택하십시오."
#: ../js/gdm/loginDialog.js:627
msgid "Session..."
@ -674,13 +656,13 @@ msgstr "다시 입력하십시오:"
#: ../js/ui/lookingGlass.js:732
msgid "No extensions installed"
msgstr "확장 기능을 설치하지 않았습니다"
msgstr "확장을 설치하지 않았습니다"
#. Translators: argument is an extension UUID.
#: ../js/ui/lookingGlass.js:786
#, c-format
msgid "%s has not emitted any errors."
msgstr "%s이(가) 발생한 에러가 없습니다."
msgstr "%s에서 발생한 에러가 없습니다."
#: ../js/ui/lookingGlass.js:792
msgid "Hide Errors"
@ -1167,7 +1149,7 @@ msgstr "더 보기..."
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
msgid "Connected (private)"
msgstr "연결됨 (개인)"
msgstr "연결됨(개인)"
#: ../js/ui/status/network.js:696
msgid "Auto Ethernet"
@ -1573,7 +1555,7 @@ msgstr "내부 오류"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1345
#, c-format, fuzzy
#, c-format
msgid "Connection to %s failed"
msgstr "%s에 연결이 실패했습니다"

159
po/lt.po
View File

@ -3,19 +3,20 @@
# This file is distributed under the same license as the gnome-shell package.
# Žygimantas Beručka <zygis@gnome.org>, 2010, 2011, 2012.
# Algimantas Margevičius <gymka@mail.ru>, 2011.
# Mantas Kriaučiūnas <mantas@akl.lt>, 2012.
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: 2012-03-30 17:59+0000\n"
"POT-Creation-Date: 2012-05-19 13:58+0000\n"
"PO-Revision-Date: 2012-04-05 15:14+0300\n"
"Last-Translator: Žygimantas Beručka <zygis@gnome.org>\n"
"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
"Language-Team: Lithuanian\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lt\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
"100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Virtaal 0.7.0\n"
@ -23,7 +24,7 @@ msgstr ""
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "GNOME Shell"
msgstr "GNOME Shell aplinka"
#: ../data/gnome-shell.desktop.in.in.h:2
msgid "Window management and application launching"
@ -79,10 +80,11 @@ msgid ""
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
"Apvalkalas paprastai stebi aktyvias programas siekiant pateikti dažniausiai "
"naudojamas (pvz., leistukuose). Nors šie duomenys konfidencialiai saugomi, "
"jei norite, saugumo sumetimais galite šią funkciją išjungti. Atminkite, kad "
"tai padarius jau įrašyti duomenys jau nebus įrašyti."
"Įprastai GNOME aplinka stebi aktyvias programas siekiant pateikti "
"dažniausiai naudojamas (pvz., leistukuose). Nors šie duomenys "
"konfidencialiai saugomi, jei norite, saugumo sumetimais galite šią funkciją "
"išjungti. Atminkite, kad išjungus šią funkciją anksčiau įrašyti duomenys "
"nebus pašalinti."
#: ../data/org.gnome.shell.gschema.xml.in.h:7
msgid "List of desktop file IDs for favorite applications"
@ -222,7 +224,7 @@ msgstr ""
#: ../js/extensionPrefs/main.js:125
#, c-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "Kilo klaida įkeliant %s nustatymų dialogą:"
msgstr "Įvyko klaida įkeliant %s nustatymų dialogą:"
#: ../js/extensionPrefs/main.js:165
msgid "<b>Extension</b>"
@ -232,40 +234,40 @@ msgstr "<b>Plėtinys</b>"
msgid "Select an extension to configure using the combobox above."
msgstr "Išskleidžiamajame sąraše pasirinkite konfigūruotiną plėtinį."
#: ../js/gdm/loginDialog.js:624
#: ../js/gdm/loginDialog.js:627
msgid "Session..."
msgstr "Seansas..."
#: ../js/gdm/loginDialog.js:786
#: ../js/gdm/loginDialog.js:789
msgctxt "title"
msgid "Sign In"
msgstr "Prisijungti"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:831
#: ../js/gdm/loginDialog.js:834
msgid "(or swipe finger)"
msgstr "(arba perbraukite pirštu)"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:852
#: ../js/gdm/loginDialog.js:855
msgid "Not listed?"
msgstr "Nėra sąraše?"
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:401
#: ../js/ui/extensionSystem.js:399 ../js/ui/networkAgent.js:153
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
msgid "Cancel"
msgstr "Atšaukti"
msgstr "Atsisakyti"
#: ../js/gdm/loginDialog.js:1025
#: ../js/gdm/loginDialog.js:1028
msgctxt "button"
msgid "Sign In"
msgstr "Prisijungti"
#: ../js/gdm/loginDialog.js:1377
#: ../js/gdm/loginDialog.js:1380
msgid "Login Window"
msgstr "Prisijungimo langas"
@ -673,11 +675,11 @@ msgstr[2] "Sistema bus paleista iš naujo po %d sekundžių."
msgid "Restarting the system."
msgstr "Sistema paleidžiama iš naujo."
#: ../js/ui/extensionSystem.js:403
#: ../js/ui/extensionSystem.js:404
msgid "Install"
msgstr "Įdiegti"
#: ../js/ui/extensionSystem.js:407
#: ../js/ui/extensionSystem.js:408
#, c-format
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Atsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
@ -686,7 +688,8 @@ msgstr "Atsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
msgid "tray"
msgstr "dėklas"
#: ../js/ui/keyboard.js:544 ../js/ui/status/power.js:203
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
#: ../js/ui/status/power.js:203
msgid "Keyboard"
msgstr "Klaviatūra"
@ -722,7 +725,7 @@ msgstr "Įjungta"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1093
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
msgid "Disabled"
msgstr "Išjungta"
@ -939,7 +942,7 @@ msgstr "Įveskite komandą:"
msgid "Searching..."
msgstr "Ieškoma..."
#: ../js/ui/searchDisplay.js:414
#: ../js/ui/searchDisplay.js:415
msgid "No matching results."
msgstr "Nerasta atitikmenų."
@ -1097,7 +1100,7 @@ msgstr "Visada leisti prieigą"
msgid "Grant this time only"
msgstr "Leisti tik šį kartą"
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1091
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
msgid "Reject"
msgstr "Atmesti"
@ -1174,7 +1177,7 @@ msgstr "Trūksta integruotos programinės įrangos (firmware)"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:517
msgid "cable unplugged"
msgstr "kabelis neįjungtas"
msgstr "atjungtas laidas"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
@ -1188,7 +1191,7 @@ msgstr "nepavyko prisijungti"
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
msgid "More..."
msgstr "Daugiau..."
msgstr "Rodyti daugiau tinklų..."
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
@ -1385,7 +1388,7 @@ msgstr "Skambutis"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:287
msgid "File Transfer"
msgstr "Failo perdavimas"
msgstr "Failo persiuntimas"
#: ../js/ui/telepathyClient.js:369
msgid "Subscription request"
@ -1418,35 +1421,35 @@ msgstr "%s yra užsiėmęs (-usi)."
#. 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:887
#: ../js/ui/telepathyClient.js:889
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Išsiųsta <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:893
#: ../js/ui/telepathyClient.js:895
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Išsiųsta <b>%B %d</b>, <b>%A</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:898
#: ../js/ui/telepathyClient.js:900
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Išsiųsta %Y <b>%B %d</b>, <b>%A</b>"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:940
#: ../js/ui/telepathyClient.js:942
#, c-format
msgid "%s is now known as %s"
msgstr "%s nuo šiol vadinasi %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1042
#: ../js/ui/telepathyClient.js:1044
#, c-format
msgid "Invitation to %s"
msgstr "Kvietimas į %s"
@ -1454,35 +1457,35 @@ msgstr "Kvietimas į %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:1050
#: ../js/ui/telepathyClient.js:1052
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s jus kviečia prisijungti prie %s"
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
#: ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1054 ../js/ui/telepathyClient.js:1133
#: ../js/ui/telepathyClient.js:1231
msgid "Decline"
msgstr "Atmesti"
#: ../js/ui/telepathyClient.js:1053 ../js/ui/telepathyClient.js:1132
#: ../js/ui/telepathyClient.js:1230
#: ../js/ui/telepathyClient.js:1055 ../js/ui/telepathyClient.js:1134
#: ../js/ui/telepathyClient.js:1232
msgid "Accept"
msgstr "Priimti"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1083
#: ../js/ui/telepathyClient.js:1085
#, c-format
msgid "Video call from %s"
msgstr "Vaizdo skambutis nuo %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1086
#: ../js/ui/telepathyClient.js:1088
#, c-format
msgid "Call from %s"
msgstr "Skambutis nuo %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/telepathyClient.js:1093
#: ../js/ui/telepathyClient.js:1095
msgid "Answer"
msgstr "Atsiliepti"
@ -1491,110 +1494,110 @@ msgstr "Atsiliepti"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1125
#: ../js/ui/telepathyClient.js:1127
#, c-format
msgid "%s is sending you %s"
msgstr "%s jums siunčia %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1194
#: ../js/ui/telepathyClient.js:1196
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s pageidauja matyti, kai esate prisijungę prie interneto"
#: ../js/ui/telepathyClient.js:1287
#: ../js/ui/telepathyClient.js:1289
msgid "Network error"
msgstr "Tinklo klaida"
#: ../js/ui/telepathyClient.js:1289
#: ../js/ui/telepathyClient.js:1291
msgid "Authentication failed"
msgstr "Nepavyko patvirtinti tapatybės"
#: ../js/ui/telepathyClient.js:1291
#: ../js/ui/telepathyClient.js:1293
msgid "Encryption error"
msgstr "Šifravimo klaida"
#: ../js/ui/telepathyClient.js:1293
#: ../js/ui/telepathyClient.js:1295
msgid "Certificate not provided"
msgstr "Liudijimas nepateiktas"
#: ../js/ui/telepathyClient.js:1295
#: ../js/ui/telepathyClient.js:1297
msgid "Certificate untrusted"
msgstr "Liudijimas nepatikimas"
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1299
msgid "Certificate expired"
msgstr "Liudijimo galiojimas pasibaigęs"
#: ../js/ui/telepathyClient.js:1299
#: ../js/ui/telepathyClient.js:1301
msgid "Certificate not activated"
msgstr "Liudijimas neaktyvuotas"
#: ../js/ui/telepathyClient.js:1301
#: ../js/ui/telepathyClient.js:1303
msgid "Certificate hostname mismatch"
msgstr "Liudijimo serverio vardo nesutapimas"
#: ../js/ui/telepathyClient.js:1303
#: ../js/ui/telepathyClient.js:1305
msgid "Certificate fingerprint mismatch"
msgstr "Liudijimo piršto atspaudo nesutapimas"
#: ../js/ui/telepathyClient.js:1305
#: ../js/ui/telepathyClient.js:1307
msgid "Certificate self-signed"
msgstr "Liudijimas pačių pasirašytas"
#: ../js/ui/telepathyClient.js:1307
#: ../js/ui/telepathyClient.js:1309
msgid "Status is set to offline"
msgstr "Nustatyta atsijungimo būsena"
#: ../js/ui/telepathyClient.js:1309
#: ../js/ui/telepathyClient.js:1311
msgid "Encryption is not available"
msgstr "Šifravimas negalimas"
#: ../js/ui/telepathyClient.js:1311
#: ../js/ui/telepathyClient.js:1313
msgid "Certificate is invalid"
msgstr "Liudijimas netinkamas"
#: ../js/ui/telepathyClient.js:1313
#: ../js/ui/telepathyClient.js:1315
msgid "Connection has been refused"
msgstr "Ryšys atmestas"
#: ../js/ui/telepathyClient.js:1315
#: ../js/ui/telepathyClient.js:1317
msgid "Connection can't be established"
msgstr "Nepavyko užmegzti ryšio"
#: ../js/ui/telepathyClient.js:1317
#: ../js/ui/telepathyClient.js:1319
msgid "Connection has been lost"
msgstr "Ryšys nutrūko"
#: ../js/ui/telepathyClient.js:1319
#: ../js/ui/telepathyClient.js:1321
msgid "This account is already connected to the server"
msgstr "Ši paskyra jau prijungta prie serverio"
#: ../js/ui/telepathyClient.js:1321
#: ../js/ui/telepathyClient.js:1323
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Ryšys pakeistas nauju ryšiu naudojant tą patį išteklių"
#: ../js/ui/telepathyClient.js:1323
#: ../js/ui/telepathyClient.js:1325
msgid "The account already exists on the server"
msgstr "Tokia paskyra serveryje jau yra"
#: ../js/ui/telepathyClient.js:1325
#: ../js/ui/telepathyClient.js:1327
msgid "Server is currently too busy to handle the connection"
msgstr "Šiuo metu serveris per daug užimtas šiai užklausai apdoroti"
#: ../js/ui/telepathyClient.js:1327
#: ../js/ui/telepathyClient.js:1329
msgid "Certificate has been revoked"
msgstr "Liudijimas atšauktas"
#: ../js/ui/telepathyClient.js:1329
#: ../js/ui/telepathyClient.js:1331
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Liudijimui naudojamas nesaugus šifravimo algoritmas arba jis kriptografiškai "
"silpnas"
#: ../js/ui/telepathyClient.js:1331
#: ../js/ui/telepathyClient.js:1333
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1602,26 +1605,26 @@ msgstr ""
"Serverio liudijimo ilgis arba liudijimų eilės dydis viršija kriptografijos "
"bibliotekos apribojimus"
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1335
msgid "Internal error"
msgstr "Vidinė klaida"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1343
#: ../js/ui/telepathyClient.js:1345
#, c-format
msgid "Connection to %s failed"
msgstr "Nepavyko prisijungti prie %s"
#: ../js/ui/telepathyClient.js:1352
#: ../js/ui/telepathyClient.js:1354
msgid "Reconnect"
msgstr "Prisijungti iš naujo"
#: ../js/ui/telepathyClient.js:1353
#: ../js/ui/telepathyClient.js:1355
msgid "Edit account"
msgstr "Taisyti paskyrą"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1401
msgid "Unknown reason"
msgstr "Nežinoma priežastis"
@ -1647,7 +1650,7 @@ msgstr "Pranešimai"
#: ../js/ui/userMenu.js:639
msgid "Online Accounts"
msgstr "Tinklo paskyros"
msgstr "Interneto paskyros"
#: ../js/ui/userMenu.js:643
msgid "System Settings"
@ -1706,7 +1709,7 @@ msgstr "Orakulė sako %s"
#: ../js/ui/wanda.js:168
msgid "Your favorite Easter Egg"
msgstr "Jūsų mėgstamiausias lykinis kiaušinis"
msgstr "Jūsų mėgstamiausias Velykinis kiaušinis"
#: ../js/ui/windowAttentionHandler.js:19
#, c-format
@ -1715,7 +1718,7 @@ msgstr "„%s“ yra pasirengusi"
#. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1100
#: ../src/gvc/gvc-mixer-control.c:1089
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@ -1725,7 +1728,7 @@ msgstr[2] "%u išvestys"
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1110
#: ../src/gvc/gvc-mixer-control.c:1099
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
@ -1733,15 +1736,15 @@ msgstr[0] "%u įvestis"
msgstr[1] "%u įvestys"
msgstr[2] "%u įvestys"
#: ../src/gvc/gvc-mixer-control.c:1408
#: ../src/gvc/gvc-mixer-control.c:1397
msgid "System Sounds"
msgstr "Sistemos garsai"
#: ../src/main.c:255
#: ../src/main.c:256
msgid "Print version"
msgstr "Išvesti versijos numerį"
#: ../src/main.c:261
#: ../src/main.c:262
msgid "Mode used by GDM for login screen"
msgstr "Veiksena, naudojama GDM prisijungimo ekrane"
@ -1774,7 +1777,7 @@ msgstr "Naudotojas užvėrė tapatybės patvirtinimo dialogą"
#. * nautilus
#: ../src/shell-util.c:97
msgid "Home"
msgstr "Namai"
msgstr "Namų aplankas"
#. Translators: this is the same string as the one found in
#. * nautilus

View File

@ -780,12 +780,12 @@ msgstr "उघडा"
#| msgid "minute"
#| msgid_plural "minutes"
msgid "Unmute"
msgstr "ंद करणे अशक्य करा"
msgstr "ंद करणे अशक्य करा"
#: ../js/ui/messageTray.js:1217
#| msgid "Mouse"
msgid "Mute"
msgstr "ंद करा"
msgstr "ंद करा"
#: ../js/ui/messageTray.js:2490
msgid "System Information"

157
po/nb.po
View File

@ -6,10 +6,10 @@
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 3.5.x\n"
"Project-Id-Version: gnome-shell 3.3.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-04-30 11:12+0200\n"
"PO-Revision-Date: 2012-04-30 11:13+0200\n"
"POT-Creation-Date: 2012-04-11 12:50+0200\n"
"PO-Revision-Date: 2012-04-11 12:50+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: \n"
@ -132,42 +132,34 @@ msgid "Keybinding to open the application menu."
msgstr "Tastaturbinding som åpner programmenyen."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "Keybinding to toggle the screen recorder"
msgstr "Tastaturbinding som slår av/på skjermopptak"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "Tastaturbinding som starter/stopper innebygget opptak av skjerm."
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Which keyboard to use"
msgstr "Tastatur som skal brukes"
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "The type of keyboard to use."
msgstr "Type tastatur som skal brukes."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Show time with seconds"
msgstr "Vis tid med sekunder"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "If true, display seconds in time."
msgstr "Viser sekunder i klokken hvis «true»."
#: ../data/org.gnome.shell.gschema.xml.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "Show date in clock"
msgstr "Vis dato i klokken"
#: ../data/org.gnome.shell.gschema.xml.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "If true, display date in the clock, in addition to time."
msgstr "Viser dato i tillegg til tid i klokken hvis «true»."
#: ../data/org.gnome.shell.gschema.xml.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Framerate used for recording screencasts."
msgstr "Bildefrekvens i bruk ved lagring av skjermvideoer."
#: ../data/org.gnome.shell.gschema.xml.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -175,11 +167,11 @@ msgstr ""
"Bildefrekvensen i den ferdige skjermvideoen tatt opp med GNOME Shells "
"skjermvideoopptaker i bilder per sekund."
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Gstreamer-kommandokø brukt til å kode skjermvideoen"
#: ../data/org.gnome.shell.gschema.xml.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#, fuzzy, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -196,11 +188,11 @@ msgstr ""
"Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som "
"brukes for gst-launch. Røret må ha en..."
#: ../data/org.gnome.shell.gschema.xml.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.h:29
msgid "File extension used for storing the screencast"
msgstr "Filendelse i bruk ved lagring av skjermvideo"
#: ../data/org.gnome.shell.gschema.xml.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.h:30
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 "
@ -507,7 +499,7 @@ msgstr "Frakoblet"
msgid "CONTACTS"
msgstr "KONTAKTER"
#: ../js/ui/dash.js:239 ../js/ui/messageTray.js:1207
#: ../js/ui/dash.js:229 ../js/ui/messageTray.js:1207
msgid "Remove"
msgstr "Fjern"
@ -671,8 +663,7 @@ msgstr "Last ned og installer «%s» fra extensions.gnome.org?"
msgid "tray"
msgstr "varslingsområde"
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
#: ../js/ui/status/power.js:203
#: ../js/ui/keyboard.js:544 ../js/ui/status/power.js:203
msgid "Keyboard"
msgstr "Tastatur"
@ -684,56 +675,56 @@ msgstr "Passord:"
msgid "Type again:"
msgstr "Skriv på nytt:"
#: ../js/ui/lookingGlass.js:693
#: ../js/ui/lookingGlass.js:732
msgid "No extensions installed"
msgstr "Ingen utvidelser installert"
#. Translators: argument is an extension UUID.
#: ../js/ui/lookingGlass.js:747
#: ../js/ui/lookingGlass.js:786
#, c-format
msgid "%s has not emitted any errors."
msgstr "%s har ikke avgitt noen feil."
#: ../js/ui/lookingGlass.js:753
#: ../js/ui/lookingGlass.js:792
msgid "Hide Errors"
msgstr "Skjul feil"
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:808
#: ../js/ui/lookingGlass.js:796 ../js/ui/lookingGlass.js:847
msgid "Show Errors"
msgstr "Vis feil"
#: ../js/ui/lookingGlass.js:766
#: ../js/ui/lookingGlass.js:805
msgid "Enabled"
msgstr "Aktivert"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1082
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
msgid "Disabled"
msgstr "Deaktivert"
#: ../js/ui/lookingGlass.js:771
#: ../js/ui/lookingGlass.js:810
msgid "Error"
msgstr "Feil"
#: ../js/ui/lookingGlass.js:773
#: ../js/ui/lookingGlass.js:812
msgid "Out of date"
msgstr "Utdatert"
#: ../js/ui/lookingGlass.js:775
#: ../js/ui/lookingGlass.js:814
msgid "Downloading"
msgstr "Laster ned"
#: ../js/ui/lookingGlass.js:796
#: ../js/ui/lookingGlass.js:835
msgid "View Source"
msgstr "Vis kildekode"
#: ../js/ui/lookingGlass.js:802
#: ../js/ui/lookingGlass.js:841
msgid "Web Page"
msgstr "Nettside"
#. Translators: this is a filename used for screencast recording
#: ../js/ui/main.js:120
#: ../js/ui/main.js:118
#, no-c-format
msgid "Screencast from %d %t"
msgstr "Skjermvideo fra %d %t"
@ -913,7 +904,7 @@ msgstr "Beklager, det virket ikke. Vennligst prøv igjen."
#. "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:728
#: ../js/ui/popupMenu.js:724
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -925,7 +916,7 @@ msgstr "Oppgi en kommando:"
msgid "Searching..."
msgstr "Søker …"
#: ../js/ui/searchDisplay.js:422
#: ../js/ui/searchDisplay.js:415
msgid "No matching results."
msgstr "Ingen treff."
@ -1083,7 +1074,7 @@ msgstr "Alltid gi tilgang"
msgid "Grant this time only"
msgstr "Gi tilgang kun denne ene gangen"
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1091
msgid "Reject"
msgstr "Avvis"
@ -1400,35 +1391,35 @@ msgstr "%s er opptatt."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:889
#: ../js/ui/telepathyClient.js:887
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Sendt <b>%X</b> på <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:895
#: ../js/ui/telepathyClient.js:893
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Sendt <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:900
#: ../js/ui/telepathyClient.js:898
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Sendt <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:942
#: ../js/ui/telepathyClient.js:940
#, c-format
msgid "%s is now known as %s"
msgstr "%s er nå kjent som %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1044
#: ../js/ui/telepathyClient.js:1042
#, c-format
msgid "Invitation to %s"
msgstr "Invitasjon til %s"
@ -1436,35 +1427,35 @@ msgstr "Invitasjon til %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:1052
#: ../js/ui/telepathyClient.js:1050
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s inviterer deg til å bli med i %s"
#: ../js/ui/telepathyClient.js:1054 ../js/ui/telepathyClient.js:1133
#: ../js/ui/telepathyClient.js:1231
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
#: ../js/ui/telepathyClient.js:1229
msgid "Decline"
msgstr "Avslå"
#: ../js/ui/telepathyClient.js:1055 ../js/ui/telepathyClient.js:1134
#: ../js/ui/telepathyClient.js:1232
#: ../js/ui/telepathyClient.js:1053 ../js/ui/telepathyClient.js:1132
#: ../js/ui/telepathyClient.js:1230
msgid "Accept"
msgstr "Godta"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1085
#: ../js/ui/telepathyClient.js:1083
#, c-format
msgid "Video call from %s"
msgstr "Videosamtale fra %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1088
#: ../js/ui/telepathyClient.js:1086
#, c-format
msgid "Call from %s"
msgstr "Samtale fra %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/telepathyClient.js:1095
#: ../js/ui/telepathyClient.js:1093
msgid "Answer"
msgstr "Svar"
@ -1473,110 +1464,110 @@ msgstr "Svar"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1127
#: ../js/ui/telepathyClient.js:1125
#, c-format
msgid "%s is sending you %s"
msgstr "%s sender deg %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1196
#: ../js/ui/telepathyClient.js:1194
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
#: ../js/ui/telepathyClient.js:1289
#: ../js/ui/telepathyClient.js:1287
msgid "Network error"
msgstr "Nettverksfeil"
#: ../js/ui/telepathyClient.js:1291
#: ../js/ui/telepathyClient.js:1289
msgid "Authentication failed"
msgstr "Autentisering feilet"
#: ../js/ui/telepathyClient.js:1293
#: ../js/ui/telepathyClient.js:1291
msgid "Encryption error"
msgstr "Feil ved kryptering"
#: ../js/ui/telepathyClient.js:1295
#: ../js/ui/telepathyClient.js:1293
msgid "Certificate not provided"
msgstr "Sertifikat ikke oppgitt"
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1295
msgid "Certificate untrusted"
msgstr "Stoler ikke på sertifikatet"
#: ../js/ui/telepathyClient.js:1299
#: ../js/ui/telepathyClient.js:1297
msgid "Certificate expired"
msgstr "Sertifikatet er utløpt"
#: ../js/ui/telepathyClient.js:1301
#: ../js/ui/telepathyClient.js:1299
msgid "Certificate not activated"
msgstr "Sertifikatet er ikke aktivert"
#: ../js/ui/telepathyClient.js:1303
#: ../js/ui/telepathyClient.js:1301
msgid "Certificate hostname mismatch"
msgstr "Feil vertsnavn for sertifikat"
#: ../js/ui/telepathyClient.js:1305
#: ../js/ui/telepathyClient.js:1303
msgid "Certificate fingerprint mismatch"
msgstr "Feil fingeravtrykk for sertifikat"
#: ../js/ui/telepathyClient.js:1307
#: ../js/ui/telepathyClient.js:1305
msgid "Certificate self-signed"
msgstr "Sertifikatet er selvsignert"
#: ../js/ui/telepathyClient.js:1309
#: ../js/ui/telepathyClient.js:1307
msgid "Status is set to offline"
msgstr "Status er satt til frakoblet"
#: ../js/ui/telepathyClient.js:1311
#: ../js/ui/telepathyClient.js:1309
msgid "Encryption is not available"
msgstr "Kryptering er ikke tilgjengelig"
#: ../js/ui/telepathyClient.js:1313
#: ../js/ui/telepathyClient.js:1311
msgid "Certificate is invalid"
msgstr "Sertifikatet er ugyldig"
#: ../js/ui/telepathyClient.js:1315
#: ../js/ui/telepathyClient.js:1313
msgid "Connection has been refused"
msgstr "Tilkobling ble nektet"
#: ../js/ui/telepathyClient.js:1317
#: ../js/ui/telepathyClient.js:1315
msgid "Connection can't be established"
msgstr "Tilkobling kan ikke etableres"
#: ../js/ui/telepathyClient.js:1319
#: ../js/ui/telepathyClient.js:1317
msgid "Connection has been lost"
msgstr "Tilkobling tapt"
#: ../js/ui/telepathyClient.js:1321
#: ../js/ui/telepathyClient.js:1319
msgid "This account is already connected to the server"
msgstr "Denne kontoen er allerede koblet til tjeneren"
#: ../js/ui/telepathyClient.js:1323
#: ../js/ui/telepathyClient.js:1321
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
#: ../js/ui/telepathyClient.js:1325
#: ../js/ui/telepathyClient.js:1323
msgid "The account already exists on the server"
msgstr "Kontoen eksisterer allerede på tjeneren"
#: ../js/ui/telepathyClient.js:1327
#: ../js/ui/telepathyClient.js:1325
msgid "Server is currently too busy to handle the connection"
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
#: ../js/ui/telepathyClient.js:1329
#: ../js/ui/telepathyClient.js:1327
msgid "Certificate has been revoked"
msgstr "Sertifikatet er tilbaketrukket"
#: ../js/ui/telepathyClient.js:1331
#: ../js/ui/telepathyClient.js:1329
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1331
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1584,26 +1575,26 @@ msgstr ""
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
"kryptografibiblioteket"
#: ../js/ui/telepathyClient.js:1335
#: ../js/ui/telepathyClient.js:1333
msgid "Internal error"
msgstr "Intern feil"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1345
#: ../js/ui/telepathyClient.js:1343
#, c-format
msgid "Connection to %s failed"
msgstr "Tilkobling til %s feilet"
#: ../js/ui/telepathyClient.js:1354
#: ../js/ui/telepathyClient.js:1352
msgid "Reconnect"
msgstr "Koble til på nytt"
#: ../js/ui/telepathyClient.js:1355
#: ../js/ui/telepathyClient.js:1353
msgid "Edit account"
msgstr "Rediger konto"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1399
msgid "Unknown reason"
msgstr "Ukjent årsak"

2643
po/oc.po Normal file

File diff suppressed because it is too large Load Diff

649
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -27,10 +27,8 @@ CLEANFILES += $(service_DATA)
CLEANFILES += $(gir_DATA) $(typelib_DATA)
bin_SCRIPTS += gnome-shell-extension-tool gnome-shell-extension-prefs \
gnome-shell-perf-tool
EXTRA_DIST += gnome-shell-extension-tool.in gnome-shell-extension-prefs.in \
gnome-shell-perf-tool.in
bin_SCRIPTS += gnome-shell-extension-tool gnome-shell-extension-prefs
EXTRA_DIST += gnome-shell-extension-tool.in gnome-shell-extension-prefs.in
bin_PROGRAMS = gnome-shell-real
if USE_JHBUILD_WRAPPER_SCRIPT
@ -55,6 +53,7 @@ generated_script_substitutions = \
-e "s|@libexecdir[@]|$(libexecdir)|g" \
-e "s|@libdir[@]|$(libdir)|g" \
-e "s|@pkglibdir[@]|$(pkglibdir)|g" \
-e "s|@JHBUILD_TYPELIBDIR[@]|$(JHBUILD_TYPELIBDIR)|g" \
-e "s|@pkgdatadir[@]|$(pkgdatadir)|g" \
-e "s|@PYTHON[@]|$(PYTHON)|g" \
-e "s|@VERSION[@]|$(VERSION)|g" \
@ -72,9 +71,6 @@ gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile
gnome-shell-extension-prefs: gnome-shell-extension-prefs.in Makefile
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
gnome-shell-perf-tool: gnome-shell-perf-tool.in Makefile
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
CLEANFILES += gnome-shell $(bin_SCRIPTS)
include Makefile-st.am
@ -191,7 +187,7 @@ libgnome_shell_la_gir_sources = \
gnome_shell_real_SOURCES = \
main.c
gnome_shell_real_CPPFLAGS = $(gnome_shell_cflags)
gnome_shell_real_LDADD = libgnome-shell.la $(libgnome_shell_la_LIBADD)
gnome_shell_real_LDADD = libgnome-shell.la libgnome-shell-js.la $(libgnome_shell_la_LIBADD)
gnome_shell_real_DEPENDENCIES = libgnome-shell.la
EXTRA_DIST += test-gapplication.js

View File

@ -94,20 +94,8 @@ static gchar **
g_action_muxer_list_actions (GActionGroup *action_group)
{
GActionMuxer *muxer = G_ACTION_MUXER (action_group);
GHashTableIter iter;
gchar *key;
gchar **keys;
gsize i;
keys = g_new (gchar *, g_hash_table_size (muxer->actions) + 1);
i = 0;
g_hash_table_iter_init (&iter, muxer->actions);
while (g_hash_table_iter_next (&iter, (gpointer *) &key, NULL))
keys[i++] = g_strdup (key);
keys[i] = NULL;
return keys;
return (gchar **) muxer->groups;
}
static Group *

View File

@ -1,13 +1,30 @@
#!@PYTHON@
# -*- mode: Python; indent-tabs-mode: nil; -*-
import atexit
import datetime
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
try:
import json
except ImportError:
try:
import simplejson as json
except ImportError:
json = None
import optparse
import os
import random
import re
import shutil
import signal
import subprocess
import sys
import tempfile
import termios
import time
import errno
def show_version(option, opt_str, value, parser):
print "GNOME Shell @VERSION@"
@ -62,24 +79,168 @@ def get_running_session_environs():
result[key] = environs[key]
return result
def start_shell():
_bus = None
_bus_iface = None
_name_owner_changed_hook = None
def on_name_owner_changed(name, prev_owner, new_owner):
if _name_owner_changed_hook:
_name_owner_changed_hook(name, prev_owner, new_owner)
def get_bus():
global _bus
if _bus is None:
dbus_loop = DBusGMainLoop()
_bus = dbus.SessionBus(mainloop=dbus_loop)
return _bus
def get_bus_iface():
global _bus_iface
if _bus_iface is None:
bus = get_bus()
bus_proxy = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
_bus_iface = dbus.Interface(bus_proxy, 'org.freedesktop.DBus')
_bus_iface.connect_to_signal('NameOwnerChanged', on_name_owner_changed)
return _bus_iface
def wait_for_dbus_name(wait_name):
global _name_owner_changed_hook
bus_iface = get_bus_iface()
loop = gobject.MainLoop()
def on_name_owner_changed(name, prev_owner, new_owner):
if not (name == wait_name and new_owner != ''):
return
loop.quit()
return
_name_owner_changed_hook = on_name_owner_changed
def on_timeout():
print "\nFailed to start %s: timed out" % (wait_name,)
sys.exit(1)
gobject.timeout_add_seconds(7, on_timeout)
loop.run()
_name_owner_changed_hook = None
def start_dconf_await_service():
DCONF_NAME = 'ca.desrt.dconf'
bus = get_bus()
get_bus_iface() # connect to NameOwnerChanged signal
# See if the service is already running or normal D-Bus activation works
need_manual_activate = False
try:
dconf_proxy = bus.get_object(DCONF_NAME, '/')
dconf_proxy.Ping(dbus_interface='org.freedesktop.DBus.Peer')
except dbus.exceptions.DBusException, e:
if e.get_dbus_name() == 'org.freedesktop.DBus.Error.ServiceUnknown':
need_manual_activate = True
else:
raise e
if not need_manual_activate:
return
# At this point, it looks like we just have a jhbuild install
# of dconf, not known to the session dbus-daemon, so we start
# it manually and wait for it to join the bus
print "Starting dconf-service... ",
sys.stdout.flush()
# dconf is linked without libtool, so unlike other GNOME modules,
# won't have an embedded rpath for its library directory.
env = dict(os.environ)
if 'LD_LIBRARY_PATH' in env and env['LD_LIBRARY_PATH']:
ld_library_path = '@libdir@:' + env['LD_LIBRARY_PATH']
else:
ld_library_path = '@libdir@'
env['LD_LIBRARY_PATH'] = ld_library_path
dconf_path = os.path.join('@libexecdir@', 'dconf-service')
try:
subprocess.Popen([dconf_path, '--keep-alive'], env=env)
except OSError, e:
print "\nFailed to start %s: %s" % (dconf_path, e)
sys.exit(1)
wait_for_dbus_name (DCONF_NAME)
PERF_HELPER_NAME = "org.gnome.Shell.PerfHelper"
PERF_HELPER_IFACE = "org.gnome.Shell.PerfHelper"
PERF_HELPER_PATH = "/org/gnome/Shell/PerfHelper"
def start_perf_helper():
get_bus_iface() # connect to NameOwnerChanged signal
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
running_from_source_tree = os.path.exists(os.path.join(self_dir, 'gnome-shell-jhbuild.in'))
if running_from_source_tree:
perf_helper_path = os.path.join(self_dir, "gnome-shell-perf-helper")
else:
perf_helper_path = "@libexecdir@/gnome-shell-perf-helper"
subprocess.Popen([perf_helper_path])
wait_for_dbus_name (PERF_HELPER_NAME)
def stop_perf_helper():
bus = get_bus()
proxy = bus.get_object(PERF_HELPER_NAME, PERF_HELPER_PATH)
proxy.Exit(dbus_interface=PERF_HELPER_IFACE)
def start_shell(perf_output=None):
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
if os.path.exists(os.path.join(self_dir, 'gnome-shell-jhbuild.in')):
running_from_source_tree = True
top_dir = os.path.dirname(self_dir)
typelib_dir = '@JHBUILD_TYPELIBDIR@:' + os.path.join(top_dir, "src")
js_dir = os.path.join(top_dir, "js")
data_dir = os.path.join(top_dir, "data")
else:
running_from_source_tree = False
js_dir = os.path.join('@pkgdatadir@', 'js')
typelib_dir = '@JHBUILD_TYPELIBDIR@'
if os.environ.has_key('GI_TYPELIB_PATH'):
typelib_dir = typelib_dir + ":" + os.environ.get('GI_TYPELIB_PATH')
# Set up environment
env = dict(os.environ)
# TODO: Fix this, since nothing prevents it from propagating to child
# processes. Why is it even here?
env.update({'GNOME_DISABLE_CRASH_DIALOG' : '1'})
# This stuff should really should only happen when running
# uninstalled, i.e. it should be in the conditional
# below. Otherwise it's just a bad reimplementation of "jhbuild
# run". See bug #642084
env.update({'GNOME_SHELL_JS' : js_dir,
'PATH' : '@bindir@:' + os.environ.get('PATH', ''),
'GI_TYPELIB_PATH' : typelib_dir,
'XDG_CONFIG_DIRS' : '@sysconfdir@/xdg:' + (os.environ.get('XDG_CONFIG_DIRS') or '/etc/xdg'),
'XDG_DATA_DIRS' : '@datadir@:' + (os.environ.get('XDG_DATA_DIRS') or '/usr/local/share:/usr/share')})
if running_from_source_tree:
top_dir = os.path.dirname(self_dir)
env.update({'GNOME_SHELL_BINDIR' : self_dir,
'GNOME_SHELL_DATADIR' : data_dir,
'GSETTINGS_SCHEMA_DIR' : data_dir })
else:
# This is just broken to set in the installed case; see bug #642084
env.update({'GSETTINGS_SCHEMA_DIR' : os.path.join('@datadir@', 'glib-2.0', 'schemas')})
typelib_dir = os.path.join(top_dir, "src")
if 'GI_TYPELIB_PATH' in os.environ:
typelib_dir += ':%s' % (os.environ['GI_TYPELIB_PATH'],)
# Also plain broken to set in the normal installed case
jhbuild_gconf_source = os.path.join('@sysconfdir@', 'gconf/2/path.jhbuild')
if os.path.exists(jhbuild_gconf_source):
env['GCONF_DEFAULT_SOURCE_PATH'] = jhbuild_gconf_source
env.update({'GNOME_SHELL_JS' : os.path.join(top_dir, "js"),
'GNOME_SHELL_BINDIR' : self_dir,
'GI_TYPELIB_PATH' : typelib_dir,
'GNOME_SHELL_DATADIR' : os.path.join(top_dir, "data"),
'GSETTINGS_SCHEMA_DIR' : os.path.join(top_dir, "data") })
if options.perf is not None:
env['SHELL_PERF_MODULE'] = options.perf
env['MUTTER_WM_CLASS_FILTER'] = 'Gnome-shell-perf-helper'
if perf_output is not None:
env['SHELL_PERF_OUTPUT'] = perf_output
args = []
if options.debug:
@ -95,7 +256,22 @@ def start_shell():
args.append('--sync')
return subprocess.Popen(args, env=env)
def run_shell():
def _killall(processname):
subprocess.call(['pkill', '-u', '%d' % (os.getuid(), ),
'-f', r'^([^ ]*/)?' + re.escape(processname) + '($| )'])
def ensure_desktop_infrastructure_state():
# This is a collection of random hacks necessary to make sure
# that we can run in jhbuild scenarios or when dynamically
# replacing GNOME 2.
start_dconf_await_service()
# We need to terminate notification-daemon
_killall('notification-daemon')
_killall('notify-osd')
def run_shell(perf_output=None):
if options.debug:
# Record initial terminal state so we can reset it to that
# later, in case we kill gdb at a bad time
@ -106,9 +282,8 @@ def run_shell():
if options.verbose:
print "Starting shell"
shell = None
try:
shell = start_shell()
shell = start_shell(perf_output=perf_output)
# Wait for shell to exit
if options.verbose:
@ -142,6 +317,248 @@ def run_shell():
return normal_exit
def upload_performance_report(report_text):
# Local imports to avoid impacting gnome-shell startup time
import base64
from ConfigParser import RawConfigParser
import hashlib
import hmac
import httplib
import urlparse
import urllib
try:
config_home = os.environ['XDG_CONFIG_HOME']
except KeyError:
config_home = None
if not config_home:
config_home = os.path.expanduser("~/.config")
config_file = os.path.join(config_home, "gnome-shell/perf.ini")
try:
config = RawConfigParser()
f = open(config_file)
config.readfp(f)
f.close()
base_url = config.get('upload', 'url')
system_name = config.get('upload', 'name')
secret_key = config.get('upload', 'key')
except Exception, e:
print "Can't read upload configuration from %s: %s" % (config_file, str(e))
sys.exit(1)
# Determine host, port and upload URL from provided data, we're
# a bit extra-careful about normalization since the URL is part
# of the signature.
split = urlparse.urlsplit(base_url)
scheme = split[0].lower()
netloc = split[1]
base_path = split[2]
m = re.match(r'^(.*?)(?::(\d+))?$', netloc)
if m.group(2):
host, port = m.group(1), int(m.group(2))
else:
host, port = m.group(1), None
if scheme != "http":
print "'%s' is not a HTTP URL" % base_url
sys.exit(1)
if port is None:
port = 80
if base_path.endswith('/'):
base_path = base_path[:-1]
if port == 80:
normalized_base = "%s://%s%s" % (scheme, host, base_path)
else:
normalized_base = "%s://%s:%d%s" % (scheme, host, port, base_path)
upload_url = normalized_base + '/system/%s/upload' % system_name
upload_path = urlparse.urlsplit(upload_url)[2] # path portion
# Create signature based on upload URL and the report data
signature_data = 'POST&' + upload_url + "&&"
h = hmac.new(secret_key, digestmod=hashlib.sha1)
h.update(signature_data)
h.update(report_text)
signature = urllib.quote(base64.b64encode(h.digest()), "~")
headers = {
'User-Agent': 'gnome-shell',
'Content-Type': 'application/json',
'X-Shell-Signature': 'HMAC-SHA1 ' + signature
};
connection = httplib.HTTPConnection(host, port)
connection.request('POST', upload_path, report_text, headers)
response = connection.getresponse()
if response.status == 200:
print "Performance report upload succeeded"
else:
print "Performance report upload failed with status %d" % response.status
print response.read()
def run_performance_test():
iters = options.perf_iters
if options.perf_warmup:
iters += 1
logs = []
metric_summaries = {}
start_perf_helper()
for i in xrange(0, iters):
# We create an empty temporary file that the shell will overwrite
# with the contents.
handle, output_file = tempfile.mkstemp(".json", "gnome-shell-perf.")
os.close(handle)
# Run the performance test and collect the output as JSON
normal_exit = False
try:
normal_exit = run_shell(perf_output=output_file)
except:
stop_perf_helper()
raise
finally:
if not normal_exit:
os.remove(output_file)
if not normal_exit:
stop_perf_helper()
return False
try:
f = open(output_file)
output = json.load(f)
f.close()
except:
stop_perf_helper()
raise
finally:
os.remove(output_file)
# Grab the event definitions and monitor layout the first time around
if i == 0:
events = output['events']
monitors = output['monitors']
if options.perf_warmup and i == 0:
continue
for metric in output['metrics']:
name = metric['name']
if not name in metric_summaries:
summary = {}
summary['description'] = metric['description']
summary['units'] = metric['units']
summary['values'] = []
metric_summaries[name] = summary
else:
summary = metric_summaries[name]
summary['values'].append(metric['value'])
logs.append(output['log'])
stop_perf_helper()
if options.perf_output or options.perf_upload:
# Write a complete report, formatted as JSON. The Javascript/C code that
# generates the individual reports we are summarizing here is very careful
# to format them nicely, but we just dump out a compressed no-whitespace
# version here for simplicity. Using json.dump(indent=0) doesn't real
# improve the readability of the output much.
report = {
'date': datetime.datetime.utcnow().isoformat() + 'Z',
'events': events,
'monitors': monitors,
'metrics': metric_summaries,
'logs': logs
}
# Add the Git revision if available
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
if os.path.exists(os.path.join(self_dir, 'gnome-shell-jhbuild.in')):
top_dir = os.path.dirname(self_dir)
git_dir = os.path.join(top_dir, '.git')
if os.path.exists(git_dir):
env = dict(os.environ)
env['GIT_DIR'] = git_dir
revision = subprocess.Popen(['git', 'rev-parse', 'HEAD'],
env=env,
stdout=subprocess.PIPE).communicate()[0].strip()
report['revision'] = revision
if options.perf_output:
f = open(options.perf_output, 'w')
json.dump(report, f)
f.close()
if options.perf_upload:
upload_performance_report(json.dumps(report))
else:
# Write a human readable summary
print '------------------------------------------------------------';
for metric in sorted(metric_summaries.keys()):
summary = metric_summaries[metric]
print "#", summary['description']
print metric, ", ".join((str(x) for x in summary['values']))
print '------------------------------------------------------------';
return True
def restore_gnome():
# Do imports lazily to save time and memory
import gio
import gconf
# We don't want to start the new gnome-panel in the current
# directory; $HOME is better for stuff launched from it
os.chdir(os.path.expanduser("~"))
def launch_component(gconf_path):
client = gconf.client_get_default()
component = client.get_string(gconf_path)
if component == None or component == "":
return False
# See gnome-session/gsm-util.c:gsm_util_find_desktop_file_for_app_name()
# The one difference is that we don't search the autostart directories,
# and just search normal application search path. (Gio doesnt' know
# how to search the autostart dirs, so we'd have to do that ourselves.)
appinfo = None
try:
appinfo = gio.unix.DesktopAppInfo(component + ".desktop")
except:
try:
appinfo = gio.unix.DesktopAppInfo("gnome-" + component + ".desktop")
except:
pass
if appinfo:
appinfo.launch()
return True
return False
# GNOME2 fallback
wm = launch_component("/desktop/gnome/session/required_components/windowmanager")
panel = launch_component("/desktop/gnome/session/required_components/panel")
if not wm and not panel: # Probably GNOME3
subprocess.Popen(['gnome-shell'])
# Main program
parser = optparse.OptionParser()
@ -153,6 +570,17 @@ parser.add_option("", "--debug-command", metavar="COMMAND",
help="Command to use for debugging (defaults to 'gdb --args')")
parser.add_option("-v", "--verbose", action="store_true")
parser.add_option("", "--sync", action="store_true")
parser.add_option("", "--perf", metavar="PERF_MODULE",
help="Specify the name of a performance module to run")
parser.add_option("", "--perf-iters", type="int", metavar="ITERS",
help="Numbers of iterations of performance module to run",
default=1)
parser.add_option("", "--perf-warmup", action="store_true",
help="Run a dry run before performance tests")
parser.add_option("", "--perf-output", metavar="OUTPUT_FILE",
help="Output file to write performance report")
parser.add_option("", "--perf-upload", action="store_true",
help="Upload performance report to server")
parser.add_option("", "--version", action="callback", callback=show_version,
help="Display version and exit")
@ -162,6 +590,10 @@ if args:
parser.print_usage()
sys.exit(1)
if options.perf and json is None:
print 'The Python simplejson module is required for performance tests'
sys.exit(1)
# Handle ssh logins
if 'DISPLAY' not in os.environ:
running_env = get_running_session_environs()
@ -172,7 +604,21 @@ if options.debug_command:
elif options.debug:
options.debug_command = "gdb --args"
normal_exit = run_shell()
# We only respawn the previous environment on abnormal exit;
# for a clean exit, we assume that gnome-shell was replaced with
# something else.
normal_exit = False
try:
if options.perf:
normal_exit = run_performance_test()
else:
ensure_desktop_infrastructure_state()
normal_exit = run_shell()
finally:
if options.replace and (options.perf or not normal_exit):
restore_gnome()
if normal_exit:
sys.exit(0)
else:

View File

@ -1,310 +0,0 @@
#!@PYTHON@
# -*- mode: Python; indent-tabs-mode: nil; -*-
import datetime
from gi.repository import GLib, GObject, Gio
try:
import json
except ImportError:
import simplejson as json
import optparse
import os
import re
import subprocess
import sys
import tempfile
import base64
from ConfigParser import RawConfigParser
import hashlib
import hmac
import httplib
import urlparse
import urllib
def show_version(option, opt_str, value, parser):
print "GNOME Shell Performance Test @VERSION@"
sys.exit()
def wait_for_dbus_name(wait_name):
loop = GLib.MainLoop()
def on_name_appeared(connection, name, name_owner, *args):
if not (name == wait_name and new_owner != ''):
return
loop.quit()
return
watch_id = Gio.bus_watch_name(Gio.BusType.SESSION,
wait_name,
Gio.BusNameWatcherFlags.NONE,
on_name_appeared,
None)
def on_timeout():
print "\nFailed to start %s: timed out" % (wait_name,)
sys.exit(1)
GLib.timeout_add_seconds(7, on_timeout)
loop.run()
Gio.bus_unwatch_name(watch_id)
PERF_HELPER_NAME = "org.gnome.Shell.PerfHelper"
PERF_HELPER_IFACE = "org.gnome.Shell.PerfHelper"
PERF_HELPER_PATH = "/org/gnome/Shell/PerfHelper"
def start_perf_helper():
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
perf_helper_path = "@libexecdir@/gnome-shell-perf-helper"
subprocess.Popen([perf_helper_path])
wait_for_dbus_name (PERF_HELPER_NAME)
def stop_perf_helper():
proxy = Gio.DBusProxy(g_bus_type=Gio.BusType.SESSION,
g_name=PERF_HELPER_NAME,
g_interface=PERF_HELPER_IFACE,
g_object_path=PERF_HELPER_PATH)
proxy.Exit()
def start_shell(extra_args, perf_output=None):
# Set up environment
env = dict(os.environ)
env['SHELL_PERF_MODULE'] = options.perf
env['MUTTER_WM_CLASS_FILTER'] = 'Gnome-shell-perf-helper'
if perf_output is not None:
env['SHELL_PERF_OUTPUT'] = perf_output
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
args.append(os.path.join(self_dir, 'gnome-shell'))
# pass on any additional arguments
args += extra_args
return subprocess.Popen(args, env=env)
def run_shell(args, perf_output=None):
# we do no additional supervision of gnome-shell,
# beyond that of wait
# in particular, we don't kill the shell upon
# receving a KeyboardInterrupt, as we expect to be
# in the same process group
shell = start_shell(extra_args, perf_output=perf_output)
shell.wait()
return shell.returncode == 0
def upload_performance_report(report_text):
try:
config_home = os.environ['XDG_CONFIG_HOME']
except KeyError:
config_home = None
if not config_home:
config_home = os.path.expanduser("~/.config")
config_file = os.path.join(config_home, "gnome-shell/perf.ini")
try:
config = RawConfigParser()
f = open(config_file)
config.readfp(f)
f.close()
base_url = config.get('upload', 'url')
system_name = config.get('upload', 'name')
secret_key = config.get('upload', 'key')
except Exception, e:
print "Can't read upload configuration from %s: %s" % (config_file, str(e))
sys.exit(1)
# Determine host, port and upload URL from provided data, we're
# a bit extra-careful about normalization since the URL is part
# of the signature.
split = urlparse.urlsplit(base_url)
scheme = split[0].lower()
netloc = split[1]
base_path = split[2]
m = re.match(r'^(.*?)(?::(\d+))?$', netloc)
if m.group(2):
host, port = m.group(1), int(m.group(2))
else:
host, port = m.group(1), None
if scheme != "http":
print "'%s' is not a HTTP URL" % base_url
sys.exit(1)
if port is None:
port = 80
if base_path.endswith('/'):
base_path = base_path[:-1]
if port == 80:
normalized_base = "%s://%s%s" % (scheme, host, base_path)
else:
normalized_base = "%s://%s:%d%s" % (scheme, host, port, base_path)
upload_url = normalized_base + '/system/%s/upload' % system_name
upload_path = urlparse.urlsplit(upload_url)[2] # path portion
# Create signature based on upload URL and the report data
signature_data = 'POST&' + upload_url + "&&"
h = hmac.new(secret_key, digestmod=hashlib.sha1)
h.update(signature_data)
h.update(report_text)
signature = urllib.quote(base64.b64encode(h.digest()), "~")
headers = {
'User-Agent': 'gnome-shell-performance-tool/@VERSION@',
'Content-Type': 'application/json',
'X-Shell-Signature': 'HMAC-SHA1 ' + signature
};
connection = httplib.HTTPConnection(host, port)
connection.request('POST', upload_path, report_text, headers)
response = connection.getresponse()
if response.status == 200:
print "Performance report upload succeeded"
else:
print "Performance report upload failed with status %d" % response.status
print response.read()
def run_performance_test(args):
iters = options.perf_iters
if options.perf_warmup:
iters += 1
logs = []
metric_summaries = {}
start_perf_helper()
for i in xrange(0, iters):
# We create an empty temporary file that the shell will overwrite
# with the contents.
handle, output_file = tempfile.mkstemp(".json", "gnome-shell-perf.")
os.close(handle)
# Run the performance test and collect the output as JSON
normal_exit = False
try:
normal_exit = run_shell(args, perf_output=output_file)
except:
stop_perf_helper()
raise
finally:
if not normal_exit:
os.remove(output_file)
if not normal_exit:
stop_perf_helper()
return False
try:
f = open(output_file)
output = json.load(f)
f.close()
except:
stop_perf_helper()
raise
finally:
os.remove(output_file)
# Grab the event definitions and monitor layout the first time around
if i == 0:
events = output['events']
monitors = output['monitors']
if options.perf_warmup and i == 0:
continue
for metric in output['metrics']:
name = metric['name']
if not name in metric_summaries:
summary = {}
summary['description'] = metric['description']
summary['units'] = metric['units']
summary['values'] = []
metric_summaries[name] = summary
else:
summary = metric_summaries[name]
summary['values'].append(metric['value'])
logs.append(output['log'])
stop_perf_helper()
if options.perf_output or options.perf_upload:
# Write a complete report, formatted as JSON. The Javascript/C code that
# generates the individual reports we are summarizing here is very careful
# to format them nicely, but we just dump out a compressed no-whitespace
# version here for simplicity. Using json.dump(indent=0) doesn't real
# improve the readability of the output much.
report = {
'date': datetime.datetime.utcnow().isoformat() + 'Z',
'events': events,
'monitors': monitors,
'metrics': metric_summaries,
'logs': logs
}
# Add the Git revision if available
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
if os.path.exists(os.path.join(self_dir, 'gnome-shell-jhbuild.in')):
top_dir = os.path.dirname(self_dir)
git_dir = os.path.join(top_dir, '.git')
if os.path.exists(git_dir):
env = dict(os.environ)
env['GIT_DIR'] = git_dir
revision = subprocess.Popen(['git', 'rev-parse', 'HEAD'],
env=env,
stdout=subprocess.PIPE).communicate()[0].strip()
report['revision'] = revision
if options.perf_output:
f = open(options.perf_output, 'w')
json.dump(report, f)
f.close()
if options.perf_upload:
upload_performance_report(json.dumps(report))
else:
# Write a human readable summary
print '------------------------------------------------------------';
for metric in sorted(metric_summaries.keys()):
summary = metric_summaries[metric]
print "#", summary['description']
print metric, ", ".join((str(x) for x in summary['values']))
print '------------------------------------------------------------';
return True
# Main program
parser = optparse.OptionParser()
parser.add_option("", "--perf", metavar="PERF_MODULE",
help="Specify the name of a performance module to run")
parser.add_option("", "--perf-iters", type="int", metavar="ITERS",
help="Numbers of iterations of performance module to run",
default=1)
parser.add_option("", "--perf-warmup", action="store_true",
help="Run a dry run before performance tests")
parser.add_option("", "--perf-output", metavar="OUTPUT_FILE",
help="Output file to write performance report")
parser.add_option("", "--perf-upload", action="store_true",
help="Upload performance report to server")
parser.add_option("", "--version", action="callback", callback=show_version,
help="Display version and exit")
options, args = parser.parse_args()
normal_exit = run_performance_test(args)
if normal_exit:
sys.exit(0)
else:
sys.exit(1)

View File

@ -40,6 +40,9 @@
#include "shell-perf-log.h"
#include "shell-wm-private.h"
static void gnome_shell_plugin_dispose (GObject *object);
static void gnome_shell_plugin_finalize (GObject *object);
static void gnome_shell_plugin_start (MetaPlugin *plugin);
static void gnome_shell_plugin_minimize (MetaPlugin *plugin,
MetaWindowActor *actor);
@ -112,8 +115,12 @@ G_DEFINE_TYPE (GnomeShellPlugin, gnome_shell_plugin, META_TYPE_PLUGIN)
static void
gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
MetaPluginClass *plugin_class = META_PLUGIN_CLASS (klass);
gobject_class->dispose = gnome_shell_plugin_dispose;
gobject_class->finalize = gnome_shell_plugin_finalize;
plugin_class->start = gnome_shell_plugin_start;
plugin_class->map = gnome_shell_plugin_map;
plugin_class->minimize = gnome_shell_plugin_minimize;
@ -195,6 +202,18 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
}
}
static void
gnome_shell_plugin_dispose (GObject *object)
{
G_OBJECT_CLASS(gnome_shell_plugin_parent_class)->dispose (object);
}
static void
gnome_shell_plugin_finalize (GObject *object)
{
G_OBJECT_CLASS(gnome_shell_plugin_parent_class)->finalize (object);
}
static ShellWM *
get_shell_wm (void)
{

View File

@ -24,6 +24,7 @@
#include "shell-a11y.h"
#include "shell-global.h"
#include "shell-global-private.h"
#include "shell-js.h"
#include "shell-perf-log.h"
#include "st.h"
@ -342,3 +343,18 @@ main (int argc, char **argv)
return ecode;
}
/* HACK:
Add a dummy function that calls into libgnome-shell-js.so to ensure it's
linked to /usr/bin/gnome-shell even when linking with --as-needed.
This function is never actually called.
https://bugzilla.gnome.org/show_bug.cgi?id=670477
*/
void _shell_link_to_shell_js (void);
void
_shell_link_to_shell_js (void)
{
shell_js_add_extension_importer (NULL, NULL, NULL, NULL);
}

View File

@ -608,42 +608,6 @@ shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
return NULL;
}
/**
* shell_app_system_lookup_wmclass:
* @system: a #ShellAppSystem
* @wmclass: A WM_CLASS value
*
* Find a valid application corresponding to a WM_CLASS value.
*
* Returns: (transfer none): A #ShellApp for @wmclass
*/
ShellApp *
shell_app_system_lookup_wmclass (ShellAppSystem *system,
const char *wmclass)
{
char *canonicalized;
char *desktop_file;
ShellApp *app;
if (wmclass == NULL)
return NULL;
canonicalized = g_ascii_strdown (wmclass, -1);
/* This handles "Fedora Eclipse", probably others.
* Note g_strdelimit is modify-in-place. */
g_strdelimit (canonicalized, " ", '-');
desktop_file = g_strconcat (canonicalized, ".desktop", NULL);
app = shell_app_system_lookup_heuristic_basename (system, desktop_file);
g_free (canonicalized);
g_free (desktop_file);
return app;
}
/**
* shell_app_system_get_all:
* @system:

View File

@ -49,8 +49,7 @@ ShellApp *shell_app_system_lookup_app_for_path (ShellAppSystem *
const char *desktop_path);
ShellApp *shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
const char *id);
ShellApp *shell_app_system_lookup_wmclass (ShellAppSystem *system,
const char *wmclass);
GSList *shell_app_system_get_all (ShellAppSystem *system);

View File

@ -409,7 +409,6 @@ shell_network_agent_set_password (ShellNetworkAgent *self,
priv = self->priv;
request = g_hash_table_lookup (priv->requests, request_id);
g_return_if_fail (request != NULL);
if (!request->is_vpn)
{
@ -439,7 +438,6 @@ shell_network_agent_respond (ShellNetworkAgent *self,
priv = self->priv;
request = g_hash_table_lookup (priv->requests, request_id);
g_return_if_fail (request != NULL);
if (response == SHELL_NETWORK_AGENT_USER_CANCELED)
{
@ -493,20 +491,10 @@ shell_network_agent_cancel_get_secrets (NMSecretAgent *agent,
gchar *request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
ShellAgentRequest *request = g_hash_table_lookup (priv->requests, request_id);
GError *error;
if (!request)
{
/* We've already sent the result, but the caller cancelled the
* operation before receiving that result.
*/
g_free (request_id);
return;
}
error = g_error_new (NM_SECRET_AGENT_ERROR,
NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
"Canceled by NetworkManager");
GError *error = g_error_new (NM_SECRET_AGENT_ERROR,
NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
"Canceled by NetworkManager");
request->callback (agent, request->connection, NULL, error, request->callback_data);
g_signal_emit (self, signals[SIGNAL_CANCEL_REQUEST], 0, request_id);

View File

@ -369,3 +369,9 @@ shell_decline_dispatch_op (TpAddDispatchOperationContext *context,
tp_add_dispatch_operation_context_fail (context, error);
g_error_free (error);
}
/* gjs doesn't cope with tp_proxy_get_invalidated() returning a GError */
gboolean shell_is_channel_invalidated (TpChannel *channel)
{
return tp_proxy_get_invalidated (channel) != NULL;
}

View File

@ -112,5 +112,7 @@ void shell_get_contact_events (TplLogManager *log_manager,
void shell_decline_dispatch_op (TpAddDispatchOperationContext *context,
const gchar *message);
gboolean shell_is_channel_invalidated (TpChannel *channel);
G_END_DECLS
#endif /* __SHELL_TP_CLIENT_H__ */

View File

@ -126,6 +126,30 @@ shell_window_tracker_class_init (ShellWindowTrackerClass *klass)
G_TYPE_NONE, 0);
}
/**
* get_appid_from_window:
*
* Turn the WM_CLASS property into our best guess at a .desktop file id.
*/
static char *
get_appid_from_window (MetaWindow *window)
{
const char *wmclass;
char *appid_guess;
wmclass = meta_window_get_wm_class (window);
if (!wmclass)
return NULL;
appid_guess = g_ascii_strdown (wmclass, -1);
/* This handles "Fedora Eclipse", probably others.
* Note g_strdelimit is modify-in-place. */
g_strdelimit (appid_guess, " ", '-');
return appid_guess;
}
/**
* shell_window_tracker_is_window_interesting:
*
@ -177,6 +201,40 @@ shell_window_tracker_is_window_interesting (MetaWindow *window)
return TRUE;
}
/**
* get_app_from_window_wmclass:
*
* Looks only at the given window, and attempts to determine
* an application based on WM_CLASS. If one can't be determined,
* return %NULL.
*
* Return value: (transfer full): A newly-referenced #ShellApp, or %NULL
*/
static ShellApp *
get_app_from_window_wmclass (MetaWindow *window)
{
ShellApp *app;
ShellAppSystem *appsys;
char *wmclass;
char *with_desktop;
appsys = shell_app_system_get_default ();
wmclass = get_appid_from_window (window);
if (!wmclass)
return NULL;
with_desktop = g_strjoin (NULL, wmclass, ".desktop", NULL);
g_free (wmclass);
app = shell_app_system_lookup_heuristic_basename (appsys, with_desktop);
if (app != NULL)
g_object_ref (app);
g_free (with_desktop);
return app;
}
/**
* get_app_from_window_group:
* @monitor: a #ShellWindowTracker
@ -270,12 +328,9 @@ static ShellApp *
get_app_for_window (ShellWindowTracker *tracker,
MetaWindow *window)
{
ShellAppSystem *app_system;
ShellApp *result = NULL;
const char *startup_id;
app_system = shell_app_system_get_default ();
/* First, we check whether we already know about this window,
* if so, just return that.
*/
@ -296,8 +351,7 @@ get_app_for_window (ShellWindowTracker *tracker,
/* Check if the app's WM_CLASS specifies an app; this is
* canonical if it does.
*/
result = shell_app_system_lookup_wmclass (app_system,
meta_window_get_wm_class (window));
result = get_app_from_window_wmclass (window);
if (result != NULL)
return result;

View File

@ -85,11 +85,23 @@ st_bin_remove (ClutterContainer *container,
st_bin_set_child (ST_BIN (container), NULL);
}
static void
st_bin_foreach (ClutterContainer *container,
ClutterCallback callback,
gpointer user_data)
{
StBinPrivate *priv = ST_BIN (container)->priv;
if (priv->child)
callback (priv->child, user_data);
}
static void
clutter_container_iface_init (ClutterContainerIface *iface)
{
iface->add = st_bin_add;
iface->remove = st_bin_remove;
iface->foreach = st_bin_foreach;
}
static void

View File

@ -444,12 +444,14 @@ st_scroll_bar_scroll_event (ClutterActor *actor,
ClutterScrollEvent *event)
{
StScrollBarPrivate *priv = ST_SCROLL_BAR (actor)->priv;
gdouble step, value, delta_x, delta_y;
gdouble lower, step, upper, value, delta_x, delta_y;
if (priv->adjustment)
{
g_object_get (priv->adjustment,
"lower", &lower,
"step-increment", &step,
"upper", &upper,
"value", &value,
NULL);
}
@ -470,11 +472,17 @@ st_scroll_bar_scroll_event (ClutterActor *actor,
break;
case CLUTTER_SCROLL_UP:
case CLUTTER_SCROLL_LEFT:
st_adjustment_set_value (priv->adjustment, value - step);
if (value == lower)
return FALSE;
else
st_adjustment_set_value (priv->adjustment, value - step);
break;
case CLUTTER_SCROLL_DOWN:
case CLUTTER_SCROLL_RIGHT:
st_adjustment_set_value (priv->adjustment, value + step);
if (value == upper)
return FALSE;
else
st_adjustment_set_value (priv->adjustment, value + step);
break;
}

View File

@ -687,7 +687,7 @@ st_scroll_view_scroll_event (ClutterActor *self,
ClutterScrollEvent *event)
{
StScrollViewPrivate *priv = ST_SCROLL_VIEW (self)->priv;
gdouble value, step, hvalue, vvalue, delta_x, delta_y;
gdouble lower, value, upper, step, hvalue, vvalue, delta_x, delta_y;
/* don't handle scroll events if requested not to */
if (!priv->mouse_scroll)
@ -708,15 +708,19 @@ st_scroll_view_scroll_event (ClutterActor *self,
case CLUTTER_SCROLL_UP:
case CLUTTER_SCROLL_DOWN:
g_object_get (priv->vadjustment,
"lower", &lower,
"step-increment", &step,
"value", &value,
"upper", &upper,
NULL);
break;
case CLUTTER_SCROLL_LEFT:
case CLUTTER_SCROLL_RIGHT:
g_object_get (priv->hadjustment,
"lower", &lower,
"step-increment", &step,
"value", &value,
"upper", &upper,
NULL);
break;
}
@ -728,16 +732,28 @@ st_scroll_view_scroll_event (ClutterActor *self,
st_adjustment_set_value (priv->vadjustment, vvalue + delta_y);
break;
case CLUTTER_SCROLL_UP:
st_adjustment_set_value (priv->vadjustment, value - step);
if (value == lower)
return FALSE;
else
st_adjustment_set_value (priv->vadjustment, value - step);
break;
case CLUTTER_SCROLL_DOWN:
st_adjustment_set_value (priv->vadjustment, value + step);
if (value == upper)
return FALSE;
else
st_adjustment_set_value (priv->vadjustment, value + step);
break;
case CLUTTER_SCROLL_LEFT:
st_adjustment_set_value (priv->hadjustment, value - step);
if (value == lower)
return FALSE;
else
st_adjustment_set_value (priv->hadjustment, value - step);
break;
case CLUTTER_SCROLL_RIGHT:
st_adjustment_set_value (priv->hadjustment, value + step);
if (value == upper)
return FALSE;
else
st_adjustment_set_value (priv->hadjustment, value + step);
break;
}

View File

@ -1782,7 +1782,7 @@ st_theme_node_paint_sliced_border_image (StThemeNode *node,
cogl_set_source (material);
{
float rectangles[] =
GLfloat rectangles[] =
{
/* top left corner */
0, 0, border_left, border_top,

View File

@ -7,19 +7,12 @@
/* Very simple test of the ShellRecorder class; shows some text strings
* moving around and records it.
*/
static ShellRecorder *recorder = NULL;
static ShellRecorder *recorder;
static gboolean
stop_recording_timeout (gpointer data)
{
if (recorder)
{
shell_recorder_close (recorder);
g_object_unref (recorder);
}
clutter_main_quit ();
shell_recorder_close (recorder);
return FALSE;
}
@ -29,15 +22,6 @@ on_animation_completed (ClutterAnimation *animation)
g_timeout_add (1000, stop_recording_timeout, NULL);
}
static void
on_stage_realized (ClutterActor *stage,
gpointer data)
{
recorder = shell_recorder_new (CLUTTER_STAGE (stage));
shell_recorder_set_filename (recorder, "test-recorder.ogg");
shell_recorder_record (recorder);
}
int main (int argc, char **argv)
{
ClutterActor *stage;
@ -64,8 +48,8 @@ int main (int argc, char **argv)
animation = clutter_actor_animate (text,
CLUTTER_EASE_IN_OUT_QUAD,
3000,
"x", 320.0,
"y", 240.0,
"x", 320,
"y", 240,
NULL);
g_signal_connect (animation, "completed",
G_CALLBACK (on_animation_completed), NULL);
@ -74,42 +58,41 @@ int main (int argc, char **argv)
"text", "Blue",
"font-name", "Sans 40px",
"color", &blue,
"x", 640.0,
"y", 0.0,
"x", 640,
"y", 0,
NULL);
clutter_actor_set_anchor_point_from_gravity (text, CLUTTER_GRAVITY_NORTH_EAST);
clutter_actor_add_child (stage, text);
animation = clutter_actor_animate (text,
CLUTTER_EASE_IN_OUT_QUAD,
3000,
"x", 320.0,
"y", 240.0,
"x", 320,
"y", 240,
NULL);
text = g_object_new (CLUTTER_TYPE_TEXT,
"text", "Green",
"font-name", "Sans 40px",
"color", &green,
"x", 0.0,
"y", 480.0,
"x", 0,
"y", 480,
NULL);
clutter_actor_set_anchor_point_from_gravity (text, CLUTTER_GRAVITY_SOUTH_WEST);
clutter_actor_add_child (stage, text);
animation = clutter_actor_animate (text,
CLUTTER_EASE_IN_OUT_QUAD,
3000,
"x", 320.0,
"y", 240.0,
"x", 320,
"y", 240,
NULL);
g_signal_connect_after (stage, "realize",
G_CALLBACK (on_stage_realized), NULL);
recorder = shell_recorder_new (CLUTTER_STAGE (stage));
shell_recorder_set_filename (recorder, "test-recorder.ogg");
clutter_actor_show (stage);
shell_recorder_record (recorder);
clutter_main ();
g_object_unref (stage);
return 0;
}