Imported Upstream version 0.4.0
George Kiagiadakis
11 years ago
0 | project(ktp-call-ui) | |
1 | ||
2 | set(IS_KTP_INTERNAL_MODULE TRUE) | |
3 | ||
4 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) | |
5 | ||
6 | find_package(KDE4 REQUIRED) | |
7 | find_package(TelepathyQt4 REQUIRED) | |
8 | find_package(TelepathyQt4Farstream REQUIRED) | |
9 | find_package(KTp REQUIRED) | |
10 | find_package(QtGStreamer REQUIRED) | |
11 | find_package(PkgConfig REQUIRED) | |
12 | ||
13 | include_directories( | |
14 | ${KDE4_INCLUDES} | |
15 | ${TELEPATHY_QT4_INCLUDE_DIR} | |
16 | ${KTP_INCLUDE_DIR} | |
17 | ${QTGSTREAMER_INCLUDES} | |
18 | ) | |
19 | add_definitions( | |
20 | ${KDE4_DEFINITIONS} | |
21 | ${QTGSTREAMER_DEFINITIONS} | |
22 | ) | |
23 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${QTGSTREAMER_FLAGS} ${KDE4_ENABLE_EXCEPTIONS}") | |
24 | ||
25 | add_subdirectory(libqtf) | |
26 | add_subdirectory(libktpcall) | |
27 | add_subdirectory(src) | |
28 | find_package(Msgfmt REQUIRED) | |
29 | find_package(Gettext REQUIRED) | |
30 | add_subdirectory( po ) |
0 | GNU GENERAL PUBLIC LICENSE | |
1 | Version 2, June 1991 | |
2 | ||
3 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., | |
4 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
5 | Everyone is permitted to copy and distribute verbatim copies | |
6 | of this license document, but changing it is not allowed. | |
7 | ||
8 | Preamble | |
9 | ||
10 | The licenses for most software are designed to take away your | |
11 | freedom to share and change it. By contrast, the GNU General Public | |
12 | License is intended to guarantee your freedom to share and change free | |
13 | software--to make sure the software is free for all its users. This | |
14 | General Public License applies to most of the Free Software | |
15 | Foundation's software and to any other program whose authors commit to | |
16 | using it. (Some other Free Software Foundation software is covered by | |
17 | the GNU Lesser General Public License instead.) You can apply it to | |
18 | your programs, too. | |
19 | ||
20 | When we speak of free software, we are referring to freedom, not | |
21 | price. Our General Public Licenses are designed to make sure that you | |
22 | have the freedom to distribute copies of free software (and charge for | |
23 | this service if you wish), that you receive source code or can get it | |
24 | if you want it, that you can change the software or use pieces of it | |
25 | in new free programs; and that you know you can do these things. | |
26 | ||
27 | To protect your rights, we need to make restrictions that forbid | |
28 | anyone to deny you these rights or to ask you to surrender the rights. | |
29 | These restrictions translate to certain responsibilities for you if you | |
30 | distribute copies of the software, or if you modify it. | |
31 | ||
32 | For example, if you distribute copies of such a program, whether | |
33 | gratis or for a fee, you must give the recipients all the rights that | |
34 | you have. You must make sure that they, too, receive or can get the | |
35 | source code. And you must show them these terms so they know their | |
36 | rights. | |
37 | ||
38 | We protect your rights with two steps: (1) copyright the software, and | |
39 | (2) offer you this license which gives you legal permission to copy, | |
40 | distribute and/or modify the software. | |
41 | ||
42 | Also, for each author's protection and ours, we want to make certain | |
43 | that everyone understands that there is no warranty for this free | |
44 | software. If the software is modified by someone else and passed on, we | |
45 | want its recipients to know that what they have is not the original, so | |
46 | that any problems introduced by others will not reflect on the original | |
47 | authors' reputations. | |
48 | ||
49 | Finally, any free program is threatened constantly by software | |
50 | patents. We wish to avoid the danger that redistributors of a free | |
51 | program will individually obtain patent licenses, in effect making the | |
52 | program proprietary. To prevent this, we have made it clear that any | |
53 | patent must be licensed for everyone's free use or not licensed at all. | |
54 | ||
55 | The precise terms and conditions for copying, distribution and | |
56 | modification follow. | |
57 | ||
58 | GNU GENERAL PUBLIC LICENSE | |
59 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |
60 | ||
61 | 0. This License applies to any program or other work which contains | |
62 | a notice placed by the copyright holder saying it may be distributed | |
63 | under the terms of this General Public License. The "Program", below, | |
64 | refers to any such program or work, and a "work based on the Program" | |
65 | means either the Program or any derivative work under copyright law: | |
66 | that is to say, a work containing the Program or a portion of it, | |
67 | either verbatim or with modifications and/or translated into another | |
68 | language. (Hereinafter, translation is included without limitation in | |
69 | the term "modification".) Each licensee is addressed as "you". | |
70 | ||
71 | Activities other than copying, distribution and modification are not | |
72 | covered by this License; they are outside its scope. The act of | |
73 | running the Program is not restricted, and the output from the Program | |
74 | is covered only if its contents constitute a work based on the | |
75 | Program (independent of having been made by running the Program). | |
76 | Whether that is true depends on what the Program does. | |
77 | ||
78 | 1. You may copy and distribute verbatim copies of the Program's | |
79 | source code as you receive it, in any medium, provided that you | |
80 | conspicuously and appropriately publish on each copy an appropriate | |
81 | copyright notice and disclaimer of warranty; keep intact all the | |
82 | notices that refer to this License and to the absence of any warranty; | |
83 | and give any other recipients of the Program a copy of this License | |
84 | along with the Program. | |
85 | ||
86 | You may charge a fee for the physical act of transferring a copy, and | |
87 | you may at your option offer warranty protection in exchange for a fee. | |
88 | ||
89 | 2. You may modify your copy or copies of the Program or any portion | |
90 | of it, thus forming a work based on the Program, and copy and | |
91 | distribute such modifications or work under the terms of Section 1 | |
92 | above, provided that you also meet all of these conditions: | |
93 | ||
94 | a) You must cause the modified files to carry prominent notices | |
95 | stating that you changed the files and the date of any change. | |
96 | ||
97 | b) You must cause any work that you distribute or publish, that in | |
98 | whole or in part contains or is derived from the Program or any | |
99 | part thereof, to be licensed as a whole at no charge to all third | |
100 | parties under the terms of this License. | |
101 | ||
102 | c) If the modified program normally reads commands interactively | |
103 | when run, you must cause it, when started running for such | |
104 | interactive use in the most ordinary way, to print or display an | |
105 | announcement including an appropriate copyright notice and a | |
106 | notice that there is no warranty (or else, saying that you provide | |
107 | a warranty) and that users may redistribute the program under | |
108 | these conditions, and telling the user how to view a copy of this | |
109 | License. (Exception: if the Program itself is interactive but | |
110 | does not normally print such an announcement, your work based on | |
111 | the Program is not required to print an announcement.) | |
112 | ||
113 | These requirements apply to the modified work as a whole. If | |
114 | identifiable sections of that work are not derived from the Program, | |
115 | and can be reasonably considered independent and separate works in | |
116 | themselves, then this License, and its terms, do not apply to those | |
117 | sections when you distribute them as separate works. But when you | |
118 | distribute the same sections as part of a whole which is a work based | |
119 | on the Program, the distribution of the whole must be on the terms of | |
120 | this License, whose permissions for other licensees extend to the | |
121 | entire whole, and thus to each and every part regardless of who wrote it. | |
122 | ||
123 | Thus, it is not the intent of this section to claim rights or contest | |
124 | your rights to work written entirely by you; rather, the intent is to | |
125 | exercise the right to control the distribution of derivative or | |
126 | collective works based on the Program. | |
127 | ||
128 | In addition, mere aggregation of another work not based on the Program | |
129 | with the Program (or with a work based on the Program) on a volume of | |
130 | a storage or distribution medium does not bring the other work under | |
131 | the scope of this License. | |
132 | ||
133 | 3. You may copy and distribute the Program (or a work based on it, | |
134 | under Section 2) in object code or executable form under the terms of | |
135 | Sections 1 and 2 above provided that you also do one of the following: | |
136 | ||
137 | a) Accompany it with the complete corresponding machine-readable | |
138 | source code, which must be distributed under the terms of Sections | |
139 | 1 and 2 above on a medium customarily used for software interchange; or, | |
140 | ||
141 | b) Accompany it with a written offer, valid for at least three | |
142 | years, to give any third party, for a charge no more than your | |
143 | cost of physically performing source distribution, a complete | |
144 | machine-readable copy of the corresponding source code, to be | |
145 | distributed under the terms of Sections 1 and 2 above on a medium | |
146 | customarily used for software interchange; or, | |
147 | ||
148 | c) Accompany it with the information you received as to the offer | |
149 | to distribute corresponding source code. (This alternative is | |
150 | allowed only for noncommercial distribution and only if you | |
151 | received the program in object code or executable form with such | |
152 | an offer, in accord with Subsection b above.) | |
153 | ||
154 | The source code for a work means the preferred form of the work for | |
155 | making modifications to it. For an executable work, complete source | |
156 | code means all the source code for all modules it contains, plus any | |
157 | associated interface definition files, plus the scripts used to | |
158 | control compilation and installation of the executable. However, as a | |
159 | special exception, the source code distributed need not include | |
160 | anything that is normally distributed (in either source or binary | |
161 | form) with the major components (compiler, kernel, and so on) of the | |
162 | operating system on which the executable runs, unless that component | |
163 | itself accompanies the executable. | |
164 | ||
165 | If distribution of executable or object code is made by offering | |
166 | access to copy from a designated place, then offering equivalent | |
167 | access to copy the source code from the same place counts as | |
168 | distribution of the source code, even though third parties are not | |
169 | compelled to copy the source along with the object code. | |
170 | ||
171 | 4. You may not copy, modify, sublicense, or distribute the Program | |
172 | except as expressly provided under this License. Any attempt | |
173 | otherwise to copy, modify, sublicense or distribute the Program is | |
174 | void, and will automatically terminate your rights under this License. | |
175 | However, parties who have received copies, or rights, from you under | |
176 | this License will not have their licenses terminated so long as such | |
177 | parties remain in full compliance. | |
178 | ||
179 | 5. You are not required to accept this License, since you have not | |
180 | signed it. However, nothing else grants you permission to modify or | |
181 | distribute the Program or its derivative works. These actions are | |
182 | prohibited by law if you do not accept this License. Therefore, by | |
183 | modifying or distributing the Program (or any work based on the | |
184 | Program), you indicate your acceptance of this License to do so, and | |
185 | all its terms and conditions for copying, distributing or modifying | |
186 | the Program or works based on it. | |
187 | ||
188 | 6. Each time you redistribute the Program (or any work based on the | |
189 | Program), the recipient automatically receives a license from the | |
190 | original licensor to copy, distribute or modify the Program subject to | |
191 | these terms and conditions. You may not impose any further | |
192 | restrictions on the recipients' exercise of the rights granted herein. | |
193 | You are not responsible for enforcing compliance by third parties to | |
194 | this License. | |
195 | ||
196 | 7. If, as a consequence of a court judgment or allegation of patent | |
197 | infringement or for any other reason (not limited to patent issues), | |
198 | conditions are imposed on you (whether by court order, agreement or | |
199 | otherwise) that contradict the conditions of this License, they do not | |
200 | excuse you from the conditions of this License. If you cannot | |
201 | distribute so as to satisfy simultaneously your obligations under this | |
202 | License and any other pertinent obligations, then as a consequence you | |
203 | may not distribute the Program at all. For example, if a patent | |
204 | license would not permit royalty-free redistribution of the Program by | |
205 | all those who receive copies directly or indirectly through you, then | |
206 | the only way you could satisfy both it and this License would be to | |
207 | refrain entirely from distribution of the Program. | |
208 | ||
209 | If any portion of this section is held invalid or unenforceable under | |
210 | any particular circumstance, the balance of the section is intended to | |
211 | apply and the section as a whole is intended to apply in other | |
212 | circumstances. | |
213 | ||
214 | It is not the purpose of this section to induce you to infringe any | |
215 | patents or other property right claims or to contest validity of any | |
216 | such claims; this section has the sole purpose of protecting the | |
217 | integrity of the free software distribution system, which is | |
218 | implemented by public license practices. Many people have made | |
219 | generous contributions to the wide range of software distributed | |
220 | through that system in reliance on consistent application of that | |
221 | system; it is up to the author/donor to decide if he or she is willing | |
222 | to distribute software through any other system and a licensee cannot | |
223 | impose that choice. | |
224 | ||
225 | This section is intended to make thoroughly clear what is believed to | |
226 | be a consequence of the rest of this License. | |
227 | ||
228 | 8. If the distribution and/or use of the Program is restricted in | |
229 | certain countries either by patents or by copyrighted interfaces, the | |
230 | original copyright holder who places the Program under this License | |
231 | may add an explicit geographical distribution limitation excluding | |
232 | those countries, so that distribution is permitted only in or among | |
233 | countries not thus excluded. In such case, this License incorporates | |
234 | the limitation as if written in the body of this License. | |
235 | ||
236 | 9. The Free Software Foundation may publish revised and/or new versions | |
237 | of the General Public License from time to time. Such new versions will | |
238 | be similar in spirit to the present version, but may differ in detail to | |
239 | address new problems or concerns. | |
240 | ||
241 | Each version is given a distinguishing version number. If the Program | |
242 | specifies a version number of this License which applies to it and "any | |
243 | later version", you have the option of following the terms and conditions | |
244 | either of that version or of any later version published by the Free | |
245 | Software Foundation. If the Program does not specify a version number of | |
246 | this License, you may choose any version ever published by the Free Software | |
247 | Foundation. | |
248 | ||
249 | 10. If you wish to incorporate parts of the Program into other free | |
250 | programs whose distribution conditions are different, write to the author | |
251 | to ask for permission. For software which is copyrighted by the Free | |
252 | Software Foundation, write to the Free Software Foundation; we sometimes | |
253 | make exceptions for this. Our decision will be guided by the two goals | |
254 | of preserving the free status of all derivatives of our free software and | |
255 | of promoting the sharing and reuse of software generally. | |
256 | ||
257 | NO WARRANTY | |
258 | ||
259 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | |
260 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN | |
261 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | |
262 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | |
263 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
264 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS | |
265 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE | |
266 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | |
267 | REPAIR OR CORRECTION. | |
268 | ||
269 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |
270 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | |
271 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | |
272 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | |
273 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | |
274 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | |
275 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | |
276 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | |
277 | POSSIBILITY OF SUCH DAMAGES. | |
278 | ||
279 | END OF TERMS AND CONDITIONS | |
280 | ||
281 | How to Apply These Terms to Your New Programs | |
282 | ||
283 | If you develop a new program, and you want it to be of the greatest | |
284 | possible use to the public, the best way to achieve this is to make it | |
285 | free software which everyone can redistribute and change under these terms. | |
286 | ||
287 | To do so, attach the following notices to the program. It is safest | |
288 | to attach them to the start of each source file to most effectively | |
289 | convey the exclusion of warranty; and each file should have at least | |
290 | the "copyright" line and a pointer to where the full notice is found. | |
291 | ||
292 | <one line to give the program's name and a brief idea of what it does.> | |
293 | Copyright (C) <year> <name of author> | |
294 | ||
295 | This program is free software; you can redistribute it and/or modify | |
296 | it under the terms of the GNU General Public License as published by | |
297 | the Free Software Foundation; either version 2 of the License, or | |
298 | (at your option) any later version. | |
299 | ||
300 | This program is distributed in the hope that it will be useful, | |
301 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
302 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
303 | GNU General Public License for more details. | |
304 | ||
305 | You should have received a copy of the GNU General Public License along | |
306 | with this program; if not, write to the Free Software Foundation, Inc., | |
307 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
308 | ||
309 | Also add information on how to contact you by electronic and paper mail. | |
310 | ||
311 | If the program is interactive, make it output a short notice like this | |
312 | when it starts in an interactive mode: | |
313 | ||
314 | Gnomovision version 69, Copyright (C) year name of author | |
315 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | |
316 | This is free software, and you are welcome to redistribute it | |
317 | under certain conditions; type `show c' for details. | |
318 | ||
319 | The hypothetical commands `show w' and `show c' should show the appropriate | |
320 | parts of the General Public License. Of course, the commands you use may | |
321 | be called something other than `show w' and `show c'; they could even be | |
322 | mouse-clicks or menu items--whatever suits your program. | |
323 | ||
324 | You should also get your employer (if you work as a programmer) or your | |
325 | school, if any, to sign a "copyright disclaimer" for the program, if | |
326 | necessary. Here is a sample; alter the names: | |
327 | ||
328 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program | |
329 | `Gnomovision' (which makes passes at compilers) written by James Hacker. | |
330 | ||
331 | <signature of Ty Coon>, 1 April 1989 | |
332 | Ty Coon, President of Vice | |
333 | ||
334 | This General Public License does not permit incorporating your program into | |
335 | proprietary programs. If your program is a subroutine library, you may | |
336 | consider it more useful to permit linking proprietary applications with the | |
337 | library. If this is what you want to do, use the GNU Lesser General | |
338 | Public License instead of this License. |
0 | ||
1 | GNU LESSER GENERAL PUBLIC LICENSE | |
2 | Version 2.1, February 1999 | |
3 | ||
4 | Copyright (C) 1991, 1999 Free Software Foundation, Inc. | |
5 | 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
6 | Everyone is permitted to copy and distribute verbatim copies | |
7 | of this license document, but changing it is not allowed. | |
8 | ||
9 | [This is the first released version of the Lesser GPL. It also counts | |
10 | as the successor of the GNU Library Public License, version 2, hence | |
11 | the version number 2.1.] | |
12 | ||
13 | Preamble | |
14 | ||
15 | The licenses for most software are designed to take away your | |
16 | freedom to share and change it. By contrast, the GNU General Public | |
17 | Licenses are intended to guarantee your freedom to share and change | |
18 | free software--to make sure the software is free for all its users. | |
19 | ||
20 | This license, the Lesser General Public License, applies to some | |
21 | specially designated software packages--typically libraries--of the | |
22 | Free Software Foundation and other authors who decide to use it. You | |
23 | can use it too, but we suggest you first think carefully about whether | |
24 | this license or the ordinary General Public License is the better | |
25 | strategy to use in any particular case, based on the explanations | |
26 | below. | |
27 | ||
28 | When we speak of free software, we are referring to freedom of use, | |
29 | not price. Our General Public Licenses are designed to make sure that | |
30 | you have the freedom to distribute copies of free software (and charge | |
31 | for this service if you wish); that you receive source code or can get | |
32 | it if you want it; that you can change the software and use pieces of | |
33 | it in new free programs; and that you are informed that you can do | |
34 | these things. | |
35 | ||
36 | To protect your rights, we need to make restrictions that forbid | |
37 | distributors to deny you these rights or to ask you to surrender these | |
38 | rights. These restrictions translate to certain responsibilities for | |
39 | you if you distribute copies of the library or if you modify it. | |
40 | ||
41 | For example, if you distribute copies of the library, whether gratis | |
42 | or for a fee, you must give the recipients all the rights that we gave | |
43 | you. You must make sure that they, too, receive or can get the source | |
44 | code. If you link other code with the library, you must provide | |
45 | complete object files to the recipients, so that they can relink them | |
46 | with the library after making changes to the library and recompiling | |
47 | it. And you must show them these terms so they know their rights. | |
48 | ||
49 | We protect your rights with a two-step method: (1) we copyright the | |
50 | library, and (2) we offer you this license, which gives you legal | |
51 | permission to copy, distribute and/or modify the library. | |
52 | ||
53 | To protect each distributor, we want to make it very clear that | |
54 | there is no warranty for the free library. Also, if the library is | |
55 | modified by someone else and passed on, the recipients should know | |
56 | that what they have is not the original version, so that the original | |
57 | author's reputation will not be affected by problems that might be | |
58 | introduced by others. | |
59 | ||
60 | Finally, software patents pose a constant threat to the existence of | |
61 | any free program. We wish to make sure that a company cannot | |
62 | effectively restrict the users of a free program by obtaining a | |
63 | restrictive license from a patent holder. Therefore, we insist that | |
64 | any patent license obtained for a version of the library must be | |
65 | consistent with the full freedom of use specified in this license. | |
66 | ||
67 | Most GNU software, including some libraries, is covered by the | |
68 | ordinary GNU General Public License. This license, the GNU Lesser | |
69 | General Public License, applies to certain designated libraries, and | |
70 | is quite different from the ordinary General Public License. We use | |
71 | this license for certain libraries in order to permit linking those | |
72 | libraries into non-free programs. | |
73 | ||
74 | When a program is linked with a library, whether statically or using | |
75 | a shared library, the combination of the two is legally speaking a | |
76 | combined work, a derivative of the original library. The ordinary | |
77 | General Public License therefore permits such linking only if the | |
78 | entire combination fits its criteria of freedom. The Lesser General | |
79 | Public License permits more lax criteria for linking other code with | |
80 | the library. | |
81 | ||
82 | We call this license the "Lesser" General Public License because it | |
83 | does Less to protect the user's freedom than the ordinary General | |
84 | Public License. It also provides other free software developers Less | |
85 | of an advantage over competing non-free programs. These disadvantages | |
86 | are the reason we use the ordinary General Public License for many | |
87 | libraries. However, the Lesser license provides advantages in certain | |
88 | special circumstances. | |
89 | ||
90 | For example, on rare occasions, there may be a special need to | |
91 | encourage the widest possible use of a certain library, so that it | |
92 | becomes a de-facto standard. To achieve this, non-free programs must | |
93 | be allowed to use the library. A more frequent case is that a free | |
94 | library does the same job as widely used non-free libraries. In this | |
95 | case, there is little to gain by limiting the free library to free | |
96 | software only, so we use the Lesser General Public License. | |
97 | ||
98 | In other cases, permission to use a particular library in non-free | |
99 | programs enables a greater number of people to use a large body of | |
100 | free software. For example, permission to use the GNU C Library in | |
101 | non-free programs enables many more people to use the whole GNU | |
102 | operating system, as well as its variant, the GNU/Linux operating | |
103 | system. | |
104 | ||
105 | Although the Lesser General Public License is Less protective of the | |
106 | users' freedom, it does ensure that the user of a program that is | |
107 | linked with the Library has the freedom and the wherewithal to run | |
108 | that program using a modified version of the Library. | |
109 | ||
110 | The precise terms and conditions for copying, distribution and | |
111 | modification follow. Pay close attention to the difference between a | |
112 | "work based on the library" and a "work that uses the library". The | |
113 | former contains code derived from the library, whereas the latter must | |
114 | be combined with the library in order to run. | |
115 | ||
116 | GNU LESSER GENERAL PUBLIC LICENSE | |
117 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |
118 | ||
119 | 0. This License Agreement applies to any software library or other | |
120 | program which contains a notice placed by the copyright holder or | |
121 | other authorized party saying it may be distributed under the terms of | |
122 | this Lesser General Public License (also called "this License"). | |
123 | Each licensee is addressed as "you". | |
124 | ||
125 | A "library" means a collection of software functions and/or data | |
126 | prepared so as to be conveniently linked with application programs | |
127 | (which use some of those functions and data) to form executables. | |
128 | ||
129 | The "Library", below, refers to any such software library or work | |
130 | which has been distributed under these terms. A "work based on the | |
131 | Library" means either the Library or any derivative work under | |
132 | copyright law: that is to say, a work containing the Library or a | |
133 | portion of it, either verbatim or with modifications and/or translated | |
134 | straightforwardly into another language. (Hereinafter, translation is | |
135 | included without limitation in the term "modification".) | |
136 | ||
137 | "Source code" for a work means the preferred form of the work for | |
138 | making modifications to it. For a library, complete source code means | |
139 | all the source code for all modules it contains, plus any associated | |
140 | interface definition files, plus the scripts used to control | |
141 | compilation and installation of the library. | |
142 | ||
143 | Activities other than copying, distribution and modification are not | |
144 | covered by this License; they are outside its scope. The act of | |
145 | running a program using the Library is not restricted, and output from | |
146 | such a program is covered only if its contents constitute a work based | |
147 | on the Library (independent of the use of the Library in a tool for | |
148 | writing it). Whether that is true depends on what the Library does | |
149 | and what the program that uses the Library does. | |
150 | ||
151 | 1. You may copy and distribute verbatim copies of the Library's | |
152 | complete source code as you receive it, in any medium, provided that | |
153 | you conspicuously and appropriately publish on each copy an | |
154 | appropriate copyright notice and disclaimer of warranty; keep intact | |
155 | all the notices that refer to this License and to the absence of any | |
156 | warranty; and distribute a copy of this License along with the | |
157 | Library. | |
158 | ||
159 | You may charge a fee for the physical act of transferring a copy, | |
160 | and you may at your option offer warranty protection in exchange for a | |
161 | fee. | |
162 | ||
163 | 2. You may modify your copy or copies of the Library or any portion | |
164 | of it, thus forming a work based on the Library, and copy and | |
165 | distribute such modifications or work under the terms of Section 1 | |
166 | above, provided that you also meet all of these conditions: | |
167 | ||
168 | a) The modified work must itself be a software library. | |
169 | ||
170 | b) You must cause the files modified to carry prominent notices | |
171 | stating that you changed the files and the date of any change. | |
172 | ||
173 | c) You must cause the whole of the work to be licensed at no | |
174 | charge to all third parties under the terms of this License. | |
175 | ||
176 | d) If a facility in the modified Library refers to a function or a | |
177 | table of data to be supplied by an application program that uses | |
178 | the facility, other than as an argument passed when the facility | |
179 | is invoked, then you must make a good faith effort to ensure that, | |
180 | in the event an application does not supply such function or | |
181 | table, the facility still operates, and performs whatever part of | |
182 | its purpose remains meaningful. | |
183 | ||
184 | (For example, a function in a library to compute square roots has | |
185 | a purpose that is entirely well-defined independent of the | |
186 | application. Therefore, Subsection 2d requires that any | |
187 | application-supplied function or table used by this function must | |
188 | be optional: if the application does not supply it, the square | |
189 | root function must still compute square roots.) | |
190 | ||
191 | These requirements apply to the modified work as a whole. If | |
192 | identifiable sections of that work are not derived from the Library, | |
193 | and can be reasonably considered independent and separate works in | |
194 | themselves, then this License, and its terms, do not apply to those | |
195 | sections when you distribute them as separate works. But when you | |
196 | distribute the same sections as part of a whole which is a work based | |
197 | on the Library, the distribution of the whole must be on the terms of | |
198 | this License, whose permissions for other licensees extend to the | |
199 | entire whole, and thus to each and every part regardless of who wrote | |
200 | it. | |
201 | ||
202 | Thus, it is not the intent of this section to claim rights or contest | |
203 | your rights to work written entirely by you; rather, the intent is to | |
204 | exercise the right to control the distribution of derivative or | |
205 | collective works based on the Library. | |
206 | ||
207 | In addition, mere aggregation of another work not based on the Library | |
208 | with the Library (or with a work based on the Library) on a volume of | |
209 | a storage or distribution medium does not bring the other work under | |
210 | the scope of this License. | |
211 | ||
212 | 3. You may opt to apply the terms of the ordinary GNU General Public | |
213 | License instead of this License to a given copy of the Library. To do | |
214 | this, you must alter all the notices that refer to this License, so | |
215 | that they refer to the ordinary GNU General Public License, version 2, | |
216 | instead of to this License. (If a newer version than version 2 of the | |
217 | ordinary GNU General Public License has appeared, then you can specify | |
218 | that version instead if you wish.) Do not make any other change in | |
219 | these notices. | |
220 | ||
221 | Once this change is made in a given copy, it is irreversible for | |
222 | that copy, so the ordinary GNU General Public License applies to all | |
223 | subsequent copies and derivative works made from that copy. | |
224 | ||
225 | This option is useful when you wish to copy part of the code of | |
226 | the Library into a program that is not a library. | |
227 | ||
228 | 4. You may copy and distribute the Library (or a portion or | |
229 | derivative of it, under Section 2) in object code or executable form | |
230 | under the terms of Sections 1 and 2 above provided that you accompany | |
231 | it with the complete corresponding machine-readable source code, which | |
232 | must be distributed under the terms of Sections 1 and 2 above on a | |
233 | medium customarily used for software interchange. | |
234 | ||
235 | If distribution of object code is made by offering access to copy | |
236 | from a designated place, then offering equivalent access to copy the | |
237 | source code from the same place satisfies the requirement to | |
238 | distribute the source code, even though third parties are not | |
239 | compelled to copy the source along with the object code. | |
240 | ||
241 | 5. A program that contains no derivative of any portion of the | |
242 | Library, but is designed to work with the Library by being compiled or | |
243 | linked with it, is called a "work that uses the Library". Such a | |
244 | work, in isolation, is not a derivative work of the Library, and | |
245 | therefore falls outside the scope of this License. | |
246 | ||
247 | However, linking a "work that uses the Library" with the Library | |
248 | creates an executable that is a derivative of the Library (because it | |
249 | contains portions of the Library), rather than a "work that uses the | |
250 | library". The executable is therefore covered by this License. | |
251 | Section 6 states terms for distribution of such executables. | |
252 | ||
253 | When a "work that uses the Library" uses material from a header file | |
254 | that is part of the Library, the object code for the work may be a | |
255 | derivative work of the Library even though the source code is not. | |
256 | Whether this is true is especially significant if the work can be | |
257 | linked without the Library, or if the work is itself a library. The | |
258 | threshold for this to be true is not precisely defined by law. | |
259 | ||
260 | If such an object file uses only numerical parameters, data | |
261 | structure layouts and accessors, and small macros and small inline | |
262 | functions (ten lines or less in length), then the use of the object | |
263 | file is unrestricted, regardless of whether it is legally a derivative | |
264 | work. (Executables containing this object code plus portions of the | |
265 | Library will still fall under Section 6.) | |
266 | ||
267 | Otherwise, if the work is a derivative of the Library, you may | |
268 | distribute the object code for the work under the terms of Section 6. | |
269 | Any executables containing that work also fall under Section 6, | |
270 | whether or not they are linked directly with the Library itself. | |
271 | ||
272 | 6. As an exception to the Sections above, you may also combine or | |
273 | link a "work that uses the Library" with the Library to produce a | |
274 | work containing portions of the Library, and distribute that work | |
275 | under terms of your choice, provided that the terms permit | |
276 | modification of the work for the customer's own use and reverse | |
277 | engineering for debugging such modifications. | |
278 | ||
279 | You must give prominent notice with each copy of the work that the | |
280 | Library is used in it and that the Library and its use are covered by | |
281 | this License. You must supply a copy of this License. If the work | |
282 | during execution displays copyright notices, you must include the | |
283 | copyright notice for the Library among them, as well as a reference | |
284 | directing the user to the copy of this License. Also, you must do one | |
285 | of these things: | |
286 | ||
287 | a) Accompany the work with the complete corresponding | |
288 | machine-readable source code for the Library including whatever | |
289 | changes were used in the work (which must be distributed under | |
290 | Sections 1 and 2 above); and, if the work is an executable linked | |
291 | with the Library, with the complete machine-readable "work that | |
292 | uses the Library", as object code and/or source code, so that the | |
293 | user can modify the Library and then relink to produce a modified | |
294 | executable containing the modified Library. (It is understood | |
295 | that the user who changes the contents of definitions files in the | |
296 | Library will not necessarily be able to recompile the application | |
297 | to use the modified definitions.) | |
298 | ||
299 | b) Use a suitable shared library mechanism for linking with the | |
300 | Library. A suitable mechanism is one that (1) uses at run time a | |
301 | copy of the library already present on the user's computer system, | |
302 | rather than copying library functions into the executable, and (2) | |
303 | will operate properly with a modified version of the library, if | |
304 | the user installs one, as long as the modified version is | |
305 | interface-compatible with the version that the work was made with. | |
306 | ||
307 | c) Accompany the work with a written offer, valid for at least | |
308 | three years, to give the same user the materials specified in | |
309 | Subsection 6a, above, for a charge no more than the cost of | |
310 | performing this distribution. | |
311 | ||
312 | d) If distribution of the work is made by offering access to copy | |
313 | from a designated place, offer equivalent access to copy the above | |
314 | specified materials from the same place. | |
315 | ||
316 | e) Verify that the user has already received a copy of these | |
317 | materials or that you have already sent this user a copy. | |
318 | ||
319 | For an executable, the required form of the "work that uses the | |
320 | Library" must include any data and utility programs needed for | |
321 | reproducing the executable from it. However, as a special exception, | |
322 | the materials to be distributed need not include anything that is | |
323 | normally distributed (in either source or binary form) with the major | |
324 | components (compiler, kernel, and so on) of the operating system on | |
325 | which the executable runs, unless that component itself accompanies | |
326 | the executable. | |
327 | ||
328 | It may happen that this requirement contradicts the license | |
329 | restrictions of other proprietary libraries that do not normally | |
330 | accompany the operating system. Such a contradiction means you cannot | |
331 | use both them and the Library together in an executable that you | |
332 | distribute. | |
333 | ||
334 | 7. You may place library facilities that are a work based on the | |
335 | Library side-by-side in a single library together with other library | |
336 | facilities not covered by this License, and distribute such a combined | |
337 | library, provided that the separate distribution of the work based on | |
338 | the Library and of the other library facilities is otherwise | |
339 | permitted, and provided that you do these two things: | |
340 | ||
341 | a) Accompany the combined library with a copy of the same work | |
342 | based on the Library, uncombined with any other library | |
343 | facilities. This must be distributed under the terms of the | |
344 | Sections above. | |
345 | ||
346 | b) Give prominent notice with the combined library of the fact | |
347 | that part of it is a work based on the Library, and explaining | |
348 | where to find the accompanying uncombined form of the same work. | |
349 | ||
350 | 8. You may not copy, modify, sublicense, link with, or distribute | |
351 | the Library except as expressly provided under this License. Any | |
352 | attempt otherwise to copy, modify, sublicense, link with, or | |
353 | distribute the Library is void, and will automatically terminate your | |
354 | rights under this License. However, parties who have received copies, | |
355 | or rights, from you under this License will not have their licenses | |
356 | terminated so long as such parties remain in full compliance. | |
357 | ||
358 | 9. You are not required to accept this License, since you have not | |
359 | signed it. However, nothing else grants you permission to modify or | |
360 | distribute the Library or its derivative works. These actions are | |
361 | prohibited by law if you do not accept this License. Therefore, by | |
362 | modifying or distributing the Library (or any work based on the | |
363 | Library), you indicate your acceptance of this License to do so, and | |
364 | all its terms and conditions for copying, distributing or modifying | |
365 | the Library or works based on it. | |
366 | ||
367 | 10. Each time you redistribute the Library (or any work based on the | |
368 | Library), the recipient automatically receives a license from the | |
369 | original licensor to copy, distribute, link with or modify the Library | |
370 | subject to these terms and conditions. You may not impose any further | |
371 | restrictions on the recipients' exercise of the rights granted herein. | |
372 | You are not responsible for enforcing compliance by third parties with | |
373 | this License. | |
374 | ||
375 | 11. If, as a consequence of a court judgment or allegation of patent | |
376 | infringement or for any other reason (not limited to patent issues), | |
377 | conditions are imposed on you (whether by court order, agreement or | |
378 | otherwise) that contradict the conditions of this License, they do not | |
379 | excuse you from the conditions of this License. If you cannot | |
380 | distribute so as to satisfy simultaneously your obligations under this | |
381 | License and any other pertinent obligations, then as a consequence you | |
382 | may not distribute the Library at all. For example, if a patent | |
383 | license would not permit royalty-free redistribution of the Library by | |
384 | all those who receive copies directly or indirectly through you, then | |
385 | the only way you could satisfy both it and this License would be to | |
386 | refrain entirely from distribution of the Library. | |
387 | ||
388 | If any portion of this section is held invalid or unenforceable under | |
389 | any particular circumstance, the balance of the section is intended to | |
390 | apply, and the section as a whole is intended to apply in other | |
391 | circumstances. | |
392 | ||
393 | It is not the purpose of this section to induce you to infringe any | |
394 | patents or other property right claims or to contest validity of any | |
395 | such claims; this section has the sole purpose of protecting the | |
396 | integrity of the free software distribution system which is | |
397 | implemented by public license practices. Many people have made | |
398 | generous contributions to the wide range of software distributed | |
399 | through that system in reliance on consistent application of that | |
400 | system; it is up to the author/donor to decide if he or she is willing | |
401 | to distribute software through any other system and a licensee cannot | |
402 | impose that choice. | |
403 | ||
404 | This section is intended to make thoroughly clear what is believed to | |
405 | be a consequence of the rest of this License. | |
406 | ||
407 | 12. If the distribution and/or use of the Library is restricted in | |
408 | certain countries either by patents or by copyrighted interfaces, the | |
409 | original copyright holder who places the Library under this License | |
410 | may add an explicit geographical distribution limitation excluding those | |
411 | countries, so that distribution is permitted only in or among | |
412 | countries not thus excluded. In such case, this License incorporates | |
413 | the limitation as if written in the body of this License. | |
414 | ||
415 | 13. The Free Software Foundation may publish revised and/or new | |
416 | versions of the Lesser General Public License from time to time. | |
417 | Such new versions will be similar in spirit to the present version, | |
418 | but may differ in detail to address new problems or concerns. | |
419 | ||
420 | Each version is given a distinguishing version number. If the Library | |
421 | specifies a version number of this License which applies to it and | |
422 | "any later version", you have the option of following the terms and | |
423 | conditions either of that version or of any later version published by | |
424 | the Free Software Foundation. If the Library does not specify a | |
425 | license version number, you may choose any version ever published by | |
426 | the Free Software Foundation. | |
427 | ||
428 | 14. If you wish to incorporate parts of the Library into other free | |
429 | programs whose distribution conditions are incompatible with these, | |
430 | write to the author to ask for permission. For software which is | |
431 | copyrighted by the Free Software Foundation, write to the Free | |
432 | Software Foundation; we sometimes make exceptions for this. Our | |
433 | decision will be guided by the two goals of preserving the free status | |
434 | of all derivatives of our free software and of promoting the sharing | |
435 | and reuse of software generally. | |
436 | ||
437 | NO WARRANTY | |
438 | ||
439 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO | |
440 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. | |
441 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR | |
442 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY | |
443 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE | |
444 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
445 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE | |
446 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME | |
447 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | |
448 | ||
449 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN | |
450 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY | |
451 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU | |
452 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR | |
453 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE | |
454 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING | |
455 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A | |
456 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF | |
457 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | |
458 | DAMAGES. | |
459 | ||
460 | END OF TERMS AND CONDITIONS | |
461 | ||
462 | How to Apply These Terms to Your New Libraries | |
463 | ||
464 | If you develop a new library, and you want it to be of the greatest | |
465 | possible use to the public, we recommend making it free software that | |
466 | everyone can redistribute and change. You can do so by permitting | |
467 | redistribution under these terms (or, alternatively, under the terms | |
468 | of the ordinary General Public License). | |
469 | ||
470 | To apply these terms, attach the following notices to the library. | |
471 | It is safest to attach them to the start of each source file to most | |
472 | effectively convey the exclusion of warranty; and each file should | |
473 | have at least the "copyright" line and a pointer to where the full | |
474 | notice is found. | |
475 | ||
476 | ||
477 | <one line to give the library's name and a brief idea of what it does.> | |
478 | Copyright (C) <year> <name of author> | |
479 | ||
480 | This library is free software; you can redistribute it and/or | |
481 | modify it under the terms of the GNU Lesser General Public | |
482 | License as published by the Free Software Foundation; either | |
483 | version 2.1 of the License, or (at your option) any later version. | |
484 | ||
485 | This library is distributed in the hope that it will be useful, | |
486 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
487 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
488 | Lesser General Public License for more details. | |
489 | ||
490 | You should have received a copy of the GNU Lesser General Public | |
491 | License along with this library; if not, write to the Free Software | |
492 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
493 | ||
494 | Also add information on how to contact you by electronic and paper mail. | |
495 | ||
496 | You should also get your employer (if you work as a programmer) or | |
497 | your school, if any, to sign a "copyright disclaimer" for the library, | |
498 | if necessary. Here is a sample; alter the names: | |
499 | ||
500 | Yoyodyne, Inc., hereby disclaims all copyright interest in the | |
501 | library `Frob' (a library for tweaking knobs) written by James | |
502 | Random Hacker. | |
503 | ||
504 | <signature of Ty Coon>, 1 April 1990 | |
505 | Ty Coon, President of Vice | |
506 | ||
507 | That's all there is to it! | |
508 | ||
509 |
0 | #!bin/sh | |
1 | $EXTRACTRC `find . -name \*.rc -o -name \*.ui -o -name \*.kcfg` >> rc.cpp | |
2 | $XGETTEXT `find . -name \*.cc -o -name \*.cpp -o -name \*.h` -o $podir/ktp-call-ui.pot | |
3 | rm -f rc.cpp |
0 | 0. About KCall | |
1 | -------------- | |
2 | ||
3 | KCall is a GUI VoIP client software which uses the telepathy framework underneath. | |
4 | You can find the latest version of KCall at the kde svn: | |
5 | HTTP URL: http://websvn.kde.org/trunk/playground/network/kcall/ | |
6 | SVN URL: svn://anonsvn.kde.org/home/kde/trunk/playground/network/kcall/ | |
7 | ||
8 | 1. Dependencies | |
9 | --------------- | |
10 | ||
11 | For compiling KCall, you will need the following development software: | |
12 | ||
13 | - Qt developement headers and tools (version 4.5.0 or later) | |
14 | - kdelibs developement headers and tools (version 4.3.74 or later) | |
15 | - telepathy-qt4 0.1.8 or later with telepathy-qt4-farsight compiled (requires telepathy-farsight) | |
16 | - telepathy-farsight | |
17 | - GStreamer 0.10 (version 0.10.23 or later) | |
18 | - GLib/GObject | |
19 | - telepathy-glib headers (required by telepathy-farsight) | |
20 | - libxml2 headers (required by gstreamer) | |
21 | ||
22 | At runtime, you will also need the following: | |
23 | ||
24 | - telepathy-mission-control (version 5.1.0 or later) | |
25 | - telepathy-gabble | |
26 | - gstreamer-plugins-base and gstreamer-plugins-good (also recommended are gstreamer-plugins-bad) | |
27 | - optionally, telepathy-accounts-kcm, for configuring accounts | |
28 | (svn://anonsvn.kde.org/home/kde/trunk/playground/network/telepathy-accounts-kcm) | |
29 | ||
30 | 2. Compilation | |
31 | -------------- | |
32 | ||
33 | KCall uses cmake as its build system, like the rest of KDE. | |
34 | If you haven't used cmake in the past, here is a simple usage example: | |
35 | ||
36 | $ cd path/to/kcall/source | |
37 | $ mkdir build | |
38 | $ cd build | |
39 | $ cmake -DCMAKE_INSTALL_PREFIX=/path/to/installation/prefix .. | |
40 | $ make | |
41 | $ sudo make install | |
42 | ||
43 | 3. Explanation of the various executables | |
44 | ----------------------------------------- | |
45 | ||
46 | In the telepathy framework, every part of an IM/VoIP client is split into several processes. | |
47 | Here I will explain which of those processes need to be running to use KCall and what each one does: | |
48 | ||
49 | - telepathy-gabble: This is the jabber connection manager that will handle the network | |
50 | communication with the jabber server and channel negotiation with other users. | |
51 | Normally, it is auto-launched when you set your jabber account online, | |
52 | so there is no need to worry about it. | |
53 | - mission-control-5: This process implements the account manager and channel dispatcher. This must | |
54 | be running in order to do anything with KCall. Normally this should be shipped | |
55 | with a dbus .service file, so that it is autolaunched, however I have noticed | |
56 | that this is not the case (yet). So, you should always launch this in the | |
57 | background before starting KCall. | |
58 | - kcall: This process implements the main window of KCall (the contact list). This is | |
59 | just an interface to be able to put your accounts online/offline and start calls. | |
60 | Note that this is not required to be running in order to receive calls. If | |
61 | your account is online, you can receive calls without having any frontend running. | |
62 | Only mission-control-5 is required to be running for this. | |
63 | - kcall_handler: This process is the call handler. It shows a window for every call that is going | |
64 | on and handles all the media streaming internally, using gstreamer and | |
65 | telepathy-farsight. This process comes with a dbus .service file, so it should | |
66 | be launched automatically when a call happens. However, if you install it in a | |
67 | non-standard path, dbus may not be able to find the .service file, so you will | |
68 | have to launch this process before starting or receiving a call. Also note that | |
69 | this process quits when a call has finished, so you will have to restart it | |
70 | in this case. If this process is not running or cannot be launched through | |
71 | dbus service activation, you will not be able to make calls. | |
72 | - kcall_approver: This is the standard approver of kcall. When you receive an incoming call, | |
73 | kcall_approver will be launched and will show a KNotification with options to | |
74 | answer/reject the call. As with kcall_handler, this process comes with a .service | |
75 | file and should be autolaunched. However, if you install it in a non-standard path, | |
76 | you may have to launch this manually in order to have an approver. Note that if | |
77 | an approver is not available, the call will be auto-accepted and passed to the | |
78 | handler. | |
79 | ||
80 | 4. Configuring accounts | |
81 | ----------------------- | |
82 | ||
83 | KCall is currently known to work only with Jabber (with telepathy-gabble). | |
84 | SIP (with telepathy-sofiasip) also works, but it has many issues; for example, you can't make | |
85 | calls to others, you can only answer calls. So, to use kcall you probably need a jabber account. | |
86 | Note that gtalk/gmail accounts are also jabber accounts. | |
87 | ||
88 | To configure your jabber account, first you need to install the telepathy-accounts-kcm. | |
89 | Then follow these steps: | |
90 | - Launch telepathy-mission-control-5 in the background | |
91 | - Launch kcall | |
92 | - Go to Settings->Configure KCall->Instant Messaging and VoIP Accounts | |
93 | - Click on "Add Account" | |
94 | - Select "Jabber/XMPP/Google Talk" and click next | |
95 | - Enter your account information and click finish | |
96 | ||
97 | 5. Running | |
98 | ---------- | |
99 | ||
100 | When you open KCall you will see all your accounts in the contact list. | |
101 | There are two ways to get accounts online. Either click on the master connect button, which | |
102 | will attempt to put all the accounts online, or right click on an account and set its status | |
103 | from the right click menu. Note that not all statuses are available on all protocols, so if you | |
104 | request a status that is not available, the closest available status will be used. | |
105 | ||
106 | Once an account is online, all the known contacts for it will be shown in the second level of | |
107 | the tree, under the account. To call a contact, right click on it and select voice or video call. | |
108 | ||
109 | You can also call contacts directly from the second tab of KCall's main window. This is useful | |
110 | if you want to call a person that is not in your contact list. To call a contact using this method, | |
111 | you will have to type the identifier of that contact (ex. "foobar@jabber.org"), select the account | |
112 | through which the call should be made and click on one of the buttons below, depending on whether | |
113 | you want an audio-only or audio/video call. | |
114 | ||
115 | 6. Known bugs | |
116 | ------------- | |
117 | ||
118 | 1. Sometimes video is not sent to the other side, although KCall is actually sending it. This | |
119 | might be a bug in telepathy-farsight. | |
120 | 2. Sometimes the video widgets stuck, showing a still image and when the call finishes, | |
121 | kcall_handler deadlocks. | |
122 | ||
123 | ||
124 | --- | |
125 | George Kiagiadakis <kiagiadakis.george@gmail.com> | |
126 | Last updated: 9 November 2009 |
0 | Redistribution and use in source and binary forms, with or without | |
1 | modification, are permitted provided that the following conditions | |
2 | are met: | |
3 | ||
4 | 1. Redistributions of source code must retain the copyright | |
5 | notice, this list of conditions and the following disclaimer. | |
6 | 2. Redistributions in binary form must reproduce the copyright | |
7 | notice, this list of conditions and the following disclaimer in the | |
8 | documentation and/or other materials provided with the distribution. | |
9 | 3. The name of the author may not be used to endorse or promote products | |
10 | derived from this software without specific prior written permission. | |
11 | ||
12 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | |
13 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
14 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
15 | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | |
16 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
17 | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
18 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
19 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
20 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
21 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
0 | # Try to find the KTp library | |
1 | # KTP_FOUND | |
2 | # KTP_INCLUDE_DIR | |
3 | # KTP_LIBRARIES | |
4 | # KTP_MODELS_LIBRARIES | |
5 | # KTP_WIDGETS_LIBRARIES | |
6 | ||
7 | # Copyright (c) 2011, Dario Freddi <drf@kde.org> | |
8 | # | |
9 | # Redistribution and use is allowed according to the terms of the BSD license. | |
10 | # For details see the accompanying COPYING-CMAKE-SCRIPTS file. | |
11 | ||
12 | if (NOT IS_KTP_INTERNAL_MODULE) | |
13 | message (FATAL_ERROR "KTp can be used just from internal components at this time") | |
14 | endif (NOT IS_KTP_INTERNAL_MODULE) | |
15 | ||
16 | SET (KTP_FIND_REQUIRED ${KTp_FIND_REQUIRED}) | |
17 | if (KTP_INCLUDE_DIRS AND KTP_LIBRARIES) | |
18 | # Already in cache, be silent | |
19 | set(KTP_FIND_QUIETLY TRUE) | |
20 | endif (KTP_INCLUDE_DIRS AND KTP_LIBRARIES) | |
21 | ||
22 | find_path(KTP_INCLUDE_DIR | |
23 | NAMES KTp/presence.h | |
24 | PATHS ${KDE4_INCLUDE_DIR} | |
25 | ) | |
26 | ||
27 | find_library(KTP_LIBRARIES NAMES ktpcommoninternalsprivate ) | |
28 | find_library(KTP_MODELS_LIBRARIES NAMES ktpmodelsprivate ) | |
29 | find_library(KTP_WIDGETS_LIBRARIES NAMES ktpwidgetsprivate ) | |
30 | ||
31 | include(FindPackageHandleStandardArgs) | |
32 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(KTp DEFAULT_MSG | |
33 | KTP_LIBRARIES | |
34 | KTP_MODELS_LIBRARIES | |
35 | KTP_INCLUDE_DIR) | |
36 | ||
37 | mark_as_advanced(KTP_INCLUDE_DIRS KTP_LIBRARIES) |
0 | include_directories(${CMAKE_CURRENT_BINARY_DIR}) | |
1 | ||
2 | ##### | |
3 | ||
4 | set(libktpcall_SRCS | |
5 | call-channel-handler.cpp | |
6 | call-content-handler.cpp | |
7 | volume-controller.cpp | |
8 | ||
9 | private/source-controllers.cpp | |
10 | private/sink-controllers.cpp | |
11 | private/sink-managers.cpp | |
12 | private/device-element-factory.cpp | |
13 | private/phonon-integration.cpp | |
14 | private/input-control-bin.cpp | |
15 | private/video-sink-bin.cpp | |
16 | ) | |
17 | ||
18 | kde4_add_library(ktpcall STATIC ${libktpcall_SRCS}) | |
19 | target_link_libraries(ktpcall | |
20 | ${KDE4_KDECORE_LIBS} | |
21 | ${QT_QTDBUS_LIBRARY} | |
22 | ${QTGSTREAMER_LIBRARIES} | |
23 | ${TELEPATHY_QT4_LIBRARIES} | |
24 | qtf | |
25 | ) | |
26 | ||
27 | ##### | |
28 | ||
29 | add_subdirectory(tests) |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "call-channel-handler.h" | |
18 | #include "call-content-handler_p.h" | |
19 | #include "../libqtf/qtf.h" | |
20 | #include <QGlib/Error> | |
21 | #include <QGlib/Connect> | |
22 | #include <QGst/Init> | |
23 | #include <QGst/Bus> | |
24 | #include <KDebug> | |
25 | ||
26 | //BEGIN CallChannelHandlerPrivate | |
27 | ||
28 | class CallChannelHandlerPrivate : public QObject | |
29 | { | |
30 | Q_OBJECT | |
31 | public: | |
32 | CallChannelHandlerPrivate(const Tp::CallChannelPtr & channel, CallChannelHandler *qq); | |
33 | ||
34 | private Q_SLOTS: | |
35 | void init(); | |
36 | void onPendingTfChannelFinished(Tp::PendingOperation *op); | |
37 | void onCallContentHandlerReady(const QTf::ContentPtr & tfContent, | |
38 | CallContentHandler *contentHandler); | |
39 | void onCallChannelInvalidated(); | |
40 | ||
41 | private: | |
42 | void onTfChannelClosed(); | |
43 | void onContentAdded(const QTf::ContentPtr & tfContent); | |
44 | void onContentRemoved(const QTf::ContentPtr & tfContent); | |
45 | void onFsConferenceAdded(const QGst::ElementPtr & conference); | |
46 | void onFsConferenceRemoved(const QGst::ElementPtr & conference); | |
47 | void onBusMessage(const QGst::MessagePtr & message); | |
48 | ||
49 | private: | |
50 | CallChannelHandler * const q; | |
51 | ||
52 | QGst::PipelinePtr m_pipeline; | |
53 | QTf::ChannelPtr m_tfChannel; | |
54 | uint m_channelClosedCounter; | |
55 | QList<QGlib::ObjectPtr> m_fsElementAddedNotifiers; | |
56 | ||
57 | public: | |
58 | Tp::CallChannelPtr m_callChannel; | |
59 | QHash<QTf::ContentPtr, CallContentHandler*> m_contents; | |
60 | }; | |
61 | ||
62 | CallChannelHandlerPrivate::CallChannelHandlerPrivate(const Tp::CallChannelPtr & channel, | |
63 | CallChannelHandler *qq) | |
64 | : QObject(), | |
65 | q(qq), | |
66 | m_channelClosedCounter(0), | |
67 | m_callChannel(channel) | |
68 | { | |
69 | connect(m_callChannel.data(), SIGNAL(invalidated (Tp::DBusProxy*,QString,QString)), | |
70 | SLOT(onCallChannelInvalidated())); | |
71 | ||
72 | QTimer::singleShot(0, this, SLOT(init())); | |
73 | } | |
74 | ||
75 | void CallChannelHandlerPrivate::init() | |
76 | { | |
77 | try { | |
78 | QGst::init(); | |
79 | QTf::init(); | |
80 | } catch (const QGlib::Error & error) { | |
81 | kError() << error; | |
82 | m_callChannel->hangup(Tp::CallStateChangeReasonInternalError, | |
83 | TP_QT_ERROR_MEDIA_STREAMING_ERROR, | |
84 | error.message()); | |
85 | ||
86 | return; | |
87 | } | |
88 | ||
89 | QTf::PendingChannel *pendingChannel = new QTf::PendingChannel(m_callChannel); | |
90 | connect(pendingChannel, SIGNAL(finished(Tp::PendingOperation*)), | |
91 | this, SLOT(onPendingTfChannelFinished(Tp::PendingOperation*))); | |
92 | } | |
93 | ||
94 | void CallChannelHandlerPrivate::onPendingTfChannelFinished(Tp::PendingOperation *op) | |
95 | { | |
96 | if (op->isError()) { | |
97 | kError() << op->errorMessage(); | |
98 | m_callChannel->hangup(Tp::CallStateChangeReasonInternalError, | |
99 | TP_QT_ERROR_MEDIA_STREAMING_ERROR, | |
100 | op->errorMessage()); | |
101 | return; | |
102 | } | |
103 | ||
104 | kDebug() << "TfChannel ready"; | |
105 | m_tfChannel = qobject_cast<QTf::PendingChannel*>(op)->channel(); | |
106 | ||
107 | m_pipeline = QGst::Pipeline::create(); | |
108 | m_pipeline->setState(QGst::StatePlaying); | |
109 | ||
110 | m_pipeline->bus()->addSignalWatch(); | |
111 | QGlib::connect(m_pipeline->bus(), "message", this, &CallChannelHandlerPrivate::onBusMessage); | |
112 | ||
113 | QGlib::connect(m_tfChannel, "closed", | |
114 | this, &CallChannelHandlerPrivate::onTfChannelClosed); | |
115 | QGlib::connect(m_tfChannel, "content-added", | |
116 | this, &CallChannelHandlerPrivate::onContentAdded); | |
117 | QGlib::connect(m_tfChannel, "content-removed", | |
118 | this, &CallChannelHandlerPrivate::onContentRemoved); | |
119 | QGlib::connect(m_tfChannel, "fs-conference-added", | |
120 | this, &CallChannelHandlerPrivate::onFsConferenceAdded); | |
121 | QGlib::connect(m_tfChannel, "fs-conference-removed", | |
122 | this, &CallChannelHandlerPrivate::onFsConferenceRemoved); | |
123 | } | |
124 | ||
125 | void CallChannelHandlerPrivate::onCallChannelInvalidated() | |
126 | { | |
127 | kDebug() << "Tp::Channel invalidated"; | |
128 | ||
129 | if (++m_channelClosedCounter == 2) { | |
130 | kDebug() << "emit channelClosed()"; | |
131 | Q_EMIT q->channelClosed(); | |
132 | } | |
133 | } | |
134 | ||
135 | void CallChannelHandlerPrivate::onTfChannelClosed() | |
136 | { | |
137 | kDebug() << "TfChannel closed"; | |
138 | ||
139 | Q_ASSERT(m_pipeline); | |
140 | m_pipeline->bus()->removeSignalWatch(); | |
141 | m_pipeline->setState(QGst::StateNull); | |
142 | m_fsElementAddedNotifiers.clear(); | |
143 | ||
144 | if (++m_channelClosedCounter == 2) { | |
145 | kDebug() << "emit channelClosed()"; | |
146 | Q_EMIT q->channelClosed(); | |
147 | } | |
148 | } | |
149 | ||
150 | void CallChannelHandlerPrivate::onContentAdded(const QTf::ContentPtr & tfContent) | |
151 | { | |
152 | kDebug() << "TfContent added. media-type:" << tfContent->property("media-type").toInt(); | |
153 | ||
154 | connect(new PendingCallContentHandler(m_callChannel, tfContent, m_pipeline, q), | |
155 | SIGNAL(ready(QTf::ContentPtr,CallContentHandler*)), | |
156 | SLOT(onCallContentHandlerReady(QTf::ContentPtr,CallContentHandler*))); | |
157 | } | |
158 | ||
159 | void CallChannelHandlerPrivate::onCallContentHandlerReady(const QTf::ContentPtr & tfContent, | |
160 | CallContentHandler *contentHandler) | |
161 | { | |
162 | kDebug() << "CallContentHandler ready"; | |
163 | m_contents.insert(tfContent, contentHandler); | |
164 | Q_EMIT q->contentAdded(contentHandler); | |
165 | } | |
166 | ||
167 | void CallChannelHandlerPrivate::onContentRemoved(const QTf::ContentPtr & tfContent) | |
168 | { | |
169 | kDebug() << "TfContent removed. media-type:" << tfContent->property("media-type").toInt(); | |
170 | ||
171 | CallContentHandler *contentHandler = m_contents.take(tfContent); | |
172 | Q_EMIT q->contentRemoved(contentHandler); | |
173 | delete contentHandler; | |
174 | } | |
175 | ||
176 | void CallChannelHandlerPrivate::onFsConferenceAdded(const QGst::ElementPtr & conference) | |
177 | { | |
178 | kDebug() << "Adding fsconference in the pipeline"; | |
179 | m_fsElementAddedNotifiers.append(QTf::loadFsElementAddedNotifier(conference, m_pipeline)); | |
180 | m_pipeline->add(conference); | |
181 | conference->syncStateWithParent(); | |
182 | } | |
183 | ||
184 | void CallChannelHandlerPrivate::onFsConferenceRemoved(const QGst::ElementPtr & conference) | |
185 | { | |
186 | kDebug() << "Removing fsconference from the pipeline"; | |
187 | m_pipeline->remove(conference); | |
188 | conference->setState(QGst::StateNull); | |
189 | } | |
190 | ||
191 | void CallChannelHandlerPrivate::onBusMessage(const QGst::MessagePtr & message) | |
192 | { | |
193 | m_tfChannel->processBusMessage(message); | |
194 | } | |
195 | ||
196 | //END CallChannelHandlerPrivate | |
197 | //BEGIN CallChannelHandler | |
198 | ||
199 | CallChannelHandler::CallChannelHandler(const Tp::CallChannelPtr & channel, QObject *parent) | |
200 | : QObject(parent), d(new CallChannelHandlerPrivate(channel, this)) | |
201 | { | |
202 | } | |
203 | ||
204 | CallChannelHandler::~CallChannelHandler() | |
205 | { | |
206 | delete d; | |
207 | } | |
208 | ||
209 | QList<CallContentHandler*> CallChannelHandler::contents() const | |
210 | { | |
211 | return d->m_contents.values(); | |
212 | } | |
213 | ||
214 | void CallChannelHandler::shutdown() | |
215 | { | |
216 | //This will cause invalidated() to be emited on the 2 proxies (Tp::Channel & TpChannel) | |
217 | //we catch the tp-qt one in onCallChannelInvalidated() and the tp-glib one | |
218 | //in onTfChannelClosed() through TfChannel, which is closed when the TpChannel | |
219 | //is invalidated. When both are invalidated, we emit the channelClosed() signal. | |
220 | d->m_callChannel->requestClose(); | |
221 | } | |
222 | ||
223 | //END CallChannelHandler | |
224 | ||
225 | #include "call-channel-handler.moc" | |
226 | #include "moc_call-channel-handler.cpp" |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef CALL_CHANNEL_HANDLER_H | |
18 | #define CALL_CHANNEL_HANDLER_H | |
19 | ||
20 | #include "call-content-handler.h" | |
21 | #include <TelepathyQt/CallChannel> | |
22 | ||
23 | class CallChannelHandlerPrivate; | |
24 | ||
25 | /** This class handles streaming in a telepathy Call channel. | |
26 | * To begin streaming, construct an instance of this class and use the | |
27 | * CallContentHandler objects that this class creates to control streaming | |
28 | * for the individual contents of the call. | |
29 | */ | |
30 | class CallChannelHandler : public QObject | |
31 | { | |
32 | Q_OBJECT | |
33 | public: | |
34 | explicit CallChannelHandler(const Tp::CallChannelPtr & channel, QObject *parent = 0); | |
35 | virtual ~CallChannelHandler(); | |
36 | ||
37 | QList<CallContentHandler*> contents() const; | |
38 | ||
39 | public Q_SLOTS: | |
40 | /** | |
41 | * This method closes the channel and stops the streaming engine. | |
42 | * The operation is asyncrhonous. When finished, the channelClosed() | |
43 | * signal is emited. You should call this method AND wait for | |
44 | * channelClosed() before destroying this object. | |
45 | */ | |
46 | void shutdown(); | |
47 | ||
48 | Q_SIGNALS: | |
49 | void contentAdded(CallContentHandler *content); | |
50 | void contentRemoved(CallContentHandler *content); | |
51 | void channelClosed(); | |
52 | ||
53 | private: | |
54 | friend class CallChannelHandlerPrivate; | |
55 | CallChannelHandlerPrivate *const d; | |
56 | }; | |
57 | ||
58 | #endif // CALL_CHANNEL_HANDLER_H |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "call-content-handler_p.h" | |
18 | #include <TelepathyQt/ReferencedHandles> | |
19 | #include <QGlib/Connect> | |
20 | #include <QGst/Pad> | |
21 | #include <QGst/ElementFactory> | |
22 | #include <KDebug> | |
23 | ||
24 | //BEGIN PendingCallContentHandler | |
25 | ||
26 | PendingCallContentHandler::PendingCallContentHandler(const Tp::CallChannelPtr & callChannel, | |
27 | const QTf::ContentPtr & tfContent, | |
28 | const QGst::PipelinePtr & pipeline, | |
29 | QObject *parent) | |
30 | : QObject(parent) | |
31 | { | |
32 | switch(tfContent->property("media-type").toInt()) { | |
33 | case Tp::MediaStreamTypeAudio: | |
34 | m_contentHandler = new AudioContentHandler(parent); | |
35 | break; | |
36 | case Tp::MediaStreamTypeVideo: | |
37 | m_contentHandler = new VideoContentHandler(parent); | |
38 | break; | |
39 | default: | |
40 | Q_ASSERT(false); | |
41 | } | |
42 | ||
43 | m_contentHandler->d->init(tfContent, pipeline); | |
44 | ||
45 | m_callChannel = callChannel; | |
46 | m_tfContent = tfContent; | |
47 | QTimer::singleShot(0, this, SLOT(findCallContent())); | |
48 | } | |
49 | ||
50 | void PendingCallContentHandler::findCallContent() | |
51 | { | |
52 | Tp::CallContents callContents = m_callChannel->contents(); | |
53 | Q_FOREACH (const Tp::CallContentPtr & callContent, callContents) { | |
54 | if (callContent->objectPath() == m_tfContent->property("object-path").toString()) { | |
55 | m_contentHandler->d->setCallContent(callContent); | |
56 | Q_EMIT ready(m_tfContent, m_contentHandler); | |
57 | deleteLater(); | |
58 | return; | |
59 | } | |
60 | } | |
61 | ||
62 | kDebug() << "CallContent not found. Waiting for tp-qt4 to synchronize with d-bus."; | |
63 | connect(m_callChannel.data(), SIGNAL(contentAdded(Tp::CallContentPtr)), | |
64 | SLOT(onContentAdded(Tp::CallContentPtr))); | |
65 | } | |
66 | ||
67 | void PendingCallContentHandler::onContentAdded(const Tp::CallContentPtr & callContent) | |
68 | { | |
69 | if (callContent->objectPath() == m_tfContent->property("object-path").toString()) { | |
70 | m_contentHandler->d->setCallContent(callContent); | |
71 | Q_EMIT ready(m_tfContent, m_contentHandler); | |
72 | deleteLater(); | |
73 | } | |
74 | } | |
75 | ||
76 | //END PendingCallContentHandler | |
77 | //BEGIN CallContentHandlerPrivate | |
78 | ||
79 | CallContentHandlerPrivate::~CallContentHandlerPrivate() | |
80 | { | |
81 | kDebug(); | |
82 | m_sourceControllerPad->unlink(m_queue->getStaticPad("sink")); | |
83 | if (m_tfContent->property("sink-pad").get<QGst::PadPtr>()) { | |
84 | m_queue->getStaticPad("src")->unlink(m_tfContent->property("sink-pad").get<QGst::PadPtr>()); | |
85 | } | |
86 | m_queue->setState(QGst::StateNull); | |
87 | m_sourceController->releaseSrcPad(m_sourceControllerPad); | |
88 | m_sinkManager->unlinkAllPads(); | |
89 | ||
90 | delete m_sourceController; | |
91 | delete m_sinkManager; | |
92 | } | |
93 | ||
94 | void CallContentHandlerPrivate::init(const QTf::ContentPtr & tfContent, | |
95 | const QGst::PipelinePtr & pipeline) | |
96 | { | |
97 | kDebug(); | |
98 | ||
99 | m_tfContent = tfContent; | |
100 | m_pipeline = pipeline; | |
101 | QGlib::connect(tfContent, "src-pad-added", this, &CallContentHandlerPrivate::onSrcPadAdded); | |
102 | QGlib::connect(tfContent, "start-sending", this, &CallContentHandlerPrivate::onStartSending); | |
103 | QGlib::connect(tfContent, "stop-sending", this, &CallContentHandlerPrivate::onStopSending); | |
104 | QGlib::connect(tfContent, "start-receiving", this, &CallContentHandlerPrivate::onStartReceiving); | |
105 | QGlib::connect(tfContent, "stop-receiving", this, &CallContentHandlerPrivate::onStopReceiving); | |
106 | ||
107 | switch(tfContent->property("media-type").toInt()) { | |
108 | case Tp::MediaStreamTypeAudio: | |
109 | m_sourceController = new AudioSourceController(pipeline); | |
110 | m_sinkManager = new AudioSinkManager(pipeline, this); | |
111 | break; | |
112 | case Tp::MediaStreamTypeVideo: | |
113 | m_sourceController = new VideoSourceController(pipeline); | |
114 | m_sinkManager = new VideoSinkManager(pipeline, this); | |
115 | break; | |
116 | default: | |
117 | Q_ASSERT(false); | |
118 | } | |
119 | ||
120 | m_queue = QGst::ElementFactory::make("queue"); | |
121 | m_pipeline->add(m_queue); | |
122 | m_queue->syncStateWithParent(); | |
123 | ||
124 | m_sourceControllerPad = m_sourceController->requestSrcPad(); | |
125 | m_sourceControllerPad->link(m_queue->getStaticPad("sink")); | |
126 | m_queue->getStaticPad("src")->link(m_tfContent->property("sink-pad").get<QGst::PadPtr>()); | |
127 | ||
128 | connect(m_sinkManager, SIGNAL(controllerCreated(BaseSinkController*)), | |
129 | this, SLOT(onControllerCreated(BaseSinkController*))); | |
130 | connect(m_sinkManager, SIGNAL(controllerDestroyed(BaseSinkController*)), | |
131 | this, SLOT(onControllerDestroyed(BaseSinkController*))); | |
132 | } | |
133 | ||
134 | void CallContentHandlerPrivate::setCallContent(const Tp::CallContentPtr & callContent) | |
135 | { | |
136 | kDebug(); | |
137 | m_callContent = callContent; | |
138 | ||
139 | //the sink manager needs the content to discover contacts | |
140 | m_sinkManager->setCallContent(callContent); | |
141 | } | |
142 | ||
143 | void CallContentHandlerPrivate::onSrcPadAdded(uint contactHandle, | |
144 | const QGlib::ObjectPtr & fsStream, | |
145 | const QGst::PadPtr & pad) | |
146 | { | |
147 | Q_UNUSED(fsStream); | |
148 | m_sinkManager->handleNewSinkPad(contactHandle, pad); | |
149 | } | |
150 | ||
151 | bool CallContentHandlerPrivate::onStartSending() | |
152 | { | |
153 | kDebug() << "Start sending requested"; | |
154 | ||
155 | m_sourceController->connectToSource(); | |
156 | Q_EMIT q->localSendingStateChanged(true); | |
157 | return true; | |
158 | } | |
159 | ||
160 | void CallContentHandlerPrivate::onStopSending() | |
161 | { | |
162 | kDebug() << "Stop sending requested"; | |
163 | ||
164 | m_sourceController->disconnectFromSource(); | |
165 | Q_EMIT q->localSendingStateChanged(false); | |
166 | } | |
167 | ||
168 | bool CallContentHandlerPrivate::onStartReceiving(void *handles, uint handleCount) | |
169 | { | |
170 | kDebug() << "Start receiving requested"; | |
171 | ||
172 | uint *ihandles = reinterpret_cast<uint*>(handles); | |
173 | for (uint i = 0; i < handleCount; ++i) { | |
174 | if (m_handlesToContacts.contains(ihandles[i])) { | |
175 | Tp::ContactPtr contact = m_handlesToContacts[ihandles[i]]; | |
176 | Q_ASSERT(m_sinkControllers.contains(contact)); | |
177 | ||
178 | //if we are not already receiving | |
179 | if (!m_sinkControllers[contact].second) { | |
180 | kDebug() << "Starting receiving from" << contact->alias(); | |
181 | ||
182 | m_sinkControllers[contact].second = true; | |
183 | Q_EMIT q->remoteSendingStateChanged(contact, true); | |
184 | } | |
185 | } | |
186 | } | |
187 | return true; | |
188 | } | |
189 | ||
190 | void CallContentHandlerPrivate::onStopReceiving(void *handles, uint handleCount) | |
191 | { | |
192 | kDebug() << "Stop receiving requested"; | |
193 | ||
194 | uint *ihandles = reinterpret_cast<uint*>(handles); | |
195 | for (uint i = 0; i < handleCount; ++i) { | |
196 | if (m_handlesToContacts.contains(ihandles[i])) { | |
197 | Tp::ContactPtr contact = m_handlesToContacts[ihandles[i]]; | |
198 | Q_ASSERT(m_sinkControllers.contains(contact)); | |
199 | ||
200 | //if we are receiving | |
201 | if (m_sinkControllers[contact].second) { | |
202 | kDebug() << "Stopping receiving from" << contact->alias(); | |
203 | ||
204 | m_sinkControllers[contact].second = false; | |
205 | Q_EMIT q->remoteSendingStateChanged(contact, false); | |
206 | } | |
207 | } | |
208 | } | |
209 | } | |
210 | ||
211 | void CallContentHandlerPrivate::onControllerCreated(BaseSinkController *controller) | |
212 | { | |
213 | kDebug() << "Sink controller created. Contact:" << controller->contact()->alias() | |
214 | << "media-type:" << m_tfContent->property("media-type").toInt(); | |
215 | ||
216 | m_sinkControllers.insert(controller->contact(), qMakePair(controller, true)); | |
217 | m_handlesToContacts.insert(controller->contact()->handle()[0], controller->contact()); | |
218 | ||
219 | Q_EMIT q->remoteSendingStateChanged(controller->contact(), true); | |
220 | } | |
221 | ||
222 | void CallContentHandlerPrivate::onControllerDestroyed(BaseSinkController *controller) | |
223 | { | |
224 | kDebug() << "Sink controller destroyed. Contact:" << controller->contact()->alias() | |
225 | << "media-type:" << m_tfContent->property("media-type").toInt(); | |
226 | ||
227 | bool wasReceiving = m_sinkControllers.take(controller->contact()).second; | |
228 | m_handlesToContacts.remove(controller->contact()->handle()[0]); | |
229 | ||
230 | if (wasReceiving) { | |
231 | Q_EMIT q->remoteSendingStateChanged(controller->contact(), false); | |
232 | } | |
233 | } | |
234 | ||
235 | //END CallContentHandlerPrivate | |
236 | //BEGIN CallContentHandler | |
237 | ||
238 | CallContentHandler::CallContentHandler(QObject *parent) | |
239 | : QObject(parent), d(new CallContentHandlerPrivate(this)) | |
240 | { | |
241 | } | |
242 | ||
243 | CallContentHandler::~CallContentHandler() | |
244 | { | |
245 | delete d; | |
246 | } | |
247 | ||
248 | Tp::CallContentPtr CallContentHandler::callContent() const | |
249 | { | |
250 | return d->m_callContent; | |
251 | } | |
252 | ||
253 | Tp::Contacts CallContentHandler::remoteMembers() const | |
254 | { | |
255 | return d->m_sinkControllers.keys().toSet(); | |
256 | } | |
257 | ||
258 | //END CallContentHandler | |
259 | //BEGIN AudioContentHandler | |
260 | ||
261 | AudioContentHandler::AudioContentHandler(QObject *parent) | |
262 | : CallContentHandler(parent) | |
263 | { | |
264 | } | |
265 | ||
266 | VolumeController *AudioContentHandler::sourceVolumeControl() const | |
267 | { | |
268 | return static_cast<AudioSourceController*>(d->m_sourceController)->volumeController(); | |
269 | } | |
270 | ||
271 | VolumeController *AudioContentHandler::remoteMemberVolumeControl(const Tp::ContactPtr & contact) const | |
272 | { | |
273 | if (d->m_sinkControllers.contains(contact)) { | |
274 | BaseSinkController *ctrl = d->m_sinkControllers[contact].first; | |
275 | return static_cast<AudioSinkController*>(ctrl)->volumeController(); | |
276 | } else { | |
277 | return NULL; | |
278 | } | |
279 | } | |
280 | ||
281 | //END AudioContentHandler | |
282 | //BEGIN VideoContentHandler | |
283 | ||
284 | VideoContentHandler::VideoContentHandler(QObject *parent) | |
285 | : CallContentHandler(parent) | |
286 | { | |
287 | } | |
288 | ||
289 | void VideoContentHandler::linkVideoPreviewSink(const QGst::ElementPtr & sink) | |
290 | { | |
291 | static_cast<VideoSourceController*>(d->m_sourceController)->linkVideoPreviewSink(sink); | |
292 | } | |
293 | ||
294 | void VideoContentHandler::unlinkVideoPreviewSink() | |
295 | { | |
296 | static_cast<VideoSourceController*>(d->m_sourceController)->unlinkVideoPreviewSink(); | |
297 | } | |
298 | ||
299 | void VideoContentHandler::linkRemoteMemberVideoSink(const Tp::ContactPtr & contact, | |
300 | const QGst::ElementPtr & sink) | |
301 | { | |
302 | if (d->m_sinkControllers.contains(contact)) { | |
303 | BaseSinkController *ctrl = d->m_sinkControllers[contact].first; | |
304 | static_cast<VideoSinkController*>(ctrl)->linkVideoSink(sink); | |
305 | } | |
306 | } | |
307 | ||
308 | void VideoContentHandler::unlinkRemoteMemberVideoSink(const Tp::ContactPtr & contact) | |
309 | { | |
310 | if (d->m_sinkControllers.contains(contact)) { | |
311 | BaseSinkController *ctrl = d->m_sinkControllers[contact].first; | |
312 | static_cast<VideoSinkController*>(ctrl)->unlinkVideoSink(); | |
313 | } | |
314 | } | |
315 | ||
316 | //END VideoContentHandler | |
317 | ||
318 | #include "moc_call-content-handler.cpp" | |
319 | #include "moc_call-content-handler_p.cpp" |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef CALL_CONTENT_HANDLER_H | |
18 | #define CALL_CONTENT_HANDLER_H | |
19 | ||
20 | #include "volume-controller.h" | |
21 | #include <TelepathyQt/CallContent> | |
22 | ||
23 | class CallContentHandlerPrivate; | |
24 | class PendingCallContentHandler; | |
25 | class CallChannelHandlerPrivate; | |
26 | ||
27 | /** | |
28 | * This class handles streaming in a telepathy Call channel Content. | |
29 | * Everything related to streaming is handled internally. | |
30 | * In audio contents, this class can be safely cast to AudioContentHandler | |
31 | * and on video contents, to VideoContentHandler. Those subclasses expose | |
32 | * all you need to interract with the internal gstreamer pipeline. | |
33 | */ | |
34 | class CallContentHandler : public QObject | |
35 | { | |
36 | Q_OBJECT | |
37 | public: | |
38 | /** \returns the telepathy content associated with this handler */ | |
39 | Tp::CallContentPtr callContent() const; | |
40 | ||
41 | /** | |
42 | * \returns a set of contacts that are actively participating in | |
43 | * the call at the moment (i.e. there is media flowing from them to us) | |
44 | */ | |
45 | Tp::Contacts remoteMembers() const; | |
46 | ||
47 | Q_SIGNALS: | |
48 | void localSendingStateChanged(bool sending); | |
49 | void remoteSendingStateChanged(const Tp::ContactPtr & contact, bool sending); | |
50 | ||
51 | protected: | |
52 | explicit CallContentHandler(QObject *parent = 0); | |
53 | virtual ~CallContentHandler(); | |
54 | ||
55 | friend class CallContentHandlerPrivate; //emits the signals | |
56 | friend class PendingCallContentHandler; //uses d | |
57 | friend class CallChannelHandlerPrivate; //calls the destructor | |
58 | CallContentHandlerPrivate *const d; | |
59 | }; | |
60 | ||
61 | ||
62 | class AudioContentHandler : public CallContentHandler | |
63 | { | |
64 | Q_OBJECT | |
65 | public: | |
66 | VolumeController *sourceVolumeControl() const; | |
67 | VolumeController *remoteMemberVolumeControl(const Tp::ContactPtr & contact) const; | |
68 | ||
69 | private: | |
70 | friend class PendingCallContentHandler; | |
71 | explicit AudioContentHandler(QObject *parent = 0); | |
72 | virtual ~AudioContentHandler() {} | |
73 | }; | |
74 | ||
75 | ||
76 | class VideoContentHandler : public CallContentHandler | |
77 | { | |
78 | Q_OBJECT | |
79 | public: | |
80 | void linkVideoPreviewSink(const QGst::ElementPtr & sink); | |
81 | void unlinkVideoPreviewSink(); | |
82 | void linkRemoteMemberVideoSink(const Tp::ContactPtr & contact, const QGst::ElementPtr & sink); | |
83 | void unlinkRemoteMemberVideoSink(const Tp::ContactPtr & contact); | |
84 | ||
85 | private: | |
86 | friend class PendingCallContentHandler; | |
87 | explicit VideoContentHandler(QObject *parent = 0); | |
88 | virtual ~VideoContentHandler() {} | |
89 | }; | |
90 | ||
91 | #endif // CALL_CONTENT_HANDLER_H |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef CALL_CONTENT_HANDLER_P_H | |
18 | #define CALL_CONTENT_HANDLER_P_H | |
19 | ||
20 | #include "call-content-handler.h" | |
21 | #include "private/source-controllers.h" | |
22 | #include "private/sink-controllers.h" | |
23 | #include "private/sink-managers.h" | |
24 | #include "../libqtf/qtf.h" | |
25 | #include <QGst/Pipeline> | |
26 | #include <QGst/Pad> | |
27 | ||
28 | /* This class constructs a CallContentHandler. This operation is asynchronous | |
29 | * because we need to construct a CallContentHandler as soon as we receive | |
30 | * the TfContent from tp-farstream, however, because tp-qt4 and tp-glib check | |
31 | * dbus separately, tp-qt4 may not be synchronized with tp-glib and thus the | |
32 | * Tp::CallContent may not be available when the TfContent comes. This class | |
33 | * basically waits for tp-qt4 to synchronize. | |
34 | */ | |
35 | class PendingCallContentHandler : public QObject | |
36 | { | |
37 | Q_OBJECT | |
38 | public: | |
39 | PendingCallContentHandler(const Tp::CallChannelPtr & callChannel, | |
40 | const QTf::ContentPtr & tfContent, | |
41 | const QGst::PipelinePtr & pipeline, | |
42 | QObject *parent); | |
43 | ||
44 | private Q_SLOTS: | |
45 | void findCallContent(); | |
46 | void onContentAdded(const Tp::CallContentPtr & callContent); | |
47 | ||
48 | Q_SIGNALS: | |
49 | void ready(const QTf::ContentPtr & tfContent, CallContentHandler *contentHandler); | |
50 | ||
51 | private: | |
52 | CallContentHandler *m_contentHandler; | |
53 | Tp::CallChannelPtr m_callChannel; | |
54 | QTf::ContentPtr m_tfContent; | |
55 | }; | |
56 | ||
57 | ||
58 | class CallContentHandlerPrivate : public QObject | |
59 | { | |
60 | Q_OBJECT | |
61 | public: | |
62 | CallContentHandlerPrivate(CallContentHandler *qq) : QObject(), q(qq) {} | |
63 | virtual ~CallContentHandlerPrivate(); | |
64 | ||
65 | /* Called from PendingCallContentHandler right after constructing the CallContentHandler */ | |
66 | void init(const QTf::ContentPtr & tfContent, const QGst::PipelinePtr & pipeline); | |
67 | ||
68 | /* Called from PendingCallContentHandler when the CallContent is ready */ | |
69 | void setCallContent(const Tp::CallContentPtr & callContent); | |
70 | ||
71 | private: | |
72 | void onSrcPadAdded(uint contactHandle, | |
73 | const QGlib::ObjectPtr & fsStream, | |
74 | const QGst::PadPtr & pad); | |
75 | bool onStartSending(); | |
76 | void onStopSending(); | |
77 | bool onStartReceiving(void *handles, uint handleCount); | |
78 | void onStopReceiving(void *handles, uint handleCount); | |
79 | ||
80 | private Q_SLOTS: | |
81 | void onControllerCreated(BaseSinkController *controller); | |
82 | void onControllerDestroyed(BaseSinkController *controller); | |
83 | ||
84 | public: //accessed from the public class | |
85 | BaseSourceController *m_sourceController; | |
86 | QHash<Tp::ContactPtr, QPair<BaseSinkController*, bool> > m_sinkControllers; //bool -> receiving state | |
87 | Tp::CallContentPtr m_callContent; | |
88 | ||
89 | private: | |
90 | CallContentHandler * const q; | |
91 | BaseSinkManager *m_sinkManager; | |
92 | QTf::ContentPtr m_tfContent; | |
93 | QGst::PipelinePtr m_pipeline; | |
94 | QGst::PadPtr m_sourceControllerPad; | |
95 | QGst::ElementPtr m_queue; | |
96 | QHash<uint, Tp::ContactPtr> m_handlesToContacts; | |
97 | }; | |
98 | ||
99 | #endif // CALL_CONTENT_HANDLER_P_H |
0 | /* | |
1 | Copyright (C) 2010 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "device-element-factory.h" | |
18 | #include "phonon-integration.h" | |
19 | #include <QGst/Bin> | |
20 | #include <QGst/ElementFactory> | |
21 | #include <KDebug> | |
22 | #include <KConfig> | |
23 | #include <KConfigGroup> | |
24 | #include <KGlobal> | |
25 | ||
26 | QGst::ElementPtr DeviceElementFactory::makeAudioCaptureElement() | |
27 | { | |
28 | QGst::ElementPtr element; | |
29 | ||
30 | //allow overrides from the application's configuration file | |
31 | element = tryOverrideForKey("audiosrc"); | |
32 | if (element) { | |
33 | return element; | |
34 | } | |
35 | ||
36 | //use gconf on non-kde environments | |
37 | if (qgetenv("KDE_FULL_SESSION").isEmpty()) { | |
38 | element = tryElement("gconfaudiosrc"); | |
39 | return element; | |
40 | } | |
41 | ||
42 | //for kde environments try to do what phonon does: | |
43 | //first try pulseaudio, | |
44 | element = tryElement("pulsesrc"); | |
45 | if (element) { | |
46 | return element; | |
47 | } | |
48 | ||
49 | //then try alsa/oss devices reported by phononserver | |
50 | //in the order that they are configured in phonon | |
51 | QList<Phonon::DeviceAccessList> phononDeviceLists | |
52 | = PhononIntegration::readDevices(Phonon::AudioCaptureDeviceType, Phonon::CommunicationCategory); | |
53 | ||
54 | Q_FOREACH (const Phonon::DeviceAccessList & deviceList, phononDeviceLists) { | |
55 | Q_FOREACH (const Phonon::DeviceAccess & device, deviceList) { | |
56 | if (device.first == "alsa") { | |
57 | //skip x-phonon devices, we will use plughw which is always second in the list | |
58 | if (!device.second.startsWith("x-phonon")) { | |
59 | element = tryElement("alsasrc", device.second); | |
60 | } | |
61 | } else if (device.first == "oss") { | |
62 | element = tryElement("osssrc", device.second); | |
63 | } | |
64 | ||
65 | if (element) { | |
66 | return element; | |
67 | } | |
68 | } | |
69 | } | |
70 | ||
71 | //as a last resort, try gstreamer's autodetection | |
72 | element = tryElement("autoaudiosrc"); | |
73 | return element; | |
74 | } | |
75 | ||
76 | QGst::ElementPtr DeviceElementFactory::makeAudioOutputElement() | |
77 | { | |
78 | QGst::ElementPtr element; | |
79 | ||
80 | //allow overrides from the application's configuration file | |
81 | element = tryOverrideForKey("audiosink"); | |
82 | if (element) { | |
83 | return element; | |
84 | } | |
85 | ||
86 | //use gconf on non-kde environments | |
87 | if (qgetenv("KDE_FULL_SESSION").isEmpty()) { | |
88 | element = tryElement("gconfaudiosink"); | |
89 | if (element) { | |
90 | element->setProperty("profile", 2 /*chat*/); | |
91 | } | |
92 | return element; | |
93 | } | |
94 | ||
95 | //for kde environments try to do what phonon does: | |
96 | //first try pulseaudio, | |
97 | element = tryElement("pulsesink"); | |
98 | if (element) { | |
99 | //TODO set category somehow... | |
100 | return element; | |
101 | } | |
102 | ||
103 | //then try alsa/oss devices reported by phononserver | |
104 | //in the order that they are configured in phonon | |
105 | QList<Phonon::DeviceAccessList> phononDeviceLists | |
106 | = PhononIntegration::readDevices(Phonon::AudioOutputDeviceType, Phonon::CommunicationCategory); | |
107 | ||
108 | Q_FOREACH (const Phonon::DeviceAccessList & deviceList, phononDeviceLists) { | |
109 | Q_FOREACH (const Phonon::DeviceAccess & device, deviceList) { | |
110 | if (device.first == "alsa") { | |
111 | //use dmix instead of x-phonon, since we don't have phonon's alsa configuration file | |
112 | QString deviceString = device.second; | |
113 | deviceString.replace("x-phonon", "dmix"); | |
114 | element = tryElement("alsasink", deviceString); | |
115 | } else if (device.first == "oss") { | |
116 | element = tryElement("osssink", device.second); | |
117 | } | |
118 | ||
119 | if (element) { | |
120 | return element; | |
121 | } | |
122 | } | |
123 | } | |
124 | ||
125 | //as a last resort, try gstreamer's autodetection | |
126 | element = tryElement("autoaudiosink"); | |
127 | return element; | |
128 | } | |
129 | ||
130 | QGst::ElementPtr DeviceElementFactory::makeVideoCaptureElement() | |
131 | { | |
132 | QGst::ElementPtr element; | |
133 | ||
134 | //allow overrides from the application's configuration file | |
135 | element = tryOverrideForKey("videosrc"); | |
136 | if (element) { | |
137 | return element; | |
138 | } | |
139 | ||
140 | //use gconf on non-kde environments | |
141 | if (qgetenv("KDE_FULL_SESSION").isEmpty()) { | |
142 | element = tryElement("gconfvideosrc"); | |
143 | return element; | |
144 | } | |
145 | ||
146 | //TODO implement phonon settings | |
147 | ||
148 | //as a last resort, try gstreamer's autodetection | |
149 | element = tryElement("autovideosrc"); | |
150 | return element; | |
151 | } | |
152 | ||
153 | QGst::ElementPtr DeviceElementFactory::tryElement(const char *name, const QString & device) | |
154 | { | |
155 | QGst::ElementPtr element = QGst::ElementFactory::make(name); | |
156 | if (!element) { | |
157 | kDebug() << "Could not make element" << name; | |
158 | return element; | |
159 | } | |
160 | ||
161 | if (!device.isEmpty()) { | |
162 | try { | |
163 | element->setProperty("device", device); | |
164 | } catch (const std::logic_error & error) { | |
165 | kDebug() << "FIXME: Element" << name << "doesn't support string device property"; | |
166 | } | |
167 | } | |
168 | ||
169 | if (!element->setState(QGst::StateReady)) { | |
170 | kDebug() << "Element" << name << "with device string" << device << "doesn't want to become ready"; | |
171 | return QGst::ElementPtr(); | |
172 | } | |
173 | ||
174 | kDebug() << "Using element" << name << "with device string" << device; | |
175 | return element; | |
176 | } | |
177 | ||
178 | QGst::ElementPtr DeviceElementFactory::tryOverrideForKey(const char *keyName) | |
179 | { | |
180 | QGst::ElementPtr element; | |
181 | const KConfigGroup configGroup = KGlobal::config()->group("GStreamer"); | |
182 | ||
183 | if (configGroup.hasKey(keyName)) { | |
184 | QString binDescription = configGroup.readEntry(keyName); | |
185 | element = QGst::Bin::fromDescription(binDescription); | |
186 | ||
187 | if (!element) { | |
188 | kDebug() << "Could not construct bin" << binDescription; | |
189 | return element; | |
190 | } | |
191 | ||
192 | if (!element->setState(QGst::StateReady)) { | |
193 | kDebug() << "Custom bin" << binDescription << "doesn't want to become ready"; | |
194 | return QGst::ElementPtr(); | |
195 | } | |
196 | ||
197 | kDebug() << "Using custom bin" << binDescription; | |
198 | } | |
199 | ||
200 | return element; | |
201 | } |
0 | /* | |
1 | Copyright (C) 2010 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef DEVICE_ELEMENT_FACTORY_P_H | |
18 | #define DEVICE_ELEMENT_FACTORY_P_H | |
19 | ||
20 | #include <QtCore/QList> | |
21 | #include <QtCore/QHash> | |
22 | #include <QGst/Global> | |
23 | ||
24 | class DeviceElementFactory | |
25 | { | |
26 | public: | |
27 | static QGst::ElementPtr makeAudioCaptureElement(); | |
28 | static QGst::ElementPtr makeAudioOutputElement(); | |
29 | static QGst::ElementPtr makeVideoCaptureElement(); | |
30 | ||
31 | private: | |
32 | static QGst::ElementPtr tryElement(const char *name, const QString & device = QString()); | |
33 | static QGst::ElementPtr tryOverrideForKey(const char *keyName); | |
34 | }; | |
35 | ||
36 | #endif // DEVICE_ELEMENT_FACTORY_H |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.com> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "input-control-bin.h" | |
18 | ||
19 | #include <QtCore/QString> | |
20 | ||
21 | #include <QGst/ElementFactory> | |
22 | #include <QGst/GhostPad> | |
23 | #include <QGst/Structure> | |
24 | #include <QGst/Caps> | |
25 | #include <QGst/Fraction> | |
26 | ||
27 | ||
28 | InputControlBin::InputControlBin(const QGst::ElementPtr & silenceSrc, | |
29 | const QGst::ElementPtr & filter) | |
30 | { | |
31 | m_bin = QGst::Bin::create(); | |
32 | m_silenceSource = silenceSrc; | |
33 | m_inputSelector = QGst::ElementFactory::make("input-selector"); | |
34 | m_tee = QGst::ElementFactory::make("tee"); | |
35 | m_fakesink = QGst::ElementFactory::make("fakesink"); | |
36 | m_fakesink->setProperty("sync", false); | |
37 | m_fakesink->setProperty("async", false); | |
38 | m_fakesink->setProperty("silent", true); | |
39 | m_fakesink->setProperty("enable-last-buffer", false); | |
40 | ||
41 | m_bin->add(m_silenceSource, m_inputSelector, filter, m_tee, m_fakesink); | |
42 | ||
43 | // silencesource ! input-selector | |
44 | QGst::PadPtr selectorSinkPad = m_inputSelector->getRequestPad("sink%d"); | |
45 | m_silenceSource->getStaticPad("src")->link(selectorSinkPad); | |
46 | ||
47 | // input-selector ! (filter bin) ! tee | |
48 | QGst::Element::linkMany(m_inputSelector, filter, m_tee); | |
49 | ||
50 | // tee ! fakesink | |
51 | m_tee->getRequestPad("src%d")->link(m_fakesink->getStaticPad("sink")); | |
52 | } | |
53 | ||
54 | InputControlBin::~InputControlBin() | |
55 | { | |
56 | ||
57 | } | |
58 | ||
59 | void InputControlBin::connectSource(const QGst::ElementPtr & source) | |
60 | { | |
61 | m_source = source; | |
62 | m_bin->add(m_source); | |
63 | ||
64 | //connect the source to the input-selector sink pad | |
65 | m_selectorSinkPad = m_inputSelector->getRequestPad("sink%d"); | |
66 | m_source->getStaticPad("src")->link(m_selectorSinkPad); | |
67 | ||
68 | //set the source to playing state | |
69 | m_source->syncStateWithParent(); | |
70 | ||
71 | //swap sources | |
72 | switchToRealSource(); | |
73 | } | |
74 | ||
75 | void InputControlBin::disconnectSource() | |
76 | { | |
77 | switchToSilenceSource(); | |
78 | ||
79 | //disconnect the source from the input-selector sink pad | |
80 | m_source->getStaticPad("src")->unlink(m_selectorSinkPad); | |
81 | m_inputSelector->releaseRequestPad(m_selectorSinkPad); | |
82 | m_selectorSinkPad.clear(); | |
83 | ||
84 | //destroy the source | |
85 | m_source->setState(QGst::StateNull); | |
86 | m_bin->remove(m_source); | |
87 | m_source.clear(); | |
88 | } | |
89 | ||
90 | QGst::PadPtr InputControlBin::requestSrcPad() | |
91 | { | |
92 | static uint padNameCounter = 0; | |
93 | ||
94 | QString newPadName = QString("src%1").arg(padNameCounter); | |
95 | padNameCounter++; | |
96 | ||
97 | QGst::PadPtr teeSrcPad = m_tee->getRequestPad("src%d"); | |
98 | QGst::PadPtr ghostSrcPad = QGst::GhostPad::create(teeSrcPad, newPadName.toAscii()); | |
99 | ||
100 | ghostSrcPad->setActive(true); | |
101 | m_bin->addPad(ghostSrcPad); | |
102 | m_pads.insert(ghostSrcPad, teeSrcPad); | |
103 | ||
104 | return ghostSrcPad; | |
105 | } | |
106 | ||
107 | void InputControlBin::releaseSrcPad(const QGst::PadPtr & pad) | |
108 | { | |
109 | QGst::PadPtr teeSrcPad = m_pads.take(pad); | |
110 | Q_ASSERT(!teeSrcPad.isNull()); | |
111 | ||
112 | m_bin->removePad(pad); | |
113 | m_tee->releaseRequestPad(teeSrcPad); | |
114 | } | |
115 | ||
116 | void InputControlBin::switchToRealSource() | |
117 | { | |
118 | //wait for data to arrive on the source src pad | |
119 | //required for synchronization with the streaming thread | |
120 | QGst::PadPtr sourceSrcPad = m_source->getStaticPad("src"); | |
121 | sourceSrcPad->setBlocked(true); | |
122 | sourceSrcPad->setBlocked(false); | |
123 | ||
124 | //switch inputs | |
125 | m_inputSelector->setProperty("active-pad", m_selectorSinkPad); | |
126 | } | |
127 | ||
128 | void InputControlBin::switchToSilenceSource() | |
129 | { | |
130 | //switch inputs | |
131 | m_inputSelector->setProperty("active-pad", m_inputSelector->getStaticPad("sink0")); | |
132 | ||
133 | //wait for data to arrive on the inputselector src pad | |
134 | //required for synchronization with the streaming thread | |
135 | QGst::PadPtr selectorSrcPad = m_inputSelector->getStaticPad("src"); | |
136 | selectorSrcPad->setBlocked(true); | |
137 | selectorSrcPad->setBlocked(false); | |
138 | } | |
139 |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.com> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef INPUT_CONTROL_BIN_H | |
18 | #define INPUT_CONTROL_BIN_H | |
19 | ||
20 | #include <QGst/Bin> | |
21 | #include <QGst/Pad> | |
22 | ||
23 | class InputControlBin | |
24 | { | |
25 | public: | |
26 | InputControlBin(const QGst::ElementPtr & silenceSrc, const QGst::ElementPtr & filter); | |
27 | virtual ~InputControlBin(); | |
28 | ||
29 | QGst::BinPtr bin() const { return m_bin; } | |
30 | ||
31 | void connectSource(const QGst::ElementPtr & source); | |
32 | void disconnectSource(); | |
33 | ||
34 | QGst::PadPtr requestSrcPad(); | |
35 | void releaseSrcPad(const QGst::PadPtr & pad); | |
36 | ||
37 | private: | |
38 | void switchToRealSource(); | |
39 | void switchToSilenceSource(); | |
40 | ||
41 | //<ghost src pad, tee request src pad> | |
42 | QHash<QGst::PadPtr, QGst::PadPtr> m_pads; | |
43 | //the bin that keeps all the elements below grouped together | |
44 | QGst::BinPtr m_bin; | |
45 | //the tee that gives us the source pads for whomever connects on this bin | |
46 | QGst::ElementPtr m_tee; | |
47 | //a fake sink that is connected on the tee to avoid not-linked errors | |
48 | QGst::ElementPtr m_fakesink; | |
49 | //the input-selector that switches between m_source and m_silenceSource | |
50 | QGst::ElementPtr m_inputSelector; | |
51 | //a fake source that generates silence (audio) or black image (video) | |
52 | QGst::ElementPtr m_silenceSource; | |
53 | //the real source bin, as constructed from the subclass | |
54 | QGst::ElementPtr m_source; | |
55 | //the input-selector pad where the source is connected | |
56 | QGst::PadPtr m_selectorSinkPad; | |
57 | }; | |
58 | ||
59 | #endif // INPUT_CONTROL_BIN_H |
0 | /* | |
1 | This file contains code from the phonon project. | |
2 | ||
3 | Copyright (C) 2006-2008 Matthias Kretz <kretz@kde.org> | |
4 | Copyright (C) 2010 Collabora Ltd. <info@collabora.co.uk> | |
5 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
6 | ||
7 | This library is free software; you can redistribute it and/or | |
8 | modify it under the terms of the GNU Lesser General Public | |
9 | License as published by the Free Software Foundation; either | |
10 | version 2.1 of the License, or (at your option) version 3, or any | |
11 | later version accepted by the membership of KDE e.V. (or its | |
12 | successor approved by the membership of KDE e.V.), Nokia Corporation | |
13 | (or its successors, if any) and the KDE Free Qt Foundation, which shall | |
14 | act as a proxy defined in Section 6 of version 3 of the license. | |
15 | ||
16 | This library is distributed in the hope that it will be useful, | |
17 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 | Lesser General Public License for more details. | |
20 | ||
21 | You should have received a copy of the GNU Lesser General Public | |
22 | License along with this library. If not, see <http://www.gnu.org/licenses/>. | |
23 | */ | |
24 | #include "phonon-integration.h" | |
25 | #include <QtCore/QSettings> | |
26 | #include <QtDBus/QDBusInterface> | |
27 | #include <QtDBus/QDBusReply> | |
28 | #include <KDebug> | |
29 | #include <KGlobal> | |
30 | ||
31 | Q_DECLARE_METATYPE(QList<int>) | |
32 | ||
33 | struct PhononIntegrationPrivate | |
34 | { | |
35 | PhononIntegrationPrivate() | |
36 | : phononSettings(QLatin1String("kde.org"), QLatin1String("libphonon")), | |
37 | phononServer(QLatin1String("org.kde.kded"), | |
38 | QLatin1String("/modules/phononserver"), | |
39 | QLatin1String("org.kde.PhononServer")) | |
40 | { | |
41 | registerMetaTypes(); | |
42 | } | |
43 | ||
44 | void registerMetaTypes() | |
45 | { | |
46 | // Register the PhononDeviceAccessList type if it has not been registered yet | |
47 | if (qMetaTypeId<Phonon::DeviceAccess>()) | |
48 | { | |
49 | qRegisterMetaType<Phonon::DeviceAccess>(); | |
50 | qRegisterMetaTypeStreamOperators<Phonon::DeviceAccess>("Phonon::DeviceAccess"); | |
51 | } | |
52 | ||
53 | if (qMetaTypeId<Phonon::DeviceAccessList>()) | |
54 | { | |
55 | qRegisterMetaType<Phonon::DeviceAccessList>(); | |
56 | qRegisterMetaTypeStreamOperators<Phonon::DeviceAccessList>("Phonon::DeviceAccessList"); | |
57 | ||
58 | //compatibility with kde 4.5 | |
59 | qRegisterMetaTypeStreamOperators<Phonon::DeviceAccessList>("PhononDeviceAccessList"); | |
60 | } | |
61 | ||
62 | if (qMetaTypeId< QList<int> >()) { | |
63 | qRegisterMetaType< QList<int> >(); | |
64 | qRegisterMetaTypeStreamOperators< QList<int> >("QList<int>"); | |
65 | } | |
66 | } | |
67 | ||
68 | QSettings phononSettings; | |
69 | QDBusInterface phononServer; | |
70 | }; | |
71 | ||
72 | K_GLOBAL_STATIC(PhononIntegrationPrivate, s_priv); | |
73 | ||
74 | ||
75 | QList<Phonon::DeviceAccessList> PhononIntegration::readDevices(Phonon::ObjectDescriptionType type, | |
76 | Phonon::Category category) | |
77 | { | |
78 | switch (type) { | |
79 | case Phonon::AudioOutputDeviceType: | |
80 | case Phonon::AudioCaptureDeviceType: | |
81 | return readAudioDevices(type, category); | |
82 | break; | |
83 | case Phonon::VideoCaptureDeviceType: | |
84 | return readVideoDevices(category); | |
85 | break; | |
86 | default: | |
87 | return QList<Phonon::DeviceAccessList>(); | |
88 | } | |
89 | } | |
90 | ||
91 | template <typename R> | |
92 | static inline R dbusCall(QDBusInterface & interface, const QString & method, int argument) | |
93 | { | |
94 | R r; | |
95 | QDBusReply<QByteArray> reply = interface.call(method, argument); | |
96 | if (!reply.isValid()) { | |
97 | kDebug() << reply.error(); | |
98 | return r; | |
99 | } | |
100 | ||
101 | QDataStream stream(reply.value()); | |
102 | stream >> r; | |
103 | return r; | |
104 | } | |
105 | ||
106 | QList<Phonon::DeviceAccessList> PhononIntegration::readAudioDevices(Phonon::ObjectDescriptionType type, | |
107 | Phonon::Category category) | |
108 | { | |
109 | QList<Phonon::DeviceAccessList> list; | |
110 | ||
111 | QList<int> indices = dbusCall< QList<int> >(s_priv->phononServer, | |
112 | QLatin1String("audioDevicesIndexes"), type); | |
113 | kDebug() << "got audio device indices" << indices << "for type" << type; | |
114 | ||
115 | indices = sortDevicesByCategoryPriority(type, category, indices); | |
116 | kDebug() << "sorted audio devices indices" << indices << "for category" << category; | |
117 | ||
118 | for (int i=0; i < indices.size(); ++i) { | |
119 | QHash<QByteArray, QVariant> properties = | |
120 | dbusCall< QHash<QByteArray, QVariant> >(s_priv->phononServer, | |
121 | QLatin1String("audioDevicesProperties"), | |
122 | indices.at(i)); | |
123 | ||
124 | if (hideAdvancedDevices()) { | |
125 | const QVariant var = properties.value("isAdvanced"); | |
126 | if (var.isValid() && var.toBool()) { | |
127 | kDebug() << "hiding device" << indices.at(i) | |
128 | << "because it is advanced and HideAdvancedDevices is specified"; | |
129 | continue; | |
130 | } | |
131 | } | |
132 | ||
133 | QVariant accessList = properties.value("deviceAccessList"); | |
134 | if (accessList.isValid()) { | |
135 | kDebug() << "appending device access list for device" << indices.at(i); | |
136 | list.append(accessList.value<Phonon::DeviceAccessList>()); | |
137 | } | |
138 | } | |
139 | return list; | |
140 | } | |
141 | ||
142 | QList<Phonon::DeviceAccessList> PhononIntegration::readVideoDevices(Phonon::Category category) | |
143 | { | |
144 | Q_UNUSED (category); | |
145 | return QList<Phonon::DeviceAccessList>(); //TODO implement me | |
146 | } | |
147 | ||
148 | bool PhononIntegration::hideAdvancedDevices() | |
149 | { | |
150 | return s_priv->phononSettings.value(QLatin1String("General/HideAdvancedDevices"), true).toBool(); | |
151 | } | |
152 | ||
153 | QList<int> PhononIntegration::sortDevicesByCategoryPriority(Phonon::ObjectDescriptionType type, | |
154 | Phonon::Category category, | |
155 | QList<int> originalList) | |
156 | { | |
157 | switch(type) { | |
158 | case Phonon::AudioOutputDeviceType: | |
159 | s_priv->phononSettings.beginGroup(QLatin1String("AudioOutputDevice")); | |
160 | break; | |
161 | case Phonon::AudioCaptureDeviceType: | |
162 | s_priv->phononSettings.beginGroup(QLatin1String("AudioCaptureDevice")); | |
163 | break; | |
164 | case Phonon::VideoCaptureDeviceType: | |
165 | s_priv->phononSettings.beginGroup(QLatin1String("VideoCaptureDevice")); | |
166 | break; | |
167 | default: | |
168 | Q_ASSERT(false); | |
169 | } | |
170 | ||
171 | if (originalList.size() <= 1) { | |
172 | // nothing to sort | |
173 | return originalList; | |
174 | } else { | |
175 | // make entries unique | |
176 | QSet<int> seen; | |
177 | QMutableListIterator<int> it(originalList); | |
178 | while (it.hasNext()) { | |
179 | if (seen.contains(it.next())) { | |
180 | it.remove(); | |
181 | } else { | |
182 | seen.insert(it.value()); | |
183 | } | |
184 | } | |
185 | } | |
186 | ||
187 | QString categoryKey = QLatin1String("Category_") + QString::number(static_cast<int>(category)); | |
188 | if (!s_priv->phononSettings.contains(categoryKey)) { | |
189 | // no list in config for the given category | |
190 | categoryKey = QLatin1String("Category_") + QString::number(static_cast<int>(Phonon::NoCategory)); | |
191 | if (!s_priv->phononSettings.contains(categoryKey)) { | |
192 | // no list in config for NoCategory | |
193 | return originalList; | |
194 | } | |
195 | } | |
196 | ||
197 | //Now the list from the config | |
198 | QList<int> deviceList = s_priv->phononSettings.value(categoryKey).value< QList<int> >(); | |
199 | ||
200 | //if there are devices in the config that phononserver doesn't report, remove them from the list | |
201 | QMutableListIterator<int> i(deviceList); | |
202 | while (i.hasNext()) { | |
203 | if (0 == originalList.removeAll(i.next())) { | |
204 | i.remove(); | |
205 | } | |
206 | } | |
207 | ||
208 | //if the backend reports more devices that are not in d->config append them to the list | |
209 | deviceList += originalList; | |
210 | ||
211 | s_priv->phononSettings.endGroup(); | |
212 | return deviceList; | |
213 | } |
0 | /* | |
1 | This file contains code from the phonon project. | |
2 | ||
3 | Copyright (C) 2006-2008 Matthias Kretz <kretz@kde.org> | |
4 | Copyright (C) 2010 Collabora Ltd. <info@collabora.co.uk> | |
5 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
6 | ||
7 | This library is free software; you can redistribute it and/or | |
8 | modify it under the terms of the GNU Lesser General Public | |
9 | License as published by the Free Software Foundation; either | |
10 | version 2.1 of the License, or (at your option) version 3, or any | |
11 | later version accepted by the membership of KDE e.V. (or its | |
12 | successor approved by the membership of KDE e.V.), Nokia Corporation | |
13 | (or its successors, if any) and the KDE Free Qt Foundation, which shall | |
14 | act as a proxy defined in Section 6 of version 3 of the license. | |
15 | ||
16 | This library is distributed in the hope that it will be useful, | |
17 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 | Lesser General Public License for more details. | |
20 | ||
21 | You should have received a copy of the GNU Lesser General Public | |
22 | License along with this library. If not, see <http://www.gnu.org/licenses/>. | |
23 | */ | |
24 | #ifndef PHONON_INTEGRATION_P_H | |
25 | #define PHONON_INTEGRATION_P_H | |
26 | ||
27 | #include <phonon/Global> | |
28 | #include <phonon/ObjectDescription> | |
29 | ||
30 | class PhononIntegration | |
31 | { | |
32 | public: | |
33 | static QList<Phonon::DeviceAccessList> readDevices(Phonon::ObjectDescriptionType type, | |
34 | Phonon::Category category); | |
35 | ||
36 | private: | |
37 | static QList<Phonon::DeviceAccessList> readAudioDevices(Phonon::ObjectDescriptionType type, | |
38 | Phonon::Category category); | |
39 | static QList<Phonon::DeviceAccessList> readVideoDevices(Phonon::Category category); | |
40 | static bool hideAdvancedDevices(); | |
41 | static QList<int> sortDevicesByCategoryPriority(Phonon::ObjectDescriptionType type, | |
42 | Phonon::Category category, | |
43 | QList<int> originalList); | |
44 | }; | |
45 | ||
46 | #endif // PHONONINTEGRATION_P_H |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "sink-controllers.h" | |
18 | #include <QGst/ElementFactory> | |
19 | #include <QGst/Pipeline> | |
20 | #include <QGst/GhostPad> | |
21 | #include <KDebug> | |
22 | ||
23 | //BEGIN BaseSinkController | |
24 | ||
25 | Tp::ContactPtr BaseSinkController::contact() const | |
26 | { | |
27 | return m_contact; | |
28 | } | |
29 | ||
30 | void BaseSinkController::initFromMainThread(const Tp::ContactPtr & contact) | |
31 | { | |
32 | m_contact = contact; | |
33 | } | |
34 | ||
35 | void BaseSinkController::releaseFromStreamingThread(const QGst::PipelinePtr & pipeline) | |
36 | { | |
37 | m_bin->setState(QGst::StateNull); | |
38 | pipeline->remove(m_bin); | |
39 | m_bin.clear(); | |
40 | } | |
41 | ||
42 | //END BaseSinkController | |
43 | //BEGIN AudioSinkController | |
44 | ||
45 | AudioSinkController::AudioSinkController(const QGst::PadPtr & adderSinkPad) | |
46 | : m_adderRequestPad(adderSinkPad), | |
47 | m_volumeController(NULL) | |
48 | { | |
49 | } | |
50 | ||
51 | AudioSinkController::~AudioSinkController() | |
52 | { | |
53 | delete m_volumeController; | |
54 | } | |
55 | ||
56 | QGst::PadPtr AudioSinkController::adderRequestPad() const | |
57 | { | |
58 | return m_adderRequestPad; | |
59 | } | |
60 | ||
61 | VolumeController *AudioSinkController::volumeController() const | |
62 | { | |
63 | return m_volumeController; | |
64 | } | |
65 | ||
66 | void AudioSinkController::initFromStreamingThread(const QGst::PadPtr & srcPad, | |
67 | const QGst::PipelinePtr & pipeline) | |
68 | { | |
69 | m_bin = QGst::Bin::fromDescription( | |
70 | "volume ! " | |
71 | "audioconvert ! " | |
72 | "audioresample ! " | |
73 | "level" | |
74 | ); | |
75 | ||
76 | pipeline->add(m_bin); | |
77 | m_bin->syncStateWithParent(); | |
78 | ||
79 | m_bin->getStaticPad("src")->link(m_adderRequestPad); | |
80 | srcPad->link(m_bin->getStaticPad("sink")); | |
81 | } | |
82 | ||
83 | void AudioSinkController::initFromMainThread(const Tp::ContactPtr & contact) | |
84 | { | |
85 | m_volumeController = new VolumeController; | |
86 | m_volumeController->setElement(m_bin->getElementByInterface<QGst::StreamVolume>()); | |
87 | ||
88 | BaseSinkController::initFromMainThread(contact); | |
89 | } | |
90 | ||
91 | void AudioSinkController::releaseFromStreamingThread(const QGst::PipelinePtr & pipeline) | |
92 | { | |
93 | m_bin->getStaticPad("src")->unlink(m_adderRequestPad); | |
94 | m_adderRequestPad.clear(); | |
95 | ||
96 | BaseSinkController::releaseFromStreamingThread(pipeline); | |
97 | } | |
98 | ||
99 | //END AudioSinkController | |
100 | //BEGIN VideoSinkController | |
101 | ||
102 | VideoSinkController::VideoSinkController() | |
103 | : m_padNameCounter(0), | |
104 | m_videoSinkBin(NULL) | |
105 | { | |
106 | } | |
107 | ||
108 | VideoSinkController::~VideoSinkController() | |
109 | { | |
110 | } | |
111 | ||
112 | QGst::PadPtr VideoSinkController::requestSrcPad() | |
113 | { | |
114 | QString newPadName = QString("src%1").arg(m_padNameCounter); | |
115 | m_padNameCounter++; | |
116 | ||
117 | QGst::PadPtr teeSrcPad = m_tee->getRequestPad("src%d"); | |
118 | QGst::PadPtr ghostSrcPad = QGst::GhostPad::create(teeSrcPad, newPadName.toAscii()); | |
119 | ||
120 | ghostSrcPad->setActive(true); | |
121 | m_bin->addPad(ghostSrcPad); | |
122 | m_pads.insert(ghostSrcPad, teeSrcPad); | |
123 | ||
124 | return ghostSrcPad; | |
125 | } | |
126 | ||
127 | void VideoSinkController::releaseSrcPad(const QGst::PadPtr & pad) | |
128 | { | |
129 | QGst::PadPtr teeSrcPad = m_pads.take(pad); | |
130 | Q_ASSERT(!teeSrcPad.isNull()); | |
131 | ||
132 | m_bin->removePad(pad); | |
133 | m_tee->releaseRequestPad(teeSrcPad); | |
134 | } | |
135 | ||
136 | void VideoSinkController::linkVideoSink(const QGst::ElementPtr & sink) | |
137 | { | |
138 | //initFromStreamingThread() is always called before the user knows | |
139 | //anything about this content's src pad, so nobody can possibly link | |
140 | //a video sink before the bin is created. | |
141 | Q_ASSERT(m_bin); | |
142 | kDebug(); | |
143 | ||
144 | QGst::PadPtr srcPad = m_tee->getRequestPad("src%d"); | |
145 | m_videoSinkBin = new VideoSinkBin(sink); | |
146 | ||
147 | m_bin->add(m_videoSinkBin->bin()); | |
148 | m_videoSinkBin->bin()->syncStateWithParent(); | |
149 | srcPad->link(m_videoSinkBin->bin()->getStaticPad("sink")); | |
150 | } | |
151 | ||
152 | void VideoSinkController::unlinkVideoSink() | |
153 | { | |
154 | //lock because releaseFromStreamingThread() is always called before the user | |
155 | //knows about the removal of the content's src pad and may try to unlink | |
156 | //externally while releaseFromStreamingThread() is running. | |
157 | QMutexLocker l(&m_videoSinkMutex); | |
158 | ||
159 | if (m_videoSinkBin) { | |
160 | kDebug(); | |
161 | ||
162 | QGst::PadPtr sinkPad = m_videoSinkBin->bin()->getStaticPad("sink"); | |
163 | QGst::PadPtr srcPad = sinkPad->peer(); | |
164 | ||
165 | srcPad->unlink(sinkPad); | |
166 | m_videoSinkBin->bin()->setState(QGst::StateNull); | |
167 | m_bin->remove(m_videoSinkBin->bin()); | |
168 | delete m_videoSinkBin; | |
169 | m_videoSinkBin = NULL; | |
170 | ||
171 | m_tee->releaseRequestPad(srcPad); | |
172 | } | |
173 | } | |
174 | ||
175 | void VideoSinkController::initFromStreamingThread(const QGst::PadPtr & srcPad, | |
176 | const QGst::PipelinePtr & pipeline) | |
177 | { | |
178 | m_bin = QGst::Bin::create(); | |
179 | m_tee = QGst::ElementFactory::make("tee"); | |
180 | ||
181 | QGst::ElementPtr fakesink = QGst::ElementFactory::make("fakesink"); | |
182 | fakesink->setProperty("sync", false); | |
183 | fakesink->setProperty("async", false); | |
184 | fakesink->setProperty("silent", true); | |
185 | fakesink->setProperty("enable-last-buffer", false); | |
186 | ||
187 | m_bin->add(m_tee, fakesink); | |
188 | m_tee->getRequestPad("src%d")->link(fakesink->getStaticPad("sink")); | |
189 | ||
190 | QGst::PadPtr binSinkPad = QGst::GhostPad::create(m_tee->getStaticPad("sink"), "sink"); | |
191 | m_bin->addPad(binSinkPad); | |
192 | ||
193 | pipeline->add(m_bin); | |
194 | m_bin->syncStateWithParent(); | |
195 | ||
196 | srcPad->link(binSinkPad); | |
197 | } | |
198 | ||
199 | void VideoSinkController::releaseFromStreamingThread(const QGst::PipelinePtr & pipeline) | |
200 | { | |
201 | unlinkVideoSink(); | |
202 | BaseSinkController::releaseFromStreamingThread(pipeline); | |
203 | } | |
204 | ||
205 | //END VideoSinkController |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef SINK_CONTROLLERS_H | |
18 | #define SINK_CONTROLLERS_H | |
19 | ||
20 | #include "../volume-controller.h" | |
21 | #include "video-sink-bin.h" | |
22 | #include <TelepathyQt/Contact> | |
23 | #include <QGst/Pipeline> | |
24 | #include <QGst/Pad> | |
25 | ||
26 | class BaseSinkController | |
27 | { | |
28 | public: | |
29 | virtual ~BaseSinkController() {} | |
30 | ||
31 | Tp::ContactPtr contact() const; | |
32 | ||
33 | virtual void initFromStreamingThread(const QGst::PadPtr & srcPad, | |
34 | const QGst::PipelinePtr & pipeline) = 0; | |
35 | virtual void initFromMainThread(const Tp::ContactPtr & contact); | |
36 | virtual void releaseFromStreamingThread(const QGst::PipelinePtr & pipeline); | |
37 | ||
38 | protected: | |
39 | Tp::ContactPtr m_contact; | |
40 | QGst::BinPtr m_bin; | |
41 | }; | |
42 | ||
43 | ||
44 | class AudioSinkController : public BaseSinkController | |
45 | { | |
46 | public: | |
47 | AudioSinkController(const QGst::PadPtr & adderRequestPad); | |
48 | virtual ~AudioSinkController(); | |
49 | ||
50 | QGst::PadPtr adderRequestPad() const; | |
51 | VolumeController *volumeController() const; | |
52 | ||
53 | virtual void initFromStreamingThread(const QGst::PadPtr & srcPad, | |
54 | const QGst::PipelinePtr & pipeline); | |
55 | virtual void initFromMainThread(const Tp::ContactPtr & contact); | |
56 | virtual void releaseFromStreamingThread(const QGst::PipelinePtr & pipeline); | |
57 | ||
58 | private: | |
59 | QGst::PadPtr m_adderRequestPad; | |
60 | VolumeController *m_volumeController; | |
61 | }; | |
62 | ||
63 | ||
64 | class VideoSinkController : public BaseSinkController | |
65 | { | |
66 | public: | |
67 | VideoSinkController(); | |
68 | virtual ~VideoSinkController(); | |
69 | ||
70 | QGst::PadPtr requestSrcPad(); | |
71 | void releaseSrcPad(const QGst::PadPtr & pad); | |
72 | ||
73 | void linkVideoSink(const QGst::ElementPtr & sink); | |
74 | void unlinkVideoSink(); | |
75 | ||
76 | virtual void initFromStreamingThread(const QGst::PadPtr & srcPad, | |
77 | const QGst::PipelinePtr & pipeline); | |
78 | virtual void releaseFromStreamingThread(const QGst::PipelinePtr & pipeline); | |
79 | ||
80 | private: | |
81 | //<ghost src pad, tee request src pad> | |
82 | QHash<QGst::PadPtr, QGst::PadPtr> m_pads; | |
83 | QGst::ElementPtr m_tee; | |
84 | uint m_padNameCounter; | |
85 | VideoSinkBin *m_videoSinkBin; | |
86 | QMutex m_videoSinkMutex; | |
87 | }; | |
88 | ||
89 | ||
90 | Q_DECLARE_METATYPE(BaseSinkController*) | |
91 | ||
92 | #endif //SINK_CONTROLLERS_H |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "sink-managers.h" | |
18 | #include "device-element-factory.h" | |
19 | #include <TelepathyQt/ReferencedHandles> | |
20 | #include <QGlib/Connect> | |
21 | #include <QGst/ElementFactory> | |
22 | #include <QGst/Pipeline> | |
23 | #include <QGst/Pad> | |
24 | #include <KDebug> | |
25 | ||
26 | //BEGIN BaseSinkManager | |
27 | ||
28 | BaseSinkManager::BaseSinkManager(QObject *parent) | |
29 | : QObject(parent) | |
30 | { | |
31 | } | |
32 | ||
33 | BaseSinkManager::~BaseSinkManager() | |
34 | { | |
35 | } | |
36 | ||
37 | void BaseSinkManager::handleNewSinkPad(uint contactHandle, const QGst::PadPtr & pad) | |
38 | { | |
39 | kDebug() << "New src pad" << pad->name() << "from handle" << contactHandle; | |
40 | ||
41 | //link the pad | |
42 | BaseSinkController *ctrl = createController(pad); | |
43 | ||
44 | //notify when the pad is unlinked (probably because it was removed from the fsconference) | |
45 | QGlib::connect(pad, "unlinked", this, &BaseSinkManager::onPadUnlinked, QGlib::PassSender); | |
46 | ||
47 | m_mutex.lock(); | |
48 | m_controllersWaitingForContact.insert(contactHandle, ctrl); | |
49 | m_controllers.insert(pad, ctrl); | |
50 | m_mutex.unlock(); | |
51 | ||
52 | //continue processing from the main thread | |
53 | QMetaObject::invokeMethod(this, "handleNewSinkPadAsync", Qt::QueuedConnection, | |
54 | Q_ARG(uint, contactHandle)); | |
55 | } | |
56 | ||
57 | void BaseSinkManager::handleNewSinkPadAsync(uint contactHandle) | |
58 | { | |
59 | QMutexLocker l(&m_mutex); | |
60 | ||
61 | BaseSinkController *ctrl = m_controllersWaitingForContact.value(contactHandle); | |
62 | if (KDE_ISUNLIKELY(!ctrl)) { | |
63 | //just in case the pad was unlinked before we reached this slot | |
64 | kDebug() << "Not handling new pad. The pad was unlinked too early."; | |
65 | return; | |
66 | } | |
67 | ||
68 | if (m_content) { | |
69 | kDebug() << "Content exists. Looking for contact..."; | |
70 | ||
71 | Q_FOREACH (const Tp::CallStreamPtr & stream, m_content->streams()) { | |
72 | Q_FOREACH (const Tp::ContactPtr & contact, stream->remoteMembers()) { | |
73 | if (contact->handle()[0] == contactHandle) { | |
74 | kDebug() << "Found contact" << contact; | |
75 | ||
76 | m_controllersWaitingForContact.remove(contactHandle); | |
77 | ctrl->initFromMainThread(contact); | |
78 | Q_EMIT controllerCreated(ctrl); | |
79 | ||
80 | return; | |
81 | } | |
82 | } | |
83 | } | |
84 | } | |
85 | ||
86 | kDebug() << "Contact not found. Waiting for tp-qt to sync with dbus"; | |
87 | } | |
88 | ||
89 | void BaseSinkManager::setCallContent(const Tp::CallContentPtr & callContent) | |
90 | { | |
91 | m_content = callContent; | |
92 | connect(m_content.data(), SIGNAL(streamAdded(Tp::CallStreamPtr)), | |
93 | SLOT(onStreamAdded(Tp::CallStreamPtr))); | |
94 | ||
95 | Q_FOREACH(const Tp::CallStreamPtr & stream, m_content->streams()) { | |
96 | onStreamAdded(stream); | |
97 | } | |
98 | } | |
99 | ||
100 | void BaseSinkManager::onStreamAdded(const Tp::CallStreamPtr & stream) | |
101 | { | |
102 | connect(stream.data(), | |
103 | SIGNAL(remoteSendingStateChanged(QHash<Tp::ContactPtr,Tp::SendingState>,Tp::CallStateReason)), | |
104 | SLOT(onRemoteSendingStateChanged(QHash<Tp::ContactPtr,Tp::SendingState>))); | |
105 | ||
106 | Tp::Contacts remoteMembers = stream->remoteMembers(); | |
107 | if (!remoteMembers.isEmpty()) { | |
108 | checkForNewContacts(remoteMembers.toList()); | |
109 | } | |
110 | } | |
111 | ||
112 | void BaseSinkManager::onRemoteSendingStateChanged(const QHash<Tp::ContactPtr, Tp::SendingState> & states) | |
113 | { | |
114 | checkForNewContacts(states.keys()); | |
115 | } | |
116 | ||
117 | void BaseSinkManager::checkForNewContacts(const QList<Tp::ContactPtr> & contacts) | |
118 | { | |
119 | QMutexLocker l(&m_mutex); | |
120 | ||
121 | if (!m_controllersWaitingForContact.isEmpty()) { | |
122 | Q_FOREACH (const Tp::ContactPtr & contact, contacts) { | |
123 | if (m_controllersWaitingForContact.contains(contact->handle()[0])) { | |
124 | kDebug() << "Found contact" << contact; | |
125 | ||
126 | BaseSinkController *ctrl = m_controllersWaitingForContact.take(contact->handle()[0]); | |
127 | ctrl->initFromMainThread(contact); | |
128 | Q_EMIT controllerCreated(ctrl); | |
129 | ||
130 | return; | |
131 | } | |
132 | } | |
133 | } | |
134 | } | |
135 | ||
136 | void BaseSinkManager::unlinkAllPads() | |
137 | { | |
138 | QMutexLocker l(&m_mutex); | |
139 | ||
140 | kDebug() << m_controllers.size() << "pads need unlinking"; | |
141 | ||
142 | QHashIterator<QGst::PadPtr, BaseSinkController*> it(m_controllers); | |
143 | while (it.hasNext()) { | |
144 | it.next(); | |
145 | ||
146 | QGst::PadPtr srcPad = it.key(); | |
147 | QGst::PadPtr sinkPad = srcPad->peer(); | |
148 | ||
149 | QGlib::disconnect(srcPad, 0, this, 0); | |
150 | srcPad->unlink(sinkPad); | |
151 | ||
152 | Q_ASSERT(!m_releasedControllers.contains(it.value())); | |
153 | ||
154 | releaseControllerData(it.value()); | |
155 | Q_EMIT controllerDestroyed(it.value()); | |
156 | delete it.value(); | |
157 | } | |
158 | m_controllers.clear(); | |
159 | ||
160 | //this is not empty when onPadUnlinked() was called from the streaming thread | |
161 | //but destroyController() has not yet been executed in the main thread. | |
162 | //since this is the destructor, we need to cleanup because destroyController() | |
163 | //will never be actually executed. | |
164 | Q_FOREACH(BaseSinkController *ctrl, m_releasedControllers) { | |
165 | Q_EMIT controllerDestroyed(ctrl); | |
166 | delete ctrl; | |
167 | } | |
168 | m_releasedControllers.clear(); | |
169 | } | |
170 | ||
171 | void BaseSinkManager::onPadUnlinked(const QGst::PadPtr & srcPad) | |
172 | { | |
173 | QMutexLocker l(&m_mutex); | |
174 | ||
175 | kDebug() << srcPad->name() << "was unlinked."; | |
176 | kDebug() << "Current thread:" << QThread::currentThread() | |
177 | << "Main thread:" << QCoreApplication::instance()->thread(); | |
178 | ||
179 | BaseSinkController *ctrl = m_controllers.value(srcPad); | |
180 | ||
181 | if (KDE_ISUNLIKELY(!ctrl)) { | |
182 | //just in case unlinkAllPads() locked the mutex first... | |
183 | kDebug() << "Looks like unlinkAllPads() wins..."; | |
184 | return; | |
185 | } | |
186 | ||
187 | //check if the controller still has not finished its initialization | |
188 | QMutableHashIterator<uint, BaseSinkController*> it(m_controllersWaitingForContact); | |
189 | while (it.hasNext()) { | |
190 | it.next(); | |
191 | if (it.value() == ctrl) { | |
192 | it.remove(); | |
193 | } | |
194 | } | |
195 | ||
196 | //release data now | |
197 | releaseControllerData(ctrl); | |
198 | ||
199 | //delete from the main thread, if we are not being called from the main thread | |
200 | if (QThread::currentThread() != QCoreApplication::instance()->thread()) { | |
201 | m_releasedControllers.insert(ctrl); | |
202 | QMetaObject::invokeMethod(this, "destroyController", Qt::QueuedConnection, | |
203 | Q_ARG(BaseSinkController*, ctrl)); | |
204 | } else { | |
205 | Q_EMIT controllerDestroyed(ctrl); | |
206 | delete ctrl; | |
207 | } | |
208 | ||
209 | m_controllers.remove(srcPad); | |
210 | } | |
211 | ||
212 | void BaseSinkManager::destroyController(BaseSinkController *controller) | |
213 | { | |
214 | Q_EMIT controllerDestroyed(controller); | |
215 | delete controller; | |
216 | ||
217 | m_mutex.lock(); | |
218 | m_releasedControllers.remove(controller); | |
219 | m_mutex.unlock(); | |
220 | } | |
221 | ||
222 | //END BaseSinkManager | |
223 | //BEGIN AudioSinkManager | |
224 | ||
225 | AudioSinkManager::AudioSinkManager(const QGst::PipelinePtr & pipeline, QObject *parent) | |
226 | : BaseSinkManager(parent), | |
227 | m_pipeline(pipeline), | |
228 | m_sinkRefCount(0) | |
229 | { | |
230 | } | |
231 | ||
232 | AudioSinkManager::~AudioSinkManager() | |
233 | { | |
234 | Q_ASSERT(m_sinkRefCount == 0); | |
235 | } | |
236 | ||
237 | BaseSinkController *AudioSinkManager::createController(const QGst::PadPtr & srcPad) | |
238 | { | |
239 | refSink(); | |
240 | AudioSinkController *ctrl = new AudioSinkController(m_adder->getRequestPad("sink%d")); | |
241 | ctrl->initFromStreamingThread(srcPad, m_pipeline); | |
242 | return ctrl; | |
243 | } | |
244 | ||
245 | void AudioSinkManager::releaseControllerData(BaseSinkController *ctrl) | |
246 | { | |
247 | AudioSinkController *actrl = static_cast<AudioSinkController*>(ctrl); | |
248 | QGst::PadPtr adderRequestPad = actrl->adderRequestPad(); | |
249 | ||
250 | ctrl->releaseFromStreamingThread(m_pipeline); | |
251 | ||
252 | m_adder->releaseRequestPad(adderRequestPad); | |
253 | adderRequestPad.clear(); | |
254 | ||
255 | unrefSink(); | |
256 | } | |
257 | ||
258 | void AudioSinkManager::refSink() | |
259 | { | |
260 | QMutexLocker l(&m_mutex); | |
261 | if (m_sinkRefCount++ == 0) { | |
262 | m_sink = DeviceElementFactory::makeAudioOutputElement(); | |
263 | if (!m_sink) { | |
264 | kWarning() << "Failed to create audio sink. Using fakesink. " | |
265 | "You will need to restart the call to get audio output."; | |
266 | m_sink = QGst::ElementFactory::make("fakesink"); | |
267 | m_sink->setProperty("sync", false); | |
268 | m_sink->setProperty("async", false); | |
269 | m_sink->setProperty("silent", true); | |
270 | m_sink->setProperty("enable-last-buffer", false); | |
271 | } | |
272 | ||
273 | m_adder = QGst::ElementFactory::make("liveadder"); | |
274 | if (!m_adder) { | |
275 | kWarning() << "Failed to create liveadder. Using adder. This may cause trouble..."; | |
276 | m_adder = QGst::ElementFactory::make("adder"); | |
277 | } | |
278 | ||
279 | m_pipeline->add(m_adder, m_sink); | |
280 | m_adder->link(m_sink); | |
281 | m_sink->syncStateWithParent(); | |
282 | m_adder->syncStateWithParent(); | |
283 | } | |
284 | } | |
285 | ||
286 | void AudioSinkManager::unrefSink() | |
287 | { | |
288 | QMutexLocker l(&m_mutex); | |
289 | if (--m_sinkRefCount == 0) { | |
290 | m_adder->unlink(m_sink); | |
291 | m_adder->setState(QGst::StateNull); | |
292 | m_sink->setState(QGst::StateNull); | |
293 | m_pipeline->remove(m_adder); | |
294 | m_pipeline->remove(m_sink); | |
295 | m_adder.clear(); | |
296 | m_sink.clear(); | |
297 | } | |
298 | } | |
299 | ||
300 | //END AudioSinkManager | |
301 | //BEGIN VideoSinkManager | |
302 | ||
303 | VideoSinkManager::VideoSinkManager(const QGst::PipelinePtr & pipeline, QObject *parent) | |
304 | : BaseSinkManager(parent), | |
305 | m_pipeline(pipeline) | |
306 | { | |
307 | } | |
308 | ||
309 | BaseSinkController *VideoSinkManager::createController(const QGst::PadPtr & srcPad) | |
310 | { | |
311 | VideoSinkController *ctrl = new VideoSinkController; | |
312 | ctrl->initFromStreamingThread(srcPad, m_pipeline); | |
313 | return ctrl; | |
314 | } | |
315 | ||
316 | void VideoSinkManager::releaseControllerData(BaseSinkController *ctrl) | |
317 | { | |
318 | ctrl->releaseFromStreamingThread(m_pipeline); | |
319 | } | |
320 | ||
321 | //END VideoSinkManager | |
322 | ||
323 | #include "moc_sink-managers.cpp" |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef SINK_MANAGERS_H | |
18 | #define SINK_MANAGERS_H | |
19 | ||
20 | #include "sink-controllers.h" | |
21 | #include <TelepathyQt/Types> | |
22 | #include <TelepathyQt/CallContent> | |
23 | #include <QGst/Pipeline> | |
24 | ||
25 | class BaseSinkManager : public QObject | |
26 | { | |
27 | Q_OBJECT | |
28 | public: | |
29 | virtual ~BaseSinkManager(); | |
30 | ||
31 | /* This needs to be called before the destructor. | |
32 | * It is a public function because it calls pure virtual functions internally, | |
33 | * so it cannot be called from inside the destructor. | |
34 | */ | |
35 | void unlinkAllPads(); | |
36 | ||
37 | /* Called from the streaming thread */ | |
38 | void handleNewSinkPad(uint contactHandle, const QGst::PadPtr & pad); | |
39 | ||
40 | void setCallContent(const Tp::CallContentPtr & callContent); | |
41 | ||
42 | protected: | |
43 | explicit BaseSinkManager(QObject *parent = 0); | |
44 | ||
45 | /* Called from the streaming thread to do the initial linking of srcPad to the sink */ | |
46 | virtual BaseSinkController *createController(const QGst::PadPtr & srcPad) = 0; | |
47 | ||
48 | /* Called from the streaming thread when the src pad associated with ctrl is unlinked */ | |
49 | virtual void releaseControllerData(BaseSinkController *ctrl) = 0; | |
50 | ||
51 | private Q_SLOTS: | |
52 | void handleNewSinkPadAsync(uint contactHandle); | |
53 | void onStreamAdded(const Tp::CallStreamPtr & stream); | |
54 | void onRemoteSendingStateChanged(const QHash<Tp::ContactPtr, Tp::SendingState> & states); | |
55 | void destroyController(BaseSinkController *controller); | |
56 | ||
57 | private: | |
58 | void checkForNewContacts(const QList<Tp::ContactPtr> & contacts); | |
59 | /* Called from the streaming thread */ | |
60 | void onPadUnlinked(const QGst::PadPtr & srcPad); | |
61 | ||
62 | Q_SIGNALS: | |
63 | void controllerCreated(BaseSinkController *controller); | |
64 | void controllerDestroyed(BaseSinkController *controller); | |
65 | ||
66 | private: | |
67 | Tp::CallContentPtr m_content; | |
68 | QMutex m_mutex; | |
69 | QHash<uint, BaseSinkController*> m_controllersWaitingForContact; | |
70 | QHash<QGst::PadPtr, BaseSinkController*> m_controllers; | |
71 | QSet<BaseSinkController*> m_releasedControllers; | |
72 | }; | |
73 | ||
74 | ||
75 | class AudioSinkManager : public BaseSinkManager | |
76 | { | |
77 | Q_OBJECT | |
78 | public: | |
79 | AudioSinkManager(const QGst::PipelinePtr & pipeline, QObject *parent = 0); | |
80 | virtual ~AudioSinkManager(); | |
81 | ||
82 | protected: | |
83 | virtual BaseSinkController *createController(const QGst::PadPtr & srcPad); | |
84 | virtual void releaseControllerData(BaseSinkController *priv); | |
85 | ||
86 | private: | |
87 | void refSink(); | |
88 | void unrefSink(); | |
89 | ||
90 | QMutex m_mutex; | |
91 | QGst::PipelinePtr m_pipeline; | |
92 | QGst::ElementPtr m_sink; | |
93 | QGst::ElementPtr m_adder; | |
94 | int m_sinkRefCount; | |
95 | }; | |
96 | ||
97 | ||
98 | class VideoSinkManager : public BaseSinkManager | |
99 | { | |
100 | Q_OBJECT | |
101 | public: | |
102 | explicit VideoSinkManager(const QGst::PipelinePtr & pipeline, QObject *parent = 0); | |
103 | ||
104 | protected: | |
105 | virtual BaseSinkController *createController(const QGst::PadPtr & srcPad); | |
106 | virtual void releaseControllerData(BaseSinkController *priv); | |
107 | ||
108 | private: | |
109 | QGst::PipelinePtr m_pipeline; | |
110 | }; | |
111 | ||
112 | #endif //SINK_MANAGERS_H |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "source-controllers.h" | |
18 | #include "device-element-factory.h" | |
19 | #include <QGst/ElementFactory> | |
20 | #include <QGst/GhostPad> | |
21 | #include <QGst/Structure> | |
22 | #include <QGst/Caps> | |
23 | #include <QGst/Fraction> | |
24 | #include <KDebug> | |
25 | ||
26 | //BEGIN BaseSourceController | |
27 | ||
28 | BaseSourceController::BaseSourceController(const QGst::PipelinePtr & pipeline) | |
29 | : m_pipeline(pipeline), | |
30 | m_inputCtrlBin(NULL) | |
31 | { | |
32 | } | |
33 | ||
34 | BaseSourceController::~BaseSourceController() | |
35 | { | |
36 | if (m_inputCtrlBin) { | |
37 | destroyBin(); | |
38 | } | |
39 | } | |
40 | ||
41 | QGst::PadPtr BaseSourceController::requestSrcPad() | |
42 | { | |
43 | if (!m_inputCtrlBin) { | |
44 | createBin(); | |
45 | } | |
46 | ||
47 | return m_inputCtrlBin->requestSrcPad(); | |
48 | } | |
49 | ||
50 | void BaseSourceController::releaseSrcPad(const QGst::PadPtr & pad) | |
51 | { | |
52 | m_inputCtrlBin->releaseSrcPad(pad); | |
53 | } | |
54 | ||
55 | void BaseSourceController::connectToSource() | |
56 | { | |
57 | if (m_source.isNull()) { | |
58 | //create the source | |
59 | //TODO this should happen async, as some cameras take a long time to initialize | |
60 | m_source = makeRealSource(); | |
61 | if (!m_source) { | |
62 | return; | |
63 | } | |
64 | m_inputCtrlBin->connectSource(m_source); | |
65 | } | |
66 | //else we are already connected | |
67 | } | |
68 | ||
69 | void BaseSourceController::disconnectFromSource() | |
70 | { | |
71 | if (!m_source.isNull()) { | |
72 | releaseRealSource(); //release any pointers that the subclass keeps | |
73 | ||
74 | m_inputCtrlBin->disconnectSource(); | |
75 | m_source.clear(); | |
76 | } | |
77 | //else we are already disconnected | |
78 | } | |
79 | ||
80 | void BaseSourceController::createBin() | |
81 | { | |
82 | m_inputCtrlBin = new InputControlBin(makeSilenceSource(), makeFilterBin()); | |
83 | ||
84 | // play | |
85 | m_pipeline->add(m_inputCtrlBin->bin()); | |
86 | m_inputCtrlBin->bin()->syncStateWithParent(); | |
87 | } | |
88 | ||
89 | void BaseSourceController::destroyBin() | |
90 | { | |
91 | disconnectFromSource(); | |
92 | ||
93 | m_inputCtrlBin->bin()->setState(QGst::StateNull); | |
94 | m_pipeline->remove(m_inputCtrlBin->bin()); | |
95 | ||
96 | delete m_inputCtrlBin; | |
97 | } | |
98 | ||
99 | //END BaseSourceController | |
100 | //BEGIN AudioSourceController | |
101 | ||
102 | AudioSourceController::AudioSourceController(const QGst::PipelinePtr & pipeline) | |
103 | : BaseSourceController(pipeline) | |
104 | { | |
105 | m_volumeController = new VolumeController; | |
106 | } | |
107 | ||
108 | AudioSourceController::~AudioSourceController() | |
109 | { | |
110 | delete m_volumeController; | |
111 | } | |
112 | ||
113 | VolumeController *AudioSourceController::volumeController() const | |
114 | { | |
115 | return m_volumeController; | |
116 | } | |
117 | ||
118 | QGst::ElementPtr AudioSourceController::makeSilenceSource() | |
119 | { | |
120 | QGst::ElementPtr src = QGst::ElementFactory::make("audiotestsrc"); | |
121 | src->setProperty("wave", 4); //generate silence | |
122 | src->setProperty("is-live", true); | |
123 | return src; | |
124 | } | |
125 | ||
126 | QGst::ElementPtr AudioSourceController::makeRealSource() | |
127 | { | |
128 | QGst::ElementPtr src = DeviceElementFactory::makeAudioCaptureElement(); | |
129 | if (!src) { | |
130 | kDebug() << "Could not initialize audio capture device"; | |
131 | return QGst::ElementPtr(); | |
132 | } | |
133 | ||
134 | QGst::BinPtr bin = QGst::Bin::create(); | |
135 | QGst::ElementPtr volume = QGst::ElementFactory::make("volume"); | |
136 | QGst::ElementPtr level = QGst::ElementFactory::make("level"); | |
137 | ||
138 | m_volumeController->setElement(volume.dynamicCast<QGst::StreamVolume>()); | |
139 | ||
140 | bin->add(src, volume, level); | |
141 | QGst::Element::linkMany(src, volume, level); | |
142 | ||
143 | bin->addPad(QGst::GhostPad::create(level->getStaticPad("src"), "src")); | |
144 | ||
145 | return bin; | |
146 | } | |
147 | ||
148 | QGst::ElementPtr AudioSourceController::makeFilterBin() | |
149 | { | |
150 | return QGst::Bin::fromDescription( | |
151 | "audiorate ! " | |
152 | "capsfilter caps=\"audio/x-raw-int,rate=[8000,16000];audio/x-raw-float,rate=[8000,16000]\"" | |
153 | ); | |
154 | } | |
155 | ||
156 | void AudioSourceController::releaseRealSource() | |
157 | { | |
158 | m_volumeController->setElement(QGst::StreamVolumePtr()); | |
159 | } | |
160 | ||
161 | //END AudioSourceController | |
162 | //BEGIN VideoSourceController | |
163 | ||
164 | VideoSourceController::VideoSourceController(const QGst::PipelinePtr & pipeline) | |
165 | : BaseSourceController(pipeline), | |
166 | m_videoSinkBin(NULL) | |
167 | { | |
168 | } | |
169 | ||
170 | VideoSourceController::~VideoSourceController() | |
171 | { | |
172 | unlinkVideoPreviewSink(); | |
173 | } | |
174 | ||
175 | void VideoSourceController::linkVideoPreviewSink(const QGst::ElementPtr & sink) | |
176 | { | |
177 | kDebug(); | |
178 | ||
179 | QGst::PadPtr srcPad = requestSrcPad(); | |
180 | m_videoSinkBin = new VideoSinkBin(sink); | |
181 | ||
182 | m_pipeline->add(m_videoSinkBin->bin()); | |
183 | m_videoSinkBin->bin()->syncStateWithParent(); | |
184 | srcPad->link(m_videoSinkBin->bin()->getStaticPad("sink")); | |
185 | } | |
186 | ||
187 | void VideoSourceController::unlinkVideoPreviewSink() | |
188 | { | |
189 | if (m_videoSinkBin) { | |
190 | kDebug(); | |
191 | ||
192 | QGst::PadPtr sinkPad = m_videoSinkBin->bin()->getStaticPad("sink"); | |
193 | QGst::PadPtr srcPad = sinkPad->peer(); | |
194 | ||
195 | srcPad->unlink(sinkPad); | |
196 | m_videoSinkBin->bin()->setState(QGst::StateNull); | |
197 | m_pipeline->remove(m_videoSinkBin->bin()); | |
198 | delete m_videoSinkBin; | |
199 | m_videoSinkBin = NULL; | |
200 | ||
201 | releaseSrcPad(srcPad); | |
202 | } | |
203 | } | |
204 | ||
205 | QGst::ElementPtr VideoSourceController::makeSilenceSource() | |
206 | { | |
207 | QGst::ElementPtr src = QGst::ElementFactory::make("videotestsrc"); | |
208 | src->setProperty("pattern", 2); //black picture | |
209 | src->setProperty("is-live", true); | |
210 | return src; | |
211 | } | |
212 | ||
213 | QGst::ElementPtr VideoSourceController::makeRealSource() | |
214 | { | |
215 | QGst::ElementPtr src = DeviceElementFactory::makeVideoCaptureElement(); | |
216 | if (!src) { | |
217 | kDebug() << "Could not initialize video capture device"; | |
218 | return QGst::ElementPtr(); | |
219 | } else { | |
220 | return src; | |
221 | } | |
222 | ||
223 | //TODO colorbalance support | |
224 | // QGst::ElementPtr realSrc; | |
225 | // QGst::BinPtr srcBin = src.dynamicCast<QGst::Bin>(); | |
226 | // if (srcBin) { | |
227 | // realSrc = srcBin->childByIndex(0).dynamicCast<QGst::Element>(); | |
228 | // } else { | |
229 | // realSrc = src; | |
230 | // } | |
231 | // | |
232 | // QGst::ElementPtr videobalance; | |
233 | // m_colorBalance = realSrc.dynamicCast<QGst::ColorBalance>(); | |
234 | // if (!m_colorBalance) { | |
235 | // kDebug() << "Source does not support color balance"; | |
236 | // videobalance = QGst::ElementFactory::make("videobalance"); | |
237 | // m_colorBalance = videobalance.dynamicCast<QGst::ColorBalance>(); | |
238 | // } | |
239 | } | |
240 | ||
241 | QGst::ElementPtr VideoSourceController::makeFilterBin() | |
242 | { | |
243 | QGst::BinPtr bin = QGst::Bin::create(); | |
244 | ||
245 | //videomaxrate drops frames to support the 15fps restriction | |
246 | //in the capsfilter if the camera cannot produce 15fps | |
247 | QGst::ElementPtr videomaxrate = QGst::ElementFactory::make("videomaxrate"); | |
248 | ||
249 | //ffmpegcolorspace converts to yuv for postproc_tmpnoise | |
250 | //to work if the camera cannot produce yuv | |
251 | QGst::ElementPtr colorspace = QGst::ElementFactory::make("ffmpegcolorspace"); | |
252 | ||
253 | //videoscale supports the 320x240 restriction in the capsfilter | |
254 | //if the camera cannot produce 320x240 | |
255 | QGst::ElementPtr videoscale = QGst::ElementFactory::make("videoscale"); | |
256 | ||
257 | //capsfilter restricts the output to 320x240 @ 15fps | |
258 | QGst::ElementPtr capsfilter = QGst::ElementFactory::make("capsfilter"); | |
259 | ||
260 | //postproc_tmpnoise reduces video noise to improve quality | |
261 | QGst::ElementPtr postproc = QGst::ElementFactory::make("postproc_tmpnoise"); | |
262 | ||
263 | QGst::Structure capsStruct("video/x-raw-yuv"); | |
264 | capsStruct.setValue("width", 320); | |
265 | capsStruct.setValue("height", 240); | |
266 | capsStruct.setValue("framerate", QGst::FractionRange(QGst::Fraction(0,1), QGst::Fraction(15,1))); | |
267 | ||
268 | QGst::CapsPtr caps = QGst::Caps::createEmpty(); | |
269 | caps->appendStructure(capsStruct); | |
270 | capsfilter->setProperty("caps", caps); | |
271 | ||
272 | bin->add(colorspace, videoscale, capsfilter); | |
273 | ||
274 | /* videomaxrate and postproc_tmpnoise are optional */ | |
275 | if (videomaxrate) { | |
276 | bin->add(videomaxrate); | |
277 | videomaxrate->link(colorspace); | |
278 | bin->addPad(QGst::GhostPad::create(videomaxrate->getStaticPad("sink"), "sink")); | |
279 | } else { | |
280 | kDebug() << "NOT using videomaxrate"; | |
281 | bin->addPad(QGst::GhostPad::create(colorspace->getStaticPad("sink"), "sink")); | |
282 | } | |
283 | ||
284 | QGst::Element::linkMany(colorspace, videoscale, capsfilter); | |
285 | ||
286 | if (postproc) { | |
287 | bin->add(postproc); | |
288 | capsfilter->link(postproc); | |
289 | bin->addPad(QGst::GhostPad::create(postproc->getStaticPad("src"), "src")); | |
290 | } else { | |
291 | kDebug() << "NOT using postproc_tmpnoise"; | |
292 | bin->addPad(QGst::GhostPad::create(capsfilter->getStaticPad("src"), "src")); | |
293 | } | |
294 | ||
295 | return bin; | |
296 | } | |
297 | ||
298 | //END VideoSourceController |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef SOURCE_CONTROLLERS_H | |
18 | #define SOURCE_CONTROLLERS_H | |
19 | ||
20 | #include "../volume-controller.h" | |
21 | #include "input-control-bin.h" | |
22 | #include "video-sink-bin.h" | |
23 | ||
24 | #include <QGst/Pipeline> | |
25 | #include <QGst/Pad> | |
26 | ||
27 | class BaseSourceController | |
28 | { | |
29 | public: | |
30 | explicit BaseSourceController(const QGst::PipelinePtr & pipeline); | |
31 | virtual ~BaseSourceController(); | |
32 | ||
33 | QGst::PadPtr requestSrcPad(); | |
34 | void releaseSrcPad(const QGst::PadPtr & pad); | |
35 | ||
36 | void connectToSource(); | |
37 | void disconnectFromSource(); | |
38 | ||
39 | protected: | |
40 | virtual QGst::ElementPtr makeSilenceSource() = 0; | |
41 | virtual QGst::ElementPtr makeRealSource() = 0; | |
42 | virtual QGst::ElementPtr makeFilterBin() = 0; | |
43 | virtual void releaseRealSource() {} | |
44 | ||
45 | QGst::PipelinePtr m_pipeline; | |
46 | ||
47 | private: | |
48 | void createBin(); | |
49 | void destroyBin(); | |
50 | ||
51 | QGst::ElementPtr m_source; | |
52 | InputControlBin *m_inputCtrlBin; | |
53 | }; | |
54 | ||
55 | ||
56 | class AudioSourceController : public BaseSourceController | |
57 | { | |
58 | public: | |
59 | explicit AudioSourceController(const QGst::PipelinePtr & pipeline); | |
60 | virtual ~AudioSourceController(); | |
61 | ||
62 | VolumeController *volumeController() const; | |
63 | //TODO level monitor | |
64 | ||
65 | protected: | |
66 | virtual QGst::ElementPtr makeSilenceSource(); | |
67 | virtual QGst::ElementPtr makeRealSource(); | |
68 | virtual QGst::ElementPtr makeFilterBin(); | |
69 | virtual void releaseRealSource(); | |
70 | ||
71 | private: | |
72 | VolumeController *m_volumeController; | |
73 | }; | |
74 | ||
75 | ||
76 | class VideoSourceController : public BaseSourceController | |
77 | { | |
78 | public: | |
79 | explicit VideoSourceController(const QGst::PipelinePtr & pipeline); | |
80 | virtual ~VideoSourceController(); | |
81 | ||
82 | void linkVideoPreviewSink(const QGst::ElementPtr & sink); | |
83 | void unlinkVideoPreviewSink(); | |
84 | ||
85 | protected: | |
86 | virtual QGst::ElementPtr makeSilenceSource(); | |
87 | virtual QGst::ElementPtr makeRealSource(); | |
88 | virtual QGst::ElementPtr makeFilterBin(); | |
89 | ||
90 | private: | |
91 | VideoSinkBin *m_videoSinkBin; | |
92 | }; | |
93 | ||
94 | #endif // SOURCE_CONTROLLERS_H |
0 | /* | |
1 | Copyright (C) 2012 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This library is free software; you can redistribute it and/or | |
4 | modify it under the terms of the GNU Lesser General Public | |
5 | License as published by the Free Software Foundation; either | |
6 | version 2.1 of the License, or (at your option) any later version. | |
7 | ||
8 | This library is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | Lesser General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU Lesser General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | ||
17 | #include "video-sink-bin.h" | |
18 | #include <QGst/ElementFactory> | |
19 | #include <QGst/GhostPad> | |
20 | ||
21 | VideoSinkBin::VideoSinkBin(const QGst::ElementPtr & videoSink) | |
22 | { | |
23 | m_bin = QGst::Bin::create(); | |
24 | ||
25 | QGst::ElementPtr queue = QGst::ElementFactory::make("queue"); | |
26 | QGst::ElementPtr colorspace = QGst::ElementFactory::make("ffmpegcolorspace"); | |
27 | ||
28 | m_bin->add(queue, colorspace, videoSink); | |
29 | ||
30 | queue->link(colorspace); | |
31 | colorspace->link(videoSink); | |
32 | ||
33 | QGst::PadPtr sinkPad = queue->getStaticPad("sink"); | |
34 | QGst::PadPtr sinkGhostPad = QGst::GhostPad::create(sinkPad, "sink"); | |
35 | m_bin->addPad(sinkGhostPad); | |
36 | } | |
37 | ||
38 | VideoSinkBin::~VideoSinkBin() | |
39 | { | |
40 | } | |
41 |
0 | /* | |
1 | Copyright (C) 2012 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This library is free software; you can redistribute it and/or | |
4 | modify it under the terms of the GNU Lesser General Public | |
5 | License as published by the Free Software Foundation; either | |
6 | version 2.1 of the License, or (at your option) any later version. | |
7 | ||
8 | This library is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | Lesser General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU Lesser General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #ifndef VIDEO_SINK_BIN_H | |
17 | #define VIDEO_SINK_BIN_H | |
18 | ||
19 | #include <QGst/Bin> | |
20 | ||
21 | class VideoSinkBin | |
22 | { | |
23 | Q_DISABLE_COPY(VideoSinkBin); | |
24 | public: | |
25 | explicit VideoSinkBin(const QGst::ElementPtr & videoSink); | |
26 | virtual ~VideoSinkBin(); | |
27 | ||
28 | QGst::BinPtr bin() const { return m_bin; } | |
29 | ||
30 | private: | |
31 | QGst::BinPtr m_bin; | |
32 | }; | |
33 | ||
34 | #endif // VIDEO_SINK_BIN_H |
0 | kde4_add_executable(configuration_test | |
1 | configuration_test.cpp | |
2 | ../private/device-element-factory.cpp | |
3 | ../private/phonon-integration.cpp | |
4 | ) | |
5 | target_link_libraries(configuration_test | |
6 | ${KDE4_KDECORE_LIBS} | |
7 | ${QT_QTDBUS_LIBRARY} | |
8 | ${QTGSTREAMER_LIBRARIES} | |
9 | ) | |
10 | ||
11 | kde4_add_executable(sourcetest sourcetest.cpp) | |
12 | target_link_libraries(sourcetest ktpcall) |
0 | /* | |
1 | Copyright (C) 2010 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "../private/device-element-factory.h" | |
18 | #include <QtCore/QCoreApplication> | |
19 | #include <QGst/Init> | |
20 | #include <QGst/Element> | |
21 | #include <KDebug> | |
22 | ||
23 | int main(int argc, char *argv[]) | |
24 | { | |
25 | QCoreApplication a(argc, argv); | |
26 | a.setApplicationName("configuration_test"); | |
27 | ||
28 | QGst::init(); | |
29 | QGst::ElementPtr element = DeviceElementFactory::makeAudioOutputElement(); | |
30 | if (!element) { | |
31 | kDebug() << "Could not make audio output element"; | |
32 | } else { | |
33 | element->setState(QGst::StateNull); | |
34 | } | |
35 | ||
36 | element = DeviceElementFactory::makeAudioCaptureElement(); | |
37 | if (!element) { | |
38 | kDebug() << "Could not make audio capture element"; | |
39 | } else { | |
40 | element->setState(QGst::StateNull); | |
41 | } | |
42 | ||
43 | element = DeviceElementFactory::makeVideoCaptureElement(); | |
44 | if (!element) { | |
45 | kDebug() << "Could not make video capture element"; | |
46 | } else { | |
47 | element->setState(QGst::StateNull); | |
48 | } | |
49 | } |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "../private/source-controllers.h" | |
18 | #include <QGst/Init> | |
19 | #include <QGst/Pipeline> | |
20 | #include <QGst/Pad> | |
21 | #include <QGst/ElementFactory> | |
22 | #include <QtCore/QCoreApplication> | |
23 | #include <KDebug> | |
24 | ||
25 | int main(int argc, char **argv) | |
26 | { | |
27 | QCoreApplication app(argc, argv); | |
28 | QGst::init(&argc, &argv); | |
29 | ||
30 | QGst::PipelinePtr pipeline = QGst::Pipeline::create(); | |
31 | ||
32 | QGst::ElementPtr sink = QGst::ElementFactory::make("autoaudiosink"); | |
33 | sink->setState(QGst::StateReady); | |
34 | ||
35 | pipeline->add(sink); | |
36 | pipeline->setState(QGst::StatePlaying); | |
37 | ||
38 | QGst::PadPtr sinkPad = sink->getStaticPad("sink"); | |
39 | QElapsedTimer timer; | |
40 | AudioSourceController *sc = new AudioSourceController(pipeline); | |
41 | ||
42 | kDebug() << "adding..."; | |
43 | timer.start(); | |
44 | QGst::PadPtr srcPad = sc->requestSrcPad(); | |
45 | srcPad->link(sinkPad); | |
46 | kDebug() << "added" << timer.elapsed(); | |
47 | ||
48 | sleep(3); | |
49 | ||
50 | kDebug() << "connecting..."; | |
51 | timer.restart(); | |
52 | sc->connectToSource(); | |
53 | kDebug() << "connected" << timer.elapsed(); | |
54 | ||
55 | sleep(3); | |
56 | ||
57 | kDebug() << "disconnecting..."; | |
58 | timer.restart(); | |
59 | sc->disconnectFromSource(); | |
60 | kDebug() << "disconnected" << timer.elapsed(); | |
61 | ||
62 | sleep(3); | |
63 | ||
64 | kDebug() << "connecting..."; | |
65 | timer.restart(); | |
66 | sc->connectToSource(); | |
67 | kDebug() << "connected" << timer.elapsed(); | |
68 | ||
69 | sleep(3); | |
70 | ||
71 | kDebug() << "disconnecting..."; | |
72 | timer.restart(); | |
73 | sc->disconnectFromSource(); | |
74 | kDebug() << "disconnected" << timer.elapsed(); | |
75 | ||
76 | kDebug() << "removing..."; | |
77 | timer.restart(); | |
78 | srcPad->unlink(sinkPad); | |
79 | sc->releaseSrcPad(srcPad); | |
80 | kDebug() << "removed" << timer.elapsed(); | |
81 | ||
82 | delete sc; | |
83 | pipeline->setState(QGst::StateNull); | |
84 | ||
85 | return 0; | |
86 | } |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "volume-controller.h" | |
18 | ||
19 | VolumeController::VolumeController(QObject *parent) | |
20 | : QObject(parent) | |
21 | { | |
22 | } | |
23 | ||
24 | VolumeController::~VolumeController() | |
25 | { | |
26 | } | |
27 | ||
28 | bool VolumeController::volumeControlSupported() const | |
29 | { | |
30 | return m_volumeControl; | |
31 | } | |
32 | ||
33 | uint VolumeController::volume() const | |
34 | { | |
35 | return m_volumeControl ? m_volumeControl->volume(QGst::StreamVolumeFormatCubic)*1000U : 0U; | |
36 | } | |
37 | ||
38 | void VolumeController::setVolume(uint vol) | |
39 | { | |
40 | if (m_volumeControl && volume() != vol) { | |
41 | m_volumeControl->setVolume(qBound(0U, vol, 1000U)/1000.0, QGst::StreamVolumeFormatCubic); | |
42 | Q_EMIT volumeChanged(volume()); | |
43 | } | |
44 | } | |
45 | ||
46 | bool VolumeController::isMuted() const | |
47 | { | |
48 | return m_volumeControl ? m_volumeControl->isMuted() : true; | |
49 | } | |
50 | ||
51 | void VolumeController::setMuted(bool muted) | |
52 | { | |
53 | if (m_volumeControl && isMuted() != muted) { | |
54 | m_volumeControl->setMuted(muted); | |
55 | Q_EMIT mutedChanged(isMuted()); | |
56 | } | |
57 | } | |
58 | ||
59 | QGst::StreamVolumePtr VolumeController::element() const | |
60 | { | |
61 | return m_volumeControl; | |
62 | } | |
63 | ||
64 | void VolumeController::setElement(const QGst::StreamVolumePtr & streamVolumeElement) | |
65 | { | |
66 | bool emitChanged = (!m_volumeControl && streamVolumeElement) | |
67 | || (m_volumeControl && !streamVolumeElement); | |
68 | ||
69 | m_volumeControl = streamVolumeElement; | |
70 | ||
71 | if (emitChanged) { | |
72 | Q_EMIT volumeControlSupportedChanged(volumeControlSupported()); | |
73 | Q_EMIT mutedChanged(isMuted()); | |
74 | Q_EMIT volumeChanged(volume()); | |
75 | } | |
76 | } | |
77 | ||
78 | #include "moc_volume-controller.cpp" |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef VOLUME_CONTROLLER_H | |
18 | #define VOLUME_CONTROLLER_H | |
19 | ||
20 | #include <QtCore/QObject> | |
21 | #include <QGst/StreamVolume> | |
22 | ||
23 | class VolumeController : public QObject | |
24 | { | |
25 | Q_OBJECT | |
26 | Q_PROPERTY(bool volumeControlSupported READ volumeControlSupported | |
27 | NOTIFY volumeControlSupportedChanged) | |
28 | Q_PROPERTY(uint volume READ volume WRITE setVolume NOTIFY volumeChanged) | |
29 | Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged) | |
30 | public: | |
31 | VolumeController(QObject *parent = 0); | |
32 | virtual ~VolumeController(); | |
33 | ||
34 | bool volumeControlSupported() const; | |
35 | uint volume() const; | |
36 | bool isMuted() const; | |
37 | ||
38 | QGst::StreamVolumePtr element() const; | |
39 | void setElement(const QGst::StreamVolumePtr & streamVolumeElement); | |
40 | ||
41 | public Q_SLOTS: | |
42 | void setVolume(uint volume); | |
43 | void setMuted(bool muted); | |
44 | ||
45 | Q_SIGNALS: | |
46 | void volumeControlSupportedChanged(bool isSupported); | |
47 | void volumeChanged(uint newVolume); | |
48 | void mutedChanged(bool isMuted); | |
49 | ||
50 | private: | |
51 | QGst::StreamVolumePtr m_volumeControl; | |
52 | }; | |
53 | ||
54 | #endif // VOLUME_CONTROLLER_H |
0 | # This is *A LOT* of dependencies to find one by one, | |
1 | # since gnome people like to include as many headers as possible | |
2 | # in their public headers instead of doing forward declarations. | |
3 | find_package(PkgConfig REQUIRED) | |
4 | pkg_check_modules(TP_FARSTREAM REQUIRED telepathy-farstream) | |
5 | pkg_check_modules(FARSTREAM REQUIRED farstream-0.1) | |
6 | ||
7 | include_directories( | |
8 | ${CMAKE_CURRENT_BINARY_DIR} | |
9 | ${TP_FARSTREAM_INCLUDE_DIRS} | |
10 | ${FARSTREAM_INCLUDE_DIRS} | |
11 | ${TELEPATHY_QT4_FARSTREAM_INCLUDE_DIR} | |
12 | ) | |
13 | ||
14 | add_definitions( | |
15 | # These prevent gstreamer from including libxml2 headers | |
16 | -DGST_DISABLE_XML | |
17 | -DGST_DISABLE_LOADSAVE | |
18 | ) | |
19 | ||
20 | kde4_add_library(qtf STATIC qtf.cpp) | |
21 | ||
22 | target_link_libraries(qtf | |
23 | ${QTGSTREAMER_LIBRARIES} | |
24 | ${TP_FARSTREAM_LDFLAGS} | |
25 | ${FARSTREAM_LDFLAGS} | |
26 | ${TELEPATHY_QT4_FARSTREAM_LIBRARIES} | |
27 | ) |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "qtf.h" | |
18 | #include <QGlib/Quark> | |
19 | #include <QGst/Bin> | |
20 | #include <TelepathyQt/Farstream/PendingChannel> | |
21 | #include <telepathy-farstream/telepathy-farstream.h> | |
22 | #include <farstream/fs-utils.h> | |
23 | #include <farstream/fs-element-added-notifier.h> | |
24 | ||
25 | //BEGIN generated code | |
26 | ||
27 | //Autogenerated by the QtGStreamer helper code generator | |
28 | ||
29 | #define REGISTER_TYPE_IMPLEMENTATION(T, GTYPE) \ | |
30 | namespace QGlib { \ | |
31 | GetTypeImpl<T>::operator Type() { return (GTYPE); } \ | |
32 | } | |
33 | ||
34 | REGISTER_TYPE_IMPLEMENTATION(QTf::Channel,TF_TYPE_CHANNEL) | |
35 | ||
36 | REGISTER_TYPE_IMPLEMENTATION(QTf::Content,TF_TYPE_CONTENT) | |
37 | ||
38 | namespace QTf { | |
39 | QGlib::RefCountedObject *Channel_new(void *instance) | |
40 | { | |
41 | QTf::Channel *cppClass = new QTf::Channel; | |
42 | cppClass->m_object = instance; | |
43 | return cppClass; | |
44 | } | |
45 | } //namespace QTf | |
46 | ||
47 | namespace QTf { | |
48 | QGlib::RefCountedObject *Content_new(void *instance) | |
49 | { | |
50 | QTf::Content *cppClass = new QTf::Content; | |
51 | cppClass->m_object = instance; | |
52 | return cppClass; | |
53 | } | |
54 | } //namespace QTf | |
55 | ||
56 | namespace QTf { | |
57 | namespace Private { | |
58 | void registerWrapperConstructors() | |
59 | { | |
60 | QGlib::Quark q = QGlib::Quark::fromString("QGlib__wrapper_constructor"); | |
61 | QGlib::GetType<Channel>().setQuarkData(q, reinterpret_cast<void*>(&Channel_new)); | |
62 | QGlib::GetType<Content>().setQuarkData(q, reinterpret_cast<void*>(&Content_new)); | |
63 | } | |
64 | } //namespace Private | |
65 | } //namespace QTf | |
66 | ||
67 | //END generated code | |
68 | ||
69 | ||
70 | namespace QTf { | |
71 | ||
72 | bool Channel::processBusMessage(const QGst::MessagePtr & message) | |
73 | { | |
74 | return tf_channel_bus_message(object<TfChannel>(), message); | |
75 | } | |
76 | ||
77 | void init() | |
78 | { | |
79 | Private::registerWrapperConstructors(); | |
80 | } | |
81 | ||
82 | QGlib::ObjectPtr loadFsElementAddedNotifier(const QGst::ElementPtr & fsConference, | |
83 | const QGst::BinPtr & pipeline) | |
84 | { | |
85 | GKeyFile *keyfile = fs_utils_get_default_element_properties(fsConference); | |
86 | ||
87 | if (keyfile) { | |
88 | FsElementAddedNotifier *notifier = fs_element_added_notifier_new(); | |
89 | fs_element_added_notifier_set_properties_from_keyfile(notifier, keyfile); | |
90 | fs_element_added_notifier_add(notifier, pipeline); | |
91 | ||
92 | return QGlib::ObjectPtr::wrap(G_OBJECT(notifier), false); | |
93 | } | |
94 | ||
95 | return QGlib::ObjectPtr(); | |
96 | } | |
97 | ||
98 | PendingChannel::PendingChannel(const Tp::CallChannelPtr& callChannel) | |
99 | : PendingOperation(callChannel) | |
100 | { | |
101 | Tp::Farstream::PendingChannel *p = Tp::Farstream::createChannel(callChannel); | |
102 | connect(p, SIGNAL(finished(Tp::PendingOperation*)), | |
103 | SLOT(onPendingTfChannelFinished(Tp::PendingOperation*))); | |
104 | } | |
105 | ||
106 | PendingChannel::~PendingChannel() | |
107 | { | |
108 | } | |
109 | ||
110 | ChannelPtr PendingChannel::channel() const | |
111 | { | |
112 | return m_channel; | |
113 | } | |
114 | ||
115 | void PendingChannel::onPendingTfChannelFinished(Tp::PendingOperation *op) | |
116 | { | |
117 | if (op->isError()) { | |
118 | setFinishedWithError(op->errorName(), op->errorMessage()); | |
119 | } else { | |
120 | m_channel = ChannelPtr::wrap(qobject_cast<Tp::Farstream::PendingChannel*>(op)->tfChannel(), false); | |
121 | setFinished(); | |
122 | } | |
123 | } | |
124 | ||
125 | } //namespace QTf | |
126 | ||
127 | #include "qtf.moc" |
0 | /* | |
1 | Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef QTF_H | |
18 | #define QTF_H | |
19 | ||
20 | /* This module is a wrapper for telepathy-farstream that | |
21 | * uses the QtGLib/QtGStreamer bindings as a base. It could | |
22 | * be built standalone and used in other projects in the future. | |
23 | */ | |
24 | ||
25 | #include <QGlib/Object> | |
26 | #include <QGst/Message> | |
27 | #include <TelepathyQt/PendingOperation> | |
28 | #include <TelepathyQt/CallChannel> | |
29 | ||
30 | typedef struct _TfChannel TfChannel; | |
31 | typedef struct _TfContent TfContent; | |
32 | ||
33 | //for the moment, this is a static lib | |
34 | #define QTF_EXPORT | |
35 | ||
36 | #define QTF_WRAPPER(Class) \ | |
37 | QGLIB_WRAPPER_DECLARATION_MACRO(Class, Class, Tf, Class) | |
38 | ||
39 | #define QTF_REGISTER_TYPE(Class) \ | |
40 | QGLIB_REGISTER_TYPE_WITH_EXPORT_MACRO(Class, QTF_EXPORT) | |
41 | ||
42 | namespace QTf { | |
43 | ||
44 | class Channel; | |
45 | typedef QGlib::RefPointer<Channel> ChannelPtr; | |
46 | class Content; | |
47 | typedef QGlib::RefPointer<Content> ContentPtr; | |
48 | ||
49 | ||
50 | /** Wrapper for TfChannel */ | |
51 | class QTF_EXPORT Channel : public QGlib::Object | |
52 | { | |
53 | QTF_WRAPPER(Channel) | |
54 | public: | |
55 | bool processBusMessage(const QGst::MessagePtr & message); | |
56 | }; | |
57 | ||
58 | ||
59 | /** Wrapper for TfContent */ | |
60 | class QTF_EXPORT Content : public QGlib::Object | |
61 | { | |
62 | QTF_WRAPPER(Content) | |
63 | }; | |
64 | ||
65 | ||
66 | /** Initializes telepathy-farstream and registers the | |
67 | * QTf wrapper types with the QGlib type system */ | |
68 | QTF_EXPORT void init(); | |
69 | ||
70 | ||
71 | QTF_EXPORT QGlib::ObjectPtr loadFsElementAddedNotifier( | |
72 | const QGst::ElementPtr & fsConference, | |
73 | const QGst::BinPtr & pipeline); | |
74 | ||
75 | ||
76 | /** Constructs a new QTf::Channel from a Tp::CallChannel */ | |
77 | class QTF_EXPORT PendingChannel : public Tp::PendingOperation | |
78 | { | |
79 | Q_OBJECT | |
80 | public: | |
81 | PendingChannel(const Tp::CallChannelPtr & callChannel); | |
82 | virtual ~PendingChannel(); | |
83 | ||
84 | QTf::ChannelPtr channel() const; | |
85 | ||
86 | private Q_SLOTS: | |
87 | void onPendingTfChannelFinished(Tp::PendingOperation *op); | |
88 | ||
89 | private: | |
90 | QTf::ChannelPtr m_channel; | |
91 | }; | |
92 | ||
93 | ||
94 | } //namespace QTf | |
95 | ||
96 | QTF_REGISTER_TYPE(QTf::Channel) | |
97 | QTF_REGISTER_TYPE(QTf::Content) | |
98 | ||
99 | #endif // QTF_H |
0 | add_subdirectory( bg ) | |
1 | add_subdirectory( cs ) | |
2 | add_subdirectory( da ) | |
3 | add_subdirectory( de ) | |
4 | add_subdirectory( en_GB ) | |
5 | add_subdirectory( eo ) | |
6 | add_subdirectory( es ) | |
7 | add_subdirectory( et ) | |
8 | add_subdirectory( fr ) | |
9 | add_subdirectory( ga ) | |
10 | add_subdirectory( gl ) | |
11 | add_subdirectory( hu ) | |
12 | add_subdirectory( it ) | |
13 | add_subdirectory( ja ) | |
14 | add_subdirectory( km ) | |
15 | add_subdirectory( lt ) | |
16 | add_subdirectory( mai ) | |
17 | add_subdirectory( nds ) | |
18 | add_subdirectory( nl ) | |
19 | add_subdirectory( pl ) | |
20 | add_subdirectory( pt ) | |
21 | add_subdirectory( pt_BR ) | |
22 | add_subdirectory( sk ) | |
23 | add_subdirectory( sv ) | |
24 | add_subdirectory( th ) | |
25 | add_subdirectory( tr ) | |
26 | add_subdirectory( ug ) | |
27 | add_subdirectory( uk ) | |
28 | add_subdirectory( zh_TW ) |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( bg ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of kcall.po to Bulgarian | |
1 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # | |
4 | # Yasen Pramatarov <yasen@lindeas.com>, 2009, 2010, 2011. | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: kcall\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2011-07-22 13:40+0300\n" | |
11 | "Last-Translator: Yasen Pramatarov <yasen@lindeas.com>\n" | |
12 | "Language-Team: Bulgarian <dict@fsa-bg.org>\n" | |
13 | "Language: bg\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "X-Generator: Lokalize 1.2\n" | |
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | #, fuzzy | |
22 | #| msgctxt "@action:inmenu" | |
23 | #| msgid "Video call" | |
24 | msgid "Incoming video call" | |
25 | msgstr "Видео разговор" | |
26 | ||
27 | #: src/approver.cpp:39 | |
28 | #, kde-format | |
29 | msgid "<p>%1 is asking you for a video call</p>" | |
30 | msgstr "" | |
31 | ||
32 | #: src/approver.cpp:41 | |
33 | #, fuzzy | |
34 | #| msgctxt "@action:inmenu" | |
35 | #| msgid "Voice call" | |
36 | msgid "Incoming call" | |
37 | msgstr "Гласов разговор" | |
38 | ||
39 | #: src/approver.cpp:42 | |
40 | #, fuzzy, kde-format | |
41 | #| msgid "%1 is calling you" | |
42 | msgid "<p>%1 is calling you</p>" | |
43 | msgstr "%1 ви търси" | |
44 | ||
45 | #: src/approver.cpp:58 src/approver.cpp:80 | |
46 | #, fuzzy | |
47 | #| msgid "Answer" | |
48 | msgctxt "action, answers the incoming call" | |
49 | msgid "Answer" | |
50 | msgstr "Отговаряне" | |
51 | ||
52 | #: src/approver.cpp:59 src/approver.cpp:82 | |
53 | msgctxt "action, rejects the incoming call" | |
54 | msgid "Reject" | |
55 | msgstr "" | |
56 | ||
57 | #: src/call-window.cpp:95 | |
58 | #, kde-format | |
59 | msgid "Call with %1" | |
60 | msgstr "" | |
61 | ||
62 | #: src/call-window.cpp:109 | |
63 | msgctxt "@info:status" | |
64 | msgid "Connecting..." | |
65 | msgstr "Свързване…" | |
66 | ||
67 | #: src/call-window.cpp:113 | |
68 | #, fuzzy | |
69 | #| msgctxt "@info:status" | |
70 | #| msgid "Ringing..." | |
71 | msgctxt "@info:status the remote user's phone is ringing" | |
72 | msgid "Ringing..." | |
73 | msgstr "Звънене..." | |
74 | ||
75 | #: src/call-window.cpp:117 | |
76 | msgctxt "@info:status" | |
77 | msgid "Remote user accepted the call, waiting for connection..." | |
78 | msgstr "" | |
79 | ||
80 | #: src/call-window.cpp:120 | |
81 | msgctxt "@info:status" | |
82 | msgid "Talking..." | |
83 | msgstr "Разговор..." | |
84 | ||
85 | #: src/call-window.cpp:136 | |
86 | msgctxt "@info:status" | |
87 | msgid "Remote contact ended the call." | |
88 | msgstr "" | |
89 | ||
90 | #: src/call-window.cpp:143 | |
91 | msgctxt "@info:status" | |
92 | msgid "Remote contact rejected the call." | |
93 | msgstr "" | |
94 | ||
95 | #: src/call-window.cpp:148 | |
96 | msgctxt "@info:status" | |
97 | msgid "Remote contact didn't answer." | |
98 | msgstr "" | |
99 | ||
100 | #: src/call-window.cpp:152 | |
101 | msgctxt "@info:status" | |
102 | msgid "Invalid number or contact." | |
103 | msgstr "" | |
104 | ||
105 | #: src/call-window.cpp:156 | |
106 | msgctxt "@info:status" | |
107 | msgid "You don't have enough balance to make this call." | |
108 | msgstr "" | |
109 | ||
110 | #: src/call-window.cpp:158 | |
111 | msgctxt "@info:status" | |
112 | msgid "You don't have permission to make this call." | |
113 | msgstr "" | |
114 | ||
115 | #: src/call-window.cpp:163 | |
116 | msgctxt "@info:status" | |
117 | msgid "Remote contact is currently busy." | |
118 | msgstr "" | |
119 | ||
120 | #: src/call-window.cpp:167 | |
121 | msgctxt "@info:status" | |
122 | msgid "Internal component error." | |
123 | msgstr "" | |
124 | ||
125 | #: src/call-window.cpp:170 | |
126 | msgctxt "@info:status" | |
127 | msgid "Remote service error." | |
128 | msgstr "" | |
129 | ||
130 | #: src/call-window.cpp:173 | |
131 | msgctxt "@info:status" | |
132 | msgid "Network error." | |
133 | msgstr "" | |
134 | ||
135 | #: src/call-window.cpp:177 | |
136 | msgctxt "@info:status" | |
137 | msgid "Failed to negotiate codecs." | |
138 | msgstr "" | |
139 | ||
140 | #: src/call-window.cpp:179 | |
141 | msgctxt "@info:status" | |
142 | msgid "Unsupported media type." | |
143 | msgstr "" | |
144 | ||
145 | #: src/call-window.cpp:183 | |
146 | #, fuzzy | |
147 | #| msgctxt "@info:status" | |
148 | #| msgid "Disconnected with error." | |
149 | msgctxt "@info:status" | |
150 | msgid "Connectivity error." | |
151 | msgstr "Прекъснато с грешка." | |
152 | ||
153 | #: src/call-window.cpp:187 | |
154 | #, fuzzy | |
155 | #| msgctxt "Unknown audio or video system" | |
156 | #| msgid "Unknown" | |
157 | msgctxt "@info:status" | |
158 | msgid "Unknown error." | |
159 | msgstr "Неизвестно" | |
160 | ||
161 | #: src/call-window.cpp:192 | |
162 | msgctxt "@info:status" | |
163 | msgid "Disconnected." | |
164 | msgstr "Връзката е прекъсната" | |
165 | ||
166 | #: src/call-window.cpp:196 | |
167 | #, fuzzy, kde-format | |
168 | #| msgctxt "@info:status" | |
169 | #| msgid "Disconnected" | |
170 | msgctxt "@info:status the call was disconnected because..." | |
171 | msgid "Disconnected: %1" | |
172 | msgstr "Изключено" | |
173 | ||
174 | #: src/call-window.cpp:339 | |
175 | #, fuzzy | |
176 | #| msgctxt "@action" | |
177 | #| msgid "Send video" | |
178 | msgctxt "@action" | |
179 | msgid "Show my video" | |
180 | msgstr "Изпращане на видео" | |
181 | ||
182 | #: src/call-window.cpp:344 | |
183 | #, fuzzy | |
184 | #| msgid "Show details" | |
185 | msgctxt "@action" | |
186 | msgid "Show dialpad" | |
187 | msgstr "Допълнителни данни" | |
188 | ||
189 | #: src/call-window.cpp:351 | |
190 | msgctxt "@action" | |
191 | msgid "Send video" | |
192 | msgstr "Изпращане на видео" | |
193 | ||
194 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
195 | msgctxt "@action" | |
196 | msgid "Mute" | |
197 | msgstr "" | |
198 | ||
199 | #: src/call-window.cpp:363 | |
200 | msgctxt "@action" | |
201 | msgid "Hold" | |
202 | msgstr "" | |
203 | ||
204 | #: src/call-window.cpp:368 | |
205 | msgctxt "@action" | |
206 | msgid "Hangup" | |
207 | msgstr "Разкачване" | |
208 | ||
209 | #: src/main.cpp:36 | |
210 | msgid "KDE Telepathy Call Ui" | |
211 | msgstr "" | |
212 | ||
213 | #: src/main.cpp:37 | |
214 | msgid "VoIP client for KDE" | |
215 | msgstr "" | |
216 | ||
217 | #: src/main.cpp:38 | |
218 | msgid "(C) 2009, George Kiagiadakis" | |
219 | msgstr "(C) 2009, George Kiagiadakis" | |
220 | ||
221 | #: src/main.cpp:40 | |
222 | msgctxt "@info:credit" | |
223 | msgid "George Kiagiadakis" | |
224 | msgstr "George Kiagiadakis" | |
225 | ||
226 | #: rc.cpp:1 | |
227 | msgctxt "NAME OF TRANSLATORS" | |
228 | msgid "Your names" | |
229 | msgstr "Ясен Праматаров" | |
230 | ||
231 | #: rc.cpp:2 | |
232 | msgctxt "EMAIL OF TRANSLATORS" | |
233 | msgid "Your emails" | |
234 | msgstr "yasen@lindeas.com" | |
235 | ||
236 | #. i18n: file: src/callwindowui.rc:11 | |
237 | #. i18n: ectx: Menu (call) | |
238 | #: rc.cpp:5 | |
239 | msgid "Call" | |
240 | msgstr "Обаждане" | |
241 | ||
242 | #. i18n: file: src/callwindowui.rc:20 | |
243 | #. i18n: ectx: Menu (media) | |
244 | #: rc.cpp:8 | |
245 | msgid "Media" | |
246 | msgstr "" | |
247 | ||
248 | #. i18n: file: src/callwindowui.rc:27 | |
249 | #. i18n: ectx: ToolBar (mainToolBar) | |
250 | #: rc.cpp:11 | |
251 | msgid "Main Toolbar" | |
252 | msgstr "Главна лента с инструменти" | |
253 | ||
254 | #. i18n: file: src/dtmf-widget.ui:17 | |
255 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
256 | #: rc.cpp:14 | |
257 | msgid "1" | |
258 | msgstr "1" | |
259 | ||
260 | #. i18n: file: src/dtmf-widget.ui:24 | |
261 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
262 | #: rc.cpp:17 | |
263 | msgid "2" | |
264 | msgstr "2" | |
265 | ||
266 | #. i18n: file: src/dtmf-widget.ui:31 | |
267 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
268 | #: rc.cpp:20 | |
269 | msgid "3" | |
270 | msgstr "3" | |
271 | ||
272 | #. i18n: file: src/dtmf-widget.ui:38 | |
273 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
274 | #: rc.cpp:23 | |
275 | msgid "4" | |
276 | msgstr "4" | |
277 | ||
278 | #. i18n: file: src/dtmf-widget.ui:45 | |
279 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
280 | #: rc.cpp:26 | |
281 | msgid "5" | |
282 | msgstr "5" | |
283 | ||
284 | #. i18n: file: src/dtmf-widget.ui:52 | |
285 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
286 | #: rc.cpp:29 | |
287 | msgid "6" | |
288 | msgstr "6" | |
289 | ||
290 | #. i18n: file: src/dtmf-widget.ui:59 | |
291 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
292 | #: rc.cpp:32 | |
293 | msgid "7" | |
294 | msgstr "7" | |
295 | ||
296 | #. i18n: file: src/dtmf-widget.ui:66 | |
297 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
298 | #: rc.cpp:35 | |
299 | msgid "8" | |
300 | msgstr "8" | |
301 | ||
302 | #. i18n: file: src/dtmf-widget.ui:73 | |
303 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
304 | #: rc.cpp:38 | |
305 | msgid "9" | |
306 | msgstr "9" | |
307 | ||
308 | #. i18n: file: src/dtmf-widget.ui:80 | |
309 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
310 | #: rc.cpp:41 | |
311 | msgid "*" | |
312 | msgstr "*" | |
313 | ||
314 | #. i18n: file: src/dtmf-widget.ui:87 | |
315 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
316 | #: rc.cpp:44 | |
317 | msgid "0" | |
318 | msgstr "0" | |
319 | ||
320 | #. i18n: file: src/dtmf-widget.ui:94 | |
321 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
322 | #: rc.cpp:47 | |
323 | msgid "#" | |
324 | msgstr "#" | |
325 | ||
326 | #~ msgid "Warning: %1" | |
327 | #~ msgstr "Предупреждение: %1" | |
328 | ||
329 | #~ msgid "Error: %1" | |
330 | #~ msgstr "Грешка: %1" | |
331 | ||
332 | #~ msgid "KCall" | |
333 | #~ msgstr "KCall" | |
334 | ||
335 | #~ msgid "Brightness" | |
336 | #~ msgstr "Яркост" | |
337 | ||
338 | #~ msgid "Contrast" | |
339 | #~ msgstr "Контраст" | |
340 | ||
341 | #~ msgid "Hue" | |
342 | #~ msgstr "Нюанс" | |
343 | ||
344 | #~ msgid "Saturation" | |
345 | #~ msgstr "Насищане" | |
346 | ||
347 | #~ msgid "Dialpad" | |
348 | #~ msgstr "Циферблат" | |
349 | ||
350 | #~ msgctxt "@action:inmenu" | |
351 | #~ msgid "Show participants" | |
352 | #~ msgstr "Показване на участниците" | |
353 | ||
354 | #~ msgctxt "@action:inmenu" | |
355 | #~ msgid "Show log" | |
356 | #~ msgstr "Показване на дневника" | |
357 | ||
358 | #~ msgctxt "@action" | |
359 | #~ msgid "Stop sending video" | |
360 | #~ msgstr "Спиране на видеото" | |
361 | ||
362 | #~ msgctxt "@action:inmenu" | |
363 | #~ msgid "Status" | |
364 | #~ msgstr "Състояние" | |
365 | ||
366 | #~ msgctxt "@action:inmenu" | |
367 | #~ msgid "Available" | |
368 | #~ msgstr "На линия" | |
369 | ||
370 | #~ msgctxt "@action:inmenu" | |
371 | #~ msgid "Away" | |
372 | #~ msgstr "Отсъстващ" | |
373 | ||
374 | #~ msgctxt "@action:inmenu" | |
375 | #~ msgid "Be right back" | |
376 | #~ msgstr "Връщам се веднага" | |
377 | ||
378 | #~ msgctxt "@action:inmenu" | |
379 | #~ msgid "Busy" | |
380 | #~ msgstr "Зает" | |
381 | ||
382 | #~ msgctxt "@action:inmenu" | |
383 | #~ msgid "Do not disturb" | |
384 | #~ msgstr "Не ме безпокойте!" | |
385 | ||
386 | #~ msgctxt "@action:inmenu" | |
387 | #~ msgid "Extended Away" | |
388 | #~ msgstr "Отсъствам от доста време" | |
389 | ||
390 | #~ msgctxt "@action:inmenu" | |
391 | #~ msgid "Invisible" | |
392 | #~ msgstr "Невидим" | |
393 | ||
394 | #~ msgctxt "@action:inmenu" | |
395 | #~ msgid "Offline" | |
396 | #~ msgstr "Изключен" | |
397 | ||
398 | #~ msgctxt "@info:status" | |
399 | #~ msgid "Waiting for account information..." | |
400 | #~ msgstr "Изчакване на данните на сметката..." | |
401 | ||
402 | #~ msgctxt "protocol - display name (Connecting)" | |
403 | #~ msgid "%1 - %2 (Connecting)" | |
404 | #~ msgstr "%1 - %2 (Свързване)" | |
405 | ||
406 | #~ msgctxt "protocol - display name" | |
407 | #~ msgid "%1 - %2" | |
408 | #~ msgstr "%1 - %2" | |
409 | ||
410 | #~ msgctxt "@title:window" | |
411 | #~ msgid "KCall" | |
412 | #~ msgstr "KCall" | |
413 | ||
414 | #~ msgctxt "@info:status" | |
415 | #~ msgid "Connected" | |
416 | #~ msgstr "Свързано" | |
417 | ||
418 | #~ msgctxt "@action" | |
419 | #~ msgid "Disconnect" | |
420 | #~ msgstr "Изключване" | |
421 | ||
422 | #~ msgctxt "@action" | |
423 | #~ msgid "Cancel connection attempt" | |
424 | #~ msgstr "Отказване на свързването" | |
425 | ||
426 | #~ msgctxt "@action" | |
427 | #~ msgid "Connect" | |
428 | #~ msgstr "Свързване" | |
429 | ||
430 | #~ msgid "Volume" | |
431 | #~ msgstr "Сила на звука" | |
432 | ||
433 | #~ msgid "Speakers" | |
434 | #~ msgstr "Говорители" | |
435 | ||
436 | #~ msgid "Microphone" | |
437 | #~ msgstr "Микрофон" | |
438 | ||
439 | #~ msgid "Video input" | |
440 | #~ msgstr "Видео вход" | |
441 | ||
442 | #~ msgid "Call log" | |
443 | #~ msgstr "Дневник на обажданията" | |
444 | ||
445 | #~ msgid "Participants" | |
446 | #~ msgstr "Участници" | |
447 | ||
448 | #~ msgctxt "@title:tab" | |
449 | #~ msgid "&Contact list" | |
450 | #~ msgstr "&Списък с контакти" | |
451 | ||
452 | #~ msgid "Dial directly" | |
453 | #~ msgstr "Директно набиране" | |
454 | ||
455 | #~ msgid "Account" | |
456 | #~ msgstr "Сметка" | |
457 | ||
458 | #~ msgctxt "@info:status" | |
459 | #~ msgid "Hanging up..." | |
460 | #~ msgstr "Разкачване..." | |
461 | ||
462 | #~ msgid "Audio input device" | |
463 | #~ msgstr "Входно звуково устройство" | |
464 | ||
465 | #~ msgid "Audio output device" | |
466 | #~ msgstr "Изходно звуково устройство" | |
467 | ||
468 | #~ msgid "Video input device" | |
469 | #~ msgstr "Входно видео устройство" | |
470 | ||
471 | #~ msgid "Video output driver" | |
472 | #~ msgstr "Изходно видео устройство" | |
473 | ||
474 | #~ msgid "Autodetect" | |
475 | #~ msgstr "Автоматично откриване" | |
476 | ||
477 | #~ msgid "Test input device" | |
478 | #~ msgstr "Проба на входното устройство" | |
479 | ||
480 | #~ msgctxt "autodetected audio or video system" | |
481 | #~ msgid "Autodetected" | |
482 | #~ msgstr "Автоматично открито" | |
483 | ||
484 | #~ msgid "ALSA" | |
485 | #~ msgstr "ALSA" | |
486 | ||
487 | #~ msgid "OSS" | |
488 | #~ msgstr "OSS" | |
489 | ||
490 | #~ msgid "JACK" | |
491 | #~ msgstr "JACK" | |
492 | ||
493 | #~ msgid "PULSE" | |
494 | #~ msgstr "PULSE" | |
495 | ||
496 | #~ msgid "Video4Linux" | |
497 | #~ msgstr "Video4Linux" | |
498 | ||
499 | #~ msgid "Device name" | |
500 | #~ msgstr "Име на устройство" | |
501 | ||
502 | #~ msgid "Sound system" | |
503 | #~ msgstr "Звукова система" | |
504 | ||
505 | #~ msgid "Video system" | |
506 | #~ msgstr "Видео система" | |
507 | ||
508 | #~ msgctxt "test the device" | |
509 | #~ msgid "Test" | |
510 | #~ msgstr "Проба" | |
511 | ||
512 | #~ msgctxt "stop audio/video test" | |
513 | #~ msgid "Stop test" | |
514 | #~ msgstr "Прекъсване на пробата" | |
515 | ||
516 | #~ msgid "Hide details" | |
517 | #~ msgstr "Скриване на подробностите" | |
518 | ||
519 | #~ msgid "Timeout in seconds:" | |
520 | #~ msgstr "Изчакване в секунди:" | |
521 | ||
522 | #~ msgid "Ignore" | |
523 | #~ msgstr "Пренебрегване" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( cs ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # Vít Pelčák <vit@pelcak.org>, 2011, 2012. | |
3 | # | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2012-05-02 11:41+0200\n" | |
10 | "Last-Translator: Vit Pelcak <vit@pelcak.org>\n" | |
11 | "Language-Team: Czech <kde-i18n-doc@kde.org>\n" | |
12 | "Language: cs\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" | |
17 | "X-Generator: Lokalize 1.4\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "Příchozí video hovor" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | msgid "Incoming call" | |
30 | msgstr "Příchozí hovor" | |
31 | ||
32 | #: src/approver.cpp:42 | |
33 | #, kde-format | |
34 | msgid "<p>%1 is calling you</p>" | |
35 | msgstr "" | |
36 | ||
37 | #: src/approver.cpp:58 src/approver.cpp:80 | |
38 | msgctxt "action, answers the incoming call" | |
39 | msgid "Answer" | |
40 | msgstr "Odpověď" | |
41 | ||
42 | #: src/approver.cpp:59 src/approver.cpp:82 | |
43 | msgctxt "action, rejects the incoming call" | |
44 | msgid "Reject" | |
45 | msgstr "Odmítnout" | |
46 | ||
47 | #: src/call-window.cpp:95 | |
48 | #, kde-format | |
49 | msgid "Call with %1" | |
50 | msgstr "" | |
51 | ||
52 | #: src/call-window.cpp:109 | |
53 | msgctxt "@info:status" | |
54 | msgid "Connecting..." | |
55 | msgstr "Připojuji se..." | |
56 | ||
57 | #: src/call-window.cpp:113 | |
58 | msgctxt "@info:status the remote user's phone is ringing" | |
59 | msgid "Ringing..." | |
60 | msgstr "Zvoní..." | |
61 | ||
62 | #: src/call-window.cpp:117 | |
63 | msgctxt "@info:status" | |
64 | msgid "Remote user accepted the call, waiting for connection..." | |
65 | msgstr "" | |
66 | ||
67 | #: src/call-window.cpp:120 | |
68 | msgctxt "@info:status" | |
69 | msgid "Talking..." | |
70 | msgstr "Hovořím..." | |
71 | ||
72 | #: src/call-window.cpp:136 | |
73 | msgctxt "@info:status" | |
74 | msgid "Remote contact ended the call." | |
75 | msgstr "" | |
76 | ||
77 | #: src/call-window.cpp:143 | |
78 | msgctxt "@info:status" | |
79 | msgid "Remote contact rejected the call." | |
80 | msgstr "" | |
81 | ||
82 | #: src/call-window.cpp:148 | |
83 | msgctxt "@info:status" | |
84 | msgid "Remote contact didn't answer." | |
85 | msgstr "" | |
86 | ||
87 | #: src/call-window.cpp:152 | |
88 | msgctxt "@info:status" | |
89 | msgid "Invalid number or contact." | |
90 | msgstr "" | |
91 | ||
92 | #: src/call-window.cpp:156 | |
93 | msgctxt "@info:status" | |
94 | msgid "You don't have enough balance to make this call." | |
95 | msgstr "" | |
96 | ||
97 | #: src/call-window.cpp:158 | |
98 | msgctxt "@info:status" | |
99 | msgid "You don't have permission to make this call." | |
100 | msgstr "" | |
101 | ||
102 | #: src/call-window.cpp:163 | |
103 | msgctxt "@info:status" | |
104 | msgid "Remote contact is currently busy." | |
105 | msgstr "" | |
106 | ||
107 | #: src/call-window.cpp:167 | |
108 | msgctxt "@info:status" | |
109 | msgid "Internal component error." | |
110 | msgstr "" | |
111 | ||
112 | #: src/call-window.cpp:170 | |
113 | msgctxt "@info:status" | |
114 | msgid "Remote service error." | |
115 | msgstr "" | |
116 | ||
117 | #: src/call-window.cpp:173 | |
118 | msgctxt "@info:status" | |
119 | msgid "Network error." | |
120 | msgstr "Chyba sítě." | |
121 | ||
122 | #: src/call-window.cpp:177 | |
123 | msgctxt "@info:status" | |
124 | msgid "Failed to negotiate codecs." | |
125 | msgstr "" | |
126 | ||
127 | #: src/call-window.cpp:179 | |
128 | msgctxt "@info:status" | |
129 | msgid "Unsupported media type." | |
130 | msgstr "" | |
131 | ||
132 | #: src/call-window.cpp:183 | |
133 | msgctxt "@info:status" | |
134 | msgid "Connectivity error." | |
135 | msgstr "" | |
136 | ||
137 | #: src/call-window.cpp:187 | |
138 | msgctxt "@info:status" | |
139 | msgid "Unknown error." | |
140 | msgstr "Neznámá chyba." | |
141 | ||
142 | #: src/call-window.cpp:192 | |
143 | msgctxt "@info:status" | |
144 | msgid "Disconnected." | |
145 | msgstr "Odpojeno." | |
146 | ||
147 | #: src/call-window.cpp:196 | |
148 | #, kde-format | |
149 | msgctxt "@info:status the call was disconnected because..." | |
150 | msgid "Disconnected: %1" | |
151 | msgstr "Odpojen: %1" | |
152 | ||
153 | #: src/call-window.cpp:339 | |
154 | msgctxt "@action" | |
155 | msgid "Show my video" | |
156 | msgstr "Zobrazit moje video" | |
157 | ||
158 | #: src/call-window.cpp:344 | |
159 | msgctxt "@action" | |
160 | msgid "Show dialpad" | |
161 | msgstr "Zobrazit číselník" | |
162 | ||
163 | #: src/call-window.cpp:351 | |
164 | msgctxt "@action" | |
165 | msgid "Send video" | |
166 | msgstr "Zaslat video" | |
167 | ||
168 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
169 | msgctxt "@action" | |
170 | msgid "Mute" | |
171 | msgstr "Ztlumit" | |
172 | ||
173 | #: src/call-window.cpp:363 | |
174 | msgctxt "@action" | |
175 | msgid "Hold" | |
176 | msgstr "Pozdržet" | |
177 | ||
178 | #: src/call-window.cpp:368 | |
179 | msgctxt "@action" | |
180 | msgid "Hangup" | |
181 | msgstr "Zavěsit" | |
182 | ||
183 | #: src/main.cpp:36 | |
184 | msgid "KDE Telepathy Call Ui" | |
185 | msgstr "" | |
186 | ||
187 | #: src/main.cpp:37 | |
188 | msgid "VoIP client for KDE" | |
189 | msgstr "VoIP klient pro KDE" | |
190 | ||
191 | #: src/main.cpp:38 | |
192 | msgid "(C) 2009, George Kiagiadakis" | |
193 | msgstr "(C) 2009, George Kiagiadakis" | |
194 | ||
195 | #: src/main.cpp:40 | |
196 | msgctxt "@info:credit" | |
197 | msgid "George Kiagiadakis" | |
198 | msgstr "George Kiagiadakis" | |
199 | ||
200 | #: rc.cpp:1 | |
201 | msgctxt "NAME OF TRANSLATORS" | |
202 | msgid "Your names" | |
203 | msgstr "Tomáš Chvátal" | |
204 | ||
205 | #: rc.cpp:2 | |
206 | msgctxt "EMAIL OF TRANSLATORS" | |
207 | msgid "Your emails" | |
208 | msgstr "tomas.chvatal@gmail.com" | |
209 | ||
210 | #. i18n: file: src/callwindowui.rc:11 | |
211 | #. i18n: ectx: Menu (call) | |
212 | #: rc.cpp:5 | |
213 | msgid "Call" | |
214 | msgstr "Volání" | |
215 | ||
216 | #. i18n: file: src/callwindowui.rc:20 | |
217 | #. i18n: ectx: Menu (media) | |
218 | #: rc.cpp:8 | |
219 | msgid "Media" | |
220 | msgstr "Média" | |
221 | ||
222 | #. i18n: file: src/callwindowui.rc:27 | |
223 | #. i18n: ectx: ToolBar (mainToolBar) | |
224 | #: rc.cpp:11 | |
225 | msgid "Main Toolbar" | |
226 | msgstr "Hlavní nástrojová lišta" | |
227 | ||
228 | #. i18n: file: src/dtmf-widget.ui:17 | |
229 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
230 | #: rc.cpp:14 | |
231 | msgid "1" | |
232 | msgstr "1" | |
233 | ||
234 | #. i18n: file: src/dtmf-widget.ui:24 | |
235 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
236 | #: rc.cpp:17 | |
237 | msgid "2" | |
238 | msgstr "2" | |
239 | ||
240 | #. i18n: file: src/dtmf-widget.ui:31 | |
241 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
242 | #: rc.cpp:20 | |
243 | msgid "3" | |
244 | msgstr "3" | |
245 | ||
246 | #. i18n: file: src/dtmf-widget.ui:38 | |
247 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
248 | #: rc.cpp:23 | |
249 | msgid "4" | |
250 | msgstr "4" | |
251 | ||
252 | #. i18n: file: src/dtmf-widget.ui:45 | |
253 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
254 | #: rc.cpp:26 | |
255 | msgid "5" | |
256 | msgstr "5" | |
257 | ||
258 | #. i18n: file: src/dtmf-widget.ui:52 | |
259 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
260 | #: rc.cpp:29 | |
261 | msgid "6" | |
262 | msgstr "6" | |
263 | ||
264 | #. i18n: file: src/dtmf-widget.ui:59 | |
265 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
266 | #: rc.cpp:32 | |
267 | msgid "7" | |
268 | msgstr "7" | |
269 | ||
270 | #. i18n: file: src/dtmf-widget.ui:66 | |
271 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
272 | #: rc.cpp:35 | |
273 | msgid "8" | |
274 | msgstr "8" | |
275 | ||
276 | #. i18n: file: src/dtmf-widget.ui:73 | |
277 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
278 | #: rc.cpp:38 | |
279 | msgid "9" | |
280 | msgstr "9" | |
281 | ||
282 | #. i18n: file: src/dtmf-widget.ui:80 | |
283 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
284 | #: rc.cpp:41 | |
285 | msgid "*" | |
286 | msgstr "*" | |
287 | ||
288 | #. i18n: file: src/dtmf-widget.ui:87 | |
289 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
290 | #: rc.cpp:44 | |
291 | msgid "0" | |
292 | msgstr "0" | |
293 | ||
294 | #. i18n: file: src/dtmf-widget.ui:94 | |
295 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
296 | #: rc.cpp:47 | |
297 | msgid "#" | |
298 | msgstr "#" | |
299 | ||
300 | #~ msgid "Warning: %1" | |
301 | #~ msgstr "Varování: %1" | |
302 | ||
303 | #~ msgid "Error: %1" | |
304 | #~ msgstr "Chyba: %1" | |
305 | ||
306 | #~ msgid "KCall" | |
307 | #~ msgstr "KCall" | |
308 | ||
309 | #~ msgid "Brightness" | |
310 | #~ msgstr "Jas" | |
311 | ||
312 | #~ msgid "Contrast" | |
313 | #~ msgstr "Kontrast" | |
314 | ||
315 | #~ msgid "Hue" | |
316 | #~ msgstr "Tón" | |
317 | ||
318 | #~ msgid "Saturation" | |
319 | #~ msgstr "Nasycení" | |
320 | ||
321 | #~ msgid "Dialpad" | |
322 | #~ msgstr "Číselník" | |
323 | ||
324 | #~ msgid "The audio input device could not be initialized" | |
325 | #~ msgstr "Zařízení zvukového vstupu nemohlo být inicializováno" | |
326 | ||
327 | #~ msgid "The video input device could not be initialized" | |
328 | #~ msgstr "Zařízení video vstupu nemohlo být inicializováno" | |
329 | ||
330 | #~ msgid "" | |
331 | #~ "Could not create some of the required elements. Please check your " | |
332 | #~ "GStreamer installation." | |
333 | #~ msgstr "" | |
334 | #~ "Nelze vytvořit některé požadované prvky. Prosím zkontrolujte vaši " | |
335 | #~ "instalaci GStreamer." | |
336 | ||
337 | #~ msgid "The audio output device could not be initialized" | |
338 | #~ msgstr "Zařízení zvukového výstupu nemohlo být inicializováno" | |
339 | ||
340 | #~ msgctxt "@action:inmenu" | |
341 | #~ msgid "Show participants" | |
342 | #~ msgstr "Zobrazit účastníky" | |
343 | ||
344 | #~ msgctxt "@action:inmenu" | |
345 | #~ msgid "Show log" | |
346 | #~ msgstr "Zobrazit záznamy" | |
347 | ||
348 | #~ msgctxt "@action" | |
349 | #~ msgid "Stop sending video" | |
350 | #~ msgstr "Zastavit zasílání videa" | |
351 | ||
352 | #~ msgctxt "@action:inmenu" | |
353 | #~ msgid "Status" | |
354 | #~ msgstr "Stav" | |
355 | ||
356 | #~ msgctxt "@action:inmenu" | |
357 | #~ msgid "Available" | |
358 | #~ msgstr "Dostupný" | |
359 | ||
360 | #~ msgctxt "@action:inmenu" | |
361 | #~ msgid "Away" | |
362 | #~ msgstr "Pryč" | |
363 | ||
364 | #~ msgctxt "@action:inmenu" | |
365 | #~ msgid "Be right back" | |
366 | #~ msgstr "Hned jsem zpátky" | |
367 | ||
368 | #~ msgctxt "@action:inmenu" | |
369 | #~ msgid "Busy" | |
370 | #~ msgstr "Zaneprázdněn" | |
371 | ||
372 | #~ msgctxt "@action:inmenu" | |
373 | #~ msgid "Do not disturb" | |
374 | #~ msgstr "Nerušit" | |
375 | ||
376 | #~ msgctxt "@action:inmenu" | |
377 | #~ msgid "Extended Away" | |
378 | #~ msgstr "Rozšířené \"pryč\"" | |
379 | ||
380 | #~ msgctxt "@action:inmenu" | |
381 | #~ msgid "Invisible" | |
382 | #~ msgstr "Neviditelný" | |
383 | ||
384 | #~ msgctxt "@action:inmenu" | |
385 | #~ msgid "Offline" | |
386 | #~ msgstr "Odpojen" | |
387 | ||
388 | #~ msgctxt "@info:status" | |
389 | #~ msgid "Waiting for account information..." | |
390 | #~ msgstr "Čekám na informaci o účtu..." | |
391 | ||
392 | #~ msgctxt "protocol - display name (Connecting)" | |
393 | #~ msgid "%1 - %2 (Connecting)" | |
394 | #~ msgstr "%1 - %2 (Připojuji se)" | |
395 | ||
396 | #~ msgctxt "protocol - display name" | |
397 | #~ msgid "%1 - %2" | |
398 | #~ msgstr "%1 - %2" | |
399 | ||
400 | #~ msgctxt "@title:window" | |
401 | #~ msgid "KCall" | |
402 | #~ msgstr "KCall" | |
403 | ||
404 | #~ msgctxt "@info:status" | |
405 | #~ msgid "Connected" | |
406 | #~ msgstr "Připojen" | |
407 | ||
408 | #~ msgctxt "@action" | |
409 | #~ msgid "Disconnect" | |
410 | #~ msgstr "Odpojit" | |
411 | ||
412 | #~ msgctxt "@action" | |
413 | #~ msgid "Cancel connection attempt" | |
414 | #~ msgstr "Přerušit pokus o spojení" | |
415 | ||
416 | #~ msgctxt "@action" | |
417 | #~ msgid "Connect" | |
418 | #~ msgstr "Připojit" | |
419 | ||
420 | #~ msgid "Volume" | |
421 | #~ msgstr "Hlasitost" | |
422 | ||
423 | #~ msgid "Speakers" | |
424 | #~ msgstr "Reproduktory" | |
425 | ||
426 | #~ msgid "Microphone" | |
427 | #~ msgstr "Mikrofon" | |
428 | ||
429 | #~ msgid "Video controls" | |
430 | #~ msgstr "Nastavení videa" | |
431 | ||
432 | #~ msgid "Video input" | |
433 | #~ msgstr "Vstup videa" | |
434 | ||
435 | #~ msgid "Call log" | |
436 | #~ msgstr "Záznam volání" | |
437 | ||
438 | #~ msgid "Participants" | |
439 | #~ msgstr "Účastníci" | |
440 | ||
441 | #~ msgctxt "@title:tab" | |
442 | #~ msgid "&Contact list" | |
443 | #~ msgstr "&Seznam kontaktů" | |
444 | ||
445 | #~ msgid "Dial directly" | |
446 | #~ msgstr "Přímo vytočit" | |
447 | ||
448 | #~ msgid "Account" | |
449 | #~ msgstr "Účet" | |
450 | ||
451 | #~ msgid "Dial (Audio only)" | |
452 | #~ msgstr "Vytočit (pouze zvuk)" | |
453 | ||
454 | #~ msgid "Dial (Audio/Video)" | |
455 | #~ msgstr "Vytočit (obraz i zvuk)" | |
456 | ||
457 | #~ msgid "ALSA" | |
458 | #~ msgstr "ALSA" | |
459 | ||
460 | #~ msgid "OSS" | |
461 | #~ msgstr "OSS" | |
462 | ||
463 | #~ msgid "JACK" | |
464 | #~ msgstr "JACK" | |
465 | ||
466 | #~ msgid "PULSE" | |
467 | #~ msgstr "PULSE" | |
468 | ||
469 | #~ msgid "Video4Linux" | |
470 | #~ msgstr "Video4Linux" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( da ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Martin Schlander <mschlander@opensuse.org>, 2009, 2010, 2011, 2012. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2012-05-04 11:58+0200\n" | |
10 | "Last-Translator: Martin Schlander <mschlander@opensuse.org>\n" | |
11 | "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" | |
12 | "Language: da\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.2\n" | |
17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "Indkommende videoopkald" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "<p>%1 beder om et videoopkald</p>" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | msgid "Incoming call" | |
30 | msgstr "Indkommende opkald" | |
31 | ||
32 | #: src/approver.cpp:42 | |
33 | #, kde-format | |
34 | msgid "<p>%1 is calling you</p>" | |
35 | msgstr "<p>%1 ringer til dig</p>" | |
36 | ||
37 | #: src/approver.cpp:58 src/approver.cpp:80 | |
38 | msgctxt "action, answers the incoming call" | |
39 | msgid "Answer" | |
40 | msgstr "Svar" | |
41 | ||
42 | #: src/approver.cpp:59 src/approver.cpp:82 | |
43 | msgctxt "action, rejects the incoming call" | |
44 | msgid "Reject" | |
45 | msgstr "Afslå" | |
46 | ||
47 | #: src/call-window.cpp:95 | |
48 | #, kde-format | |
49 | msgid "Call with %1" | |
50 | msgstr "Samtale med %1" | |
51 | ||
52 | #: src/call-window.cpp:109 | |
53 | msgctxt "@info:status" | |
54 | msgid "Connecting..." | |
55 | msgstr "Forbinder..." | |
56 | ||
57 | #: src/call-window.cpp:113 | |
58 | msgctxt "@info:status the remote user's phone is ringing" | |
59 | msgid "Ringing..." | |
60 | msgstr "Ringer..." | |
61 | ||
62 | #: src/call-window.cpp:117 | |
63 | msgctxt "@info:status" | |
64 | msgid "Remote user accepted the call, waiting for connection..." | |
65 | msgstr "Den eksterne bruger accepterede opkaldet, afventer forbindelse" | |
66 | ||
67 | #: src/call-window.cpp:120 | |
68 | msgctxt "@info:status" | |
69 | msgid "Talking..." | |
70 | msgstr "Taler..." | |
71 | ||
72 | #: src/call-window.cpp:136 | |
73 | msgctxt "@info:status" | |
74 | msgid "Remote contact ended the call." | |
75 | msgstr "Den eksterne kontakt afsluttede samtalen." | |
76 | ||
77 | #: src/call-window.cpp:143 | |
78 | msgctxt "@info:status" | |
79 | msgid "Remote contact rejected the call." | |
80 | msgstr "Den eksterne kontakt afslog opkaldet." | |
81 | ||
82 | #: src/call-window.cpp:148 | |
83 | msgctxt "@info:status" | |
84 | msgid "Remote contact didn't answer." | |
85 | msgstr "Den eksterne kontakt tog ikke telefonen." | |
86 | ||
87 | #: src/call-window.cpp:152 | |
88 | msgctxt "@info:status" | |
89 | msgid "Invalid number or contact." | |
90 | msgstr "Ugyldigt nummer eller kontakt." | |
91 | ||
92 | #: src/call-window.cpp:156 | |
93 | msgctxt "@info:status" | |
94 | msgid "You don't have enough balance to make this call." | |
95 | msgstr "Din saldo er ikke stor nok til at foretage dette opkald." | |
96 | ||
97 | #: src/call-window.cpp:158 | |
98 | msgctxt "@info:status" | |
99 | msgid "You don't have permission to make this call." | |
100 | msgstr "Du har ikke tilladelse til at foretage dette opkald." | |
101 | ||
102 | #: src/call-window.cpp:163 | |
103 | msgctxt "@info:status" | |
104 | msgid "Remote contact is currently busy." | |
105 | msgstr "Den eksterne kontakt er optaget." | |
106 | ||
107 | #: src/call-window.cpp:167 | |
108 | msgctxt "@info:status" | |
109 | msgid "Internal component error." | |
110 | msgstr "Fejl i intern komponent." | |
111 | ||
112 | #: src/call-window.cpp:170 | |
113 | msgctxt "@info:status" | |
114 | msgid "Remote service error." | |
115 | msgstr "Fejl i ekstern tjeneste." | |
116 | ||
117 | #: src/call-window.cpp:173 | |
118 | msgctxt "@info:status" | |
119 | msgid "Network error." | |
120 | msgstr "Netværksfejl." | |
121 | ||
122 | #: src/call-window.cpp:177 | |
123 | msgctxt "@info:status" | |
124 | msgid "Failed to negotiate codecs." | |
125 | msgstr "Kunne ikke forhandle codecs." | |
126 | ||
127 | #: src/call-window.cpp:179 | |
128 | msgctxt "@info:status" | |
129 | msgid "Unsupported media type." | |
130 | msgstr "Ikke-understøttet medietype." | |
131 | ||
132 | #: src/call-window.cpp:183 | |
133 | msgctxt "@info:status" | |
134 | msgid "Connectivity error." | |
135 | msgstr "Forbindelsesfejl." | |
136 | ||
137 | #: src/call-window.cpp:187 | |
138 | msgctxt "@info:status" | |
139 | msgid "Unknown error." | |
140 | msgstr "Ukendt fejl." | |
141 | ||
142 | #: src/call-window.cpp:192 | |
143 | msgctxt "@info:status" | |
144 | msgid "Disconnected." | |
145 | msgstr "Forbindelse afbrudt." | |
146 | ||
147 | #: src/call-window.cpp:196 | |
148 | #, kde-format | |
149 | msgctxt "@info:status the call was disconnected because..." | |
150 | msgid "Disconnected: %1" | |
151 | msgstr "Forbindelse afbrudt: %1" | |
152 | ||
153 | #: src/call-window.cpp:339 | |
154 | msgctxt "@action" | |
155 | msgid "Show my video" | |
156 | msgstr "Vis min video" | |
157 | ||
158 | #: src/call-window.cpp:344 | |
159 | msgctxt "@action" | |
160 | msgid "Show dialpad" | |
161 | msgstr "Vis opkaldstastatur" | |
162 | ||
163 | #: src/call-window.cpp:351 | |
164 | msgctxt "@action" | |
165 | msgid "Send video" | |
166 | msgstr "Send video" | |
167 | ||
168 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
169 | msgctxt "@action" | |
170 | msgid "Mute" | |
171 | msgstr "Lydløs" | |
172 | ||
173 | #: src/call-window.cpp:363 | |
174 | msgctxt "@action" | |
175 | msgid "Hold" | |
176 | msgstr "Hold" | |
177 | ||
178 | #: src/call-window.cpp:368 | |
179 | msgctxt "@action" | |
180 | msgid "Hangup" | |
181 | msgstr "Læg på" | |
182 | ||
183 | #: src/main.cpp:36 | |
184 | msgid "KDE Telepathy Call Ui" | |
185 | msgstr "KDE Telepathy opkaldsbrugerflade" | |
186 | ||
187 | #: src/main.cpp:37 | |
188 | msgid "VoIP client for KDE" | |
189 | msgstr "VoIP-klient til KDE" | |
190 | ||
191 | #: src/main.cpp:38 | |
192 | msgid "(C) 2009, George Kiagiadakis" | |
193 | msgstr "(C) 2009, George Kiagiadakis" | |
194 | ||
195 | #: src/main.cpp:40 | |
196 | msgctxt "@info:credit" | |
197 | msgid "George Kiagiadakis" | |
198 | msgstr "George Kiagiadakis" | |
199 | ||
200 | #: rc.cpp:1 | |
201 | msgctxt "NAME OF TRANSLATORS" | |
202 | msgid "Your names" | |
203 | msgstr "Martin Schlander" | |
204 | ||
205 | #: rc.cpp:2 | |
206 | msgctxt "EMAIL OF TRANSLATORS" | |
207 | msgid "Your emails" | |
208 | msgstr "mschlander@opensuse.org" | |
209 | ||
210 | #. i18n: file: src/callwindowui.rc:11 | |
211 | #. i18n: ectx: Menu (call) | |
212 | #: rc.cpp:5 | |
213 | msgid "Call" | |
214 | msgstr "Opkald" | |
215 | ||
216 | #. i18n: file: src/callwindowui.rc:20 | |
217 | #. i18n: ectx: Menu (media) | |
218 | #: rc.cpp:8 | |
219 | msgid "Media" | |
220 | msgstr "Medie" | |
221 | ||
222 | #. i18n: file: src/callwindowui.rc:27 | |
223 | #. i18n: ectx: ToolBar (mainToolBar) | |
224 | #: rc.cpp:11 | |
225 | msgid "Main Toolbar" | |
226 | msgstr "Hovedværktøjslinje" | |
227 | ||
228 | #. i18n: file: src/dtmf-widget.ui:17 | |
229 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
230 | #: rc.cpp:14 | |
231 | msgid "1" | |
232 | msgstr "1" | |
233 | ||
234 | #. i18n: file: src/dtmf-widget.ui:24 | |
235 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
236 | #: rc.cpp:17 | |
237 | msgid "2" | |
238 | msgstr "2" | |
239 | ||
240 | #. i18n: file: src/dtmf-widget.ui:31 | |
241 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
242 | #: rc.cpp:20 | |
243 | msgid "3" | |
244 | msgstr "3" | |
245 | ||
246 | #. i18n: file: src/dtmf-widget.ui:38 | |
247 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
248 | #: rc.cpp:23 | |
249 | msgid "4" | |
250 | msgstr "4" | |
251 | ||
252 | #. i18n: file: src/dtmf-widget.ui:45 | |
253 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
254 | #: rc.cpp:26 | |
255 | msgid "5" | |
256 | msgstr "5" | |
257 | ||
258 | #. i18n: file: src/dtmf-widget.ui:52 | |
259 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
260 | #: rc.cpp:29 | |
261 | msgid "6" | |
262 | msgstr "6" | |
263 | ||
264 | #. i18n: file: src/dtmf-widget.ui:59 | |
265 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
266 | #: rc.cpp:32 | |
267 | msgid "7" | |
268 | msgstr "7" | |
269 | ||
270 | #. i18n: file: src/dtmf-widget.ui:66 | |
271 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
272 | #: rc.cpp:35 | |
273 | msgid "8" | |
274 | msgstr "8" | |
275 | ||
276 | #. i18n: file: src/dtmf-widget.ui:73 | |
277 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
278 | #: rc.cpp:38 | |
279 | msgid "9" | |
280 | msgstr "9" | |
281 | ||
282 | #. i18n: file: src/dtmf-widget.ui:80 | |
283 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
284 | #: rc.cpp:41 | |
285 | msgid "*" | |
286 | msgstr "*" | |
287 | ||
288 | #. i18n: file: src/dtmf-widget.ui:87 | |
289 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
290 | #: rc.cpp:44 | |
291 | msgid "0" | |
292 | msgstr "0" | |
293 | ||
294 | #. i18n: file: src/dtmf-widget.ui:94 | |
295 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
296 | #: rc.cpp:47 | |
297 | msgid "#" | |
298 | msgstr "#" | |
299 | ||
300 | #~ msgid "Warning: %1" | |
301 | #~ msgstr "Advarsel: %1" | |
302 | ||
303 | #~ msgid "Error: %1" | |
304 | #~ msgstr "Fejl: %1" | |
305 | ||
306 | #~ msgid "KCall" | |
307 | #~ msgstr "KCall" | |
308 | ||
309 | #~ msgid "Brightness" | |
310 | #~ msgstr "Lysstyrke" | |
311 | ||
312 | #~ msgid "Contrast" | |
313 | #~ msgstr "Kontrast" | |
314 | ||
315 | #~ msgid "Hue" | |
316 | #~ msgstr "Farvetone" | |
317 | ||
318 | #~ msgid "Saturation" | |
319 | #~ msgstr "Mætning" | |
320 | ||
321 | #~ msgid "Dialpad" | |
322 | #~ msgstr "Tasteplade" | |
323 | ||
324 | #~ msgid "" | |
325 | #~ "Defines whether the window should close automatically after a timeout " | |
326 | #~ "when the call is over." | |
327 | #~ msgstr "" | |
328 | #~ "Definerer om vinduet skal lukke automatisk efter et tidsudløb når " | |
329 | #~ "opkaldet er slut." | |
330 | ||
331 | #~ msgid "" | |
332 | #~ "Defines how many seconds the call window should remain visible after the " | |
333 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
334 | #~ msgstr "" | |
335 | #~ "Definerer hvor mange sekunder opkaldsvinduet skal forblive synligt efter " | |
336 | #~ "opkaldet er slut. Denne indstilling afhænger af \"LukVedAfbrudtForbindelse" | |
337 | #~ "\"." | |
338 | ||
339 | #~ msgid "The audio input device could not be initialized" | |
340 | #~ msgstr "Enheden til lyd-input kunne ikke initialiseres" | |
341 | ||
342 | #~ msgid "The video input device could not be initialized" | |
343 | #~ msgstr "Enheden til video-input kunne ikke initialiseres" | |
344 | ||
345 | #~ msgid "" | |
346 | #~ "Could not create some of the required elements. Please check your " | |
347 | #~ "GStreamer installation." | |
348 | #~ msgstr "" | |
349 | #~ "Nogle af de påkrævede elementer kunne ikke oprettes. Kontrollér din " | |
350 | #~ "GStreamer-installation." | |
351 | ||
352 | #~ msgid "The audio output device could not be initialized" | |
353 | #~ msgstr "Enheden til lyd-output kunne ikke initialiseres" | |
354 | ||
355 | #~ msgctxt "@action:inmenu" | |
356 | #~ msgid "Show participants" | |
357 | #~ msgstr "Vis deltagere" | |
358 | ||
359 | #~ msgctxt "@action:inmenu" | |
360 | #~ msgid "Show log" | |
361 | #~ msgstr "Vis log" | |
362 | ||
363 | #~ msgctxt "@action" | |
364 | #~ msgid "Stop sending video" | |
365 | #~ msgstr "Stop afsendelse af video" | |
366 | ||
367 | #~ msgctxt "@action:inmenu" | |
368 | #~ msgid "Status" | |
369 | #~ msgstr "Status" | |
370 | ||
371 | #~ msgctxt "@action:inmenu" | |
372 | #~ msgid "Available" | |
373 | #~ msgstr "Tilgængelig" | |
374 | ||
375 | #~ msgctxt "@action:inmenu" | |
376 | #~ msgid "Away" | |
377 | #~ msgstr "Borte" | |
378 | ||
379 | #~ msgctxt "@action:inmenu" | |
380 | #~ msgid "Be right back" | |
381 | #~ msgstr "Er straks tilbage" | |
382 | ||
383 | #~ msgctxt "@action:inmenu" | |
384 | #~ msgid "Busy" | |
385 | #~ msgstr "Optaget" | |
386 | ||
387 | #~ msgctxt "@action:inmenu" | |
388 | #~ msgid "Do not disturb" | |
389 | #~ msgstr "Forstyr ikke" | |
390 | ||
391 | #~ msgctxt "@action:inmenu" | |
392 | #~ msgid "Extended Away" | |
393 | #~ msgstr "Udvidet borte" | |
394 | ||
395 | #~ msgctxt "@action:inmenu" | |
396 | #~ msgid "Invisible" | |
397 | #~ msgstr "Usynlig" | |
398 | ||
399 | #~ msgctxt "@action:inmenu" | |
400 | #~ msgid "Offline" | |
401 | #~ msgstr "Offline" | |
402 | ||
403 | #~ msgctxt "@info:status" | |
404 | #~ msgid "Waiting for account information..." | |
405 | #~ msgstr "Venter på kontoinformation..." | |
406 | ||
407 | #~ msgctxt "protocol - display name (Connecting)" | |
408 | #~ msgid "%1 - %2 (Connecting)" | |
409 | #~ msgstr "%1 - %2 (forbinder)" | |
410 | ||
411 | #~ msgctxt "protocol - display name" | |
412 | #~ msgid "%1 - %2" | |
413 | #~ msgstr "%1 - %2" | |
414 | ||
415 | #~ msgctxt "@title:window" | |
416 | #~ msgid "KCall" | |
417 | #~ msgstr "KCall" | |
418 | ||
419 | #~ msgctxt "@info:status" | |
420 | #~ msgid "Connected" | |
421 | #~ msgstr "Forbundet" | |
422 | ||
423 | #~ msgctxt "@action" | |
424 | #~ msgid "Disconnect" | |
425 | #~ msgstr "Afbryd forbindelse" | |
426 | ||
427 | #~ msgctxt "@action" | |
428 | #~ msgid "Cancel connection attempt" | |
429 | #~ msgstr "Annullér forbindelsesforsøg" | |
430 | ||
431 | #~ msgctxt "@action" | |
432 | #~ msgid "Connect" | |
433 | #~ msgstr "Forbind" | |
434 | ||
435 | #~ msgid "" | |
436 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
437 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
438 | #~ "calls." | |
439 | #~ msgstr "" | |
440 | #~ "Du har bedt om at lukke KCall. Bemærk at KCall faktisk ikke vil afslutte, " | |
441 | #~ "men vil forblive aktiv i statusområdet og vente på indkommende opkald." | |
442 | ||
443 | #~ msgid "Volume" | |
444 | #~ msgstr "Lydstyrke" | |
445 | ||
446 | #~ msgid "Speakers" | |
447 | #~ msgstr "Højtalere" | |
448 | ||
449 | #~ msgid "Microphone" | |
450 | #~ msgstr "Mikrofon" | |
451 | ||
452 | #~ msgid "Video controls" | |
453 | #~ msgstr "Videokontroller" | |
454 | ||
455 | #~ msgid "Video input" | |
456 | #~ msgstr "Video-input" | |
457 | ||
458 | #~ msgid "Call log" | |
459 | #~ msgstr "Opkaldslog" | |
460 | ||
461 | #~ msgid "Participants" | |
462 | #~ msgstr "Deltagere" | |
463 | ||
464 | #~ msgctxt "@title:tab" | |
465 | #~ msgid "&Contact list" | |
466 | #~ msgstr "&Kontaktliste" | |
467 | ||
468 | #~ msgid "Dial directly" | |
469 | #~ msgstr "Ring op direkte" | |
470 | ||
471 | #~ msgid "Account" | |
472 | #~ msgstr "Konto" | |
473 | ||
474 | #~ msgid "Contact handle" | |
475 | #~ msgstr "Kontaktnavn" | |
476 | ||
477 | #~ msgid "Dial (Audio only)" | |
478 | #~ msgstr "Ring op (kun lyd)" | |
479 | ||
480 | #~ msgid "Dial (Audio/Video)" | |
481 | #~ msgstr "Ring op (lyd/video)" | |
482 | ||
483 | #~ msgctxt "@info:status" | |
484 | #~ msgid "Hanging up..." | |
485 | #~ msgstr "Lægger på..." | |
486 | ||
487 | #~ msgid "Channel closed" | |
488 | #~ msgstr "Kanal lukket" | |
489 | ||
490 | #~ msgid "Channel closed with error: %1" | |
491 | #~ msgstr "Kanal lukket med fejl: %1" | |
492 | ||
493 | #~ msgid "Audio stream created. Stream id: %1." | |
494 | #~ msgstr "Lyd-stream oprettet. Stream-id: %1." | |
495 | ||
496 | #~ msgid "Video stream created. Stream id: %1." | |
497 | #~ msgstr "Video-stream oprettet. Stream-id: %1." | |
498 | ||
499 | #~ msgctxt "1 is the stream's id" | |
500 | #~ msgid "Stream %1 direction is: %2." | |
501 | #~ msgstr "Stream %1, retningen er: %2." | |
502 | ||
503 | #~ msgctxt "1 is the stream's id" | |
504 | #~ msgid "Stream %1 removed." | |
505 | #~ msgstr "Stream %1 fjernet." | |
506 | ||
507 | #~ msgctxt "1 is the stream's id" | |
508 | #~ msgid "Stream %1 direction changed to: %2." | |
509 | #~ msgstr "Retning på stream %1 ændret til: %2." | |
510 | ||
511 | #~ msgctxt "1 is the stream's id" | |
512 | #~ msgid "Stream %1 state changed to: %2." | |
513 | #~ msgstr "Tilstand af stream %1 ændret til: %2." | |
514 | ||
515 | #~ msgid "User %1 joined the conference." | |
516 | #~ msgstr "Brugeren %1 gik med i konferencen." | |
517 | ||
518 | #~ msgid "Awaiting answer from user %1." | |
519 | #~ msgstr "Afventer svar fra brugeren %1." | |
520 | ||
521 | #~ msgid "User %1 left the conference." | |
522 | #~ msgstr "Brugeren %1 forlod konferencen." | |
523 | ||
524 | #~ msgid "Audio input device" | |
525 | #~ msgstr "Enhed til lyd-input" | |
526 | ||
527 | #~ msgid "Audio output device" | |
528 | #~ msgstr "Enhed til lyd-output" | |
529 | ||
530 | #~ msgid "Video input device" | |
531 | #~ msgstr "Enhed til video-input" | |
532 | ||
533 | #~ msgid "Video output driver" | |
534 | #~ msgstr "Driver til video-output" | |
535 | ||
536 | #~ msgid "Xv video renderer" | |
537 | #~ msgstr "Xv videorendering" | |
538 | ||
539 | #~ msgid "X11 video renderer" | |
540 | #~ msgstr "X11 videorendering" | |
541 | ||
542 | #~ msgid "Autodetect" | |
543 | #~ msgstr "Autodetektér" | |
544 | ||
545 | #~ msgid "Test input device" | |
546 | #~ msgstr "Test input-enhed" | |
547 | ||
548 | #~ msgctxt "autodetected audio or video system" | |
549 | #~ msgid "Autodetected" | |
550 | #~ msgstr "Autodetekteret" | |
551 | ||
552 | #~ msgid "ALSA" | |
553 | #~ msgstr "ALSA" | |
554 | ||
555 | #~ msgid "OSS" | |
556 | #~ msgstr "OSS" | |
557 | ||
558 | #~ msgid "JACK" | |
559 | #~ msgstr "JACK" | |
560 | ||
561 | #~ msgid "PULSE" | |
562 | #~ msgstr "PULSE" | |
563 | ||
564 | #~ msgid "Video4Linux" | |
565 | #~ msgstr "Video4Linux" | |
566 | ||
567 | #~ msgid "Device name" | |
568 | #~ msgstr "Enhedsnavn" | |
569 | ||
570 | #~ msgid "Sound system" | |
571 | #~ msgstr "Lydsystem" | |
572 | ||
573 | #~ msgid "Video system" | |
574 | #~ msgstr "Videosystem" | |
575 | ||
576 | #~ msgid "Gstreamer element" | |
577 | #~ msgstr "GStreamer-element" | |
578 | ||
579 | #~ msgid "Driver-specific handle" | |
580 | #~ msgstr "Driver-specifikt navn" | |
581 | ||
582 | #~ msgctxt "test the device" | |
583 | #~ msgid "Test" | |
584 | #~ msgstr "Test" | |
585 | ||
586 | #~ msgid "Add custom device..." | |
587 | #~ msgstr "Tilføj brugervalgt enhed..." | |
588 | ||
589 | #~ msgid "" | |
590 | #~ "The gstreamer element for the selected device could not be created. " | |
591 | #~ "Please check your gstreamer installation." | |
592 | #~ msgstr "" | |
593 | #~ "GStreamer-elementet til den valgte enhed kunne ikke oprettes. Kontrollér " | |
594 | #~ "din GStreamer-installation." | |
595 | ||
596 | #~ msgid "" | |
597 | #~ "The selected device could not be initialized. Please select another " | |
598 | #~ "device." | |
599 | #~ msgstr "Den valgte enhed kunne ikke initialiseres. Vælg en anden enhed." | |
600 | ||
601 | #~ msgid "" | |
602 | #~ "The gstreamer element for the audio output device could not be created. " | |
603 | #~ "Please check your gstreamer installation" | |
604 | #~ msgstr "" | |
605 | #~ "GStreamer-elementet til den valgte enhed til lyd-output kunne ikke " | |
606 | #~ "oprettes. Kontrollér din GStreamer-installation." | |
607 | ||
608 | #~ msgid "The audio output device could not be initialized." | |
609 | #~ msgstr "Enheden til lyd-output kunne ikke initialiseres." | |
610 | ||
611 | #~ msgid "The video output driver could not be initialized." | |
612 | #~ msgstr "Driveren til video-output kunne ikke initialiseres." | |
613 | ||
614 | #~ msgid "" | |
615 | #~ "The selected video output driver could not be initialized. Please select " | |
616 | #~ "another driver." | |
617 | #~ msgstr "" | |
618 | #~ "Den valgte driver til video-output kunne ikke initialiseres. Vælg en " | |
619 | #~ "anden driver." | |
620 | ||
621 | #~ msgctxt "stop audio/video test" | |
622 | #~ msgid "Stop test" | |
623 | #~ msgstr "Stop test" | |
624 | ||
625 | #~ msgid "Hide details" | |
626 | #~ msgstr "Skjul detaljer" | |
627 | ||
628 | #~ msgid "Automatically close the call window after a timeout" | |
629 | #~ msgstr "Luk automatisk opkaldsvinduet efter et tidsudløb" | |
630 | ||
631 | #~ msgid "Timeout in seconds:" | |
632 | #~ msgstr "Tidsudløb i sekunder:" | |
633 | ||
634 | #~ msgid "" | |
635 | #~ "The gstreamer element for the audio input device could not be created. " | |
636 | #~ "Please check your gstreamer installation" | |
637 | #~ msgstr "" | |
638 | #~ "GStreamer-elementet til enheden til lyd-input kunne ikke oprettes. " | |
639 | #~ "Kontrollér din GStreamer-installation" | |
640 | ||
641 | #~ msgid "" | |
642 | #~ "The gstreamer element for the video input device could not be created. " | |
643 | #~ "Please check your gstreamer installation." | |
644 | #~ msgstr "" | |
645 | #~ "GStreamer-elementet til enheden til video-input kunne ikke oprettes. " | |
646 | #~ "Kontrollér din GStreamer-installation." | |
647 | ||
648 | #~ msgid "Could not initialize the channel" | |
649 | #~ msgstr "Kunne ikke initialisere kanalen" | |
650 | ||
651 | #~ msgid "Ignore" | |
652 | #~ msgstr "Ignorér" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( de ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # pano, 2010. | |
1 | # Frederik Schwarzer <schwarzer@kde.org>, 2010, 2011, 2012. | |
2 | # Burkhard Lück <lueck@hube-lueck.de>, 2011, 2012. | |
3 | # Panagiotis Papadopoulos <pano_90@gmx.net>, 2011. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: ktp-call-ui\n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2012-05-29 00:08+0200\n" | |
10 | "Last-Translator: Frederik Schwarzer <schwarzer@kde.org>\n" | |
11 | "Language-Team: German <kde-i18n-de@kde.org>\n" | |
12 | "Language: de\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.2\n" | |
17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "Eingehender Video-Anruf" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | msgid "Incoming call" | |
30 | msgstr "Eingehender Anruf" | |
31 | ||
32 | #: src/approver.cpp:42 | |
33 | #, kde-format | |
34 | msgid "<p>%1 is calling you</p>" | |
35 | msgstr "<p>%1 ruft Sie an</p>" | |
36 | ||
37 | #: src/approver.cpp:58 src/approver.cpp:80 | |
38 | msgctxt "action, answers the incoming call" | |
39 | msgid "Answer" | |
40 | msgstr "Annehmen" | |
41 | ||
42 | #: src/approver.cpp:59 src/approver.cpp:82 | |
43 | msgctxt "action, rejects the incoming call" | |
44 | msgid "Reject" | |
45 | msgstr "Ablehnen" | |
46 | ||
47 | #: src/call-window.cpp:95 | |
48 | #, kde-format | |
49 | msgid "Call with %1" | |
50 | msgstr "Mit %1 anrufen" | |
51 | ||
52 | #: src/call-window.cpp:109 | |
53 | msgctxt "@info:status" | |
54 | msgid "Connecting..." | |
55 | msgstr "Verbindungsaufbau ..." | |
56 | ||
57 | #: src/call-window.cpp:113 | |
58 | msgctxt "@info:status the remote user's phone is ringing" | |
59 | msgid "Ringing..." | |
60 | msgstr "Es klingelt ..." | |
61 | ||
62 | #: src/call-window.cpp:117 | |
63 | msgctxt "@info:status" | |
64 | msgid "Remote user accepted the call, waiting for connection..." | |
65 | msgstr "" | |
66 | "Die Gegenstelle hat den Anruf angenommen. Die Verbindung wird aufgebaut ..." | |
67 | ||
68 | #: src/call-window.cpp:120 | |
69 | msgctxt "@info:status" | |
70 | msgid "Talking..." | |
71 | msgstr "Es wird gesprochen ..." | |
72 | ||
73 | #: src/call-window.cpp:136 | |
74 | msgctxt "@info:status" | |
75 | msgid "Remote contact ended the call." | |
76 | msgstr "Die Gegenstelle hat den Anruf beendet." | |
77 | ||
78 | #: src/call-window.cpp:143 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact rejected the call." | |
81 | msgstr "Die Gegenstelle hat den Anruf angelehnt." | |
82 | ||
83 | #: src/call-window.cpp:148 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact didn't answer." | |
86 | msgstr "Die Gegenstelle hat nicht geantwortet." | |
87 | ||
88 | #: src/call-window.cpp:152 | |
89 | msgctxt "@info:status" | |
90 | msgid "Invalid number or contact." | |
91 | msgstr "Ungültige Nummer oder Kontakt." | |
92 | ||
93 | #: src/call-window.cpp:156 | |
94 | msgctxt "@info:status" | |
95 | msgid "You don't have enough balance to make this call." | |
96 | msgstr "" | |
97 | ||
98 | #: src/call-window.cpp:158 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have permission to make this call." | |
101 | msgstr "" | |
102 | ||
103 | #: src/call-window.cpp:163 | |
104 | msgctxt "@info:status" | |
105 | msgid "Remote contact is currently busy." | |
106 | msgstr "Die Gegenstelle ist zurzeit beschäftigt." | |
107 | ||
108 | #: src/call-window.cpp:167 | |
109 | msgctxt "@info:status" | |
110 | msgid "Internal component error." | |
111 | msgstr "Fehler in interner Komponente." | |
112 | ||
113 | #: src/call-window.cpp:170 | |
114 | msgctxt "@info:status" | |
115 | msgid "Remote service error." | |
116 | msgstr "" | |
117 | ||
118 | #: src/call-window.cpp:173 | |
119 | msgctxt "@info:status" | |
120 | msgid "Network error." | |
121 | msgstr "Netzwerkfehler." | |
122 | ||
123 | #: src/call-window.cpp:177 | |
124 | msgctxt "@info:status" | |
125 | msgid "Failed to negotiate codecs." | |
126 | msgstr "Das Aushandeln eines Codecs ist fehlgeschlagen." | |
127 | ||
128 | #: src/call-window.cpp:179 | |
129 | msgctxt "@info:status" | |
130 | msgid "Unsupported media type." | |
131 | msgstr "Nicht unterstützter Medien-Typ." | |
132 | ||
133 | #: src/call-window.cpp:183 | |
134 | msgctxt "@info:status" | |
135 | msgid "Connectivity error." | |
136 | msgstr "Verbindungsfehler." | |
137 | ||
138 | #: src/call-window.cpp:187 | |
139 | msgctxt "@info:status" | |
140 | msgid "Unknown error." | |
141 | msgstr "Unbekannter Fehler." | |
142 | ||
143 | #: src/call-window.cpp:192 | |
144 | msgctxt "@info:status" | |
145 | msgid "Disconnected." | |
146 | msgstr "Verbindung getrennt" | |
147 | ||
148 | #: src/call-window.cpp:196 | |
149 | #, kde-format | |
150 | msgctxt "@info:status the call was disconnected because..." | |
151 | msgid "Disconnected: %1" | |
152 | msgstr "Verbindung getrennt: %1" | |
153 | ||
154 | #: src/call-window.cpp:339 | |
155 | msgctxt "@action" | |
156 | msgid "Show my video" | |
157 | msgstr "Mein Video anzeigen" | |
158 | ||
159 | #: src/call-window.cpp:344 | |
160 | msgctxt "@action" | |
161 | msgid "Show dialpad" | |
162 | msgstr "Tastenblock anzeigen" | |
163 | ||
164 | #: src/call-window.cpp:351 | |
165 | msgctxt "@action" | |
166 | msgid "Send video" | |
167 | msgstr "Video senden" | |
168 | ||
169 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
170 | msgctxt "@action" | |
171 | msgid "Mute" | |
172 | msgstr "Stummschalten" | |
173 | ||
174 | #: src/call-window.cpp:363 | |
175 | msgctxt "@action" | |
176 | msgid "Hold" | |
177 | msgstr "Halten" | |
178 | ||
179 | #: src/call-window.cpp:368 | |
180 | msgctxt "@action" | |
181 | msgid "Hangup" | |
182 | msgstr "Auflegen" | |
183 | ||
184 | #: src/main.cpp:36 | |
185 | msgid "KDE Telepathy Call Ui" | |
186 | msgstr "Anrufoberfläche von KDE Telepathy" | |
187 | ||
188 | #: src/main.cpp:37 | |
189 | msgid "VoIP client for KDE" | |
190 | msgstr "VoIP-Programm für KDE" | |
191 | ||
192 | #: src/main.cpp:38 | |
193 | msgid "(C) 2009, George Kiagiadakis" | |
194 | msgstr "© 2009, George Kiagiadakis" | |
195 | ||
196 | #: src/main.cpp:40 | |
197 | msgctxt "@info:credit" | |
198 | msgid "George Kiagiadakis" | |
199 | msgstr "George Kiagiadakis" | |
200 | ||
201 | #: rc.cpp:1 | |
202 | msgctxt "NAME OF TRANSLATORS" | |
203 | msgid "Your names" | |
204 | msgstr "Panagiotis Papadopoulos" | |
205 | ||
206 | #: rc.cpp:2 | |
207 | msgctxt "EMAIL OF TRANSLATORS" | |
208 | msgid "Your emails" | |
209 | msgstr "pano_90@gmx.net" | |
210 | ||
211 | #. i18n: file: src/callwindowui.rc:11 | |
212 | #. i18n: ectx: Menu (call) | |
213 | #: rc.cpp:5 | |
214 | msgid "Call" | |
215 | msgstr "Anruf" | |
216 | ||
217 | #. i18n: file: src/callwindowui.rc:20 | |
218 | #. i18n: ectx: Menu (media) | |
219 | #: rc.cpp:8 | |
220 | msgid "Media" | |
221 | msgstr "Medien" | |
222 | ||
223 | #. i18n: file: src/callwindowui.rc:27 | |
224 | #. i18n: ectx: ToolBar (mainToolBar) | |
225 | #: rc.cpp:11 | |
226 | msgid "Main Toolbar" | |
227 | msgstr "Haupt-Werkzeugleiste" | |
228 | ||
229 | #. i18n: file: src/dtmf-widget.ui:17 | |
230 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
231 | #: rc.cpp:14 | |
232 | msgid "1" | |
233 | msgstr "1" | |
234 | ||
235 | #. i18n: file: src/dtmf-widget.ui:24 | |
236 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
237 | #: rc.cpp:17 | |
238 | msgid "2" | |
239 | msgstr "2" | |
240 | ||
241 | #. i18n: file: src/dtmf-widget.ui:31 | |
242 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
243 | #: rc.cpp:20 | |
244 | msgid "3" | |
245 | msgstr "3" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:38 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
249 | #: rc.cpp:23 | |
250 | msgid "4" | |
251 | msgstr "4" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:45 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
255 | #: rc.cpp:26 | |
256 | msgid "5" | |
257 | msgstr "5" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:52 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
261 | #: rc.cpp:29 | |
262 | msgid "6" | |
263 | msgstr "6" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:59 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
267 | #: rc.cpp:32 | |
268 | msgid "7" | |
269 | msgstr "7" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:66 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
273 | #: rc.cpp:35 | |
274 | msgid "8" | |
275 | msgstr "8" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:73 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
279 | #: rc.cpp:38 | |
280 | msgid "9" | |
281 | msgstr "9" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:80 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
285 | #: rc.cpp:41 | |
286 | msgid "*" | |
287 | msgstr "*" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:87 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
291 | #: rc.cpp:44 | |
292 | msgid "0" | |
293 | msgstr "0" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:94 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
297 | #: rc.cpp:47 | |
298 | msgid "#" | |
299 | msgstr "#" | |
300 | ||
301 | #~ msgid "Warning: %1" | |
302 | #~ msgstr "Achtung: %1" | |
303 | ||
304 | #~ msgid "Error: %1" | |
305 | #~ msgstr "Fehler: %1" | |
306 | ||
307 | #~ msgid "KCall" | |
308 | #~ msgstr "KCall" | |
309 | ||
310 | #~ msgid "Brightness" | |
311 | #~ msgstr "Helligkeit" | |
312 | ||
313 | #~ msgid "Contrast" | |
314 | #~ msgstr "Kontrast" | |
315 | ||
316 | #~ msgid "Hue" | |
317 | #~ msgstr "Farbton" | |
318 | ||
319 | #~ msgid "Saturation" | |
320 | #~ msgstr "Sättigung" | |
321 | ||
322 | #~ msgid "Dialpad" | |
323 | #~ msgstr "Wähltasten" | |
324 | ||
325 | #~ msgid "" | |
326 | #~ "Defines whether the window should close automatically after a timeout " | |
327 | #~ "when the call is over." | |
328 | #~ msgstr "" | |
329 | #~ "Bestimmt, ob das Fenster nach einer Zeitüberschreitung automatisch " | |
330 | #~ "geschlossen wird, wenn der Anruf beendet ist." | |
331 | ||
332 | #~ msgid "" | |
333 | #~ "Defines how many seconds the call window should remain visible after the " | |
334 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
335 | #~ msgstr "" | |
336 | #~ "Bestimmt, wie viele Sekunden das Anruf-Fenster sichtbar bleiben soll, " | |
337 | #~ "nachdem der Anruf beendet ist. Diese Option hängt ab von " | |
338 | #~ "„CloseOnDisconnect“." | |
339 | ||
340 | #~ msgid "The audio input device could not be initialized" | |
341 | #~ msgstr "Das Audio-Eingabegerät kann nicht initialisiert werden." | |
342 | ||
343 | #~ msgid "The video input device could not be initialized" | |
344 | #~ msgstr "Das Video-Eingabegerät kann nicht initialisiert werden." | |
345 | ||
346 | #~ msgid "" | |
347 | #~ "Could not create some of the required elements. Please check your " | |
348 | #~ "GStreamer installation." | |
349 | #~ msgstr "" | |
350 | #~ "Einige der benötigten Elemente können nicht erstellt werden. Bitte " | |
351 | #~ "überprüfen Sie Ihre GStreamer-Installation." | |
352 | ||
353 | #~ msgid "The audio output device could not be initialized" | |
354 | #~ msgstr "Das Audio-Ausgabegerät kann nicht initialisiert werden." | |
355 | ||
356 | #~ msgctxt "@action:inmenu" | |
357 | #~ msgid "Show participants" | |
358 | #~ msgstr "Teilnehmer anzeigen" | |
359 | ||
360 | #~ msgctxt "@action:inmenu" | |
361 | #~ msgid "Show log" | |
362 | #~ msgstr "Protokoll anzeigen" | |
363 | ||
364 | #~ msgctxt "@action" | |
365 | #~ msgid "Stop sending video" | |
366 | #~ msgstr "Senden von Video anhalten" | |
367 | ||
368 | #~ msgctxt "@action:inmenu" | |
369 | #~ msgid "Status" | |
370 | #~ msgstr "Status" | |
371 | ||
372 | #~ msgctxt "@action:inmenu" | |
373 | #~ msgid "Available" | |
374 | #~ msgstr "Verfügbar" | |
375 | ||
376 | #~ msgctxt "@action:inmenu" | |
377 | #~ msgid "Away" | |
378 | #~ msgstr "Abwesend" | |
379 | ||
380 | #~ msgctxt "@action:inmenu" | |
381 | #~ msgid "Be right back" | |
382 | #~ msgstr "Bin gleich zurück" | |
383 | ||
384 | #~ msgctxt "@action:inmenu" | |
385 | #~ msgid "Busy" | |
386 | #~ msgstr "Beschäftigt" | |
387 | ||
388 | #~ msgctxt "@action:inmenu" | |
389 | #~ msgid "Do not disturb" | |
390 | #~ msgstr "Bitte nicht stören" | |
391 | ||
392 | #~ msgctxt "@action:inmenu" | |
393 | #~ msgid "Extended Away" | |
394 | #~ msgstr "Länger abwesend" | |
395 | ||
396 | #~ msgctxt "@action:inmenu" | |
397 | #~ msgid "Invisible" | |
398 | #~ msgstr "Unsichtbar" | |
399 | ||
400 | #~ msgctxt "@action:inmenu" | |
401 | #~ msgid "Offline" | |
402 | #~ msgstr "Offline" | |
403 | ||
404 | #~ msgctxt "@info:status" | |
405 | #~ msgid "Waiting for account information..." | |
406 | #~ msgstr "Auf Zugangsinformationen warten ..." | |
407 | ||
408 | #~ msgctxt "protocol - display name (Connecting)" | |
409 | #~ msgid "%1 - %2 (Connecting)" | |
410 | #~ msgstr "%1 – %2 (Verbindungsaufbau)" | |
411 | ||
412 | #~ msgctxt "protocol - display name" | |
413 | #~ msgid "%1 - %2" | |
414 | #~ msgstr "%1 – %2" | |
415 | ||
416 | #~ msgctxt "@title:window" | |
417 | #~ msgid "KCall" | |
418 | #~ msgstr "KCall" | |
419 | ||
420 | #~ msgctxt "@info:status" | |
421 | #~ msgid "Connected" | |
422 | #~ msgstr "Verbunden" | |
423 | ||
424 | #~ msgctxt "@action" | |
425 | #~ msgid "Disconnect" | |
426 | #~ msgstr "Verbindung trennen" | |
427 | ||
428 | #~ msgctxt "@action" | |
429 | #~ msgid "Cancel connection attempt" | |
430 | #~ msgstr "Verbindungsversuch abbrechen" | |
431 | ||
432 | #~ msgctxt "@action" | |
433 | #~ msgid "Connect" | |
434 | #~ msgstr "Verbinden" | |
435 | ||
436 | #~ msgid "" | |
437 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
438 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
439 | #~ "calls." | |
440 | #~ msgstr "" | |
441 | #~ "Sie haben angefordert KCall zu schließen. Beachten Sie, dass KCall nicht " | |
442 | #~ "beendet wird, sondern aktiv im Systemabschnitt der Kontrollleiste " | |
443 | #~ "verweilt, um auf eingehende Anrufe zu warten." | |
444 | ||
445 | #~ msgid "Volume" | |
446 | #~ msgstr "Lautstärke" | |
447 | ||
448 | #~ msgid "Speakers" | |
449 | #~ msgstr "Lautsprecher" | |
450 | ||
451 | #~ msgid "Microphone" | |
452 | #~ msgstr "Mikrofon" | |
453 | ||
454 | #~ msgid "Video controls" | |
455 | #~ msgstr "Video-Einstellungen" | |
456 | ||
457 | #~ msgid "Video input" | |
458 | #~ msgstr "Videoeingabe" | |
459 | ||
460 | #~ msgid "Call log" | |
461 | #~ msgstr "Anruf-Protokoll" | |
462 | ||
463 | #~ msgid "Participants" | |
464 | #~ msgstr "Teilnehmer" | |
465 | ||
466 | #~ msgctxt "@title:tab" | |
467 | #~ msgid "&Contact list" | |
468 | #~ msgstr "&Kontaktliste" | |
469 | ||
470 | #~ msgid "Dial directly" | |
471 | #~ msgstr "Direkt wählen" | |
472 | ||
473 | #~ msgid "Account" | |
474 | #~ msgstr "Zugang" | |
475 | ||
476 | #~ msgid "Dial (Audio only)" | |
477 | #~ msgstr "Wählen (Nur Audio)" | |
478 | ||
479 | #~ msgid "Dial (Audio/Video)" | |
480 | #~ msgstr "Wählen (Audio/Video)" | |
481 | ||
482 | #~ msgid "User %1 joined the conference." | |
483 | #~ msgstr "Der Benutzer %1 ist der Konferenz beigetreten." | |
484 | ||
485 | #~ msgid "User %1 left the conference." | |
486 | #~ msgstr "Der Benutzer %1 hat die Konferenz verlassen." | |
487 | ||
488 | #~ msgid "Audio input device" | |
489 | #~ msgstr "Audioeingabe-Gerät" | |
490 | ||
491 | #~ msgid "Audio output device" | |
492 | #~ msgstr "Audioausgabe-Gerät" | |
493 | ||
494 | #~ msgid "Video input device" | |
495 | #~ msgstr "Videoeingabe-Gerät" | |
496 | ||
497 | #~ msgid "Video output driver" | |
498 | #~ msgstr "Videoausgabe-Gerät" | |
499 | ||
500 | #~ msgid "Xv video renderer" | |
501 | #~ msgstr "Xv-Video-Renderer" | |
502 | ||
503 | #~ msgid "X11 video renderer" | |
504 | #~ msgstr "X11-Video-Renderer" | |
505 | ||
506 | #~ msgid "Autodetect" | |
507 | #~ msgstr "Automatisch erkennen" | |
508 | ||
509 | #~ msgctxt "autodetected audio or video system" | |
510 | #~ msgid "Autodetected" | |
511 | #~ msgstr "Automatisch erkannt" | |
512 | ||
513 | #~ msgid "ALSA" | |
514 | #~ msgstr "ALSA" | |
515 | ||
516 | #~ msgid "OSS" | |
517 | #~ msgstr "OSS" | |
518 | ||
519 | #~ msgid "JACK" | |
520 | #~ msgstr "JACK" | |
521 | ||
522 | #~ msgid "PULSE" | |
523 | #~ msgstr "PULSE" | |
524 | ||
525 | #~ msgid "Video4Linux" | |
526 | #~ msgstr "Video4Linux" | |
527 | ||
528 | #~ msgid "Device name" | |
529 | #~ msgstr "Gerätename" | |
530 | ||
531 | #~ msgid "Gstreamer element" | |
532 | #~ msgstr "GStreamer-Element" | |
533 | ||
534 | #~ msgctxt "test the device" | |
535 | #~ msgid "Test" | |
536 | #~ msgstr "Test" | |
537 | ||
538 | #~ msgctxt "stop audio/video test" | |
539 | #~ msgid "Stop test" | |
540 | #~ msgstr "Test beenden" | |
541 | ||
542 | #~ msgid "Hide details" | |
543 | #~ msgstr "Details ausblenden" | |
544 | ||
545 | #~ msgid "Ignore" | |
546 | #~ msgstr "Ignorieren" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( en_GB ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Andrew Coles <andrew_coles@yahoo.co.uk>, 2009. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2009-11-14 12:16+0000\n" | |
10 | "Last-Translator: Andrew Coles <andrew_coles@yahoo.co.uk>\n" | |
11 | "Language-Team: British English <kde-i18n-doc@kde.org>\n" | |
12 | "Language: \n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.0\n" | |
17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | #, fuzzy | |
21 | #| msgctxt "@action:inmenu" | |
22 | #| msgid "Video call" | |
23 | msgid "Incoming video call" | |
24 | msgstr "Video call" | |
25 | ||
26 | #: src/approver.cpp:39 | |
27 | #, kde-format | |
28 | msgid "<p>%1 is asking you for a video call</p>" | |
29 | msgstr "" | |
30 | ||
31 | #: src/approver.cpp:41 | |
32 | #, fuzzy | |
33 | #| msgctxt "@action:inmenu" | |
34 | #| msgid "Voice call" | |
35 | msgid "Incoming call" | |
36 | msgstr "Voice call" | |
37 | ||
38 | #: src/approver.cpp:42 | |
39 | #, fuzzy, kde-format | |
40 | #| msgid "%1 is calling you" | |
41 | msgid "<p>%1 is calling you</p>" | |
42 | msgstr "%1 is calling you" | |
43 | ||
44 | #: src/approver.cpp:58 src/approver.cpp:80 | |
45 | #, fuzzy | |
46 | #| msgid "Answer" | |
47 | msgctxt "action, answers the incoming call" | |
48 | msgid "Answer" | |
49 | msgstr "Answer" | |
50 | ||
51 | #: src/approver.cpp:59 src/approver.cpp:82 | |
52 | msgctxt "action, rejects the incoming call" | |
53 | msgid "Reject" | |
54 | msgstr "" | |
55 | ||
56 | #: src/call-window.cpp:95 | |
57 | #, kde-format | |
58 | msgid "Call with %1" | |
59 | msgstr "" | |
60 | ||
61 | #: src/call-window.cpp:109 | |
62 | msgctxt "@info:status" | |
63 | msgid "Connecting..." | |
64 | msgstr "Connecting..." | |
65 | ||
66 | #: src/call-window.cpp:113 | |
67 | #, fuzzy | |
68 | #| msgctxt "@info:status" | |
69 | #| msgid "Ringing..." | |
70 | msgctxt "@info:status the remote user's phone is ringing" | |
71 | msgid "Ringing..." | |
72 | msgstr "Ringing..." | |
73 | ||
74 | #: src/call-window.cpp:117 | |
75 | msgctxt "@info:status" | |
76 | msgid "Remote user accepted the call, waiting for connection..." | |
77 | msgstr "" | |
78 | ||
79 | #: src/call-window.cpp:120 | |
80 | msgctxt "@info:status" | |
81 | msgid "Talking..." | |
82 | msgstr "Talking..." | |
83 | ||
84 | #: src/call-window.cpp:136 | |
85 | msgctxt "@info:status" | |
86 | msgid "Remote contact ended the call." | |
87 | msgstr "" | |
88 | ||
89 | #: src/call-window.cpp:143 | |
90 | msgctxt "@info:status" | |
91 | msgid "Remote contact rejected the call." | |
92 | msgstr "" | |
93 | ||
94 | #: src/call-window.cpp:148 | |
95 | msgctxt "@info:status" | |
96 | msgid "Remote contact didn't answer." | |
97 | msgstr "" | |
98 | ||
99 | #: src/call-window.cpp:152 | |
100 | msgctxt "@info:status" | |
101 | msgid "Invalid number or contact." | |
102 | msgstr "" | |
103 | ||
104 | #: src/call-window.cpp:156 | |
105 | msgctxt "@info:status" | |
106 | msgid "You don't have enough balance to make this call." | |
107 | msgstr "" | |
108 | ||
109 | #: src/call-window.cpp:158 | |
110 | msgctxt "@info:status" | |
111 | msgid "You don't have permission to make this call." | |
112 | msgstr "" | |
113 | ||
114 | #: src/call-window.cpp:163 | |
115 | msgctxt "@info:status" | |
116 | msgid "Remote contact is currently busy." | |
117 | msgstr "" | |
118 | ||
119 | #: src/call-window.cpp:167 | |
120 | msgctxt "@info:status" | |
121 | msgid "Internal component error." | |
122 | msgstr "" | |
123 | ||
124 | #: src/call-window.cpp:170 | |
125 | msgctxt "@info:status" | |
126 | msgid "Remote service error." | |
127 | msgstr "" | |
128 | ||
129 | #: src/call-window.cpp:173 | |
130 | msgctxt "@info:status" | |
131 | msgid "Network error." | |
132 | msgstr "" | |
133 | ||
134 | #: src/call-window.cpp:177 | |
135 | msgctxt "@info:status" | |
136 | msgid "Failed to negotiate codecs." | |
137 | msgstr "" | |
138 | ||
139 | #: src/call-window.cpp:179 | |
140 | msgctxt "@info:status" | |
141 | msgid "Unsupported media type." | |
142 | msgstr "" | |
143 | ||
144 | #: src/call-window.cpp:183 | |
145 | #, fuzzy | |
146 | #| msgctxt "@info:status" | |
147 | #| msgid "Disconnected with error." | |
148 | msgctxt "@info:status" | |
149 | msgid "Connectivity error." | |
150 | msgstr "Disconnected with error." | |
151 | ||
152 | #: src/call-window.cpp:187 | |
153 | #, fuzzy | |
154 | #| msgctxt "Unknown audio or video system" | |
155 | #| msgid "Unknown" | |
156 | msgctxt "@info:status" | |
157 | msgid "Unknown error." | |
158 | msgstr "Unknown" | |
159 | ||
160 | #: src/call-window.cpp:192 | |
161 | msgctxt "@info:status" | |
162 | msgid "Disconnected." | |
163 | msgstr "Disconnected." | |
164 | ||
165 | #: src/call-window.cpp:196 | |
166 | #, fuzzy, kde-format | |
167 | #| msgctxt "@info:status" | |
168 | #| msgid "Disconnected" | |
169 | msgctxt "@info:status the call was disconnected because..." | |
170 | msgid "Disconnected: %1" | |
171 | msgstr "Disconnected" | |
172 | ||
173 | #: src/call-window.cpp:339 | |
174 | #, fuzzy | |
175 | #| msgctxt "@action" | |
176 | #| msgid "Send video" | |
177 | msgctxt "@action" | |
178 | msgid "Show my video" | |
179 | msgstr "Send video" | |
180 | ||
181 | #: src/call-window.cpp:344 | |
182 | #, fuzzy | |
183 | #| msgid "Show details" | |
184 | msgctxt "@action" | |
185 | msgid "Show dialpad" | |
186 | msgstr "Show details" | |
187 | ||
188 | #: src/call-window.cpp:351 | |
189 | msgctxt "@action" | |
190 | msgid "Send video" | |
191 | msgstr "Send video" | |
192 | ||
193 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
194 | msgctxt "@action" | |
195 | msgid "Mute" | |
196 | msgstr "" | |
197 | ||
198 | #: src/call-window.cpp:363 | |
199 | msgctxt "@action" | |
200 | msgid "Hold" | |
201 | msgstr "" | |
202 | ||
203 | #: src/call-window.cpp:368 | |
204 | msgctxt "@action" | |
205 | msgid "Hangup" | |
206 | msgstr "Hangup" | |
207 | ||
208 | #: src/main.cpp:36 | |
209 | msgid "KDE Telepathy Call Ui" | |
210 | msgstr "" | |
211 | ||
212 | #: src/main.cpp:37 | |
213 | msgid "VoIP client for KDE" | |
214 | msgstr "VoIP client for KDE" | |
215 | ||
216 | #: src/main.cpp:38 | |
217 | msgid "(C) 2009, George Kiagiadakis" | |
218 | msgstr "(C) 2009, George Kiagiadakis" | |
219 | ||
220 | #: src/main.cpp:40 | |
221 | msgctxt "@info:credit" | |
222 | msgid "George Kiagiadakis" | |
223 | msgstr "George Kiagiadakis" | |
224 | ||
225 | #: rc.cpp:1 | |
226 | msgctxt "NAME OF TRANSLATORS" | |
227 | msgid "Your names" | |
228 | msgstr "Andrew Coles" | |
229 | ||
230 | #: rc.cpp:2 | |
231 | msgctxt "EMAIL OF TRANSLATORS" | |
232 | msgid "Your emails" | |
233 | msgstr "andrew_coles@yahoo.co.uk" | |
234 | ||
235 | #. i18n: file: src/callwindowui.rc:11 | |
236 | #. i18n: ectx: Menu (call) | |
237 | #: rc.cpp:5 | |
238 | msgid "Call" | |
239 | msgstr "Call" | |
240 | ||
241 | #. i18n: file: src/callwindowui.rc:20 | |
242 | #. i18n: ectx: Menu (media) | |
243 | #: rc.cpp:8 | |
244 | msgid "Media" | |
245 | msgstr "" | |
246 | ||
247 | #. i18n: file: src/callwindowui.rc:27 | |
248 | #. i18n: ectx: ToolBar (mainToolBar) | |
249 | #: rc.cpp:11 | |
250 | msgid "Main Toolbar" | |
251 | msgstr "Main Toolbar" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:17 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
255 | #: rc.cpp:14 | |
256 | msgid "1" | |
257 | msgstr "1" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:24 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
261 | #: rc.cpp:17 | |
262 | msgid "2" | |
263 | msgstr "2" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:31 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
267 | #: rc.cpp:20 | |
268 | msgid "3" | |
269 | msgstr "3" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:38 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
273 | #: rc.cpp:23 | |
274 | msgid "4" | |
275 | msgstr "4" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:45 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
279 | #: rc.cpp:26 | |
280 | msgid "5" | |
281 | msgstr "5" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:52 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
285 | #: rc.cpp:29 | |
286 | msgid "6" | |
287 | msgstr "6" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:59 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
291 | #: rc.cpp:32 | |
292 | msgid "7" | |
293 | msgstr "7" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:66 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
297 | #: rc.cpp:35 | |
298 | msgid "8" | |
299 | msgstr "8" | |
300 | ||
301 | #. i18n: file: src/dtmf-widget.ui:73 | |
302 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
303 | #: rc.cpp:38 | |
304 | msgid "9" | |
305 | msgstr "9" | |
306 | ||
307 | #. i18n: file: src/dtmf-widget.ui:80 | |
308 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
309 | #: rc.cpp:41 | |
310 | msgid "*" | |
311 | msgstr "*" | |
312 | ||
313 | #. i18n: file: src/dtmf-widget.ui:87 | |
314 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
315 | #: rc.cpp:44 | |
316 | msgid "0" | |
317 | msgstr "0" | |
318 | ||
319 | #. i18n: file: src/dtmf-widget.ui:94 | |
320 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
321 | #: rc.cpp:47 | |
322 | msgid "#" | |
323 | msgstr "#" | |
324 | ||
325 | #~ msgid "Warning: %1" | |
326 | #~ msgstr "Warning: %1" | |
327 | ||
328 | #~ msgid "Error: %1" | |
329 | #~ msgstr "Error: %1" | |
330 | ||
331 | #~ msgid "KCall" | |
332 | #~ msgstr "KCall" | |
333 | ||
334 | #~ msgid "Brightness" | |
335 | #~ msgstr "Brightness" | |
336 | ||
337 | #~ msgid "Contrast" | |
338 | #~ msgstr "Contrast" | |
339 | ||
340 | #~ msgid "Hue" | |
341 | #~ msgstr "Hue" | |
342 | ||
343 | #~ msgid "Saturation" | |
344 | #~ msgstr "Saturation" | |
345 | ||
346 | #~ msgid "Dialpad" | |
347 | #~ msgstr "Dialpad" | |
348 | ||
349 | #~ msgid "" | |
350 | #~ "Defines whether the window should close automatically after a timeout " | |
351 | #~ "when the call is over." | |
352 | #~ msgstr "" | |
353 | #~ "Defines whether the window should close automatically after a timeout " | |
354 | #~ "when the call is over." | |
355 | ||
356 | #~ msgid "" | |
357 | #~ "Defines how many seconds the call window should remain visible after the " | |
358 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
359 | #~ msgstr "" | |
360 | #~ "Defines how many seconds the call window should remain visible after the " | |
361 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
362 | ||
363 | #~ msgid "The audio input device could not be initialized" | |
364 | #~ msgstr "The audio input device could not be initialised" | |
365 | ||
366 | #, fuzzy | |
367 | #~| msgid "The video input device could not be initialized." | |
368 | #~ msgid "The video input device could not be initialized" | |
369 | #~ msgstr "The video input device could not be initialised." | |
370 | ||
371 | #, fuzzy | |
372 | #~| msgid "" | |
373 | #~| "Some gstreamer elements could not be created. Please check your " | |
374 | #~| "gstreamer installation." | |
375 | #~ msgid "" | |
376 | #~ "Could not create some of the required elements. Please check your " | |
377 | #~ "GStreamer installation." | |
378 | #~ msgstr "" | |
379 | #~ "Some gstreamer elements could not be created. Please check your gstreamer " | |
380 | #~ "installation." | |
381 | ||
382 | #~ msgid "The audio output device could not be initialized" | |
383 | #~ msgstr "The audio output device could not be initialised" | |
384 | ||
385 | #~ msgctxt "@action:inmenu" | |
386 | #~ msgid "Show participants" | |
387 | #~ msgstr "Show participants" | |
388 | ||
389 | #~ msgctxt "@action:inmenu" | |
390 | #~ msgid "Show log" | |
391 | #~ msgstr "Show log" | |
392 | ||
393 | #~ msgctxt "@action" | |
394 | #~ msgid "Stop sending video" | |
395 | #~ msgstr "Stop sending video" | |
396 | ||
397 | #~ msgctxt "@action:inmenu" | |
398 | #~ msgid "Status" | |
399 | #~ msgstr "Status" | |
400 | ||
401 | #~ msgctxt "@action:inmenu" | |
402 | #~ msgid "Available" | |
403 | #~ msgstr "Available" | |
404 | ||
405 | #~ msgctxt "@action:inmenu" | |
406 | #~ msgid "Away" | |
407 | #~ msgstr "Away" | |
408 | ||
409 | #~ msgctxt "@action:inmenu" | |
410 | #~ msgid "Be right back" | |
411 | #~ msgstr "Be right back" | |
412 | ||
413 | #~ msgctxt "@action:inmenu" | |
414 | #~ msgid "Busy" | |
415 | #~ msgstr "Busy" | |
416 | ||
417 | #~ msgctxt "@action:inmenu" | |
418 | #~ msgid "Do not disturb" | |
419 | #~ msgstr "Do not disturb" | |
420 | ||
421 | #~ msgctxt "@action:inmenu" | |
422 | #~ msgid "Extended Away" | |
423 | #~ msgstr "Extended Away" | |
424 | ||
425 | #~ msgctxt "@action:inmenu" | |
426 | #~ msgid "Invisible" | |
427 | #~ msgstr "Invisible" | |
428 | ||
429 | #~ msgctxt "@action:inmenu" | |
430 | #~ msgid "Offline" | |
431 | #~ msgstr "Offline" | |
432 | ||
433 | #~ msgctxt "@info:status" | |
434 | #~ msgid "Waiting for account information..." | |
435 | #~ msgstr "Waiting for account information..." | |
436 | ||
437 | #~ msgctxt "protocol - display name (Connecting)" | |
438 | #~ msgid "%1 - %2 (Connecting)" | |
439 | #~ msgstr "%1 - %2 (Connecting)" | |
440 | ||
441 | #~ msgctxt "protocol - display name" | |
442 | #~ msgid "%1 - %2" | |
443 | #~ msgstr "%1 - %2" | |
444 | ||
445 | #~ msgctxt "@title:window" | |
446 | #~ msgid "KCall" | |
447 | #~ msgstr "KCall" | |
448 | ||
449 | #~ msgctxt "@info:status" | |
450 | #~ msgid "Connected" | |
451 | #~ msgstr "Connected" | |
452 | ||
453 | #~ msgctxt "@action" | |
454 | #~ msgid "Disconnect" | |
455 | #~ msgstr "Disconnect" | |
456 | ||
457 | #~ msgctxt "@action" | |
458 | #~ msgid "Cancel connection attempt" | |
459 | #~ msgstr "Cancel connection attempt" | |
460 | ||
461 | #~ msgctxt "@action" | |
462 | #~ msgid "Connect" | |
463 | #~ msgstr "Connect" | |
464 | ||
465 | #~ msgid "" | |
466 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
467 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
468 | #~ "calls." | |
469 | #~ msgstr "" | |
470 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
471 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
472 | #~ "calls." | |
473 | ||
474 | #~ msgid "Volume" | |
475 | #~ msgstr "Volume" | |
476 | ||
477 | #~ msgid "Speakers" | |
478 | #~ msgstr "Speakers" | |
479 | ||
480 | #~ msgid "Microphone" | |
481 | #~ msgstr "Microphone" | |
482 | ||
483 | #~ msgid "Video controls" | |
484 | #~ msgstr "Video controls" | |
485 | ||
486 | #~ msgid "Video input" | |
487 | #~ msgstr "Video input" | |
488 | ||
489 | #~ msgid "Call log" | |
490 | #~ msgstr "Call log" | |
491 | ||
492 | #~ msgid "Participants" | |
493 | #~ msgstr "Participants" | |
494 | ||
495 | #~ msgctxt "@title:tab" | |
496 | #~ msgid "&Contact list" | |
497 | #~ msgstr "&Contact list" | |
498 | ||
499 | #~ msgid "Dial directly" | |
500 | #~ msgstr "Dial directly" | |
501 | ||
502 | #~ msgid "Account" | |
503 | #~ msgstr "Account" | |
504 | ||
505 | #~ msgid "Contact handle" | |
506 | #~ msgstr "Contact handle" | |
507 | ||
508 | #~ msgid "Dial (Audio only)" | |
509 | #~ msgstr "Dial (Audio only)" | |
510 | ||
511 | #~ msgid "Dial (Audio/Video)" | |
512 | #~ msgstr "Dial (Audio/Video)" | |
513 | ||
514 | #~ msgctxt "@info:status" | |
515 | #~ msgid "Hanging up..." | |
516 | #~ msgstr "Hanging up..." | |
517 | ||
518 | #~ msgid "Channel closed" | |
519 | #~ msgstr "Channel closed" | |
520 | ||
521 | #~ msgid "Channel closed with error: %1" | |
522 | #~ msgstr "Channel closed with error: %1" | |
523 | ||
524 | #~ msgid "Audio stream created. Stream id: %1." | |
525 | #~ msgstr "Audio stream created. Stream id: %1." | |
526 | ||
527 | #~ msgid "Video stream created. Stream id: %1." | |
528 | #~ msgstr "Video stream created. Stream id: %1." | |
529 | ||
530 | #~ msgctxt "1 is the stream's id" | |
531 | #~ msgid "Stream %1 direction is: %2." | |
532 | #~ msgstr "Stream %1 direction is: %2." | |
533 | ||
534 | #~ msgctxt "1 is the stream's id" | |
535 | #~ msgid "Stream %1 removed." | |
536 | #~ msgstr "Stream %1 removed." | |
537 | ||
538 | #~ msgctxt "1 is the stream's id" | |
539 | #~ msgid "Stream %1 direction changed to: %2." | |
540 | #~ msgstr "Stream %1 direction changed to: %2." | |
541 | ||
542 | #~ msgctxt "1 is the stream's id" | |
543 | #~ msgid "Stream %1 state changed to: %2." | |
544 | #~ msgstr "Stream %1 state changed to: %2." | |
545 | ||
546 | #~ msgid "User %1 joined the conference." | |
547 | #~ msgstr "User %1 joined the conference." | |
548 | ||
549 | #~ msgid "Awaiting answer from user %1." | |
550 | #~ msgstr "Awaiting answer from user %1." | |
551 | ||
552 | #~ msgid "User %1 left the conference." | |
553 | #~ msgstr "User %1 left the conference." | |
554 | ||
555 | #~ msgid "Audio input device" | |
556 | #~ msgstr "Audio input device" | |
557 | ||
558 | #~ msgid "Audio output device" | |
559 | #~ msgstr "Audio output device" | |
560 | ||
561 | #~ msgid "Video input device" | |
562 | #~ msgstr "Video input device" | |
563 | ||
564 | #~ msgid "Video output driver" | |
565 | #~ msgstr "Video output driver" | |
566 | ||
567 | #~ msgid "Xv video renderer" | |
568 | #~ msgstr "Xv video renderer" | |
569 | ||
570 | #~ msgid "X11 video renderer" | |
571 | #~ msgstr "X11 video renderer" | |
572 | ||
573 | #~ msgid "Autodetect" | |
574 | #~ msgstr "Autodetect" | |
575 | ||
576 | #~ msgid "Test input device" | |
577 | #~ msgstr "Test input device" | |
578 | ||
579 | #~ msgctxt "autodetected audio or video system" | |
580 | #~ msgid "Autodetected" | |
581 | #~ msgstr "Autodetected" | |
582 | ||
583 | #~ msgid "ALSA" | |
584 | #~ msgstr "ALSA" | |
585 | ||
586 | #~ msgid "OSS" | |
587 | #~ msgstr "OSS" | |
588 | ||
589 | #~ msgid "JACK" | |
590 | #~ msgstr "JACK" | |
591 | ||
592 | #~ msgid "PULSE" | |
593 | #~ msgstr "PULSE" | |
594 | ||
595 | #~ msgid "Video4Linux" | |
596 | #~ msgstr "Video4Linux" | |
597 | ||
598 | #~ msgid "Device name" | |
599 | #~ msgstr "Device name" | |
600 | ||
601 | #~ msgid "Sound system" | |
602 | #~ msgstr "Sound system" | |
603 | ||
604 | #~ msgid "Video system" | |
605 | #~ msgstr "Video system" | |
606 | ||
607 | #~ msgid "Gstreamer element" | |
608 | #~ msgstr "Gstreamer element" | |
609 | ||
610 | #~ msgid "Driver-specific handle" | |
611 | #~ msgstr "Driver-specific handle" | |
612 | ||
613 | #~ msgctxt "test the device" | |
614 | #~ msgid "Test" | |
615 | #~ msgstr "Test" | |
616 | ||
617 | #~ msgid "Add custom device..." | |
618 | #~ msgstr "Add custom device..." | |
619 | ||
620 | #~ msgid "" | |
621 | #~ "The gstreamer element for the selected device could not be created. " | |
622 | #~ "Please check your gstreamer installation." | |
623 | #~ msgstr "" | |
624 | #~ "The gstreamer element for the selected device could not be created. " | |
625 | #~ "Please check your gstreamer installation." | |
626 | ||
627 | #~ msgid "" | |
628 | #~ "The selected device could not be initialized. Please select another " | |
629 | #~ "device." | |
630 | #~ msgstr "" | |
631 | #~ "The selected device could not be initialised. Please select another " | |
632 | #~ "device." | |
633 | ||
634 | #~ msgid "" | |
635 | #~ "The gstreamer element for the audio output device could not be created. " | |
636 | #~ "Please check your gstreamer installation" | |
637 | #~ msgstr "" | |
638 | #~ "The gstreamer element for the audio output device could not be created. " | |
639 | #~ "Please check your gstreamer installation" | |
640 | ||
641 | #~ msgid "The audio output device could not be initialized." | |
642 | #~ msgstr "The audio output device could not be initialised." | |
643 | ||
644 | #~ msgid "The video output driver could not be initialized." | |
645 | #~ msgstr "The video output driver could not be initialised." | |
646 | ||
647 | #~ msgid "" | |
648 | #~ "The selected video output driver could not be initialized. Please select " | |
649 | #~ "another driver." | |
650 | #~ msgstr "" | |
651 | #~ "The selected video output driver could not be initialised. Please select " | |
652 | #~ "another driver." | |
653 | ||
654 | #~ msgctxt "stop audio/video test" | |
655 | #~ msgid "Stop test" | |
656 | #~ msgstr "Stop test" | |
657 | ||
658 | #~ msgid "Hide details" | |
659 | #~ msgstr "Hide details" | |
660 | ||
661 | #~ msgid "Automatically close the call window after a timeout" | |
662 | #~ msgstr "Automatically close the call window after a timeout" | |
663 | ||
664 | #~ msgid "Timeout in seconds:" | |
665 | #~ msgstr "Timeout in seconds:" | |
666 | ||
667 | #~ msgid "" | |
668 | #~ "The gstreamer element for the audio input device could not be created. " | |
669 | #~ "Please check your gstreamer installation" | |
670 | #~ msgstr "" | |
671 | #~ "The gstreamer element for the audio input device could not be created. " | |
672 | #~ "Please check your gstreamer installation" | |
673 | ||
674 | #~ msgid "" | |
675 | #~ "The gstreamer element for the video input device could not be created. " | |
676 | #~ "Please check your gstreamer installation." | |
677 | #~ msgstr "" | |
678 | #~ "The gstreamer element for the video input device could not be created. " | |
679 | #~ "Please check your gstreamer installation." | |
680 | ||
681 | #~ msgid "Could not initialize the channel" | |
682 | #~ msgstr "Could not initialise the channel" | |
683 | ||
684 | #~ msgid "Ignore" | |
685 | #~ msgstr "Ignore" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( eo ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Translation of kcall into esperanto. | |
1 | # Axel Rousseau <axel@esperanto-jeunes.org>, 2009. | |
2 | # | |
3 | msgid "" | |
4 | msgstr "" | |
5 | "Project-Id-Version: kcall\n" | |
6 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
7 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
8 | "PO-Revision-Date: 2009-11-15 12:06+0100\n" | |
9 | "Last-Translator: Axel Rousseau <axel@esperanto-jeunes.org>\n" | |
10 | "Language-Team: esperanto <kde-i18n-eo@kde.org>\n" | |
11 | "Language: \n" | |
12 | "MIME-Version: 1.0\n" | |
13 | "Content-Type: text/plain; charset=UTF-8\n" | |
14 | "Content-Transfer-Encoding: 8bit\n" | |
15 | "X-Generator: pology\n" | |
16 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
17 | ||
18 | #: src/approver.cpp:38 | |
19 | msgid "Incoming video call" | |
20 | msgstr "" | |
21 | ||
22 | #: src/approver.cpp:39 | |
23 | #, kde-format | |
24 | msgid "<p>%1 is asking you for a video call</p>" | |
25 | msgstr "" | |
26 | ||
27 | #: src/approver.cpp:41 | |
28 | msgid "Incoming call" | |
29 | msgstr "" | |
30 | ||
31 | #: src/approver.cpp:42 | |
32 | #, kde-format | |
33 | msgid "<p>%1 is calling you</p>" | |
34 | msgstr "" | |
35 | ||
36 | #: src/approver.cpp:58 src/approver.cpp:80 | |
37 | #, fuzzy | |
38 | #| msgid "Answer" | |
39 | msgctxt "action, answers the incoming call" | |
40 | msgid "Answer" | |
41 | msgstr "Respondo" | |
42 | ||
43 | #: src/approver.cpp:59 src/approver.cpp:82 | |
44 | msgctxt "action, rejects the incoming call" | |
45 | msgid "Reject" | |
46 | msgstr "" | |
47 | ||
48 | #: src/call-window.cpp:95 | |
49 | #, kde-format | |
50 | msgid "Call with %1" | |
51 | msgstr "" | |
52 | ||
53 | #: src/call-window.cpp:109 | |
54 | msgctxt "@info:status" | |
55 | msgid "Connecting..." | |
56 | msgstr "" | |
57 | ||
58 | #: src/call-window.cpp:113 | |
59 | msgctxt "@info:status the remote user's phone is ringing" | |
60 | msgid "Ringing..." | |
61 | msgstr "" | |
62 | ||
63 | #: src/call-window.cpp:117 | |
64 | msgctxt "@info:status" | |
65 | msgid "Remote user accepted the call, waiting for connection..." | |
66 | msgstr "" | |
67 | ||
68 | #: src/call-window.cpp:120 | |
69 | msgctxt "@info:status" | |
70 | msgid "Talking..." | |
71 | msgstr "" | |
72 | ||
73 | #: src/call-window.cpp:136 | |
74 | msgctxt "@info:status" | |
75 | msgid "Remote contact ended the call." | |
76 | msgstr "" | |
77 | ||
78 | #: src/call-window.cpp:143 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact rejected the call." | |
81 | msgstr "" | |
82 | ||
83 | #: src/call-window.cpp:148 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact didn't answer." | |
86 | msgstr "" | |
87 | ||
88 | #: src/call-window.cpp:152 | |
89 | msgctxt "@info:status" | |
90 | msgid "Invalid number or contact." | |
91 | msgstr "" | |
92 | ||
93 | #: src/call-window.cpp:156 | |
94 | msgctxt "@info:status" | |
95 | msgid "You don't have enough balance to make this call." | |
96 | msgstr "" | |
97 | ||
98 | #: src/call-window.cpp:158 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have permission to make this call." | |
101 | msgstr "" | |
102 | ||
103 | #: src/call-window.cpp:163 | |
104 | msgctxt "@info:status" | |
105 | msgid "Remote contact is currently busy." | |
106 | msgstr "" | |
107 | ||
108 | #: src/call-window.cpp:167 | |
109 | msgctxt "@info:status" | |
110 | msgid "Internal component error." | |
111 | msgstr "" | |
112 | ||
113 | #: src/call-window.cpp:170 | |
114 | msgctxt "@info:status" | |
115 | msgid "Remote service error." | |
116 | msgstr "" | |
117 | ||
118 | #: src/call-window.cpp:173 | |
119 | msgctxt "@info:status" | |
120 | msgid "Network error." | |
121 | msgstr "" | |
122 | ||
123 | #: src/call-window.cpp:177 | |
124 | msgctxt "@info:status" | |
125 | msgid "Failed to negotiate codecs." | |
126 | msgstr "" | |
127 | ||
128 | #: src/call-window.cpp:179 | |
129 | msgctxt "@info:status" | |
130 | msgid "Unsupported media type." | |
131 | msgstr "" | |
132 | ||
133 | #: src/call-window.cpp:183 | |
134 | msgctxt "@info:status" | |
135 | msgid "Connectivity error." | |
136 | msgstr "" | |
137 | ||
138 | #: src/call-window.cpp:187 | |
139 | msgctxt "@info:status" | |
140 | msgid "Unknown error." | |
141 | msgstr "" | |
142 | ||
143 | #: src/call-window.cpp:192 | |
144 | msgctxt "@info:status" | |
145 | msgid "Disconnected." | |
146 | msgstr "" | |
147 | ||
148 | #: src/call-window.cpp:196 | |
149 | #, kde-format | |
150 | msgctxt "@info:status the call was disconnected because..." | |
151 | msgid "Disconnected: %1" | |
152 | msgstr "" | |
153 | ||
154 | #: src/call-window.cpp:339 | |
155 | msgctxt "@action" | |
156 | msgid "Show my video" | |
157 | msgstr "" | |
158 | ||
159 | #: src/call-window.cpp:344 | |
160 | msgctxt "@action" | |
161 | msgid "Show dialpad" | |
162 | msgstr "" | |
163 | ||
164 | #: src/call-window.cpp:351 | |
165 | msgctxt "@action" | |
166 | msgid "Send video" | |
167 | msgstr "" | |
168 | ||
169 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
170 | msgctxt "@action" | |
171 | msgid "Mute" | |
172 | msgstr "" | |
173 | ||
174 | #: src/call-window.cpp:363 | |
175 | msgctxt "@action" | |
176 | msgid "Hold" | |
177 | msgstr "" | |
178 | ||
179 | #: src/call-window.cpp:368 | |
180 | msgctxt "@action" | |
181 | msgid "Hangup" | |
182 | msgstr "" | |
183 | ||
184 | #: src/main.cpp:36 | |
185 | msgid "KDE Telepathy Call Ui" | |
186 | msgstr "" | |
187 | ||
188 | #: src/main.cpp:37 | |
189 | msgid "VoIP client for KDE" | |
190 | msgstr "" | |
191 | ||
192 | #: src/main.cpp:38 | |
193 | msgid "(C) 2009, George Kiagiadakis" | |
194 | msgstr "" | |
195 | ||
196 | #: src/main.cpp:40 | |
197 | msgctxt "@info:credit" | |
198 | msgid "George Kiagiadakis" | |
199 | msgstr "George Kiagiadakis" | |
200 | ||
201 | #: rc.cpp:1 | |
202 | msgctxt "NAME OF TRANSLATORS" | |
203 | msgid "Your names" | |
204 | msgstr "Axel Rousseau" | |
205 | ||
206 | #: rc.cpp:2 | |
207 | msgctxt "EMAIL OF TRANSLATORS" | |
208 | msgid "Your emails" | |
209 | msgstr "axel@esperanto-jeunes.org" | |
210 | ||
211 | #. i18n: file: src/callwindowui.rc:11 | |
212 | #. i18n: ectx: Menu (call) | |
213 | #: rc.cpp:5 | |
214 | msgid "Call" | |
215 | msgstr "Voko" | |
216 | ||
217 | #. i18n: file: src/callwindowui.rc:20 | |
218 | #. i18n: ectx: Menu (media) | |
219 | #: rc.cpp:8 | |
220 | msgid "Media" | |
221 | msgstr "" | |
222 | ||
223 | #. i18n: file: src/callwindowui.rc:27 | |
224 | #. i18n: ectx: ToolBar (mainToolBar) | |
225 | #: rc.cpp:11 | |
226 | msgid "Main Toolbar" | |
227 | msgstr "Ĉefa ilobreto" | |
228 | ||
229 | #. i18n: file: src/dtmf-widget.ui:17 | |
230 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
231 | #: rc.cpp:14 | |
232 | msgid "1" | |
233 | msgstr "1" | |
234 | ||
235 | #. i18n: file: src/dtmf-widget.ui:24 | |
236 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
237 | #: rc.cpp:17 | |
238 | msgid "2" | |
239 | msgstr "2" | |
240 | ||
241 | #. i18n: file: src/dtmf-widget.ui:31 | |
242 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
243 | #: rc.cpp:20 | |
244 | msgid "3" | |
245 | msgstr "3" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:38 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
249 | #: rc.cpp:23 | |
250 | msgid "4" | |
251 | msgstr "4" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:45 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
255 | #: rc.cpp:26 | |
256 | msgid "5" | |
257 | msgstr "5" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:52 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
261 | #: rc.cpp:29 | |
262 | msgid "6" | |
263 | msgstr "6" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:59 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
267 | #: rc.cpp:32 | |
268 | msgid "7" | |
269 | msgstr "7" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:66 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
273 | #: rc.cpp:35 | |
274 | msgid "8" | |
275 | msgstr "8" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:73 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
279 | #: rc.cpp:38 | |
280 | msgid "9" | |
281 | msgstr "9" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:80 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
285 | #: rc.cpp:41 | |
286 | msgid "*" | |
287 | msgstr "*" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:87 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
291 | #: rc.cpp:44 | |
292 | msgid "0" | |
293 | msgstr "0" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:94 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
297 | #: rc.cpp:47 | |
298 | msgid "#" | |
299 | msgstr "#" | |
300 | ||
301 | #~ msgid "Error: %1" | |
302 | #~ msgstr "Eraro: %1" | |
303 | ||
304 | #~ msgid "Contrast" | |
305 | #~ msgstr "Kontrasto" | |
306 | ||
307 | #~ msgid "Hue" | |
308 | #~ msgstr "Nuanco" | |
309 | ||
310 | #~ msgid "Saturation" | |
311 | #~ msgstr "Satureco" | |
312 | ||
313 | #~ msgctxt "protocol - display name" | |
314 | #~ msgid "%1 - %2" | |
315 | #~ msgstr "%1 - %2" | |
316 | ||
317 | #~ msgid "Volume" | |
318 | #~ msgstr "Laŭteco" | |
319 | ||
320 | #~ msgid "Microphone" | |
321 | #~ msgstr "Mikrofono" | |
322 | ||
323 | #~ msgid "Account" | |
324 | #~ msgstr "Konto" | |
325 | ||
326 | #~ msgid "ALSA" | |
327 | #~ msgstr "ALSA" | |
328 | ||
329 | #~ msgid "OSS" | |
330 | #~ msgstr "OSS" | |
331 | ||
332 | #~ msgid "JACK" | |
333 | #~ msgstr "JACK" | |
334 | ||
335 | #~ msgid "PULSE" | |
336 | #~ msgstr "PULSE" | |
337 | ||
338 | #~ msgid "Video4Linux" | |
339 | #~ msgstr "Video4Linux" | |
340 | ||
341 | #~ msgid "Device name" | |
342 | #~ msgstr "Aparatnomo" | |
343 | ||
344 | #~ msgid "Ignore" | |
345 | #~ msgstr "Ignori" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( es ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of kcall.po to Spanish | |
1 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # | |
4 | # Eloy Cuadra <ecuadra@eloihr.net>, 2009, 2011, 2012. | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: kcall\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2012-05-11 14:16+0200\n" | |
11 | "Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n" | |
12 | "Language-Team: Spanish <kde-l10n-es@kde.org>\n" | |
13 | "Language: es\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "com>\n" | |
18 | "X-Generator: Lokalize 1.4\n" | |
19 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
20 | ||
21 | #: src/approver.cpp:38 | |
22 | msgid "Incoming video call" | |
23 | msgstr "Llamada de vídeo entrante" | |
24 | ||
25 | #: src/approver.cpp:39 | |
26 | #, kde-format | |
27 | msgid "<p>%1 is asking you for a video call</p>" | |
28 | msgstr "<p>%1 le está pidiendo una llamada de vídeo</p>" | |
29 | ||
30 | #: src/approver.cpp:41 | |
31 | msgid "Incoming call" | |
32 | msgstr "Llamada entrante" | |
33 | ||
34 | #: src/approver.cpp:42 | |
35 | #, kde-format | |
36 | msgid "<p>%1 is calling you</p>" | |
37 | msgstr "<p>%1 le está llamando</p>" | |
38 | ||
39 | #: src/approver.cpp:58 src/approver.cpp:80 | |
40 | msgctxt "action, answers the incoming call" | |
41 | msgid "Answer" | |
42 | msgstr "Responder" | |
43 | ||
44 | #: src/approver.cpp:59 src/approver.cpp:82 | |
45 | msgctxt "action, rejects the incoming call" | |
46 | msgid "Reject" | |
47 | msgstr "Rechazar" | |
48 | ||
49 | #: src/call-window.cpp:95 | |
50 | #, kde-format | |
51 | msgid "Call with %1" | |
52 | msgstr "Llamar con %1" | |
53 | ||
54 | #: src/call-window.cpp:109 | |
55 | msgctxt "@info:status" | |
56 | msgid "Connecting..." | |
57 | msgstr "Conectando..." | |
58 | ||
59 | #: src/call-window.cpp:113 | |
60 | msgctxt "@info:status the remote user's phone is ringing" | |
61 | msgid "Ringing..." | |
62 | msgstr "Sonando..." | |
63 | ||
64 | #: src/call-window.cpp:117 | |
65 | msgctxt "@info:status" | |
66 | msgid "Remote user accepted the call, waiting for connection..." | |
67 | msgstr "El usuario remoto ha aceptado la llamada. Esperando conexión..." | |
68 | ||
69 | #: src/call-window.cpp:120 | |
70 | msgctxt "@info:status" | |
71 | msgid "Talking..." | |
72 | msgstr "Hablando..." | |
73 | ||
74 | #: src/call-window.cpp:136 | |
75 | msgctxt "@info:status" | |
76 | msgid "Remote contact ended the call." | |
77 | msgstr "El contacto remoto ha finalizado la llamada." | |
78 | ||
79 | #: src/call-window.cpp:143 | |
80 | msgctxt "@info:status" | |
81 | msgid "Remote contact rejected the call." | |
82 | msgstr "El contacto remoto ha rechazado la llamada." | |
83 | ||
84 | #: src/call-window.cpp:148 | |
85 | msgctxt "@info:status" | |
86 | msgid "Remote contact didn't answer." | |
87 | msgstr "El contacto remoto no ha respondido." | |
88 | ||
89 | #: src/call-window.cpp:152 | |
90 | msgctxt "@info:status" | |
91 | msgid "Invalid number or contact." | |
92 | msgstr "Número o contacto no válidos." | |
93 | ||
94 | #: src/call-window.cpp:156 | |
95 | msgctxt "@info:status" | |
96 | msgid "You don't have enough balance to make this call." | |
97 | msgstr "No tiene suficiente saldo para hacer esta llamada." | |
98 | ||
99 | #: src/call-window.cpp:158 | |
100 | msgctxt "@info:status" | |
101 | msgid "You don't have permission to make this call." | |
102 | msgstr "No tiene permiso para hacer esta llamada." | |
103 | ||
104 | #: src/call-window.cpp:163 | |
105 | msgctxt "@info:status" | |
106 | msgid "Remote contact is currently busy." | |
107 | msgstr "El contacto remoto está ocupado." | |
108 | ||
109 | #: src/call-window.cpp:167 | |
110 | msgctxt "@info:status" | |
111 | msgid "Internal component error." | |
112 | msgstr "Error de componente interno." | |
113 | ||
114 | #: src/call-window.cpp:170 | |
115 | msgctxt "@info:status" | |
116 | msgid "Remote service error." | |
117 | msgstr "Error del servicio remoto." | |
118 | ||
119 | #: src/call-window.cpp:173 | |
120 | msgctxt "@info:status" | |
121 | msgid "Network error." | |
122 | msgstr "Error de red." | |
123 | ||
124 | #: src/call-window.cpp:177 | |
125 | msgctxt "@info:status" | |
126 | msgid "Failed to negotiate codecs." | |
127 | msgstr "La negociación de códecs ha fallado." | |
128 | ||
129 | #: src/call-window.cpp:179 | |
130 | msgctxt "@info:status" | |
131 | msgid "Unsupported media type." | |
132 | msgstr "Tipo de medio no permitido." | |
133 | ||
134 | #: src/call-window.cpp:183 | |
135 | msgctxt "@info:status" | |
136 | msgid "Connectivity error." | |
137 | msgstr "Error de conexión." | |
138 | ||
139 | #: src/call-window.cpp:187 | |
140 | msgctxt "@info:status" | |
141 | msgid "Unknown error." | |
142 | msgstr "Error desconocido." | |
143 | ||
144 | #: src/call-window.cpp:192 | |
145 | msgctxt "@info:status" | |
146 | msgid "Disconnected." | |
147 | msgstr "Desconectado." | |
148 | ||
149 | #: src/call-window.cpp:196 | |
150 | #, kde-format | |
151 | msgctxt "@info:status the call was disconnected because..." | |
152 | msgid "Disconnected: %1" | |
153 | msgstr "Desconectado: %1" | |
154 | ||
155 | #: src/call-window.cpp:339 | |
156 | msgctxt "@action" | |
157 | msgid "Show my video" | |
158 | msgstr "Mostrar mi vídeo" | |
159 | ||
160 | #: src/call-window.cpp:344 | |
161 | msgctxt "@action" | |
162 | msgid "Show dialpad" | |
163 | msgstr "Mostrar panel de marcación" | |
164 | ||
165 | #: src/call-window.cpp:351 | |
166 | msgctxt "@action" | |
167 | msgid "Send video" | |
168 | msgstr "Enviar vídeo" | |
169 | ||
170 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
171 | msgctxt "@action" | |
172 | msgid "Mute" | |
173 | msgstr "Silenciar" | |
174 | ||
175 | #: src/call-window.cpp:363 | |
176 | msgctxt "@action" | |
177 | msgid "Hold" | |
178 | msgstr "Colgar" | |
179 | ||
180 | #: src/call-window.cpp:368 | |
181 | msgctxt "@action" | |
182 | msgid "Hangup" | |
183 | msgstr "Colgar" | |
184 | ||
185 | #: src/main.cpp:36 | |
186 | msgid "KDE Telepathy Call Ui" | |
187 | msgstr "Interfaz de llamadas de Telepathy para KDE" | |
188 | ||
189 | #: src/main.cpp:37 | |
190 | msgid "VoIP client for KDE" | |
191 | msgstr "Cliente VoIP para KDE" | |
192 | ||
193 | #: src/main.cpp:38 | |
194 | msgid "(C) 2009, George Kiagiadakis" | |
195 | msgstr "(C) 2009, George Kiagiadakis" | |
196 | ||
197 | #: src/main.cpp:40 | |
198 | msgctxt "@info:credit" | |
199 | msgid "George Kiagiadakis" | |
200 | msgstr "George Kiagiadakis" | |
201 | ||
202 | #: rc.cpp:1 | |
203 | msgctxt "NAME OF TRANSLATORS" | |
204 | msgid "Your names" | |
205 | msgstr "Cristina Yenyxe González García" | |
206 | ||
207 | #: rc.cpp:2 | |
208 | msgctxt "EMAIL OF TRANSLATORS" | |
209 | msgid "Your emails" | |
210 | msgstr "the.blue.valkyrie@gmail.com" | |
211 | ||
212 | #. i18n: file: src/callwindowui.rc:11 | |
213 | #. i18n: ectx: Menu (call) | |
214 | #: rc.cpp:5 | |
215 | msgid "Call" | |
216 | msgstr "Llamar" | |
217 | ||
218 | #. i18n: file: src/callwindowui.rc:20 | |
219 | #. i18n: ectx: Menu (media) | |
220 | #: rc.cpp:8 | |
221 | msgid "Media" | |
222 | msgstr "Multimedia" | |
223 | ||
224 | #. i18n: file: src/callwindowui.rc:27 | |
225 | #. i18n: ectx: ToolBar (mainToolBar) | |
226 | #: rc.cpp:11 | |
227 | msgid "Main Toolbar" | |
228 | msgstr "Barra de herramientas principal" | |
229 | ||
230 | #. i18n: file: src/dtmf-widget.ui:17 | |
231 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
232 | #: rc.cpp:14 | |
233 | msgid "1" | |
234 | msgstr "1" | |
235 | ||
236 | #. i18n: file: src/dtmf-widget.ui:24 | |
237 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
238 | #: rc.cpp:17 | |
239 | msgid "2" | |
240 | msgstr "2" | |
241 | ||
242 | #. i18n: file: src/dtmf-widget.ui:31 | |
243 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
244 | #: rc.cpp:20 | |
245 | msgid "3" | |
246 | msgstr "3" | |
247 | ||
248 | #. i18n: file: src/dtmf-widget.ui:38 | |
249 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
250 | #: rc.cpp:23 | |
251 | msgid "4" | |
252 | msgstr "4" | |
253 | ||
254 | #. i18n: file: src/dtmf-widget.ui:45 | |
255 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
256 | #: rc.cpp:26 | |
257 | msgid "5" | |
258 | msgstr "5" | |
259 | ||
260 | #. i18n: file: src/dtmf-widget.ui:52 | |
261 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
262 | #: rc.cpp:29 | |
263 | msgid "6" | |
264 | msgstr "6" | |
265 | ||
266 | #. i18n: file: src/dtmf-widget.ui:59 | |
267 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
268 | #: rc.cpp:32 | |
269 | msgid "7" | |
270 | msgstr "7" | |
271 | ||
272 | #. i18n: file: src/dtmf-widget.ui:66 | |
273 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
274 | #: rc.cpp:35 | |
275 | msgid "8" | |
276 | msgstr "8" | |
277 | ||
278 | #. i18n: file: src/dtmf-widget.ui:73 | |
279 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
280 | #: rc.cpp:38 | |
281 | msgid "9" | |
282 | msgstr "9" | |
283 | ||
284 | #. i18n: file: src/dtmf-widget.ui:80 | |
285 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
286 | #: rc.cpp:41 | |
287 | msgid "*" | |
288 | msgstr "*" | |
289 | ||
290 | #. i18n: file: src/dtmf-widget.ui:87 | |
291 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
292 | #: rc.cpp:44 | |
293 | msgid "0" | |
294 | msgstr "0" | |
295 | ||
296 | #. i18n: file: src/dtmf-widget.ui:94 | |
297 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
298 | #: rc.cpp:47 | |
299 | msgid "#" | |
300 | msgstr "#" | |
301 | ||
302 | #~ msgid "Warning: %1" | |
303 | #~ msgstr "Advertencia: %1" | |
304 | ||
305 | #~ msgid "Error: %1" | |
306 | #~ msgstr "Error: %1" | |
307 | ||
308 | #~ msgid "KCall" | |
309 | #~ msgstr "KCall" | |
310 | ||
311 | #~ msgid "Brightness" | |
312 | #~ msgstr "Brillo" | |
313 | ||
314 | #~ msgid "Contrast" | |
315 | #~ msgstr "Contraste" | |
316 | ||
317 | #~ msgid "Hue" | |
318 | #~ msgstr "Tinte" | |
319 | ||
320 | #~ msgid "Saturation" | |
321 | #~ msgstr "Saturación" | |
322 | ||
323 | #~ msgid "Dialpad" | |
324 | #~ msgstr "Panel de marcación" | |
325 | ||
326 | #~ msgid "" | |
327 | #~ "Defines whether the window should close automatically after a timeout " | |
328 | #~ "when the call is over." | |
329 | #~ msgstr "" | |
330 | #~ "Define si la ventana se debe cerrar automáticamente cierto tiempo después " | |
331 | #~ "de finalizar la llamada." | |
332 | ||
333 | #~ msgid "" | |
334 | #~ "Defines how many seconds the call window should remain visible after the " | |
335 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
336 | #~ msgstr "" | |
337 | #~ "Define cuántos segundos debe permanecer visible la ventana de llamada " | |
338 | #~ "tras finalizar la llamada. Esta opción depende de «CerrarAlDesconectar»." | |
339 | ||
340 | #, fuzzy | |
341 | #~| msgid "The audio output device could not be initialized." | |
342 | #~ msgid "The video input device could not be initialized" | |
343 | #~ msgstr "No se pudo inicializar el dispositivo de salida de audio." | |
344 | ||
345 | #, fuzzy | |
346 | #~| msgid "" | |
347 | #~| "Some gstreamer elements could not be created. Please check your " | |
348 | #~| "gstreamer installation." | |
349 | #~ msgid "" | |
350 | #~ "Could not create some of the required elements. Please check your " | |
351 | #~ "GStreamer installation." | |
352 | #~ msgstr "" | |
353 | #~ "No se pudieron crear algunos elementos gstreamer. Por favor, compruebe su " | |
354 | #~ "instalación de gstreeamer." | |
355 | ||
356 | #~ msgctxt "@action:inmenu" | |
357 | #~ msgid "Show participants" | |
358 | #~ msgstr "Mostrar participantes" | |
359 | ||
360 | #~ msgctxt "@action:inmenu" | |
361 | #~ msgid "Show log" | |
362 | #~ msgstr "Mostrar registro" | |
363 | ||
364 | #~ msgctxt "@action" | |
365 | #~ msgid "Stop sending video" | |
366 | #~ msgstr "Dejar de enviar vídeo" | |
367 | ||
368 | #~ msgctxt "@action:inmenu" | |
369 | #~ msgid "Status" | |
370 | #~ msgstr "Estado" | |
371 | ||
372 | #~ msgctxt "@action:inmenu" | |
373 | #~ msgid "Available" | |
374 | #~ msgstr "Disponible" | |
375 | ||
376 | #~ msgctxt "@action:inmenu" | |
377 | #~ msgid "Away" | |
378 | #~ msgstr "Ausente" | |
379 | ||
380 | #~ msgctxt "@action:inmenu" | |
381 | #~ msgid "Be right back" | |
382 | #~ msgstr "Vuelvo ahora mismo" | |
383 | ||
384 | #~ msgctxt "@action:inmenu" | |
385 | #~ msgid "Busy" | |
386 | #~ msgstr "Ocupado" | |
387 | ||
388 | #~ msgctxt "@action:inmenu" | |
389 | #~ msgid "Do not disturb" | |
390 | #~ msgstr "No molestar" | |
391 | ||
392 | #~ msgctxt "@action:inmenu" | |
393 | #~ msgid "Extended Away" | |
394 | #~ msgstr "Ausente extendido" | |
395 | ||
396 | #~ msgctxt "@action:inmenu" | |
397 | #~ msgid "Invisible" | |
398 | #~ msgstr "Invisible" | |
399 | ||
400 | #~ msgctxt "@action:inmenu" | |
401 | #~ msgid "Offline" | |
402 | #~ msgstr "Desconectado" | |
403 | ||
404 | #~ msgctxt "protocol - display name (Connecting)" | |
405 | #~ msgid "%1 - %2 (Connecting)" | |
406 | #~ msgstr "%1 - %2 (Conectando)" | |
407 | ||
408 | #~ msgctxt "protocol - display name" | |
409 | #~ msgid "%1 - %2" | |
410 | #~ msgstr "%1 - %2" | |
411 | ||
412 | #~ msgctxt "@title:window" | |
413 | #~ msgid "KCall" | |
414 | #~ msgstr "KCall" | |
415 | ||
416 | #~ msgctxt "@info:status" | |
417 | #~ msgid "Connected" | |
418 | #~ msgstr "Conectado" | |
419 | ||
420 | #~ msgctxt "@action" | |
421 | #~ msgid "Disconnect" | |
422 | #~ msgstr "Desconectar" | |
423 | ||
424 | #~ msgctxt "@action" | |
425 | #~ msgid "Cancel connection attempt" | |
426 | #~ msgstr "Cancelar intento de conexión" | |
427 | ||
428 | #~ msgctxt "@action" | |
429 | #~ msgid "Connect" | |
430 | #~ msgstr "Conectar" | |
431 | ||
432 | #~ msgid "Volume" | |
433 | #~ msgstr "Volumen" | |
434 | ||
435 | #~ msgid "Speakers" | |
436 | #~ msgstr "Altavoces" | |
437 | ||
438 | #~ msgid "Microphone" | |
439 | #~ msgstr "Micrófono" | |
440 | ||
441 | #~ msgid "Video controls" | |
442 | #~ msgstr "Controles de vídeo" | |
443 | ||
444 | #~ msgid "Video input" | |
445 | #~ msgstr "Entrada de vídeo" | |
446 | ||
447 | #~ msgid "Call log" | |
448 | #~ msgstr "Registro de llamadas" | |
449 | ||
450 | #~ msgid "Participants" | |
451 | #~ msgstr "Participantes" | |
452 | ||
453 | #~ msgctxt "@title:tab" | |
454 | #~ msgid "&Contact list" | |
455 | #~ msgstr "Lista de &contactos" | |
456 | ||
457 | #~ msgid "Account" | |
458 | #~ msgstr "Cuenta" | |
459 | ||
460 | #~ msgctxt "@info:status" | |
461 | #~ msgid "Hanging up..." | |
462 | #~ msgstr "Colgando..." | |
463 | ||
464 | #~ msgid "Channel closed" | |
465 | #~ msgstr "Canal cerrado" | |
466 | ||
467 | #~ msgid "Channel closed with error: %1" | |
468 | #~ msgstr "Canal cerrado con errores: %1" | |
469 | ||
470 | #~ msgid "User %1 joined the conference." | |
471 | #~ msgstr "El usuario %1 se ha unido a la conversación." | |
472 | ||
473 | #~ msgid "Awaiting answer from user %1." | |
474 | #~ msgstr "Esperando respuesta del usuario %1." | |
475 | ||
476 | #~ msgid "User %1 left the conference." | |
477 | #~ msgstr "El usuario %1 ha abandonado la conversación." | |
478 | ||
479 | #~ msgid "Audio input device" | |
480 | #~ msgstr "Dispositivo de entrada de audio" | |
481 | ||
482 | #~ msgid "Audio output device" | |
483 | #~ msgstr "Dispositivo de salida de audio" | |
484 | ||
485 | #~ msgid "Video input device" | |
486 | #~ msgstr "Dispositivo de entrada de vídeo" | |
487 | ||
488 | #~ msgid "Video output driver" | |
489 | #~ msgstr "Dispositivo de salida de vídeo" | |
490 | ||
491 | #~ msgid "Autodetect" | |
492 | #~ msgstr "Autodetectar" | |
493 | ||
494 | #~ msgid "ALSA" | |
495 | #~ msgstr "ALSA" | |
496 | ||
497 | #~ msgid "OSS" | |
498 | #~ msgstr "OSS" | |
499 | ||
500 | #~ msgid "JACK" | |
501 | #~ msgstr "JACK" | |
502 | ||
503 | #~ msgid "PULSE" | |
504 | #~ msgstr "PULSE" | |
505 | ||
506 | #~ msgid "Video4Linux" | |
507 | #~ msgstr "Video4Linux" | |
508 | ||
509 | #~ msgid "Device name" | |
510 | #~ msgstr "Nombre del dispositivo" | |
511 | ||
512 | #~ msgid "Sound system" | |
513 | #~ msgstr "Sistema de sonido" | |
514 | ||
515 | #~ msgid "Video system" | |
516 | #~ msgstr "Sistema de vídeo" | |
517 | ||
518 | #~ msgid "Gstreamer element" | |
519 | #~ msgstr "Elemento gstreamer" | |
520 | ||
521 | #~ msgid "Add custom device..." | |
522 | #~ msgstr "Añadir dispositivo personalizado..." | |
523 | ||
524 | #~ msgid "" | |
525 | #~ "The gstreamer element for the selected device could not be created. " | |
526 | #~ "Please check your gstreamer installation." | |
527 | #~ msgstr "" | |
528 | #~ "No se pudo crear el elemento gstreamer para el dispositivo seleccionado. " | |
529 | #~ "Por favor, compruebe su instalación de gstreamer." | |
530 | ||
531 | #~ msgid "" | |
532 | #~ "The selected device could not be initialized. Please select another " | |
533 | #~ "device." | |
534 | #~ msgstr "" | |
535 | #~ "No se pudo inicializar el dispositivo seleccionado. Por favor, seleccione " | |
536 | #~ "otro dispositivo." | |
537 | ||
538 | #~ msgctxt "stop audio/video test" | |
539 | #~ msgid "Stop test" | |
540 | #~ msgstr "Parar prueba" | |
541 | ||
542 | #~ msgid "Hide details" | |
543 | #~ msgstr "Ocultar detalles" | |
544 | ||
545 | #~ msgid "Could not initialize the channel" | |
546 | #~ msgstr "No se pudo inicializar el canal" | |
547 | ||
548 | #~ msgid "Ignore" | |
549 | #~ msgstr "Ignorar" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( et ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of kcall.po to Estonian | |
1 | # Copyright (C) 2009 This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # | |
4 | # Marek Laane <bald@smail.ee>, 2009, 2011, 2012. | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: kcall\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2012-05-22 15:34+0300\n" | |
11 | "Last-Translator: Marek Laane <bald@smail.ee>\n" | |
12 | "Language-Team: Estonian <kde-et@linux.ee>\n" | |
13 | "Language: et\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "X-Generator: Lokalize 1.4\n" | |
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | msgid "Incoming video call" | |
22 | msgstr "Sisenev videokõne" | |
23 | ||
24 | #: src/approver.cpp:39 | |
25 | #, kde-format | |
26 | msgid "<p>%1 is asking you for a video call</p>" | |
27 | msgstr "<p>%1 soovib alustada sinuga videokõnet</p>" | |
28 | ||
29 | #: src/approver.cpp:41 | |
30 | msgid "Incoming call" | |
31 | msgstr "Sisenev kõne" | |
32 | ||
33 | #: src/approver.cpp:42 | |
34 | #, kde-format | |
35 | msgid "<p>%1 is calling you</p>" | |
36 | msgstr "<p>%1 helistab sulle</p>" | |
37 | ||
38 | #: src/approver.cpp:58 src/approver.cpp:80 | |
39 | msgctxt "action, answers the incoming call" | |
40 | msgid "Answer" | |
41 | msgstr "Vasta" | |
42 | ||
43 | #: src/approver.cpp:59 src/approver.cpp:82 | |
44 | msgctxt "action, rejects the incoming call" | |
45 | msgid "Reject" | |
46 | msgstr "Keeldu" | |
47 | ||
48 | #: src/call-window.cpp:95 | |
49 | #, kde-format | |
50 | msgid "Call with %1" | |
51 | msgstr "Kõne kasutajaga %1" | |
52 | ||
53 | #: src/call-window.cpp:109 | |
54 | msgctxt "@info:status" | |
55 | msgid "Connecting..." | |
56 | msgstr "Ühendumine..." | |
57 | ||
58 | #: src/call-window.cpp:113 | |
59 | msgctxt "@info:status the remote user's phone is ringing" | |
60 | msgid "Ringing..." | |
61 | msgstr "Helistamine..." | |
62 | ||
63 | #: src/call-window.cpp:117 | |
64 | msgctxt "@info:status" | |
65 | msgid "Remote user accepted the call, waiting for connection..." | |
66 | msgstr "Teine kasutaja võttis kõne vastu, oodatakse ühendust..." | |
67 | ||
68 | #: src/call-window.cpp:120 | |
69 | msgctxt "@info:status" | |
70 | msgid "Talking..." | |
71 | msgstr "Kõnelemine..." | |
72 | ||
73 | #: src/call-window.cpp:136 | |
74 | msgctxt "@info:status" | |
75 | msgid "Remote contact ended the call." | |
76 | msgstr "Teine kasutaja lõpetas kõne." | |
77 | ||
78 | #: src/call-window.cpp:143 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact rejected the call." | |
81 | msgstr "Teine kasutaja ei võtnud kõnet vastu." | |
82 | ||
83 | #: src/call-window.cpp:148 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact didn't answer." | |
86 | msgstr "Teine kasutaja ei vastanud." | |
87 | ||
88 | #: src/call-window.cpp:152 | |
89 | msgctxt "@info:status" | |
90 | msgid "Invalid number or contact." | |
91 | msgstr "Vigane number või kontakt." | |
92 | ||
93 | #: src/call-window.cpp:156 | |
94 | msgctxt "@info:status" | |
95 | msgid "You don't have enough balance to make this call." | |
96 | msgstr "Su arvel pole piisavalt vahendeid selle kõne tegemiseks." | |
97 | ||
98 | #: src/call-window.cpp:158 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have permission to make this call." | |
101 | msgstr "Sul ei ole õigust seda kõnet teha." | |
102 | ||
103 | #: src/call-window.cpp:163 | |
104 | msgctxt "@info:status" | |
105 | msgid "Remote contact is currently busy." | |
106 | msgstr "Teine kasutaja on praegu hõivatud." | |
107 | ||
108 | #: src/call-window.cpp:167 | |
109 | msgctxt "@info:status" | |
110 | msgid "Internal component error." | |
111 | msgstr "Sisemise komponendi tõrge." | |
112 | ||
113 | #: src/call-window.cpp:170 | |
114 | msgctxt "@info:status" | |
115 | msgid "Remote service error." | |
116 | msgstr "Kaugteenuse tõrge." | |
117 | ||
118 | #: src/call-window.cpp:173 | |
119 | msgctxt "@info:status" | |
120 | msgid "Network error." | |
121 | msgstr "Võrgutõrge." | |
122 | ||
123 | #: src/call-window.cpp:177 | |
124 | msgctxt "@info:status" | |
125 | msgid "Failed to negotiate codecs." | |
126 | msgstr "Läbirääkimised koodeki osas nurjusid." | |
127 | ||
128 | #: src/call-window.cpp:179 | |
129 | msgctxt "@info:status" | |
130 | msgid "Unsupported media type." | |
131 | msgstr "Toetamata meediatüüp." | |
132 | ||
133 | #: src/call-window.cpp:183 | |
134 | msgctxt "@info:status" | |
135 | msgid "Connectivity error." | |
136 | msgstr "Ühenduse tõrge." | |
137 | ||
138 | #: src/call-window.cpp:187 | |
139 | msgctxt "@info:status" | |
140 | msgid "Unknown error." | |
141 | msgstr "Tundmatu tõrge." | |
142 | ||
143 | #: src/call-window.cpp:192 | |
144 | msgctxt "@info:status" | |
145 | msgid "Disconnected." | |
146 | msgstr "Ühendus lõpetatud." | |
147 | ||
148 | #: src/call-window.cpp:196 | |
149 | #, kde-format | |
150 | msgctxt "@info:status the call was disconnected because..." | |
151 | msgid "Disconnected: %1" | |
152 | msgstr "Ühendus katkestatud: %1" | |
153 | ||
154 | #: src/call-window.cpp:339 | |
155 | msgctxt "@action" | |
156 | msgid "Show my video" | |
157 | msgstr "Enda video näitamine" | |
158 | ||
159 | #: src/call-window.cpp:344 | |
160 | msgctxt "@action" | |
161 | msgid "Show dialpad" | |
162 | msgstr "Telefoniklahvide näitamine" | |
163 | ||
164 | #: src/call-window.cpp:351 | |
165 | msgctxt "@action" | |
166 | msgid "Send video" | |
167 | msgstr "Saada video" | |
168 | ||
169 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
170 | msgctxt "@action" | |
171 | msgid "Mute" | |
172 | msgstr "Tummaks" | |
173 | ||
174 | #: src/call-window.cpp:363 | |
175 | msgctxt "@action" | |
176 | msgid "Hold" | |
177 | msgstr "Ootele" | |
178 | ||
179 | #: src/call-window.cpp:368 | |
180 | msgctxt "@action" | |
181 | msgid "Hangup" | |
182 | msgstr "Lõpeta kõne" | |
183 | ||
184 | #: src/main.cpp:36 | |
185 | msgid "KDE Telepathy Call Ui" | |
186 | msgstr "KDE Telepathy kõne kasutajaliides" | |
187 | ||
188 | #: src/main.cpp:37 | |
189 | msgid "VoIP client for KDE" | |
190 | msgstr "KDE VoIP klient" | |
191 | ||
192 | #: src/main.cpp:38 | |
193 | msgid "(C) 2009, George Kiagiadakis" | |
194 | msgstr "(C) 2009: George Kiagiadakis" | |
195 | ||
196 | #: src/main.cpp:40 | |
197 | msgctxt "@info:credit" | |
198 | msgid "George Kiagiadakis" | |
199 | msgstr "George Kiagiadakis" | |
200 | ||
201 | #: rc.cpp:1 | |
202 | msgctxt "NAME OF TRANSLATORS" | |
203 | msgid "Your names" | |
204 | msgstr "Marek Laane" | |
205 | ||
206 | #: rc.cpp:2 | |
207 | msgctxt "EMAIL OF TRANSLATORS" | |
208 | msgid "Your emails" | |
209 | msgstr "bald@smail.ee" | |
210 | ||
211 | #. i18n: file: src/callwindowui.rc:11 | |
212 | #. i18n: ectx: Menu (call) | |
213 | #: rc.cpp:5 | |
214 | msgid "Call" | |
215 | msgstr "Kõne" | |
216 | ||
217 | #. i18n: file: src/callwindowui.rc:20 | |
218 | #. i18n: ectx: Menu (media) | |
219 | #: rc.cpp:8 | |
220 | msgid "Media" | |
221 | msgstr "Meedia" | |
222 | ||
223 | #. i18n: file: src/callwindowui.rc:27 | |
224 | #. i18n: ectx: ToolBar (mainToolBar) | |
225 | #: rc.cpp:11 | |
226 | msgid "Main Toolbar" | |
227 | msgstr "Peamine tööriistariba" | |
228 | ||
229 | #. i18n: file: src/dtmf-widget.ui:17 | |
230 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
231 | #: rc.cpp:14 | |
232 | msgid "1" | |
233 | msgstr "1" | |
234 | ||
235 | #. i18n: file: src/dtmf-widget.ui:24 | |
236 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
237 | #: rc.cpp:17 | |
238 | msgid "2" | |
239 | msgstr "2" | |
240 | ||
241 | #. i18n: file: src/dtmf-widget.ui:31 | |
242 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
243 | #: rc.cpp:20 | |
244 | msgid "3" | |
245 | msgstr "3" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:38 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
249 | #: rc.cpp:23 | |
250 | msgid "4" | |
251 | msgstr "4" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:45 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
255 | #: rc.cpp:26 | |
256 | msgid "5" | |
257 | msgstr "5" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:52 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
261 | #: rc.cpp:29 | |
262 | msgid "6" | |
263 | msgstr "6" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:59 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
267 | #: rc.cpp:32 | |
268 | msgid "7" | |
269 | msgstr "7" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:66 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
273 | #: rc.cpp:35 | |
274 | msgid "8" | |
275 | msgstr "8" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:73 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
279 | #: rc.cpp:38 | |
280 | msgid "9" | |
281 | msgstr "9" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:80 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
285 | #: rc.cpp:41 | |
286 | msgid "*" | |
287 | msgstr "*" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:87 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
291 | #: rc.cpp:44 | |
292 | msgid "0" | |
293 | msgstr "0" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:94 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
297 | #: rc.cpp:47 | |
298 | msgid "#" | |
299 | msgstr "#" | |
300 | ||
301 | #~ msgid "Warning: %1" | |
302 | #~ msgstr "Hoiatus: %1" | |
303 | ||
304 | #~ msgid "Error: %1" | |
305 | #~ msgstr "Tõrge: %1" | |
306 | ||
307 | #~ msgid "KCall" | |
308 | #~ msgstr "KCall" | |
309 | ||
310 | #~ msgid "Brightness" | |
311 | #~ msgstr "Heledus" | |
312 | ||
313 | #~ msgid "Contrast" | |
314 | #~ msgstr "Kontrast" | |
315 | ||
316 | #~ msgid "Hue" | |
317 | #~ msgstr "Toon" | |
318 | ||
319 | #~ msgid "Saturation" | |
320 | #~ msgstr "Küllastus" | |
321 | ||
322 | #~ msgid "Dialpad" | |
323 | #~ msgstr "Klahvistik" | |
324 | ||
325 | #~ msgid "" | |
326 | #~ "Defines whether the window should close automatically after a timeout " | |
327 | #~ "when the call is over." | |
328 | #~ msgstr "" | |
329 | #~ "Määramine, kas pärast kõne lõppemist sulgeda aken automaatselt teatava " | |
330 | #~ "aja järel." | |
331 | ||
332 | #~ msgid "" | |
333 | #~ "Defines how many seconds the call window should remain visible after the " | |
334 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
335 | #~ msgstr "" | |
336 | #~ "Määramine, mitmeks sekundiks jääb aken pärast kõne lõppemist nähtavale. " | |
337 | #~ "See sõltub valikust \"sulgemine lõpetamisel\"." | |
338 | ||
339 | #~ msgid "The audio input device could not be initialized" | |
340 | #~ msgstr "Helisisendi seadme initsialiseerimine nurjus" | |
341 | ||
342 | #~ msgid "The video input device could not be initialized" | |
343 | #~ msgstr "Videosisendi seadme initsialiseerimine nurjus" | |
344 | ||
345 | #~ msgid "" | |
346 | #~ "Could not create some of the required elements. Please check your " | |
347 | #~ "GStreamer installation." | |
348 | #~ msgstr "" | |
349 | #~ "Mõningate vajalike elementide loomine nurjus. Palun kontrolli oma " | |
350 | #~ "GStreameri paigadust." | |
351 | ||
352 | #~ msgid "The audio output device could not be initialized" | |
353 | #~ msgstr "Heliväljundi seadme initsialiseerimine nurjus" | |
354 | ||
355 | #~ msgctxt "@action:inmenu" | |
356 | #~ msgid "Show participants" | |
357 | #~ msgstr "Näita osalejaid" | |
358 | ||
359 | #~ msgctxt "@action:inmenu" | |
360 | #~ msgid "Show log" | |
361 | #~ msgstr "Näita logi" | |
362 | ||
363 | #~ msgctxt "@action" | |
364 | #~ msgid "Stop sending video" | |
365 | #~ msgstr "Peata video saatmine" | |
366 | ||
367 | #~ msgctxt "@action:inmenu" | |
368 | #~ msgid "Status" | |
369 | #~ msgstr "Olek" | |
370 | ||
371 | #~ msgctxt "@action:inmenu" | |
372 | #~ msgid "Available" | |
373 | #~ msgstr "Saadaolev" | |
374 | ||
375 | #~ msgctxt "@action:inmenu" | |
376 | #~ msgid "Away" | |
377 | #~ msgstr "Eemal" | |
378 | ||
379 | #~ msgctxt "@action:inmenu" | |
380 | #~ msgid "Be right back" | |
381 | #~ msgstr "Tulen kohe tagasi" | |
382 | ||
383 | #~ msgctxt "@action:inmenu" | |
384 | #~ msgid "Busy" | |
385 | #~ msgstr "Hõivatud" | |
386 | ||
387 | #~ msgctxt "@action:inmenu" | |
388 | #~ msgid "Do not disturb" | |
389 | #~ msgstr "Mitte segada" | |
390 | ||
391 | #~ msgctxt "@action:inmenu" | |
392 | #~ msgid "Extended Away" | |
393 | #~ msgstr "Pikaajaline eemalolek" | |
394 | ||
395 | #~ msgctxt "@action:inmenu" | |
396 | #~ msgid "Invisible" | |
397 | #~ msgstr "Nähtamatu" | |
398 | ||
399 | #~ msgctxt "@action:inmenu" | |
400 | #~ msgid "Offline" | |
401 | #~ msgstr "Pole võrgus" | |
402 | ||
403 | #~ msgctxt "@info:status" | |
404 | #~ msgid "Waiting for account information..." | |
405 | #~ msgstr "Konto teabe ootamine..." | |
406 | ||
407 | #~ msgctxt "protocol - display name (Connecting)" | |
408 | #~ msgid "%1 - %2 (Connecting)" | |
409 | #~ msgstr "%1 - %2 (ühendumine)" | |
410 | ||
411 | #~ msgctxt "protocol - display name" | |
412 | #~ msgid "%1 - %2" | |
413 | #~ msgstr "%1 - %2" | |
414 | ||
415 | #~ msgctxt "@title:window" | |
416 | #~ msgid "KCall" | |
417 | #~ msgstr "KCall" | |
418 | ||
419 | #~ msgctxt "@info:status" | |
420 | #~ msgid "Connected" | |
421 | #~ msgstr "Ühendatud" | |
422 | ||
423 | #~ msgctxt "@action" | |
424 | #~ msgid "Disconnect" | |
425 | #~ msgstr "Katkesta ühendus" | |
426 | ||
427 | #~ msgctxt "@action" | |
428 | #~ msgid "Cancel connection attempt" | |
429 | #~ msgstr "Loobu ühenduse proovimisest" | |
430 | ||
431 | #~ msgctxt "@action" | |
432 | #~ msgid "Connect" | |
433 | #~ msgstr "Ühenda" | |
434 | ||
435 | #~ msgid "" | |
436 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
437 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
438 | #~ "calls." | |
439 | #~ msgstr "" | |
440 | #~ "Soovisid KCalli sulgeda. Pane tähele, et KCall ei lõpeta tegelikult tööd, " | |
441 | #~ "vaid jääb aktiivseks süsteemisalves, oodates sisenevaid kõnesid." | |
442 | ||
443 | #~ msgid "Volume" | |
444 | #~ msgstr "Helitugevus" | |
445 | ||
446 | #~ msgid "Speakers" | |
447 | #~ msgstr "Kõlarid" | |
448 | ||
449 | #~ msgid "Microphone" | |
450 | #~ msgstr "Mikrofon" | |
451 | ||
452 | #~ msgid "Video controls" | |
453 | #~ msgstr "Video juhtimine" | |
454 | ||
455 | #~ msgid "Video input" | |
456 | #~ msgstr "Videosisend" | |
457 | ||
458 | #~ msgid "Call log" | |
459 | #~ msgstr "Kõnelogi" | |
460 | ||
461 | #~ msgid "Participants" | |
462 | #~ msgstr "Osalejad" | |
463 | ||
464 | #~ msgctxt "@title:tab" | |
465 | #~ msgid "&Contact list" | |
466 | #~ msgstr "Kontaktide nimekiri" | |
467 | ||
468 | #~ msgid "Dial directly" | |
469 | #~ msgstr "Otsevalimine" | |
470 | ||
471 | #~ msgid "Account" | |
472 | #~ msgstr "Konto" | |
473 | ||
474 | #~ msgid "Contact handle" | |
475 | #~ msgstr "Kontaktiga suhtlemine" | |
476 | ||
477 | #~ msgid "Dial (Audio only)" | |
478 | #~ msgstr "Helista (ainult hääl)" | |
479 | ||
480 | #~ msgid "Dial (Audio/Video)" | |
481 | #~ msgstr "Helista (heli ja video)" | |
482 | ||
483 | #~ msgctxt "@info:status" | |
484 | #~ msgid "Hanging up..." | |
485 | #~ msgstr "Lõpetamine..." | |
486 | ||
487 | #, fuzzy | |
488 | #~ msgid "Channel closed" | |
489 | #~ msgstr "Kanal" | |
490 | ||
491 | #, fuzzy | |
492 | #~| msgctxt "@info:status" | |
493 | #~| msgid "Disconnected with error." | |
494 | #~ msgid "Channel closed with error: %1" | |
495 | #~ msgstr "Ühendus lõpetatatud vea tõttu." | |
496 | ||
497 | #, fuzzy | |
498 | #~ msgid "Audio stream created. Stream id: %1." | |
499 | #~ msgstr "Audio Voog." | |
500 | ||
501 | #, fuzzy | |
502 | #~ msgid "Video stream created. Stream id: %1." | |
503 | #~ msgstr "Video Voog." | |
504 | ||
505 | #, fuzzy | |
506 | #~ msgctxt "1 is the stream's id" | |
507 | #~ msgid "Stream %1 direction is: %2." | |
508 | #~ msgstr "Voog suund on." | |
509 | ||
510 | #, fuzzy | |
511 | #~ msgctxt "1 is the stream's id" | |
512 | #~ msgid "Stream %1 removed." | |
513 | #~ msgstr "Voog." | |
514 | ||
515 | #, fuzzy | |
516 | #~ msgctxt "1 is the stream's id" | |
517 | #~ msgid "Stream %1 direction changed to: %2." | |
518 | #~ msgstr "Voog suund muudetud kuni." | |
519 | ||
520 | #, fuzzy | |
521 | #~ msgctxt "1 is the stream's id" | |
522 | #~ msgid "Stream %1 state changed to: %2." | |
523 | #~ msgstr "Voog muudetud kuni." | |
524 | ||
525 | #, fuzzy | |
526 | #~ msgid "User %1 joined the conference." | |
527 | #~ msgstr "Kasutaja." | |
528 | ||
529 | #, fuzzy | |
530 | #~ msgid "Awaiting answer from user %1." | |
531 | #~ msgstr "vastus kasutaja." | |
532 | ||
533 | #, fuzzy | |
534 | #~ msgid "User %1 left the conference." | |
535 | #~ msgstr "Kasutaja vasakult." | |
536 | ||
537 | #, fuzzy | |
538 | #~ msgid "Audio input device" | |
539 | #~ msgstr "Audio input seade" | |
540 | ||
541 | #, fuzzy | |
542 | #~ msgid "Audio output device" | |
543 | #~ msgstr "Audio väljund seade" | |
544 | ||
545 | #, fuzzy | |
546 | #~ msgid "Video input device" | |
547 | #~ msgstr "Video input seade" | |
548 | ||
549 | #, fuzzy | |
550 | #~ msgid "Video output driver" | |
551 | #~ msgstr "Video väljund" | |
552 | ||
553 | #, fuzzy | |
554 | #~ msgid "Xv video renderer" | |
555 | #~ msgstr "video" | |
556 | ||
557 | #, fuzzy | |
558 | #~ msgid "X11 video renderer" | |
559 | #~ msgstr "video" | |
560 | ||
561 | #, fuzzy | |
562 | #~ msgid "Autodetect" | |
563 | #~ msgstr "Automaatne tuvastamine" | |
564 | ||
565 | #, fuzzy | |
566 | #~ msgid "Test input device" | |
567 | #~ msgstr "Test input seade" | |
568 | ||
569 | #, fuzzy | |
570 | #~ msgid "ALSA" | |
571 | #~ msgstr "ALSA" | |
572 | ||
573 | #, fuzzy | |
574 | #~ msgid "OSS" | |
575 | #~ msgstr "OSS" | |
576 | ||
577 | #, fuzzy | |
578 | #~ msgid "Video4Linux" | |
579 | #~ msgstr "Video4Linux" | |
580 | ||
581 | #, fuzzy | |
582 | #~ msgid "Device name" | |
583 | #~ msgstr "Seadme nimi" | |
584 | ||
585 | #, fuzzy | |
586 | #~ msgid "Sound system" | |
587 | #~ msgstr "Heli süsteem" | |
588 | ||
589 | #, fuzzy | |
590 | #~ msgid "Video system" | |
591 | #~ msgstr "Video süsteem" | |
592 | ||
593 | #, fuzzy | |
594 | #~ msgid "Gstreamer element" | |
595 | #~ msgstr "element" | |
596 | ||
597 | #, fuzzy | |
598 | #~ msgid "Driver-specific handle" | |
599 | #~ msgstr "Draiver" | |
600 | ||
601 | #, fuzzy | |
602 | #~ msgctxt "test the device" | |
603 | #~ msgid "Test" | |
604 | #~ msgstr "Test" | |
605 | ||
606 | #, fuzzy | |
607 | #~ msgid "Add custom device..." | |
608 | #~ msgstr "Lisa kohandatud seade." | |
609 | ||
610 | #, fuzzy | |
611 | #~ msgid "" | |
612 | #~ "The gstreamer element for the selected device could not be created. " | |
613 | #~ "Please check your gstreamer installation." | |
614 | #~ msgstr "element tingimusel seade mitte kontroll paigaldamine." | |
615 | ||
616 | #, fuzzy | |
617 | #~ msgid "" | |
618 | #~ "The selected device could not be initialized. Please select another " | |
619 | #~ "device." | |
620 | #~ msgstr "seade mitte seade." | |
621 | ||
622 | #, fuzzy | |
623 | #~ msgid "" | |
624 | #~ "The gstreamer element for the audio output device could not be created. " | |
625 | #~ "Please check your gstreamer installation" | |
626 | #~ msgstr "element tingimusel audio väljund seade mitte kontroll paigaldamine" | |
627 | ||
628 | #, fuzzy | |
629 | #~ msgid "The audio output device could not be initialized." | |
630 | #~ msgstr "audio väljund seade mitte." | |
631 | ||
632 | #, fuzzy | |
633 | #~ msgid "The video output driver could not be initialized." | |
634 | #~ msgstr "video väljund mitte." | |
635 | ||
636 | #, fuzzy | |
637 | #~ msgid "" | |
638 | #~ "The selected video output driver could not be initialized. Please select " | |
639 | #~ "another driver." | |
640 | #~ msgstr "video väljund mitte." | |
641 | ||
642 | #, fuzzy | |
643 | #~ msgctxt "stop audio/video test" | |
644 | #~ msgid "Stop test" | |
645 | #~ msgstr "Peata" | |
646 | ||
647 | #, fuzzy | |
648 | #~ msgid "Hide details" | |
649 | #~ msgstr "Peida" | |
650 | ||
651 | #, fuzzy | |
652 | #~ msgid "Automatically close the call window after a timeout" | |
653 | #~ msgstr "call aken a ajaületus" | |
654 | ||
655 | #, fuzzy | |
656 | #~ msgid "Timeout in seconds:" | |
657 | #~ msgstr "Aegumine sekundites:" | |
658 | ||
659 | #, fuzzy | |
660 | #~ msgid "" | |
661 | #~ "The gstreamer element for the audio input device could not be created. " | |
662 | #~ "Please check your gstreamer installation" | |
663 | #~ msgstr "element tingimusel audio input seade mitte kontroll paigaldamine" | |
664 | ||
665 | #, fuzzy | |
666 | #~ msgid "" | |
667 | #~ "The gstreamer element for the video input device could not be created. " | |
668 | #~ "Please check your gstreamer installation." | |
669 | #~ msgstr "element tingimusel video input seade mitte kontroll paigaldamine." | |
670 | ||
671 | #, fuzzy | |
672 | #~ msgid "Could not initialize the channel" | |
673 | #~ msgstr "mitte kanal" | |
674 | ||
675 | #~ msgid "Ignore" | |
676 | #~ msgstr "Eira" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( fr ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of telepathy-kde-call-ui.po to Français | |
1 | # translation of kcall.po to | |
2 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
3 | # This file is distributed under the same license as the PACKAGE package. | |
4 | # | |
5 | # Joëlle Cornavin <jcornavin AT laposte DOT net>, 2009, 2010 2011. | |
6 | # Joëlle Cornavin <jcorn@free.fr>, 2011. | |
7 | msgid "" | |
8 | msgstr "" | |
9 | "Project-Id-Version: telepathy-kde-call-ui\n" | |
10 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
11 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
12 | "PO-Revision-Date: 2011-07-15 16:30+0200\n" | |
13 | "Last-Translator: Joëlle Cornavin <jcorn@free.fr>\n" | |
14 | "Language-Team: French <kde-francophone@kde.org>\n" | |
15 | "Language: fr\n" | |
16 | "MIME-Version: 1.0\n" | |
17 | "Content-Type: text/plain; charset=UTF-8\n" | |
18 | "Content-Transfer-Encoding: 8bit\n" | |
19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" | |
20 | ||
21 | #: src/approver.cpp:38 | |
22 | #, fuzzy | |
23 | #| msgctxt "@action:inmenu" | |
24 | #| msgid "Video call" | |
25 | msgid "Incoming video call" | |
26 | msgstr "Communication vidéo" | |
27 | ||
28 | #: src/approver.cpp:39 | |
29 | #, kde-format | |
30 | msgid "<p>%1 is asking you for a video call</p>" | |
31 | msgstr "" | |
32 | ||
33 | #: src/approver.cpp:41 | |
34 | #, fuzzy | |
35 | #| msgctxt "@action:inmenu" | |
36 | #| msgid "Voice call" | |
37 | msgid "Incoming call" | |
38 | msgstr "Communication vocale" | |
39 | ||
40 | #: src/approver.cpp:42 | |
41 | #, kde-format | |
42 | msgid "<p>%1 is calling you</p>" | |
43 | msgstr "" | |
44 | ||
45 | #: src/approver.cpp:58 src/approver.cpp:80 | |
46 | msgctxt "action, answers the incoming call" | |
47 | msgid "Answer" | |
48 | msgstr "" | |
49 | ||
50 | #: src/approver.cpp:59 src/approver.cpp:82 | |
51 | msgctxt "action, rejects the incoming call" | |
52 | msgid "Reject" | |
53 | msgstr "" | |
54 | ||
55 | #: src/call-window.cpp:95 | |
56 | #, kde-format | |
57 | msgid "Call with %1" | |
58 | msgstr "" | |
59 | ||
60 | #: src/call-window.cpp:109 | |
61 | msgctxt "@info:status" | |
62 | msgid "Connecting..." | |
63 | msgstr "Connexion..." | |
64 | ||
65 | #: src/call-window.cpp:113 | |
66 | #, fuzzy | |
67 | #| msgctxt "@info:status" | |
68 | #| msgid "Connecting..." | |
69 | msgctxt "@info:status the remote user's phone is ringing" | |
70 | msgid "Ringing..." | |
71 | msgstr "Connexion..." | |
72 | ||
73 | #: src/call-window.cpp:117 | |
74 | msgctxt "@info:status" | |
75 | msgid "Remote user accepted the call, waiting for connection..." | |
76 | msgstr "" | |
77 | ||
78 | #: src/call-window.cpp:120 | |
79 | msgctxt "@info:status" | |
80 | msgid "Talking..." | |
81 | msgstr "Parole..." | |
82 | ||
83 | #: src/call-window.cpp:136 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact ended the call." | |
86 | msgstr "" | |
87 | ||
88 | #: src/call-window.cpp:143 | |
89 | msgctxt "@info:status" | |
90 | msgid "Remote contact rejected the call." | |
91 | msgstr "" | |
92 | ||
93 | #: src/call-window.cpp:148 | |
94 | msgctxt "@info:status" | |
95 | msgid "Remote contact didn't answer." | |
96 | msgstr "" | |
97 | ||
98 | #: src/call-window.cpp:152 | |
99 | msgctxt "@info:status" | |
100 | msgid "Invalid number or contact." | |
101 | msgstr "" | |
102 | ||
103 | #: src/call-window.cpp:156 | |
104 | msgctxt "@info:status" | |
105 | msgid "You don't have enough balance to make this call." | |
106 | msgstr "" | |
107 | ||
108 | #: src/call-window.cpp:158 | |
109 | msgctxt "@info:status" | |
110 | msgid "You don't have permission to make this call." | |
111 | msgstr "" | |
112 | ||
113 | #: src/call-window.cpp:163 | |
114 | msgctxt "@info:status" | |
115 | msgid "Remote contact is currently busy." | |
116 | msgstr "" | |
117 | ||
118 | #: src/call-window.cpp:167 | |
119 | msgctxt "@info:status" | |
120 | msgid "Internal component error." | |
121 | msgstr "" | |
122 | ||
123 | #: src/call-window.cpp:170 | |
124 | msgctxt "@info:status" | |
125 | msgid "Remote service error." | |
126 | msgstr "" | |
127 | ||
128 | #: src/call-window.cpp:173 | |
129 | msgctxt "@info:status" | |
130 | msgid "Network error." | |
131 | msgstr "" | |
132 | ||
133 | #: src/call-window.cpp:177 | |
134 | msgctxt "@info:status" | |
135 | msgid "Failed to negotiate codecs." | |
136 | msgstr "" | |
137 | ||
138 | #: src/call-window.cpp:179 | |
139 | msgctxt "@info:status" | |
140 | msgid "Unsupported media type." | |
141 | msgstr "" | |
142 | ||
143 | #: src/call-window.cpp:183 | |
144 | msgctxt "@info:status" | |
145 | msgid "Connectivity error." | |
146 | msgstr "" | |
147 | ||
148 | #: src/call-window.cpp:187 | |
149 | msgctxt "@info:status" | |
150 | msgid "Unknown error." | |
151 | msgstr "" | |
152 | ||
153 | #: src/call-window.cpp:192 | |
154 | msgctxt "@info:status" | |
155 | msgid "Disconnected." | |
156 | msgstr "Déconnecté." | |
157 | ||
158 | #: src/call-window.cpp:196 | |
159 | #, fuzzy, kde-format | |
160 | #| msgctxt "@info:status" | |
161 | #| msgid "Disconnected" | |
162 | msgctxt "@info:status the call was disconnected because..." | |
163 | msgid "Disconnected: %1" | |
164 | msgstr "Déconnecté" | |
165 | ||
166 | #: src/call-window.cpp:339 | |
167 | #, fuzzy | |
168 | #| msgctxt "@action" | |
169 | #| msgid "Send video" | |
170 | msgctxt "@action" | |
171 | msgid "Show my video" | |
172 | msgstr "Envoyer la vidéo" | |
173 | ||
174 | #: src/call-window.cpp:344 | |
175 | #, fuzzy | |
176 | #| msgid "Dialpad" | |
177 | msgctxt "@action" | |
178 | msgid "Show dialpad" | |
179 | msgstr "Dialpad" | |
180 | ||
181 | #: src/call-window.cpp:351 | |
182 | msgctxt "@action" | |
183 | msgid "Send video" | |
184 | msgstr "Envoyer la vidéo" | |
185 | ||
186 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
187 | msgctxt "@action" | |
188 | msgid "Mute" | |
189 | msgstr "" | |
190 | ||
191 | #: src/call-window.cpp:363 | |
192 | msgctxt "@action" | |
193 | msgid "Hold" | |
194 | msgstr "" | |
195 | ||
196 | #: src/call-window.cpp:368 | |
197 | msgctxt "@action" | |
198 | msgid "Hangup" | |
199 | msgstr "Raccrocher" | |
200 | ||
201 | #: src/main.cpp:36 | |
202 | msgid "KDE Telepathy Call Ui" | |
203 | msgstr "" | |
204 | ||
205 | #: src/main.cpp:37 | |
206 | msgid "VoIP client for KDE" | |
207 | msgstr "Client VoIP pour KDE" | |
208 | ||
209 | #: src/main.cpp:38 | |
210 | msgid "(C) 2009, George Kiagiadakis" | |
211 | msgstr "(C) 2009, George Kiagiadakis" | |
212 | ||
213 | #: src/main.cpp:40 | |
214 | msgctxt "@info:credit" | |
215 | msgid "George Kiagiadakis" | |
216 | msgstr "George Kiagiadakis" | |
217 | ||
218 | #: rc.cpp:1 | |
219 | msgctxt "NAME OF TRANSLATORS" | |
220 | msgid "Your names" | |
221 | msgstr "Joëlle Cornavin" | |
222 | ||
223 | #: rc.cpp:2 | |
224 | msgctxt "EMAIL OF TRANSLATORS" | |
225 | msgid "Your emails" | |
226 | msgstr "jcorn@free.fr" | |
227 | ||
228 | #. i18n: file: src/callwindowui.rc:11 | |
229 | #. i18n: ectx: Menu (call) | |
230 | #: rc.cpp:5 | |
231 | msgid "Call" | |
232 | msgstr "Appel" | |
233 | ||
234 | #. i18n: file: src/callwindowui.rc:20 | |
235 | #. i18n: ectx: Menu (media) | |
236 | #: rc.cpp:8 | |
237 | msgid "Media" | |
238 | msgstr "" | |
239 | ||
240 | #. i18n: file: src/callwindowui.rc:27 | |
241 | #. i18n: ectx: ToolBar (mainToolBar) | |
242 | #: rc.cpp:11 | |
243 | msgid "Main Toolbar" | |
244 | msgstr "Barre principale" | |
245 | ||
246 | #. i18n: file: src/dtmf-widget.ui:17 | |
247 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
248 | #: rc.cpp:14 | |
249 | msgid "1" | |
250 | msgstr "1" | |
251 | ||
252 | #. i18n: file: src/dtmf-widget.ui:24 | |
253 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
254 | #: rc.cpp:17 | |
255 | msgid "2" | |
256 | msgstr "2" | |
257 | ||
258 | #. i18n: file: src/dtmf-widget.ui:31 | |
259 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
260 | #: rc.cpp:20 | |
261 | msgid "3" | |
262 | msgstr "3" | |
263 | ||
264 | #. i18n: file: src/dtmf-widget.ui:38 | |
265 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
266 | #: rc.cpp:23 | |
267 | msgid "4" | |
268 | msgstr "4" | |
269 | ||
270 | #. i18n: file: src/dtmf-widget.ui:45 | |
271 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
272 | #: rc.cpp:26 | |
273 | msgid "5" | |
274 | msgstr "5" | |
275 | ||
276 | #. i18n: file: src/dtmf-widget.ui:52 | |
277 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
278 | #: rc.cpp:29 | |
279 | msgid "6" | |
280 | msgstr "6" | |
281 | ||
282 | #. i18n: file: src/dtmf-widget.ui:59 | |
283 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
284 | #: rc.cpp:32 | |
285 | msgid "7" | |
286 | msgstr "7" | |
287 | ||
288 | #. i18n: file: src/dtmf-widget.ui:66 | |
289 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
290 | #: rc.cpp:35 | |
291 | msgid "8" | |
292 | msgstr "8" | |
293 | ||
294 | #. i18n: file: src/dtmf-widget.ui:73 | |
295 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
296 | #: rc.cpp:38 | |
297 | msgid "9" | |
298 | msgstr "9" | |
299 | ||
300 | #. i18n: file: src/dtmf-widget.ui:80 | |
301 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
302 | #: rc.cpp:41 | |
303 | msgid "*" | |
304 | msgstr "*" | |
305 | ||
306 | #. i18n: file: src/dtmf-widget.ui:87 | |
307 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
308 | #: rc.cpp:44 | |
309 | msgid "0" | |
310 | msgstr "0" | |
311 | ||
312 | #. i18n: file: src/dtmf-widget.ui:94 | |
313 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
314 | #: rc.cpp:47 | |
315 | msgid "#" | |
316 | msgstr "#" | |
317 | ||
318 | #~ msgid "Warning: %1" | |
319 | #~ msgstr "Avertissement : %1" | |
320 | ||
321 | #~ msgid "Error: %1" | |
322 | #~ msgstr "Erreur : %1" | |
323 | ||
324 | #~ msgid "KCall" | |
325 | #~ msgstr "KCall" | |
326 | ||
327 | #~ msgid "Brightness" | |
328 | #~ msgstr "Luminosité" | |
329 | ||
330 | #~ msgid "Contrast" | |
331 | #~ msgstr "Contraste" | |
332 | ||
333 | #~ msgid "Hue" | |
334 | #~ msgstr "Teinte" | |
335 | ||
336 | #~ msgid "Saturation" | |
337 | #~ msgstr "Saturation" | |
338 | ||
339 | #~ msgid "Dialpad" | |
340 | #~ msgstr "Dialpad" | |
341 | ||
342 | #~ msgid "" | |
343 | #~ "Defines whether the window should close automatically after a timeout " | |
344 | #~ "when the call is over." | |
345 | #~ msgstr "" | |
346 | #~ "Définit s'il faut ou non que la fenêtre se ferme automatiquement après un " | |
347 | #~ "délai d'attente une fois l'appel terminé." | |
348 | ||
349 | #~ msgid "" | |
350 | #~ "Defines how many seconds the call window should remain visible after the " | |
351 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
352 | #~ msgstr "" | |
353 | #~ "Définit pendant combien de secondes la fenêtre d'appel devra rester " | |
354 | #~ "visible une fois l'appel terminé. Cette option repose sur " | |
355 | #~ "« CloseOnDisconnect »." | |
356 | ||
357 | #~ msgid "The audio input device could not be initialized" | |
358 | #~ msgstr "Impossible d'initialiser le périphérique d'entrée audio" | |
359 | ||
360 | #~ msgid "The video input device could not be initialized" | |
361 | #~ msgstr "Impossible d'initialiser le périphérique d'entrée vidéo" | |
362 | ||
363 | #~ msgid "" | |
364 | #~ "Could not create some of the required elements. Please check your " | |
365 | #~ "GStreamer installation." | |
366 | #~ msgstr "" | |
367 | #~ "Impossible de créer certains des éléments requis. Veuillez vérifier votre " | |
368 | #~ "installation de GStreamer." | |
369 | ||
370 | #~ msgid "The audio output device could not be initialized" | |
371 | #~ msgstr "Impossible d'initialiser le périphérique de sortie audio" | |
372 | ||
373 | #~ msgctxt "@action:inmenu" | |
374 | #~ msgid "Show participants" | |
375 | #~ msgstr "Afficher les participants" | |
376 | ||
377 | #~ msgctxt "@action:inmenu" | |
378 | #~ msgid "Show log" | |
379 | #~ msgstr "Afficher le journal" | |
380 | ||
381 | #~ msgctxt "@action" | |
382 | #~ msgid "Stop sending video" | |
383 | #~ msgstr "Arrêter d'envoyer la vidéo" | |
384 | ||
385 | #~ msgctxt "@action:inmenu" | |
386 | #~ msgid "Status" | |
387 | #~ msgstr "État" | |
388 | ||
389 | #~ msgctxt "@action:inmenu" | |
390 | #~ msgid "Available" | |
391 | #~ msgstr "Disponible" | |
392 | ||
393 | #~ msgctxt "@action:inmenu" | |
394 | #~ msgid "Away" | |
395 | #~ msgstr "Absent" | |
396 | ||
397 | #~ msgctxt "@action:inmenu" | |
398 | #~ msgid "Be right back" | |
399 | #~ msgstr "Être de retour" | |
400 | ||
401 | #~ msgctxt "@action:inmenu" | |
402 | #~ msgid "Busy" | |
403 | #~ msgstr "Occupé" | |
404 | ||
405 | #~ msgctxt "@action:inmenu" | |
406 | #~ msgid "Do not disturb" | |
407 | #~ msgstr "Ne pas déranger" | |
408 | ||
409 | #~ msgctxt "@action:inmenu" | |
410 | #~ msgid "Extended Away" | |
411 | #~ msgstr "Absence prolongée" | |
412 | ||
413 | #~ msgctxt "@action:inmenu" | |
414 | #~ msgid "Invisible" | |
415 | #~ msgstr "Invisible" | |
416 | ||
417 | #~ msgctxt "@action:inmenu" | |
418 | #~ msgid "Offline" | |
419 | #~ msgstr "Hors ligne" | |
420 | ||
421 | #~ msgctxt "@info:status" | |
422 | #~ msgid "Waiting for account information..." | |
423 | #~ msgstr "Attente des informations sur le compte..." | |
424 | ||
425 | #~ msgctxt "protocol - display name (Connecting)" | |
426 | #~ msgid "%1 - %2 (Connecting)" | |
427 | #~ msgstr "%1 - %2 (Connexion en cours)" | |
428 | ||
429 | #~ msgctxt "protocol - display name" | |
430 | #~ msgid "%1 - %2" | |
431 | #~ msgstr "%1 - %2" | |
432 | ||
433 | #~ msgctxt "@title:window" | |
434 | #~ msgid "KCall" | |
435 | #~ msgstr "KCall" | |
436 | ||
437 | #~ msgctxt "@info:status" | |
438 | #~ msgid "Connected" | |
439 | #~ msgstr "Connecté" | |
440 | ||
441 | #~ msgctxt "@action" | |
442 | #~ msgid "Disconnect" | |
443 | #~ msgstr "Déconnecter" | |
444 | ||
445 | #~ msgctxt "@action" | |
446 | #~ msgid "Cancel connection attempt" | |
447 | #~ msgstr "Annuler la tentative de connexion" | |
448 | ||
449 | #~ msgctxt "@action" | |
450 | #~ msgid "Connect" | |
451 | #~ msgstr "Connecter" | |
452 | ||
453 | #~ msgid "" | |
454 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
455 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
456 | #~ "calls." | |
457 | #~ msgstr "" | |
458 | #~ "Vous avez demandé à quitter KCall. Notez que KCall ne se fermera pas à " | |
459 | #~ "proprement parler mais restera actif dans la boîte à miniatures, " | |
460 | #~ "attendant des appels entrants." | |
461 | ||
462 | #~ msgid "Volume" | |
463 | #~ msgstr "Volume" | |
464 | ||
465 | #~ msgid "Speakers" | |
466 | #~ msgstr "Haut-parleurs" | |
467 | ||
468 | #~ msgid "Microphone" | |
469 | #~ msgstr "Microphone" | |
470 | ||
471 | #~ msgid "Video controls" | |
472 | #~ msgstr "Contrôles vidéo" | |
473 | ||
474 | #~ msgid "Video input" | |
475 | #~ msgstr "Entrée vidéo" | |
476 | ||
477 | #~ msgid "Call log" | |
478 | #~ msgstr "Journal des appels" | |
479 | ||
480 | #~ msgid "Participants" | |
481 | #~ msgstr "Participants" | |
482 | ||
483 | #~ msgctxt "@title:tab" | |
484 | #~ msgid "&Contact list" | |
485 | #~ msgstr "&Liste de contacts" | |
486 | ||
487 | #~ msgid "Dial directly" | |
488 | #~ msgstr "Numéroter directement" | |
489 | ||
490 | #~ msgid "Account" | |
491 | #~ msgstr "Compte" | |
492 | ||
493 | #~ msgid "Contact handle" | |
494 | #~ msgstr "Descripteur de contacts" | |
495 | ||
496 | #~ msgid "Dial (Audio only)" | |
497 | #~ msgstr "Numéroter directement (audio seulement)" | |
498 | ||
499 | #~ msgid "Dial (Audio/Video)" | |
500 | #~ msgstr "Numéroter directement (audio/vidéo)" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( ga ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Irish translation of kcall | |
1 | # Copyright (C) 2009 This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the kcall package. | |
3 | # Kevin Scannell <kscanne@gmail.com>, 2009. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: kcall\n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2009-12-24 06:59-0500\n" | |
10 | "Last-Translator: Kevin Scannell <kscanne@gmail.com>\n" | |
11 | "Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n" | |
12 | "Language: ga\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? " | |
17 | "3 : 4\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | msgid "Incoming call" | |
30 | msgstr "" | |
31 | ||
32 | #: src/approver.cpp:42 | |
33 | #, kde-format | |
34 | msgid "<p>%1 is calling you</p>" | |
35 | msgstr "" | |
36 | ||
37 | #: src/approver.cpp:58 src/approver.cpp:80 | |
38 | #, fuzzy | |
39 | #| msgid "Answer" | |
40 | msgctxt "action, answers the incoming call" | |
41 | msgid "Answer" | |
42 | msgstr "Freagra" | |
43 | ||
44 | #: src/approver.cpp:59 src/approver.cpp:82 | |
45 | msgctxt "action, rejects the incoming call" | |
46 | msgid "Reject" | |
47 | msgstr "" | |
48 | ||
49 | #: src/call-window.cpp:95 | |
50 | #, kde-format | |
51 | msgid "Call with %1" | |
52 | msgstr "" | |
53 | ||
54 | #: src/call-window.cpp:109 | |
55 | msgctxt "@info:status" | |
56 | msgid "Connecting..." | |
57 | msgstr "Á Cheangal..." | |
58 | ||
59 | #: src/call-window.cpp:113 | |
60 | #, fuzzy | |
61 | #| msgctxt "@info:status" | |
62 | #| msgid "Connecting..." | |
63 | msgctxt "@info:status the remote user's phone is ringing" | |
64 | msgid "Ringing..." | |
65 | msgstr "Á Cheangal..." | |
66 | ||
67 | #: src/call-window.cpp:117 | |
68 | msgctxt "@info:status" | |
69 | msgid "Remote user accepted the call, waiting for connection..." | |
70 | msgstr "" | |
71 | ||
72 | #: src/call-window.cpp:120 | |
73 | msgctxt "@info:status" | |
74 | msgid "Talking..." | |
75 | msgstr "Ag Caint..." | |
76 | ||
77 | #: src/call-window.cpp:136 | |
78 | msgctxt "@info:status" | |
79 | msgid "Remote contact ended the call." | |
80 | msgstr "" | |
81 | ||
82 | #: src/call-window.cpp:143 | |
83 | msgctxt "@info:status" | |
84 | msgid "Remote contact rejected the call." | |
85 | msgstr "" | |
86 | ||
87 | #: src/call-window.cpp:148 | |
88 | msgctxt "@info:status" | |
89 | msgid "Remote contact didn't answer." | |
90 | msgstr "" | |
91 | ||
92 | #: src/call-window.cpp:152 | |
93 | msgctxt "@info:status" | |
94 | msgid "Invalid number or contact." | |
95 | msgstr "" | |
96 | ||
97 | #: src/call-window.cpp:156 | |
98 | msgctxt "@info:status" | |
99 | msgid "You don't have enough balance to make this call." | |
100 | msgstr "" | |
101 | ||
102 | #: src/call-window.cpp:158 | |
103 | msgctxt "@info:status" | |
104 | msgid "You don't have permission to make this call." | |
105 | msgstr "" | |
106 | ||
107 | #: src/call-window.cpp:163 | |
108 | msgctxt "@info:status" | |
109 | msgid "Remote contact is currently busy." | |
110 | msgstr "" | |
111 | ||
112 | #: src/call-window.cpp:167 | |
113 | msgctxt "@info:status" | |
114 | msgid "Internal component error." | |
115 | msgstr "" | |
116 | ||
117 | #: src/call-window.cpp:170 | |
118 | msgctxt "@info:status" | |
119 | msgid "Remote service error." | |
120 | msgstr "" | |
121 | ||
122 | #: src/call-window.cpp:173 | |
123 | msgctxt "@info:status" | |
124 | msgid "Network error." | |
125 | msgstr "" | |
126 | ||
127 | #: src/call-window.cpp:177 | |
128 | msgctxt "@info:status" | |
129 | msgid "Failed to negotiate codecs." | |
130 | msgstr "" | |
131 | ||
132 | #: src/call-window.cpp:179 | |
133 | msgctxt "@info:status" | |
134 | msgid "Unsupported media type." | |
135 | msgstr "" | |
136 | ||
137 | #: src/call-window.cpp:183 | |
138 | msgctxt "@info:status" | |
139 | msgid "Connectivity error." | |
140 | msgstr "" | |
141 | ||
142 | #: src/call-window.cpp:187 | |
143 | msgctxt "@info:status" | |
144 | msgid "Unknown error." | |
145 | msgstr "" | |
146 | ||
147 | #: src/call-window.cpp:192 | |
148 | msgctxt "@info:status" | |
149 | msgid "Disconnected." | |
150 | msgstr "Dícheangailte." | |
151 | ||
152 | #: src/call-window.cpp:196 | |
153 | #, fuzzy, kde-format | |
154 | #| msgctxt "@info:status" | |
155 | #| msgid "Disconnected." | |
156 | msgctxt "@info:status the call was disconnected because..." | |
157 | msgid "Disconnected: %1" | |
158 | msgstr "Dícheangailte." | |
159 | ||
160 | #: src/call-window.cpp:339 | |
161 | msgctxt "@action" | |
162 | msgid "Show my video" | |
163 | msgstr "Taispeáin m'fhíseán" | |
164 | ||
165 | #: src/call-window.cpp:344 | |
166 | msgctxt "@action" | |
167 | msgid "Show dialpad" | |
168 | msgstr "Taispeáin eochaircheap" | |
169 | ||
170 | #: src/call-window.cpp:351 | |
171 | msgctxt "@action" | |
172 | msgid "Send video" | |
173 | msgstr "Seol físeán" | |
174 | ||
175 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
176 | msgctxt "@action" | |
177 | msgid "Mute" | |
178 | msgstr "Gan Fuaim" | |
179 | ||
180 | #: src/call-window.cpp:363 | |
181 | msgctxt "@action" | |
182 | msgid "Hold" | |
183 | msgstr "Cuir Ar Feitheamh" | |
184 | ||
185 | #: src/call-window.cpp:368 | |
186 | msgctxt "@action" | |
187 | msgid "Hangup" | |
188 | msgstr "Croch suas" | |
189 | ||
190 | #: src/main.cpp:36 | |
191 | msgid "KDE Telepathy Call Ui" | |
192 | msgstr "" | |
193 | ||
194 | #: src/main.cpp:37 | |
195 | msgid "VoIP client for KDE" | |
196 | msgstr "Cliant VoIP KDE" | |
197 | ||
198 | #: src/main.cpp:38 | |
199 | msgid "(C) 2009, George Kiagiadakis" | |
200 | msgstr "© 2009, George Kiagiadakis" | |
201 | ||
202 | #: src/main.cpp:40 | |
203 | msgctxt "@info:credit" | |
204 | msgid "George Kiagiadakis" | |
205 | msgstr "George Kiagiadakis" | |
206 | ||
207 | #: rc.cpp:1 | |
208 | msgctxt "NAME OF TRANSLATORS" | |
209 | msgid "Your names" | |
210 | msgstr "Kevin Scannell" | |
211 | ||
212 | #: rc.cpp:2 | |
213 | msgctxt "EMAIL OF TRANSLATORS" | |
214 | msgid "Your emails" | |
215 | msgstr "kscanne@gmail.com" | |
216 | ||
217 | #. i18n: file: src/callwindowui.rc:11 | |
218 | #. i18n: ectx: Menu (call) | |
219 | #: rc.cpp:5 | |
220 | msgid "Call" | |
221 | msgstr "Glao" | |
222 | ||
223 | #. i18n: file: src/callwindowui.rc:20 | |
224 | #. i18n: ectx: Menu (media) | |
225 | #: rc.cpp:8 | |
226 | msgid "Media" | |
227 | msgstr "Meáin" | |
228 | ||
229 | #. i18n: file: src/callwindowui.rc:27 | |
230 | #. i18n: ectx: ToolBar (mainToolBar) | |
231 | #: rc.cpp:11 | |
232 | msgid "Main Toolbar" | |
233 | msgstr "Príomhbharra Uirlisí" | |
234 | ||
235 | #. i18n: file: src/dtmf-widget.ui:17 | |
236 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
237 | #: rc.cpp:14 | |
238 | msgid "1" | |
239 | msgstr "1" | |
240 | ||
241 | #. i18n: file: src/dtmf-widget.ui:24 | |
242 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
243 | #: rc.cpp:17 | |
244 | msgid "2" | |
245 | msgstr "2" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:31 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
249 | #: rc.cpp:20 | |
250 | msgid "3" | |
251 | msgstr "3" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:38 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
255 | #: rc.cpp:23 | |
256 | msgid "4" | |
257 | msgstr "4" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:45 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
261 | #: rc.cpp:26 | |
262 | msgid "5" | |
263 | msgstr "5" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:52 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
267 | #: rc.cpp:29 | |
268 | msgid "6" | |
269 | msgstr "6" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:59 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
273 | #: rc.cpp:32 | |
274 | msgid "7" | |
275 | msgstr "7" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:66 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
279 | #: rc.cpp:35 | |
280 | msgid "8" | |
281 | msgstr "8" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:73 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
285 | #: rc.cpp:38 | |
286 | msgid "9" | |
287 | msgstr "9" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:80 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
291 | #: rc.cpp:41 | |
292 | msgid "*" | |
293 | msgstr "*" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:87 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
297 | #: rc.cpp:44 | |
298 | msgid "0" | |
299 | msgstr "0" | |
300 | ||
301 | #. i18n: file: src/dtmf-widget.ui:94 | |
302 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
303 | #: rc.cpp:47 | |
304 | msgid "#" | |
305 | msgstr "#" | |
306 | ||
307 | #~ msgid "Warning: %1" | |
308 | #~ msgstr "Rabhadh: %1" | |
309 | ||
310 | #~ msgid "Error: %1" | |
311 | #~ msgstr "Earráid: %1" | |
312 | ||
313 | #~ msgid "KCall" | |
314 | #~ msgstr "KCall" | |
315 | ||
316 | #~ msgid "Brightness" | |
317 | #~ msgstr "Gile" | |
318 | ||
319 | #~ msgid "Contrast" | |
320 | #~ msgstr "Codarsnacht" | |
321 | ||
322 | #~ msgid "Hue" | |
323 | #~ msgstr "Lí" | |
324 | ||
325 | #~ msgid "Saturation" | |
326 | #~ msgstr "Sáithiú" | |
327 | ||
328 | #~ msgid "Dialpad" | |
329 | #~ msgstr "Eochaircheap" | |
330 | ||
331 | #~ msgid "Volume" | |
332 | #~ msgstr "Airde" | |
333 | ||
334 | #~ msgid "Microphone" | |
335 | #~ msgstr "Micreafón" | |
336 | ||
337 | #~ msgid "Participants" | |
338 | #~ msgstr "Rannpháirtithe" | |
339 | ||
340 | #~ msgid "Account" | |
341 | #~ msgstr "Cuntas" | |
342 | ||
343 | #~ msgid "Autodetect" | |
344 | #~ msgstr "Braith go huathoibríoch" | |
345 | ||
346 | #~ msgid "ALSA" | |
347 | #~ msgstr "ALSA" | |
348 | ||
349 | #~ msgid "OSS" | |
350 | #~ msgstr "OSS" | |
351 | ||
352 | #~ msgid "Video4Linux" | |
353 | #~ msgstr "Video4Linux" | |
354 | ||
355 | #~ msgid "Device name" | |
356 | #~ msgstr "Ainm an ghléis" | |
357 | ||
358 | #~ msgid "Timeout in seconds:" | |
359 | #~ msgstr "Teorainn Ama (soicindí):" | |
360 | ||
361 | #~ msgid "Ignore" | |
362 | #~ msgstr "Déan neamhaird de" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( gl ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Xosé <xosecalvo@gmail.com>, 2009. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2009-11-23 23:15+0100\n" | |
10 | "Last-Translator: Xosé <xosecalvo@gmail.com>\n" | |
11 | "Language-Team: Galego <proxecto@trasno.net>\n" | |
12 | "Language: gl\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.0\n" | |
17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
18 | "X-Environment: kde\n" | |
19 | "X-Accelerator-Marker: &\n" | |
20 | "X-Text-Markup: kde4\n" | |
21 | ||
22 | #: src/approver.cpp:38 | |
23 | #, fuzzy | |
24 | #| msgctxt "@action:inmenu" | |
25 | #| msgid "Video call" | |
26 | msgid "Incoming video call" | |
27 | msgstr "Chamada de vídeo" | |
28 | ||
29 | #: src/approver.cpp:39 | |
30 | #, kde-format | |
31 | msgid "<p>%1 is asking you for a video call</p>" | |
32 | msgstr "" | |
33 | ||
34 | #: src/approver.cpp:41 | |
35 | #, fuzzy | |
36 | #| msgctxt "@action:inmenu" | |
37 | #| msgid "Voice call" | |
38 | msgid "Incoming call" | |
39 | msgstr "Chamada de voz" | |
40 | ||
41 | #: src/approver.cpp:42 | |
42 | #, kde-format | |
43 | msgid "<p>%1 is calling you</p>" | |
44 | msgstr "" | |
45 | ||
46 | #: src/approver.cpp:58 src/approver.cpp:80 | |
47 | msgctxt "action, answers the incoming call" | |
48 | msgid "Answer" | |
49 | msgstr "" | |
50 | ||
51 | #: src/approver.cpp:59 src/approver.cpp:82 | |
52 | msgctxt "action, rejects the incoming call" | |
53 | msgid "Reject" | |
54 | msgstr "" | |
55 | ||
56 | #: src/call-window.cpp:95 | |
57 | #, kde-format | |
58 | msgid "Call with %1" | |
59 | msgstr "" | |
60 | ||
61 | #: src/call-window.cpp:109 | |
62 | msgctxt "@info:status" | |
63 | msgid "Connecting..." | |
64 | msgstr "A conectar..." | |
65 | ||
66 | #: src/call-window.cpp:113 | |
67 | #, fuzzy | |
68 | #| msgctxt "@info:status" | |
69 | #| msgid "Connecting..." | |
70 | msgctxt "@info:status the remote user's phone is ringing" | |
71 | msgid "Ringing..." | |
72 | msgstr "A conectar..." | |
73 | ||
74 | #: src/call-window.cpp:117 | |
75 | msgctxt "@info:status" | |
76 | msgid "Remote user accepted the call, waiting for connection..." | |
77 | msgstr "" | |
78 | ||
79 | #: src/call-window.cpp:120 | |
80 | msgctxt "@info:status" | |
81 | msgid "Talking..." | |
82 | msgstr "A falar..." | |
83 | ||
84 | #: src/call-window.cpp:136 | |
85 | msgctxt "@info:status" | |
86 | msgid "Remote contact ended the call." | |
87 | msgstr "" | |
88 | ||
89 | #: src/call-window.cpp:143 | |
90 | msgctxt "@info:status" | |
91 | msgid "Remote contact rejected the call." | |
92 | msgstr "" | |
93 | ||
94 | #: src/call-window.cpp:148 | |
95 | msgctxt "@info:status" | |
96 | msgid "Remote contact didn't answer." | |
97 | msgstr "" | |
98 | ||
99 | #: src/call-window.cpp:152 | |
100 | msgctxt "@info:status" | |
101 | msgid "Invalid number or contact." | |
102 | msgstr "" | |
103 | ||
104 | #: src/call-window.cpp:156 | |
105 | msgctxt "@info:status" | |
106 | msgid "You don't have enough balance to make this call." | |
107 | msgstr "" | |
108 | ||
109 | #: src/call-window.cpp:158 | |
110 | msgctxt "@info:status" | |
111 | msgid "You don't have permission to make this call." | |
112 | msgstr "" | |
113 | ||
114 | #: src/call-window.cpp:163 | |
115 | msgctxt "@info:status" | |
116 | msgid "Remote contact is currently busy." | |
117 | msgstr "" | |
118 | ||
119 | #: src/call-window.cpp:167 | |
120 | msgctxt "@info:status" | |
121 | msgid "Internal component error." | |
122 | msgstr "" | |
123 | ||
124 | #: src/call-window.cpp:170 | |
125 | msgctxt "@info:status" | |
126 | msgid "Remote service error." | |
127 | msgstr "" | |
128 | ||
129 | #: src/call-window.cpp:173 | |
130 | msgctxt "@info:status" | |
131 | msgid "Network error." | |
132 | msgstr "" | |
133 | ||
134 | #: src/call-window.cpp:177 | |
135 | msgctxt "@info:status" | |
136 | msgid "Failed to negotiate codecs." | |
137 | msgstr "" | |
138 | ||
139 | #: src/call-window.cpp:179 | |
140 | msgctxt "@info:status" | |
141 | msgid "Unsupported media type." | |
142 | msgstr "" | |
143 | ||
144 | #: src/call-window.cpp:183 | |
145 | msgctxt "@info:status" | |
146 | msgid "Connectivity error." | |
147 | msgstr "" | |
148 | ||
149 | #: src/call-window.cpp:187 | |
150 | msgctxt "@info:status" | |
151 | msgid "Unknown error." | |
152 | msgstr "" | |
153 | ||
154 | #: src/call-window.cpp:192 | |
155 | msgctxt "@info:status" | |
156 | msgid "Disconnected." | |
157 | msgstr "Desconectado." | |
158 | ||
159 | #: src/call-window.cpp:196 | |
160 | #, fuzzy, kde-format | |
161 | #| msgctxt "@info:status" | |
162 | #| msgid "Disconnected" | |
163 | msgctxt "@info:status the call was disconnected because..." | |
164 | msgid "Disconnected: %1" | |
165 | msgstr "Desconectado" | |
166 | ||
167 | #: src/call-window.cpp:339 | |
168 | #, fuzzy | |
169 | #| msgctxt "@action" | |
170 | #| msgid "Send video" | |
171 | msgctxt "@action" | |
172 | msgid "Show my video" | |
173 | msgstr "Enviar vídeo" | |
174 | ||
175 | #: src/call-window.cpp:344 | |
176 | #, fuzzy | |
177 | #| msgid "Dialpad" | |
178 | msgctxt "@action" | |
179 | msgid "Show dialpad" | |
180 | msgstr "Teclado para marcar" | |
181 | ||
182 | #: src/call-window.cpp:351 | |
183 | msgctxt "@action" | |
184 | msgid "Send video" | |
185 | msgstr "Enviar vídeo" | |
186 | ||
187 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
188 | msgctxt "@action" | |
189 | msgid "Mute" | |
190 | msgstr "" | |
191 | ||
192 | #: src/call-window.cpp:363 | |
193 | msgctxt "@action" | |
194 | msgid "Hold" | |
195 | msgstr "" | |
196 | ||
197 | #: src/call-window.cpp:368 | |
198 | msgctxt "@action" | |
199 | msgid "Hangup" | |
200 | msgstr "Colgar" | |
201 | ||
202 | #: src/main.cpp:36 | |
203 | msgid "KDE Telepathy Call Ui" | |
204 | msgstr "" | |
205 | ||
206 | #: src/main.cpp:37 | |
207 | msgid "VoIP client for KDE" | |
208 | msgstr "Cliente de VoIP para o KDE" | |
209 | ||
210 | #: src/main.cpp:38 | |
211 | msgid "(C) 2009, George Kiagiadakis" | |
212 | msgstr "(C) 2009, George Kiagiadakis" | |
213 | ||
214 | #: src/main.cpp:40 | |
215 | msgctxt "@info:credit" | |
216 | msgid "George Kiagiadakis" | |
217 | msgstr "George Kiagiadakis" | |
218 | ||
219 | #: rc.cpp:1 | |
220 | msgctxt "NAME OF TRANSLATORS" | |
221 | msgid "Your names" | |
222 | msgstr "Xosé Calvo" | |
223 | ||
224 | #: rc.cpp:2 | |
225 | msgctxt "EMAIL OF TRANSLATORS" | |
226 | msgid "Your emails" | |
227 | msgstr "xosecalvo@gmail.com" | |
228 | ||
229 | #. i18n: file: src/callwindowui.rc:11 | |
230 | #. i18n: ectx: Menu (call) | |
231 | #: rc.cpp:5 | |
232 | msgid "Call" | |
233 | msgstr "Chamada" | |
234 | ||
235 | #. i18n: file: src/callwindowui.rc:20 | |
236 | #. i18n: ectx: Menu (media) | |
237 | #: rc.cpp:8 | |
238 | msgid "Media" | |
239 | msgstr "" | |
240 | ||
241 | #. i18n: file: src/callwindowui.rc:27 | |
242 | #. i18n: ectx: ToolBar (mainToolBar) | |
243 | #: rc.cpp:11 | |
244 | msgid "Main Toolbar" | |
245 | msgstr "Barra de ferramentas principal" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:17 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
249 | #: rc.cpp:14 | |
250 | msgid "1" | |
251 | msgstr "1" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:24 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
255 | #: rc.cpp:17 | |
256 | msgid "2" | |
257 | msgstr "2" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:31 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
261 | #: rc.cpp:20 | |
262 | msgid "3" | |
263 | msgstr "3" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:38 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
267 | #: rc.cpp:23 | |
268 | msgid "4" | |
269 | msgstr "4" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:45 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
273 | #: rc.cpp:26 | |
274 | msgid "5" | |
275 | msgstr "5" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:52 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
279 | #: rc.cpp:29 | |
280 | msgid "6" | |
281 | msgstr " " | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:59 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
285 | #: rc.cpp:32 | |
286 | msgid "7" | |
287 | msgstr "7" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:66 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
291 | #: rc.cpp:35 | |
292 | msgid "8" | |
293 | msgstr " " | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:73 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
297 | #: rc.cpp:38 | |
298 | msgid "9" | |
299 | msgstr "9" | |
300 | ||
301 | #. i18n: file: src/dtmf-widget.ui:80 | |
302 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
303 | #: rc.cpp:41 | |
304 | msgid "*" | |
305 | msgstr "*" | |
306 | ||
307 | #. i18n: file: src/dtmf-widget.ui:87 | |
308 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
309 | #: rc.cpp:44 | |
310 | msgid "0" | |
311 | msgstr "0" | |
312 | ||
313 | #. i18n: file: src/dtmf-widget.ui:94 | |
314 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
315 | #: rc.cpp:47 | |
316 | msgid "#" | |
317 | msgstr "#" | |
318 | ||
319 | #~ msgid "Warning: %1" | |
320 | #~ msgstr "Aviso: %1" | |
321 | ||
322 | #~ msgid "Error: %1" | |
323 | #~ msgstr "Erro: %1" | |
324 | ||
325 | #~ msgid "KCall" | |
326 | #~ msgstr "KCall" | |
327 | ||
328 | #~ msgid "Brightness" | |
329 | #~ msgstr "Brillo" | |
330 | ||
331 | #~ msgid "Contrast" | |
332 | #~ msgstr "Contraste" | |
333 | ||
334 | #~ msgid "Hue" | |
335 | #~ msgstr "Matiz" | |
336 | ||
337 | #~ msgid "Saturation" | |
338 | #~ msgstr "Saturación" | |
339 | ||
340 | #~ msgid "Dialpad" | |
341 | #~ msgstr "Teclado para marcar" | |
342 | ||
343 | #~ msgid "" | |
344 | #~ "Defines whether the window should close automatically after a timeout " | |
345 | #~ "when the call is over." | |
346 | #~ msgstr "" | |
347 | #~ "Define se a xanela se fecha automaticamente logo dun tempo de espera ao " | |
348 | #~ "rematar a chamada." | |
349 | ||
350 | #~ msgid "" | |
351 | #~ "Defines how many seconds the call window should remain visible after the " | |
352 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
353 | #~ msgstr "" | |
354 | #~ "Define o número de segundos que fica visíbel a xanela de chamada unha vez " | |
355 | #~ "rematada a chamada. Esta opción depende de \"CloseOnDisconnect\"." | |
356 | ||
357 | #~ msgid "The audio input device could not be initialized" | |
358 | #~ msgstr "Non foi posíbel inicializar o dispositivo de entrada de son" | |
359 | ||
360 | #, fuzzy | |
361 | #~| msgid "The video input device could not be initialized." | |
362 | #~ msgid "The video input device could not be initialized" | |
363 | #~ msgstr "Non foi posíbel inicializar o dispositivo de entrada de vídeo." | |
364 | ||
365 | #, fuzzy | |
366 | #~| msgid "" | |
367 | #~| "Some gstreamer elements could not be created. Please check your " | |
368 | #~| "gstreamer installation." | |
369 | #~ msgid "" | |
370 | #~ "Could not create some of the required elements. Please check your " | |
371 | #~ "GStreamer installation." | |
372 | #~ msgstr "" | |
373 | #~ "Non foi posíbel crear algúns elementos de gstreamer. Verifique a " | |
374 | #~ "instalación do gstreamer." | |
375 | ||
376 | #~ msgid "The audio output device could not be initialized" | |
377 | #~ msgstr "Non foi posíbel inicializar o dispositivo de saída de son" | |
378 | ||
379 | #~ msgctxt "@action:inmenu" | |
380 | #~ msgid "Show participants" | |
381 | #~ msgstr "Mostrar os participantes" | |
382 | ||
383 | #~ msgctxt "@action:inmenu" | |
384 | #~ msgid "Show log" | |
385 | #~ msgstr "Mostrar o rexistro" | |
386 | ||
387 | #~ msgctxt "@action" | |
388 | #~ msgid "Stop sending video" | |
389 | #~ msgstr "Parar de enviar vídeo" | |
390 | ||
391 | #~ msgctxt "@action:inmenu" | |
392 | #~ msgid "Status" | |
393 | #~ msgstr "Estado" | |
394 | ||
395 | #~ msgctxt "@action:inmenu" | |
396 | #~ msgid "Available" | |
397 | #~ msgstr "Dispoñíbel" | |
398 | ||
399 | #~ msgctxt "@action:inmenu" | |
400 | #~ msgid "Away" | |
401 | #~ msgstr "Fóra" | |
402 | ||
403 | #~ msgctxt "@action:inmenu" | |
404 | #~ msgid "Be right back" | |
405 | #~ msgstr "Volvo axiña" | |
406 | ||
407 | #~ msgctxt "@action:inmenu" | |
408 | #~ msgid "Busy" | |
409 | #~ msgstr "Ocupada/o" | |
410 | ||
411 | #~ msgctxt "@action:inmenu" | |
412 | #~ msgid "Do not disturb" | |
413 | #~ msgstr "Non amolar" | |
414 | ||
415 | #~ msgctxt "@action:inmenu" | |
416 | #~ msgid "Extended Away" | |
417 | #~ msgstr "Fóra moito tempo" | |
418 | ||
419 | #~ msgctxt "@action:inmenu" | |
420 | #~ msgid "Invisible" | |
421 | #~ msgstr "Invisíbel" | |
422 | ||
423 | #~ msgctxt "@action:inmenu" | |
424 | #~ msgid "Offline" | |
425 | #~ msgstr "Desconectada/o" | |
426 | ||
427 | #~ msgctxt "@info:status" | |
428 | #~ msgid "Waiting for account information..." | |
429 | #~ msgstr "A agardar pola información da conta..." | |
430 | ||
431 | #~ msgctxt "protocol - display name (Connecting)" | |
432 | #~ msgid "%1 - %2 (Connecting)" | |
433 | #~ msgstr "%1 - %2 (A conectar)" | |
434 | ||
435 | #~ msgctxt "protocol - display name" | |
436 | #~ msgid "%1 - %2" | |
437 | #~ msgstr "%1 - %2" | |
438 | ||
439 | #~ msgctxt "@title:window" | |
440 | #~ msgid "KCall" | |
441 | #~ msgstr "KCall" | |
442 | ||
443 | #~ msgctxt "@info:status" | |
444 | #~ msgid "Connected" | |
445 | #~ msgstr "Conectado" | |
446 | ||
447 | #~ msgctxt "@action" | |
448 | #~ msgid "Disconnect" | |
449 | #~ msgstr "Desconectar" | |
450 | ||
451 | #~ msgctxt "@action" | |
452 | #~ msgid "Cancel connection attempt" | |
453 | #~ msgstr "Cancelar a tentativa de conexión" | |
454 | ||
455 | #~ msgctxt "@action" | |
456 | #~ msgid "Connect" | |
457 | #~ msgstr "Conectar" | |
458 | ||
459 | #~ msgid "" | |
460 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
461 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
462 | #~ "calls." | |
463 | #~ msgstr "" | |
464 | #~ "Solicitou fechar o KCall. Lembre que o KCall non sae de todo, senón que " | |
465 | #~ "fica activo na bandexa do sistema a agardar por chamadas entrantes." | |
466 | ||
467 | #~ msgid "Volume" | |
468 | #~ msgstr "Volume" | |
469 | ||
470 | #~ msgid "Speakers" | |
471 | #~ msgstr "Altofalantes" | |
472 | ||
473 | #~ msgid "Microphone" | |
474 | #~ msgstr "Micrófono" | |
475 | ||
476 | #~ msgid "Video controls" | |
477 | #~ msgstr "Controles de vídeo" | |
478 | ||
479 | #~ msgid "Video input" | |
480 | #~ msgstr "Entrada de vídeo" | |
481 | ||
482 | #~ msgid "Call log" | |
483 | #~ msgstr "Rexistro de chamadas" | |
484 | ||
485 | #~ msgid "Participants" | |
486 | #~ msgstr "Participantes" | |
487 | ||
488 | #~ msgctxt "@title:tab" | |
489 | #~ msgid "&Contact list" | |
490 | #~ msgstr "Lista de &contactos" | |
491 | ||
492 | #~ msgid "Dial directly" | |
493 | #~ msgstr "Marcar directamente" | |
494 | ||
495 | #~ msgid "Account" | |
496 | #~ msgstr "Conta" | |
497 | ||
498 | #~ msgid "Contact handle" | |
499 | #~ msgstr "Manipulador do contacto" | |
500 | ||
501 | #~ msgid "Dial (Audio only)" | |
502 | #~ msgstr "Marcar (só voz)" | |
503 | ||
504 | #~ msgid "Dial (Audio/Video)" | |
505 | #~ msgstr "Marcar (voz/vídeo)" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( hu ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Kristóf Kiszel <ulysses@kubuntu.org>, 2011, 2012. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2012-06-05 23:09+0200\n" | |
10 | "Last-Translator: Kristóf Kiszel <ulysses@kubuntu.org>\n" | |
11 | "Language-Team: Hungarian <kde-l10n-hu@kde.org>\n" | |
12 | "Language: hu\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.4\n" | |
17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "Bejövő videohívás" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "<p>%1 videohívást kezdeményez Önnel</p>" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | msgid "Incoming call" | |
30 | msgstr "Bejövő hívás" | |
31 | ||
32 | #: src/approver.cpp:42 | |
33 | #, kde-format | |
34 | msgid "<p>%1 is calling you</p>" | |
35 | msgstr "<p>%1 hívja Önt</p>" | |
36 | ||
37 | #: src/approver.cpp:58 src/approver.cpp:80 | |
38 | msgctxt "action, answers the incoming call" | |
39 | msgid "Answer" | |
40 | msgstr "Válasz" | |
41 | ||
42 | #: src/approver.cpp:59 src/approver.cpp:82 | |
43 | msgctxt "action, rejects the incoming call" | |
44 | msgid "Reject" | |
45 | msgstr "Elutasítás" | |
46 | ||
47 | #: src/call-window.cpp:95 | |
48 | #, kde-format | |
49 | msgid "Call with %1" | |
50 | msgstr "Felhívás ezzel: %1" | |
51 | ||
52 | #: src/call-window.cpp:109 | |
53 | msgctxt "@info:status" | |
54 | msgid "Connecting..." | |
55 | msgstr "Kapcsolódás…" | |
56 | ||
57 | #: src/call-window.cpp:113 | |
58 | msgctxt "@info:status the remote user's phone is ringing" | |
59 | msgid "Ringing..." | |
60 | msgstr "Kicsöng…" | |
61 | ||
62 | #: src/call-window.cpp:117 | |
63 | msgctxt "@info:status" | |
64 | msgid "Remote user accepted the call, waiting for connection..." | |
65 | msgstr "A távoli felhasználó fogadta a hívást, várakozás kapcsolódásra…" | |
66 | ||
67 | #: src/call-window.cpp:120 | |
68 | msgctxt "@info:status" | |
69 | msgid "Talking..." | |
70 | msgstr "Beszélgetés…" | |
71 | ||
72 | #: src/call-window.cpp:136 | |
73 | msgctxt "@info:status" | |
74 | msgid "Remote contact ended the call." | |
75 | msgstr "A távoli partner befejezte a hívást." | |
76 | ||
77 | #: src/call-window.cpp:143 | |
78 | msgctxt "@info:status" | |
79 | msgid "Remote contact rejected the call." | |
80 | msgstr "A távoli partner elutasította a hívást." | |
81 | ||
82 | #: src/call-window.cpp:148 | |
83 | msgctxt "@info:status" | |
84 | msgid "Remote contact didn't answer." | |
85 | msgstr "A távoli partner nem válaszol." | |
86 | ||
87 | #: src/call-window.cpp:152 | |
88 | msgctxt "@info:status" | |
89 | msgid "Invalid number or contact." | |
90 | msgstr "Érvénytelen szám vagy névjegy." | |
91 | ||
92 | #: src/call-window.cpp:156 | |
93 | msgctxt "@info:status" | |
94 | msgid "You don't have enough balance to make this call." | |
95 | msgstr "Nincs elég pénz az egyenlegén a hívás kezdeményezéséhez." | |
96 | ||
97 | #: src/call-window.cpp:158 | |
98 | msgctxt "@info:status" | |
99 | msgid "You don't have permission to make this call." | |
100 | msgstr "Nincs jogosultsága a hívás kezdeményezéséhez." | |
101 | ||
102 | #: src/call-window.cpp:163 | |
103 | msgctxt "@info:status" | |
104 | msgid "Remote contact is currently busy." | |
105 | msgstr "A távoli partner jelenleg elfoglalt." | |
106 | ||
107 | #: src/call-window.cpp:167 | |
108 | msgctxt "@info:status" | |
109 | msgid "Internal component error." | |
110 | msgstr "Belső komponenshiba." | |
111 | ||
112 | #: src/call-window.cpp:170 | |
113 | msgctxt "@info:status" | |
114 | msgid "Remote service error." | |
115 | msgstr "Távoli szolgáltatáshiba." | |
116 | ||
117 | #: src/call-window.cpp:173 | |
118 | msgctxt "@info:status" | |
119 | msgid "Network error." | |
120 | msgstr "Hálózati hiba." | |
121 | ||
122 | #: src/call-window.cpp:177 | |
123 | msgctxt "@info:status" | |
124 | msgid "Failed to negotiate codecs." | |
125 | msgstr "Nem sikerült egyeztetni a kodekeket." | |
126 | ||
127 | #: src/call-window.cpp:179 | |
128 | msgctxt "@info:status" | |
129 | msgid "Unsupported media type." | |
130 | msgstr "Nem támogatott médiatípus." | |
131 | ||
132 | #: src/call-window.cpp:183 | |
133 | msgctxt "@info:status" | |
134 | msgid "Connectivity error." | |
135 | msgstr "Kapcsolódási hiba." | |
136 | ||
137 | #: src/call-window.cpp:187 | |
138 | msgctxt "@info:status" | |
139 | msgid "Unknown error." | |
140 | msgstr "Ismeretlen hiba." | |
141 | ||
142 | #: src/call-window.cpp:192 | |
143 | msgctxt "@info:status" | |
144 | msgid "Disconnected." | |
145 | msgstr "Szétkapcsolva." | |
146 | ||
147 | #: src/call-window.cpp:196 | |
148 | #, kde-format | |
149 | msgctxt "@info:status the call was disconnected because..." | |
150 | msgid "Disconnected: %1" | |
151 | msgstr "Szétkapcsolva: %1" | |
152 | ||
153 | #: src/call-window.cpp:339 | |
154 | msgctxt "@action" | |
155 | msgid "Show my video" | |
156 | msgstr "Saját videó megjelenítése" | |
157 | ||
158 | #: src/call-window.cpp:344 | |
159 | msgctxt "@action" | |
160 | msgid "Show dialpad" | |
161 | msgstr "Tárcsázó megjelenítése" | |
162 | ||
163 | #: src/call-window.cpp:351 | |
164 | msgctxt "@action" | |
165 | msgid "Send video" | |
166 | msgstr "Videó küldése" | |
167 | ||
168 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
169 | msgctxt "@action" | |
170 | msgid "Mute" | |
171 | msgstr "Némítás" | |
172 | ||
173 | #: src/call-window.cpp:363 | |
174 | msgctxt "@action" | |
175 | msgid "Hold" | |
176 | msgstr "Tartás" | |
177 | ||
178 | #: src/call-window.cpp:368 | |
179 | msgctxt "@action" | |
180 | msgid "Hangup" | |
181 | msgstr "Bontás" | |
182 | ||
183 | #: src/main.cpp:36 | |
184 | msgid "KDE Telepathy Call Ui" | |
185 | msgstr "KDE Telepathy hívófelület" | |
186 | ||
187 | #: src/main.cpp:37 | |
188 | msgid "VoIP client for KDE" | |
189 | msgstr "VoIP-kliens a KDE-hez" | |
190 | ||
191 | #: src/main.cpp:38 | |
192 | msgid "(C) 2009, George Kiagiadakis" | |
193 | msgstr "© George Kiagiadakis, 2009." | |
194 | ||
195 | #: src/main.cpp:40 | |
196 | msgctxt "@info:credit" | |
197 | msgid "George Kiagiadakis" | |
198 | msgstr "George Kiagiadakis" | |
199 | ||
200 | #: rc.cpp:1 | |
201 | msgctxt "NAME OF TRANSLATORS" | |
202 | msgid "Your names" | |
203 | msgstr "Kiszel Kristóf" | |
204 | ||
205 | #: rc.cpp:2 | |
206 | msgctxt "EMAIL OF TRANSLATORS" | |
207 | msgid "Your emails" | |
208 | msgstr "ulysses@kubuntu.org" | |
209 | ||
210 | #. i18n: file: src/callwindowui.rc:11 | |
211 | #. i18n: ectx: Menu (call) | |
212 | #: rc.cpp:5 | |
213 | msgid "Call" | |
214 | msgstr "Hívás" | |
215 | ||
216 | #. i18n: file: src/callwindowui.rc:20 | |
217 | #. i18n: ectx: Menu (media) | |
218 | #: rc.cpp:8 | |
219 | msgid "Media" | |
220 | msgstr "Média" | |
221 | ||
222 | #. i18n: file: src/callwindowui.rc:27 | |
223 | #. i18n: ectx: ToolBar (mainToolBar) | |
224 | #: rc.cpp:11 | |
225 | msgid "Main Toolbar" | |
226 | msgstr "Alap eszköztár" | |
227 | ||
228 | #. i18n: file: src/dtmf-widget.ui:17 | |
229 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
230 | #: rc.cpp:14 | |
231 | msgid "1" | |
232 | msgstr "1" | |
233 | ||
234 | #. i18n: file: src/dtmf-widget.ui:24 | |
235 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
236 | #: rc.cpp:17 | |
237 | msgid "2" | |
238 | msgstr "2" | |
239 | ||
240 | #. i18n: file: src/dtmf-widget.ui:31 | |
241 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
242 | #: rc.cpp:20 | |
243 | msgid "3" | |
244 | msgstr "3" | |
245 | ||
246 | #. i18n: file: src/dtmf-widget.ui:38 | |
247 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
248 | #: rc.cpp:23 | |
249 | msgid "4" | |
250 | msgstr "4" | |
251 | ||
252 | #. i18n: file: src/dtmf-widget.ui:45 | |
253 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
254 | #: rc.cpp:26 | |
255 | msgid "5" | |
256 | msgstr "5" | |
257 | ||
258 | #. i18n: file: src/dtmf-widget.ui:52 | |
259 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
260 | #: rc.cpp:29 | |
261 | msgid "6" | |
262 | msgstr "6" | |
263 | ||
264 | #. i18n: file: src/dtmf-widget.ui:59 | |
265 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
266 | #: rc.cpp:32 | |
267 | msgid "7" | |
268 | msgstr "7" | |
269 | ||
270 | #. i18n: file: src/dtmf-widget.ui:66 | |
271 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
272 | #: rc.cpp:35 | |
273 | msgid "8" | |
274 | msgstr "8" | |
275 | ||
276 | #. i18n: file: src/dtmf-widget.ui:73 | |
277 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
278 | #: rc.cpp:38 | |
279 | msgid "9" | |
280 | msgstr "9" | |
281 | ||
282 | #. i18n: file: src/dtmf-widget.ui:80 | |
283 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
284 | #: rc.cpp:41 | |
285 | msgid "*" | |
286 | msgstr "*" | |
287 | ||
288 | #. i18n: file: src/dtmf-widget.ui:87 | |
289 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
290 | #: rc.cpp:44 | |
291 | msgid "0" | |
292 | msgstr "0" | |
293 | ||
294 | #. i18n: file: src/dtmf-widget.ui:94 | |
295 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
296 | #: rc.cpp:47 | |
297 | msgid "#" | |
298 | msgstr "#" | |
299 | ||
300 | #~ msgid "Warning: %1" | |
301 | #~ msgstr "Figyelmeztetés: %1" | |
302 | ||
303 | #~ msgid "Error: %1" | |
304 | #~ msgstr "Hiba: %1" | |
305 | ||
306 | #~ msgid "KCall" | |
307 | #~ msgstr "KCall" | |
308 | ||
309 | #~ msgid "Brightness" | |
310 | #~ msgstr "Fényesség" | |
311 | ||
312 | #~ msgid "Contrast" | |
313 | #~ msgstr "Kontraszt" | |
314 | ||
315 | #~ msgid "Hue" | |
316 | #~ msgstr "Árnyalat" | |
317 | ||
318 | #~ msgid "Saturation" | |
319 | #~ msgstr "Telítettség" | |
320 | ||
321 | #~ msgid "Dialpad" | |
322 | #~ msgstr "Tárcsázókészülék" | |
323 | ||
324 | #~ msgid "" | |
325 | #~ "Defines whether the window should close automatically after a timeout " | |
326 | #~ "when the call is over." | |
327 | #~ msgstr "" | |
328 | #~ "Megadja, hogy az ablak bezáródjon-e egy bizonyos idő leteltével a hívás " | |
329 | #~ "vége után." | |
330 | ||
331 | #~ msgid "" | |
332 | #~ "Defines how many seconds the call window should remain visible after the " | |
333 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
334 | #~ msgstr "" | |
335 | #~ "Megadja, hogy hány másodpercig maradjon még látható a hívóablak a hívás " | |
336 | #~ "befejezése után. Ez a beállítás a „CloseOnDisconnect”-től függ." | |
337 | ||
338 | #~ msgid "The audio input device could not be initialized" | |
339 | #~ msgstr "Nem sikerült inicializálni a hangbeviteli eszközt" | |
340 | ||
341 | #~ msgid "The video input device could not be initialized" | |
342 | #~ msgstr "Nem sikerült inicializálni a videobeviteli eszközt" | |
343 | ||
344 | #~ msgid "" | |
345 | #~ "Could not create some of the required elements. Please check your " | |
346 | #~ "GStreamer installation." | |
347 | #~ msgstr "" | |
348 | #~ "Nem sikerült létrehozni néhány elemet, ellenőrizze a GStreamer " | |
349 | #~ "telepítését." | |
350 | ||
351 | #~ msgid "The audio output device could not be initialized" | |
352 | #~ msgstr "Nem sikerült inicializálni a hangkimeneti eszközt" | |
353 | ||
354 | #~ msgctxt "@action:inmenu" | |
355 | #~ msgid "Show participants" | |
356 | #~ msgstr "Résztvevők megjelenítése" | |
357 | ||
358 | #~ msgctxt "@action:inmenu" | |
359 | #~ msgid "Show log" | |
360 | #~ msgstr "Napló megjelenítése" | |
361 | ||
362 | #~ msgctxt "@action" | |
363 | #~ msgid "Stop sending video" | |
364 | #~ msgstr "Videoküldés megállítása" | |
365 | ||
366 | #~ msgctxt "@action:inmenu" | |
367 | #~ msgid "Status" | |
368 | #~ msgstr "Állapot" | |
369 | ||
370 | #~ msgctxt "@action:inmenu" | |
371 | #~ msgid "Available" | |
372 | #~ msgstr "Elérhető" | |
373 | ||
374 | #~ msgctxt "@action:inmenu" | |
375 | #~ msgid "Away" | |
376 | #~ msgstr "Távollét" | |
377 | ||
378 | #~ msgctxt "@action:inmenu" | |
379 | #~ msgid "Be right back" | |
380 | #~ msgstr "Rögtön jövök" | |
381 | ||
382 | #~ msgctxt "@action:inmenu" | |
383 | #~ msgid "Busy" | |
384 | #~ msgstr "Elfoglalt" | |
385 | ||
386 | #~ msgctxt "@action:inmenu" | |
387 | #~ msgid "Do not disturb" | |
388 | #~ msgstr "Ne zavarjanak" | |
389 | ||
390 | #~ msgctxt "@action:inmenu" | |
391 | #~ msgid "Extended Away" | |
392 | #~ msgstr "Hosszabb távollét" | |
393 | ||
394 | #~ msgctxt "@action:inmenu" | |
395 | #~ msgid "Invisible" | |
396 | #~ msgstr "Láthatatlan" | |
397 | ||
398 | #~ msgctxt "@action:inmenu" | |
399 | #~ msgid "Offline" | |
400 | #~ msgstr "Offline" | |
401 | ||
402 | #~ msgctxt "@info:status" | |
403 | #~ msgid "Waiting for account information..." | |
404 | #~ msgstr "Várakozás az azonosítóinformációkra…" | |
405 | ||
406 | #~ msgctxt "protocol - display name (Connecting)" | |
407 | #~ msgid "%1 - %2 (Connecting)" | |
408 | #~ msgstr "%2 - %1 (kapcsolódás)" | |
409 | ||
410 | #~ msgctxt "protocol - display name" | |
411 | #~ msgid "%1 - %2" | |
412 | #~ msgstr "%2 - %1" | |
413 | ||
414 | #~ msgctxt "@title:window" | |
415 | #~ msgid "KCall" | |
416 | #~ msgstr "KCall" | |
417 | ||
418 | #~ msgctxt "@info:status" | |
419 | #~ msgid "Connected" | |
420 | #~ msgstr "Kapcsolódva" | |
421 | ||
422 | #~ msgctxt "@action" | |
423 | #~ msgid "Disconnect" | |
424 | #~ msgstr "Kapcsolat bontása" | |
425 | ||
426 | #~ msgctxt "@action" | |
427 | #~ msgid "Cancel connection attempt" | |
428 | #~ msgstr "Kapcsolódási kísérlet megszakítása" | |
429 | ||
430 | #~ msgctxt "@action" | |
431 | #~ msgid "Connect" | |
432 | #~ msgstr "Kapcsolódás" | |
433 | ||
434 | #~ msgid "" | |
435 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
436 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
437 | #~ "calls." | |
438 | #~ msgstr "" | |
439 | #~ "A KCall bezárását kérte, az viszont nem fog ténylegesen kilépni, hanem a " | |
440 | #~ "paneltálcán fog várakozni bejövő hívásokra." | |
441 | ||
442 | #~ msgid "Volume" | |
443 | #~ msgstr "Hangerő" | |
444 | ||
445 | #~ msgid "Speakers" | |
446 | #~ msgstr "Hangszórók" | |
447 | ||
448 | #~ msgid "Microphone" | |
449 | #~ msgstr "Mikrofon" | |
450 | ||
451 | #~ msgid "Video controls" | |
452 | #~ msgstr "Videovezérlők" | |
453 | ||
454 | #~ msgid "Video input" | |
455 | #~ msgstr "Videobemenet" | |
456 | ||
457 | #~ msgid "Call log" | |
458 | #~ msgstr "Híváslista" | |
459 | ||
460 | #~ msgid "Participants" | |
461 | #~ msgstr "Résztvevők" | |
462 | ||
463 | #~ msgctxt "@title:tab" | |
464 | #~ msgid "&Contact list" | |
465 | #~ msgstr "&Partnerlista" | |
466 | ||
467 | #~ msgid "Dial directly" | |
468 | #~ msgstr "Közvetlen tárcsázás" | |
469 | ||
470 | #~ msgid "Account" | |
471 | #~ msgstr "Azonosító" | |
472 | ||
473 | #~ msgid "Contact handle" | |
474 | #~ msgstr "Partnerkezelés" | |
475 | ||
476 | #~ msgid "Dial (Audio only)" | |
477 | #~ msgstr "Tárcsázás (csak hang)" | |
478 | ||
479 | #~ msgid "Dial (Audio/Video)" | |
480 | #~ msgstr "Tárcsázás (hang/videó)" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( it ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of ktp-call-ui.po to Italian | |
1 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # | |
4 | # Pino Toscano <toscano.pino@tiscali.it>, 2011, 2012. | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: ktp-call-ui\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2012-05-07 10:55+0200\n" | |
11 | "Last-Translator: Pino Toscano <toscano.pino@tiscali.it>\n" | |
12 | "Language-Team: Italian <kde-i18n-it@kde.org>\n" | |
13 | "Language: it\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "X-Generator: KBabel 1.11.4\n" | |
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | msgid "Incoming video call" | |
22 | msgstr "Videochiamata in arrivo" | |
23 | ||
24 | #: src/approver.cpp:39 | |
25 | #, kde-format | |
26 | msgid "<p>%1 is asking you for a video call</p>" | |
27 | msgstr "<p>%1 ti sta chiedendo di effettuare una videochiamata</p>" | |
28 | ||
29 | #: src/approver.cpp:41 | |
30 | msgid "Incoming call" | |
31 | msgstr "Chiamata in arrivo" | |
32 | ||
33 | #: src/approver.cpp:42 | |
34 | #, kde-format | |
35 | msgid "<p>%1 is calling you</p>" | |
36 | msgstr "<p>%1 ti sta chiamando</p>" | |
37 | ||
38 | #: src/approver.cpp:58 src/approver.cpp:80 | |
39 | msgctxt "action, answers the incoming call" | |
40 | msgid "Answer" | |
41 | msgstr "Rispondi" | |
42 | ||
43 | #: src/approver.cpp:59 src/approver.cpp:82 | |
44 | msgctxt "action, rejects the incoming call" | |
45 | msgid "Reject" | |
46 | msgstr "Rifiuta" | |
47 | ||
48 | #: src/call-window.cpp:95 | |
49 | #, kde-format | |
50 | msgid "Call with %1" | |
51 | msgstr "Chiamata con %1" | |
52 | ||
53 | #: src/call-window.cpp:109 | |
54 | msgctxt "@info:status" | |
55 | msgid "Connecting..." | |
56 | msgstr "Connessione..." | |
57 | ||
58 | #: src/call-window.cpp:113 | |
59 | msgctxt "@info:status the remote user's phone is ringing" | |
60 | msgid "Ringing..." | |
61 | msgstr "Sta squillando..." | |
62 | ||
63 | #: src/call-window.cpp:117 | |
64 | msgctxt "@info:status" | |
65 | msgid "Remote user accepted the call, waiting for connection..." | |
66 | msgstr "L'utente remoto ha accettato la chiamata, in attesa di connessione..." | |
67 | ||
68 | #: src/call-window.cpp:120 | |
69 | msgctxt "@info:status" | |
70 | msgid "Talking..." | |
71 | msgstr "In conversazione..." | |
72 | ||
73 | #: src/call-window.cpp:136 | |
74 | msgctxt "@info:status" | |
75 | msgid "Remote contact ended the call." | |
76 | msgstr "Il contatto remoto ha terminato la chiamata." | |
77 | ||
78 | #: src/call-window.cpp:143 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact rejected the call." | |
81 | msgstr "Il contatto remoto ha rifiutato la chiamata." | |
82 | ||
83 | #: src/call-window.cpp:148 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact didn't answer." | |
86 | msgstr "Il contatto remoto non ha risposto." | |
87 | ||
88 | #: src/call-window.cpp:152 | |
89 | msgctxt "@info:status" | |
90 | msgid "Invalid number or contact." | |
91 | msgstr "Numero o contatto non valido." | |
92 | ||
93 | #: src/call-window.cpp:156 | |
94 | msgctxt "@info:status" | |
95 | msgid "You don't have enough balance to make this call." | |
96 | msgstr "Non hai abbastanza credito per effettuare questa chiamata." | |
97 | ||
98 | #: src/call-window.cpp:158 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have permission to make this call." | |
101 | msgstr "Non hai i permessi per effettuare questa chiamata." | |
102 | ||
103 | #: src/call-window.cpp:163 | |
104 | msgctxt "@info:status" | |
105 | msgid "Remote contact is currently busy." | |
106 | msgstr "Il contatto remoto al momento è occupato." | |
107 | ||
108 | #: src/call-window.cpp:167 | |
109 | msgctxt "@info:status" | |
110 | msgid "Internal component error." | |
111 | msgstr "Errore interno di un componente." | |
112 | ||
113 | #: src/call-window.cpp:170 | |
114 | msgctxt "@info:status" | |
115 | msgid "Remote service error." | |
116 | msgstr "Errore del servizio remoto." | |
117 | ||
118 | #: src/call-window.cpp:173 | |
119 | msgctxt "@info:status" | |
120 | msgid "Network error." | |
121 | msgstr "Errore di rete." | |
122 | ||
123 | #: src/call-window.cpp:177 | |
124 | msgctxt "@info:status" | |
125 | msgid "Failed to negotiate codecs." | |
126 | msgstr "Non è stato possibile negoziare i codificatori." | |
127 | ||
128 | #: src/call-window.cpp:179 | |
129 | msgctxt "@info:status" | |
130 | msgid "Unsupported media type." | |
131 | msgstr "Tipo multimediale non supportato." | |
132 | ||
133 | #: src/call-window.cpp:183 | |
134 | msgctxt "@info:status" | |
135 | msgid "Connectivity error." | |
136 | msgstr "Errore di connessione." | |
137 | ||
138 | #: src/call-window.cpp:187 | |
139 | msgctxt "@info:status" | |
140 | msgid "Unknown error." | |
141 | msgstr "Errore sconosciuto." | |
142 | ||
143 | #: src/call-window.cpp:192 | |
144 | msgctxt "@info:status" | |
145 | msgid "Disconnected." | |
146 | msgstr "Disconnesso." | |
147 | ||
148 | #: src/call-window.cpp:196 | |
149 | #, kde-format | |
150 | msgctxt "@info:status the call was disconnected because..." | |
151 | msgid "Disconnected: %1" | |
152 | msgstr "Disconnesso: %1" | |
153 | ||
154 | #: src/call-window.cpp:339 | |
155 | msgctxt "@action" | |
156 | msgid "Show my video" | |
157 | msgstr "Mostra il mio video" | |
158 | ||
159 | #: src/call-window.cpp:344 | |
160 | msgctxt "@action" | |
161 | msgid "Show dialpad" | |
162 | msgstr "Mostra tastierino" | |
163 | ||
164 | #: src/call-window.cpp:351 | |
165 | msgctxt "@action" | |
166 | msgid "Send video" | |
167 | msgstr "Invia video" | |
168 | ||
169 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
170 | msgctxt "@action" | |
171 | msgid "Mute" | |
172 | msgstr "Muto" | |
173 | ||
174 | #: src/call-window.cpp:363 | |
175 | msgctxt "@action" | |
176 | msgid "Hold" | |
177 | msgstr "Trattieni" | |
178 | ||
179 | #: src/call-window.cpp:368 | |
180 | msgctxt "@action" | |
181 | msgid "Hangup" | |
182 | msgstr "Termina" | |
183 | ||
184 | #: src/main.cpp:36 | |
185 | msgid "KDE Telepathy Call Ui" | |
186 | msgstr "Interfaccia di chiamata Telepathy KDE" | |
187 | ||
188 | #: src/main.cpp:37 | |
189 | msgid "VoIP client for KDE" | |
190 | msgstr "Client VoIP per KDE" | |
191 | ||
192 | #: src/main.cpp:38 | |
193 | msgid "(C) 2009, George Kiagiadakis" | |
194 | msgstr "(C) 2009, George Kiagiadakis" | |
195 | ||
196 | #: src/main.cpp:40 | |
197 | msgctxt "@info:credit" | |
198 | msgid "George Kiagiadakis" | |
199 | msgstr "George Kiagiadakis" | |
200 | ||
201 | #: rc.cpp:1 | |
202 | msgctxt "NAME OF TRANSLATORS" | |
203 | msgid "Your names" | |
204 | msgstr "Pino Toscano" | |
205 | ||
206 | #: rc.cpp:2 | |
207 | msgctxt "EMAIL OF TRANSLATORS" | |
208 | msgid "Your emails" | |
209 | msgstr "toscano.pino@tiscali.it" | |
210 | ||
211 | #. i18n: file: src/callwindowui.rc:11 | |
212 | #. i18n: ectx: Menu (call) | |
213 | #: rc.cpp:5 | |
214 | msgid "Call" | |
215 | msgstr "Chiamata" | |
216 | ||
217 | #. i18n: file: src/callwindowui.rc:20 | |
218 | #. i18n: ectx: Menu (media) | |
219 | #: rc.cpp:8 | |
220 | msgid "Media" | |
221 | msgstr "Media" | |
222 | ||
223 | #. i18n: file: src/callwindowui.rc:27 | |
224 | #. i18n: ectx: ToolBar (mainToolBar) | |
225 | #: rc.cpp:11 | |
226 | msgid "Main Toolbar" | |
227 | msgstr "Barra principale" | |
228 | ||
229 | #. i18n: file: src/dtmf-widget.ui:17 | |
230 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
231 | #: rc.cpp:14 | |
232 | msgid "1" | |
233 | msgstr "1" | |
234 | ||
235 | #. i18n: file: src/dtmf-widget.ui:24 | |
236 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
237 | #: rc.cpp:17 | |
238 | msgid "2" | |
239 | msgstr "2" | |
240 | ||
241 | #. i18n: file: src/dtmf-widget.ui:31 | |
242 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
243 | #: rc.cpp:20 | |
244 | msgid "3" | |
245 | msgstr "3" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:38 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
249 | #: rc.cpp:23 | |
250 | msgid "4" | |
251 | msgstr "4" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:45 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
255 | #: rc.cpp:26 | |
256 | msgid "5" | |
257 | msgstr "5" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:52 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
261 | #: rc.cpp:29 | |
262 | msgid "6" | |
263 | msgstr "6" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:59 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
267 | #: rc.cpp:32 | |
268 | msgid "7" | |
269 | msgstr "7" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:66 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
273 | #: rc.cpp:35 | |
274 | msgid "8" | |
275 | msgstr "8" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:73 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
279 | #: rc.cpp:38 | |
280 | msgid "9" | |
281 | msgstr "9" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:80 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
285 | #: rc.cpp:41 | |
286 | msgid "*" | |
287 | msgstr "*" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:87 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
291 | #: rc.cpp:44 | |
292 | msgid "0" | |
293 | msgstr "0" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:94 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
297 | #: rc.cpp:47 | |
298 | msgid "#" | |
299 | msgstr "#" | |
300 | ||
301 | #~ msgid "Warning: %1" | |
302 | #~ msgstr "Avviso: %1" | |
303 | ||
304 | #~ msgid "Error: %1" | |
305 | #~ msgstr "Errore: %1" | |
306 | ||
307 | #~ msgid "Brightness" | |
308 | #~ msgstr "Luminosità" | |
309 | ||
310 | #~ msgid "Contrast" | |
311 | #~ msgstr "Contrasto" | |
312 | ||
313 | #~ msgid "Hue" | |
314 | #~ msgstr "Tonalità" | |
315 | ||
316 | #~ msgid "Saturation" | |
317 | #~ msgstr "Saturazione" | |
318 | ||
319 | #~ msgid "Dialpad" | |
320 | #~ msgstr "Tastierino" | |
321 | ||
322 | #~ msgid "" | |
323 | #~ "Defines whether the window should close automatically after a timeout " | |
324 | #~ "when the call is over." | |
325 | #~ msgstr "" | |
326 | #~ "Definisce se la finestra dovrebbe chiudersi automaticamente dopo un tempo " | |
327 | #~ "prestabilito alla fine di una chiamata." | |
328 | ||
329 | #~ msgid "" | |
330 | #~ "Defines how many seconds the call window should remain visible after the " | |
331 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
332 | #~ msgstr "" | |
333 | #~ "Definisce quanti secondi la finestra dovrebbe rimanere visibile alla fine " | |
334 | #~ "di una chiamata. Questa opzione dipende da «CloseOnDisconnect»." | |
335 | ||
336 | #~ msgid "The audio input device could not be initialized" | |
337 | #~ msgstr "" | |
338 | #~ "Non è stato possibile inizializzare il dispositivo audio in ingresso" | |
339 | ||
340 | #~ msgid "The video input device could not be initialized" | |
341 | #~ msgstr "" | |
342 | #~ "Non è stato possibile inizializzare il dispositivo video in ingresso" | |
343 | ||
344 | #~ msgid "" | |
345 | #~ "Could not create some of the required elements. Please check your " | |
346 | #~ "GStreamer installation." | |
347 | #~ msgstr "" | |
348 | #~ "Non è stato possibile creare alcuni degli elementi richiesti. Controlla " | |
349 | #~ "la tua installazione di GStreamer." | |
350 | ||
351 | #~ msgid "The audio output device could not be initialized" | |
352 | #~ msgstr "Non è stato possibile inizializzare il dispositivo audio in uscita" | |
353 | ||
354 | #~ msgctxt "@action:inmenu" | |
355 | #~ msgid "Show participants" | |
356 | #~ msgstr "Mostra partecipanti" | |
357 | ||
358 | #~ msgctxt "@action:inmenu" | |
359 | #~ msgid "Show log" | |
360 | #~ msgstr "Mostra registro" | |
361 | ||
362 | #~ msgctxt "@action" | |
363 | #~ msgid "Stop sending video" | |
364 | #~ msgstr "Interrompi l'invio del video" | |
365 | ||
366 | #~ msgctxt "@action:inmenu" | |
367 | #~ msgid "Status" | |
368 | #~ msgstr "Stato" | |
369 | ||
370 | #~ msgctxt "@action:inmenu" | |
371 | #~ msgid "Available" | |
372 | #~ msgstr "Disponibile" | |
373 | ||
374 | #~ msgctxt "@action:inmenu" | |
375 | #~ msgid "Away" | |
376 | #~ msgstr "Assente" | |
377 | ||
378 | #~ msgctxt "@action:inmenu" | |
379 | #~ msgid "Be right back" | |
380 | #~ msgstr "Torno subito" | |
381 | ||
382 | #~ msgctxt "@action:inmenu" | |
383 | #~ msgid "Busy" | |
384 | #~ msgstr "Occupato" | |
385 | ||
386 | #~ msgctxt "@action:inmenu" | |
387 | #~ msgid "Do not disturb" | |
388 | #~ msgstr "Non disturbare" | |
389 | ||
390 | #~ msgctxt "@action:inmenu" | |
391 | #~ msgid "Extended Away" | |
392 | #~ msgstr "Assente a lungo" | |
393 | ||
394 | #~ msgctxt "@action:inmenu" | |
395 | #~ msgid "Invisible" | |
396 | #~ msgstr "Invisibile" | |
397 | ||
398 | #~ msgctxt "@action:inmenu" | |
399 | #~ msgid "Offline" | |
400 | #~ msgstr "Non in linea" | |
401 | ||
402 | #~ msgctxt "@info:status" | |
403 | #~ msgid "Waiting for account information..." | |
404 | #~ msgstr "In attesa di informazioni dell'account..." | |
405 | ||
406 | #~ msgctxt "protocol - display name (Connecting)" | |
407 | #~ msgid "%1 - %2 (Connecting)" | |
408 | #~ msgstr "%1 - %2 (connessione)" | |
409 | ||
410 | #~ msgctxt "protocol - display name" | |
411 | #~ msgid "%1 - %2" | |
412 | #~ msgstr "%1 - %2" | |
413 | ||
414 | #~ msgctxt "@title:window" | |
415 | #~ msgid "KCall" | |
416 | #~ msgstr "KCall" | |
417 | ||
418 | #~ msgctxt "@info:status" | |
419 | #~ msgid "Connected" | |
420 | #~ msgstr "Connesso" | |
421 | ||
422 | #~ msgctxt "@action" | |
423 | #~ msgid "Disconnect" | |
424 | #~ msgstr "Disconnesso" | |
425 | ||
426 | #~ msgctxt "@action" | |
427 | #~ msgid "Cancel connection attempt" | |
428 | #~ msgstr "Annulla tentativo di connessione" | |
429 | ||
430 | #~ msgctxt "@action" | |
431 | #~ msgid "Connect" | |
432 | #~ msgstr "Connetti" | |
433 | ||
434 | #~ msgid "" | |
435 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
436 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
437 | #~ "calls." | |
438 | #~ msgstr "" | |
439 | #~ "Hai richiesto di chiudere KCall. Nota che KCall non verrà chiuso, ma " | |
440 | #~ "rimarrà attivo nel vassoio di sistema in attesa di chiamate in arrivo." | |
441 | ||
442 | #~ msgid "Volume" | |
443 | #~ msgstr "Volume" | |
444 | ||
445 | #~ msgid "Speakers" | |
446 | #~ msgstr "Altoparlanti" | |
447 | ||
448 | #~ msgid "Microphone" | |
449 | #~ msgstr "Microfono" | |
450 | ||
451 | #~ msgid "Video controls" | |
452 | #~ msgstr "Controlli del video" | |
453 | ||
454 | #~ msgid "Video input" | |
455 | #~ msgstr "Ingresso del video" | |
456 | ||
457 | #~ msgid "Call log" | |
458 | #~ msgstr "Registro di chiamata" | |
459 | ||
460 | #~ msgid "Participants" | |
461 | #~ msgstr "Partecipanti" | |
462 | ||
463 | #~ msgctxt "@title:tab" | |
464 | #~ msgid "&Contact list" | |
465 | #~ msgstr "Lista dei &contatti" | |
466 | ||
467 | #~ msgid "Dial directly" | |
468 | #~ msgstr "Chiama direttamente" | |
469 | ||
470 | #~ msgid "Account" | |
471 | #~ msgstr "Account" | |
472 | ||
473 | #~ msgid "Contact handle" | |
474 | #~ msgstr "Identificativo contatto" | |
475 | ||
476 | #~ msgid "Dial (Audio only)" | |
477 | #~ msgstr "Chiama (solo audio)" | |
478 | ||
479 | #~ msgid "Dial (Audio/Video)" | |
480 | #~ msgstr "Chiama (audio e video)" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( ja ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | msgid "" | |
1 | msgstr "" | |
2 | "Project-Id-Version: kcall\n" | |
3 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
4 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
5 | "PO-Revision-Date: 2009-06-29 09:43+0900\n" | |
6 | "Last-Translator: Japanese KDE translation team <Kdeveloper@kde.gr.jp>\n" | |
7 | "Language-Team: Japanese <Kdeveloper@kde.gr.jp>\n" | |
8 | "Language: ja\n" | |
9 | "MIME-Version: 1.0\n" | |
10 | "Content-Type: text/plain; charset=UTF-8\n" | |
11 | "Content-Transfer-Encoding: 8bit\n" | |
12 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
13 | "X-Accelerator-Marker: &\n" | |
14 | "X-Text-Markup: kde4\n" | |
15 | ||
16 | #: src/approver.cpp:38 | |
17 | msgid "Incoming video call" | |
18 | msgstr "" | |
19 | ||
20 | #: src/approver.cpp:39 | |
21 | #, kde-format | |
22 | msgid "<p>%1 is asking you for a video call</p>" | |
23 | msgstr "" | |
24 | ||
25 | #: src/approver.cpp:41 | |
26 | msgid "Incoming call" | |
27 | msgstr "" | |
28 | ||
29 | #: src/approver.cpp:42 | |
30 | #, kde-format | |
31 | msgid "<p>%1 is calling you</p>" | |
32 | msgstr "" | |
33 | ||
34 | #: src/approver.cpp:58 src/approver.cpp:80 | |
35 | msgctxt "action, answers the incoming call" | |
36 | msgid "Answer" | |
37 | msgstr "" | |
38 | ||
39 | #: src/approver.cpp:59 src/approver.cpp:82 | |
40 | msgctxt "action, rejects the incoming call" | |
41 | msgid "Reject" | |
42 | msgstr "" | |
43 | ||
44 | #: src/call-window.cpp:95 | |
45 | #, kde-format | |
46 | msgid "Call with %1" | |
47 | msgstr "" | |
48 | ||
49 | #: src/call-window.cpp:109 | |
50 | msgctxt "@info:status" | |
51 | msgid "Connecting..." | |
52 | msgstr "" | |
53 | ||
54 | #: src/call-window.cpp:113 | |
55 | msgctxt "@info:status the remote user's phone is ringing" | |
56 | msgid "Ringing..." | |
57 | msgstr "" | |
58 | ||
59 | #: src/call-window.cpp:117 | |
60 | msgctxt "@info:status" | |
61 | msgid "Remote user accepted the call, waiting for connection..." | |
62 | msgstr "" | |
63 | ||
64 | #: src/call-window.cpp:120 | |
65 | msgctxt "@info:status" | |
66 | msgid "Talking..." | |
67 | msgstr "" | |
68 | ||
69 | #: src/call-window.cpp:136 | |
70 | msgctxt "@info:status" | |
71 | msgid "Remote contact ended the call." | |
72 | msgstr "" | |
73 | ||
74 | #: src/call-window.cpp:143 | |
75 | msgctxt "@info:status" | |
76 | msgid "Remote contact rejected the call." | |
77 | msgstr "" | |
78 | ||
79 | #: src/call-window.cpp:148 | |
80 | msgctxt "@info:status" | |
81 | msgid "Remote contact didn't answer." | |
82 | msgstr "" | |
83 | ||
84 | #: src/call-window.cpp:152 | |
85 | msgctxt "@info:status" | |
86 | msgid "Invalid number or contact." | |
87 | msgstr "" | |
88 | ||
89 | #: src/call-window.cpp:156 | |
90 | msgctxt "@info:status" | |
91 | msgid "You don't have enough balance to make this call." | |
92 | msgstr "" | |
93 | ||
94 | #: src/call-window.cpp:158 | |
95 | msgctxt "@info:status" | |
96 | msgid "You don't have permission to make this call." | |
97 | msgstr "" | |
98 | ||
99 | #: src/call-window.cpp:163 | |
100 | msgctxt "@info:status" | |
101 | msgid "Remote contact is currently busy." | |
102 | msgstr "" | |
103 | ||
104 | #: src/call-window.cpp:167 | |
105 | msgctxt "@info:status" | |
106 | msgid "Internal component error." | |
107 | msgstr "" | |
108 | ||
109 | #: src/call-window.cpp:170 | |
110 | msgctxt "@info:status" | |
111 | msgid "Remote service error." | |
112 | msgstr "" | |
113 | ||
114 | #: src/call-window.cpp:173 | |
115 | msgctxt "@info:status" | |
116 | msgid "Network error." | |
117 | msgstr "" | |
118 | ||
119 | #: src/call-window.cpp:177 | |
120 | msgctxt "@info:status" | |
121 | msgid "Failed to negotiate codecs." | |
122 | msgstr "" | |
123 | ||
124 | #: src/call-window.cpp:179 | |
125 | msgctxt "@info:status" | |
126 | msgid "Unsupported media type." | |
127 | msgstr "" | |
128 | ||
129 | #: src/call-window.cpp:183 | |
130 | msgctxt "@info:status" | |
131 | msgid "Connectivity error." | |
132 | msgstr "" | |
133 | ||
134 | #: src/call-window.cpp:187 | |
135 | msgctxt "@info:status" | |
136 | msgid "Unknown error." | |
137 | msgstr "" | |
138 | ||
139 | #: src/call-window.cpp:192 | |
140 | msgctxt "@info:status" | |
141 | msgid "Disconnected." | |
142 | msgstr "" | |
143 | ||
144 | #: src/call-window.cpp:196 | |
145 | #, kde-format | |
146 | msgctxt "@info:status the call was disconnected because..." | |
147 | msgid "Disconnected: %1" | |
148 | msgstr "" | |
149 | ||
150 | #: src/call-window.cpp:339 | |
151 | msgctxt "@action" | |
152 | msgid "Show my video" | |
153 | msgstr "" | |
154 | ||
155 | #: src/call-window.cpp:344 | |
156 | msgctxt "@action" | |
157 | msgid "Show dialpad" | |
158 | msgstr "" | |
159 | ||
160 | #: src/call-window.cpp:351 | |
161 | msgctxt "@action" | |
162 | msgid "Send video" | |
163 | msgstr "" | |
164 | ||
165 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
166 | msgctxt "@action" | |
167 | msgid "Mute" | |
168 | msgstr "" | |
169 | ||
170 | #: src/call-window.cpp:363 | |
171 | msgctxt "@action" | |
172 | msgid "Hold" | |
173 | msgstr "" | |
174 | ||
175 | #: src/call-window.cpp:368 | |
176 | msgctxt "@action" | |
177 | msgid "Hangup" | |
178 | msgstr "" | |
179 | ||
180 | #: src/main.cpp:36 | |
181 | msgid "KDE Telepathy Call Ui" | |
182 | msgstr "" | |
183 | ||
184 | #: src/main.cpp:37 | |
185 | msgid "VoIP client for KDE" | |
186 | msgstr "" | |
187 | ||
188 | #: src/main.cpp:38 | |
189 | msgid "(C) 2009, George Kiagiadakis" | |
190 | msgstr "" | |
191 | ||
192 | #: src/main.cpp:40 | |
193 | msgctxt "@info:credit" | |
194 | msgid "George Kiagiadakis" | |
195 | msgstr "" | |
196 | ||
197 | #: rc.cpp:1 | |
198 | msgctxt "NAME OF TRANSLATORS" | |
199 | msgid "Your names" | |
200 | msgstr "" | |
201 | ||
202 | #: rc.cpp:2 | |
203 | msgctxt "EMAIL OF TRANSLATORS" | |
204 | msgid "Your emails" | |
205 | msgstr "" | |
206 | ||
207 | #. i18n: file: src/callwindowui.rc:11 | |
208 | #. i18n: ectx: Menu (call) | |
209 | #: rc.cpp:5 | |
210 | msgid "Call" | |
211 | msgstr "" | |
212 | ||
213 | #. i18n: file: src/callwindowui.rc:20 | |
214 | #. i18n: ectx: Menu (media) | |
215 | #: rc.cpp:8 | |
216 | msgid "Media" | |
217 | msgstr "" | |
218 | ||
219 | #. i18n: file: src/callwindowui.rc:27 | |
220 | #. i18n: ectx: ToolBar (mainToolBar) | |
221 | #: rc.cpp:11 | |
222 | msgid "Main Toolbar" | |
223 | msgstr "" | |
224 | ||
225 | #. i18n: file: src/dtmf-widget.ui:17 | |
226 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
227 | #: rc.cpp:14 | |
228 | msgid "1" | |
229 | msgstr "" | |
230 | ||
231 | #. i18n: file: src/dtmf-widget.ui:24 | |
232 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
233 | #: rc.cpp:17 | |
234 | msgid "2" | |
235 | msgstr "" | |
236 | ||
237 | #. i18n: file: src/dtmf-widget.ui:31 | |
238 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
239 | #: rc.cpp:20 | |
240 | msgid "3" | |
241 | msgstr "" | |
242 | ||
243 | #. i18n: file: src/dtmf-widget.ui:38 | |
244 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
245 | #: rc.cpp:23 | |
246 | msgid "4" | |
247 | msgstr "" | |
248 | ||
249 | #. i18n: file: src/dtmf-widget.ui:45 | |
250 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
251 | #: rc.cpp:26 | |
252 | msgid "5" | |
253 | msgstr "" | |
254 | ||
255 | #. i18n: file: src/dtmf-widget.ui:52 | |
256 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
257 | #: rc.cpp:29 | |
258 | msgid "6" | |
259 | msgstr "" | |
260 | ||
261 | #. i18n: file: src/dtmf-widget.ui:59 | |
262 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
263 | #: rc.cpp:32 | |
264 | msgid "7" | |
265 | msgstr "" | |
266 | ||
267 | #. i18n: file: src/dtmf-widget.ui:66 | |
268 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
269 | #: rc.cpp:35 | |
270 | msgid "8" | |
271 | msgstr "" | |
272 | ||
273 | #. i18n: file: src/dtmf-widget.ui:73 | |
274 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
275 | #: rc.cpp:38 | |
276 | msgid "9" | |
277 | msgstr "" | |
278 | ||
279 | #. i18n: file: src/dtmf-widget.ui:80 | |
280 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
281 | #: rc.cpp:41 | |
282 | msgid "*" | |
283 | msgstr "" | |
284 | ||
285 | #. i18n: file: src/dtmf-widget.ui:87 | |
286 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
287 | #: rc.cpp:44 | |
288 | msgid "0" | |
289 | msgstr "" | |
290 | ||
291 | #. i18n: file: src/dtmf-widget.ui:94 | |
292 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
293 | #: rc.cpp:47 | |
294 | msgid "#" | |
295 | msgstr "" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( km ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of telepathy-kde-call-ui.po to Khmer | |
1 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # | |
4 | # Khoem Sokhem <khoemsokhem@khmeros.info>, 2011. | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: telepathy-kde-call-ui\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2011-06-28 07:46+0700\n" | |
11 | "Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n" | |
12 | "Language-Team: Khmer <support@khmeros.info>\n" | |
13 | "Language: \n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "X-Generator: KBabel 1.11.4\n" | |
18 | "Plural-Forms: nplurals=1; plural=0;\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | msgid "Incoming video call" | |
22 | msgstr "" | |
23 | ||
24 | #: src/approver.cpp:39 | |
25 | #, kde-format | |
26 | msgid "<p>%1 is asking you for a video call</p>" | |
27 | msgstr "" | |
28 | ||
29 | #: src/approver.cpp:41 | |
30 | msgid "Incoming call" | |
31 | msgstr "" | |
32 | ||
33 | #: src/approver.cpp:42 | |
34 | #, kde-format | |
35 | msgid "<p>%1 is calling you</p>" | |
36 | msgstr "" | |
37 | ||
38 | #: src/approver.cpp:58 src/approver.cpp:80 | |
39 | msgctxt "action, answers the incoming call" | |
40 | msgid "Answer" | |
41 | msgstr "" | |
42 | ||
43 | #: src/approver.cpp:59 src/approver.cpp:82 | |
44 | msgctxt "action, rejects the incoming call" | |
45 | msgid "Reject" | |
46 | msgstr "" | |
47 | ||
48 | #: src/call-window.cpp:95 | |
49 | #, kde-format | |
50 | msgid "Call with %1" | |
51 | msgstr "" | |
52 | ||
53 | #: src/call-window.cpp:109 | |
54 | msgctxt "@info:status" | |
55 | msgid "Connecting..." | |
56 | msgstr "" | |
57 | ||
58 | #: src/call-window.cpp:113 | |
59 | msgctxt "@info:status the remote user's phone is ringing" | |
60 | msgid "Ringing..." | |
61 | msgstr "" | |
62 | ||
63 | #: src/call-window.cpp:117 | |
64 | msgctxt "@info:status" | |
65 | msgid "Remote user accepted the call, waiting for connection..." | |
66 | msgstr "" | |
67 | ||
68 | #: src/call-window.cpp:120 | |
69 | msgctxt "@info:status" | |
70 | msgid "Talking..." | |
71 | msgstr "" | |
72 | ||
73 | #: src/call-window.cpp:136 | |
74 | msgctxt "@info:status" | |
75 | msgid "Remote contact ended the call." | |
76 | msgstr "" | |
77 | ||
78 | #: src/call-window.cpp:143 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact rejected the call." | |
81 | msgstr "" | |
82 | ||
83 | #: src/call-window.cpp:148 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact didn't answer." | |
86 | msgstr "" | |
87 | ||
88 | #: src/call-window.cpp:152 | |
89 | msgctxt "@info:status" | |
90 | msgid "Invalid number or contact." | |
91 | msgstr "" | |
92 | ||
93 | #: src/call-window.cpp:156 | |
94 | msgctxt "@info:status" | |
95 | msgid "You don't have enough balance to make this call." | |
96 | msgstr "" | |
97 | ||
98 | #: src/call-window.cpp:158 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have permission to make this call." | |
101 | msgstr "" | |
102 | ||
103 | #: src/call-window.cpp:163 | |
104 | msgctxt "@info:status" | |
105 | msgid "Remote contact is currently busy." | |
106 | msgstr "" | |
107 | ||
108 | #: src/call-window.cpp:167 | |
109 | msgctxt "@info:status" | |
110 | msgid "Internal component error." | |
111 | msgstr "" | |
112 | ||
113 | #: src/call-window.cpp:170 | |
114 | msgctxt "@info:status" | |
115 | msgid "Remote service error." | |
116 | msgstr "" | |
117 | ||
118 | #: src/call-window.cpp:173 | |
119 | msgctxt "@info:status" | |
120 | msgid "Network error." | |
121 | msgstr "" | |
122 | ||
123 | #: src/call-window.cpp:177 | |
124 | msgctxt "@info:status" | |
125 | msgid "Failed to negotiate codecs." | |
126 | msgstr "" | |
127 | ||
128 | #: src/call-window.cpp:179 | |
129 | msgctxt "@info:status" | |
130 | msgid "Unsupported media type." | |
131 | msgstr "" | |
132 | ||
133 | #: src/call-window.cpp:183 | |
134 | msgctxt "@info:status" | |
135 | msgid "Connectivity error." | |
136 | msgstr "" | |
137 | ||
138 | #: src/call-window.cpp:187 | |
139 | msgctxt "@info:status" | |
140 | msgid "Unknown error." | |
141 | msgstr "" | |
142 | ||
143 | #: src/call-window.cpp:192 | |
144 | msgctxt "@info:status" | |
145 | msgid "Disconnected." | |
146 | msgstr "" | |
147 | ||
148 | #: src/call-window.cpp:196 | |
149 | #, kde-format | |
150 | msgctxt "@info:status the call was disconnected because..." | |
151 | msgid "Disconnected: %1" | |
152 | msgstr "" | |
153 | ||
154 | #: src/call-window.cpp:339 | |
155 | msgctxt "@action" | |
156 | msgid "Show my video" | |
157 | msgstr "" | |
158 | ||
159 | #: src/call-window.cpp:344 | |
160 | msgctxt "@action" | |
161 | msgid "Show dialpad" | |
162 | msgstr "" | |
163 | ||
164 | #: src/call-window.cpp:351 | |
165 | msgctxt "@action" | |
166 | msgid "Send video" | |
167 | msgstr "" | |
168 | ||
169 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
170 | msgctxt "@action" | |
171 | msgid "Mute" | |
172 | msgstr "" | |
173 | ||
174 | #: src/call-window.cpp:363 | |
175 | msgctxt "@action" | |
176 | msgid "Hold" | |
177 | msgstr "" | |
178 | ||
179 | #: src/call-window.cpp:368 | |
180 | msgctxt "@action" | |
181 | msgid "Hangup" | |
182 | msgstr "" | |
183 | ||
184 | #: src/main.cpp:36 | |
185 | msgid "KDE Telepathy Call Ui" | |
186 | msgstr "" | |
187 | ||
188 | #: src/main.cpp:37 | |
189 | msgid "VoIP client for KDE" | |
190 | msgstr "" | |
191 | ||
192 | #: src/main.cpp:38 | |
193 | msgid "(C) 2009, George Kiagiadakis" | |
194 | msgstr "" | |
195 | ||
196 | #: src/main.cpp:40 | |
197 | msgctxt "@info:credit" | |
198 | msgid "George Kiagiadakis" | |
199 | msgstr "" | |
200 | ||
201 | #: rc.cpp:1 | |
202 | msgctxt "NAME OF TRANSLATORS" | |
203 | msgid "Your names" | |
204 | msgstr "" | |
205 | ||
206 | #: rc.cpp:2 | |
207 | msgctxt "EMAIL OF TRANSLATORS" | |
208 | msgid "Your emails" | |
209 | msgstr "" | |
210 | ||
211 | #. i18n: file: src/callwindowui.rc:11 | |
212 | #. i18n: ectx: Menu (call) | |
213 | #: rc.cpp:5 | |
214 | msgid "Call" | |
215 | msgstr "" | |
216 | ||
217 | #. i18n: file: src/callwindowui.rc:20 | |
218 | #. i18n: ectx: Menu (media) | |
219 | #: rc.cpp:8 | |
220 | msgid "Media" | |
221 | msgstr "" | |
222 | ||
223 | #. i18n: file: src/callwindowui.rc:27 | |
224 | #. i18n: ectx: ToolBar (mainToolBar) | |
225 | #: rc.cpp:11 | |
226 | msgid "Main Toolbar" | |
227 | msgstr "" | |
228 | ||
229 | #. i18n: file: src/dtmf-widget.ui:17 | |
230 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
231 | #: rc.cpp:14 | |
232 | msgid "1" | |
233 | msgstr "" | |
234 | ||
235 | #. i18n: file: src/dtmf-widget.ui:24 | |
236 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
237 | #: rc.cpp:17 | |
238 | msgid "2" | |
239 | msgstr "" | |
240 | ||
241 | #. i18n: file: src/dtmf-widget.ui:31 | |
242 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
243 | #: rc.cpp:20 | |
244 | msgid "3" | |
245 | msgstr "" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:38 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
249 | #: rc.cpp:23 | |
250 | msgid "4" | |
251 | msgstr "" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:45 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
255 | #: rc.cpp:26 | |
256 | msgid "5" | |
257 | msgstr "" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:52 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
261 | #: rc.cpp:29 | |
262 | msgid "6" | |
263 | msgstr "" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:59 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
267 | #: rc.cpp:32 | |
268 | msgid "7" | |
269 | msgstr "" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:66 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
273 | #: rc.cpp:35 | |
274 | msgid "8" | |
275 | msgstr "" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:73 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
279 | #: rc.cpp:38 | |
280 | msgid "9" | |
281 | msgstr "" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:80 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
285 | #: rc.cpp:41 | |
286 | msgid "*" | |
287 | msgstr "" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:87 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
291 | #: rc.cpp:44 | |
292 | msgid "0" | |
293 | msgstr "" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:94 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
297 | #: rc.cpp:47 | |
298 | msgid "#" | |
299 | msgstr "" | |
300 | ||
301 | #~ msgid "The audio input device could not be initialized" | |
302 | #~ msgstr " " |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( lt ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Lithuanian translations for kcall package. | |
1 | # Copyright (C) 2009 This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the kcall package. | |
3 | # | |
4 | # Donatas G. <dgvirtual@akl.lt>, 2012. | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: telepathy-kde-call-ui\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2012-03-31 18:26+0300\n" | |
11 | "Last-Translator: Donatas G. <dgvirtual@akl.lt>\n" | |
12 | "Language-Team: Lithuanian <kde-i18n-lt@kde.org>\n" | |
13 | "Language: lt\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n" | |
18 | "%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n" | |
19 | "X-Generator: Lokalize 1.4\n" | |
20 | ||
21 | #: src/approver.cpp:38 | |
22 | msgid "Incoming video call" | |
23 | msgstr "Įeinantis video skambutis" | |
24 | ||
25 | #: src/approver.cpp:39 | |
26 | #, kde-format | |
27 | msgid "<p>%1 is asking you for a video call</p>" | |
28 | msgstr "<p>%1 prašo video pokalbio</p>" | |
29 | ||
30 | #: src/approver.cpp:41 | |
31 | msgid "Incoming call" | |
32 | msgstr "Įeinantis skambutis" | |
33 | ||
34 | #: src/approver.cpp:42 | |
35 | #, kde-format | |
36 | msgid "<p>%1 is calling you</p>" | |
37 | msgstr "<p>Jums skambina %1</p>" | |
38 | ||
39 | #: src/approver.cpp:58 src/approver.cpp:80 | |
40 | #, fuzzy | |
41 | #| msgid "Answer" | |
42 | msgctxt "action, answers the incoming call" | |
43 | msgid "Answer" | |
44 | msgstr "Pakelti" | |
45 | ||
46 | #: src/approver.cpp:59 src/approver.cpp:82 | |
47 | #, fuzzy | |
48 | #| msgid "Reject" | |
49 | msgctxt "action, rejects the incoming call" | |
50 | msgid "Reject" | |
51 | msgstr "Atmesti" | |
52 | ||
53 | #: src/call-window.cpp:95 | |
54 | #, kde-format | |
55 | msgid "Call with %1" | |
56 | msgstr "Skambinti naudojant %1" | |
57 | ||
58 | #: src/call-window.cpp:109 | |
59 | msgctxt "@info:status" | |
60 | msgid "Connecting..." | |
61 | msgstr "Jungiamasi..." | |
62 | ||
63 | #: src/call-window.cpp:113 | |
64 | msgctxt "@info:status the remote user's phone is ringing" | |
65 | msgid "Ringing..." | |
66 | msgstr "Skambinama..." | |
67 | ||
68 | #: src/call-window.cpp:117 | |
69 | msgctxt "@info:status" | |
70 | msgid "Remote user accepted the call, waiting for connection..." | |
71 | msgstr "Nutolęs vartotojas priėmė skambutį, laukiama ryšio..." | |
72 | ||
73 | #: src/call-window.cpp:120 | |
74 | msgctxt "@info:status" | |
75 | msgid "Talking..." | |
76 | msgstr "Kalbama..." | |
77 | ||
78 | #: src/call-window.cpp:136 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact ended the call." | |
81 | msgstr "Nutolęs kontaktas užbaigė skambutį." | |
82 | ||
83 | #: src/call-window.cpp:143 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact rejected the call." | |
86 | msgstr "Nutolęs kontaktas atmetė skambutį." | |
87 | ||
88 | #: src/call-window.cpp:148 | |
89 | msgctxt "@info:status" | |
90 | msgid "Remote contact didn't answer." | |
91 | msgstr "Nutolęs kontaktas neatsakė." | |
92 | ||
93 | #: src/call-window.cpp:152 | |
94 | msgctxt "@info:status" | |
95 | msgid "Invalid number or contact." | |
96 | msgstr "Neteisingas kontaktas ar numeris." | |
97 | ||
98 | #: src/call-window.cpp:156 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have enough balance to make this call." | |
101 | msgstr "Jūsų balanse trūksta lėšų šiam skambučiui." | |
102 | ||
103 | #: src/call-window.cpp:158 | |
104 | msgctxt "@info:status" | |
105 | msgid "You don't have permission to make this call." | |
106 | msgstr "Jūs neturite leidimo atlikti šį skambutį." | |
107 | ||
108 | #: src/call-window.cpp:163 | |
109 | msgctxt "@info:status" | |
110 | msgid "Remote contact is currently busy." | |
111 | msgstr "Nutolęs kontaktas šiuo metu užsiėmęs." | |
112 | ||
113 | #: src/call-window.cpp:167 | |
114 | msgctxt "@info:status" | |
115 | msgid "Internal component error." | |
116 | msgstr "Vidinė komponento klaida." | |
117 | ||
118 | #: src/call-window.cpp:170 | |
119 | msgctxt "@info:status" | |
120 | msgid "Remote service error." | |
121 | msgstr "Nutolusios tarnybos klaida." | |
122 | ||
123 | #: src/call-window.cpp:173 | |
124 | msgctxt "@info:status" | |
125 | msgid "Network error." | |
126 | msgstr "Tinklo klaida." | |
127 | ||
128 | #: src/call-window.cpp:177 | |
129 | msgctxt "@info:status" | |
130 | msgid "Failed to negotiate codecs." | |
131 | msgstr "Nepavyko susitarti dėl kodekų." | |
132 | ||
133 | #: src/call-window.cpp:179 | |
134 | msgctxt "@info:status" | |
135 | msgid "Unsupported media type." | |
136 | msgstr "Nepalaikomas media tipas." | |
137 | ||
138 | #: src/call-window.cpp:183 | |
139 | msgctxt "@info:status" | |
140 | msgid "Connectivity error." | |
141 | msgstr "Jungimosi klaida." | |
142 | ||
143 | #: src/call-window.cpp:187 | |
144 | msgctxt "@info:status" | |
145 | msgid "Unknown error." | |
146 | msgstr "Nežinoma klaida." | |
147 | ||
148 | #: src/call-window.cpp:192 | |
149 | msgctxt "@info:status" | |
150 | msgid "Disconnected." | |
151 | msgstr "Atsijungta." | |
152 | ||
153 | #: src/call-window.cpp:196 | |
154 | #, kde-format | |
155 | msgctxt "@info:status the call was disconnected because..." | |
156 | msgid "Disconnected: %1" | |
157 | msgstr "Atsijungta: %1" | |
158 | ||
159 | #: src/call-window.cpp:339 | |
160 | msgctxt "@action" | |
161 | msgid "Show my video" | |
162 | msgstr "Rodyti mano video" | |
163 | ||
164 | #: src/call-window.cpp:344 | |
165 | msgctxt "@action" | |
166 | msgid "Show dialpad" | |
167 | msgstr "Rodyti rinkimo pultelį" | |
168 | ||
169 | #: src/call-window.cpp:351 | |
170 | msgctxt "@action" | |
171 | msgid "Send video" | |
172 | msgstr "Siųsti video" | |
173 | ||
174 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
175 | msgctxt "@action" | |
176 | msgid "Mute" | |
177 | msgstr "Užtildyti" | |
178 | ||
179 | #: src/call-window.cpp:363 | |
180 | msgctxt "@action" | |
181 | msgid "Hold" | |
182 | msgstr "Pristabdyti" | |
183 | ||
184 | #: src/call-window.cpp:368 | |
185 | msgctxt "@action" | |
186 | msgid "Hangup" | |
187 | msgstr "Padėti ragelį" | |
188 | ||
189 | #: src/main.cpp:36 | |
190 | msgid "KDE Telepathy Call Ui" | |
191 | msgstr "KDE Telepathy skambučių vartotojo sąsaja" | |
192 | ||
193 | #: src/main.cpp:37 | |
194 | msgid "VoIP client for KDE" | |
195 | msgstr "KDE VoIP programa" | |
196 | ||
197 | #: src/main.cpp:38 | |
198 | msgid "(C) 2009, George Kiagiadakis" | |
199 | msgstr "(C) 2009, George Kiagiadakis" | |
200 | ||
201 | #: src/main.cpp:40 | |
202 | msgctxt "@info:credit" | |
203 | msgid "George Kiagiadakis" | |
204 | msgstr "George Kiagiadakis" | |
205 | ||
206 | #: rc.cpp:1 | |
207 | msgctxt "NAME OF TRANSLATORS" | |
208 | msgid "Your names" | |
209 | msgstr "Andrius Štikonas" | |
210 | ||
211 | #: rc.cpp:2 | |
212 | msgctxt "EMAIL OF TRANSLATORS" | |
213 | msgid "Your emails" | |
214 | msgstr "stikonas@gmail.com" | |
215 | ||
216 | #. i18n: file: src/callwindowui.rc:11 | |
217 | #. i18n: ectx: Menu (call) | |
218 | #: rc.cpp:5 | |
219 | msgid "Call" | |
220 | msgstr "Skambinti" | |
221 | ||
222 | #. i18n: file: src/callwindowui.rc:20 | |
223 | #. i18n: ectx: Menu (media) | |
224 | #: rc.cpp:8 | |
225 | msgid "Media" | |
226 | msgstr "Media" | |
227 | ||
228 | #. i18n: file: src/callwindowui.rc:27 | |
229 | #. i18n: ectx: ToolBar (mainToolBar) | |
230 | #: rc.cpp:11 | |
231 | msgid "Main Toolbar" | |
232 | msgstr "Pagrindinė įrankinė" | |
233 | ||
234 | #. i18n: file: src/dtmf-widget.ui:17 | |
235 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
236 | #: rc.cpp:14 | |
237 | msgid "1" | |
238 | msgstr "1" | |
239 | ||
240 | #. i18n: file: src/dtmf-widget.ui:24 | |
241 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
242 | #: rc.cpp:17 | |
243 | msgid "2" | |
244 | msgstr "2" | |
245 | ||
246 | #. i18n: file: src/dtmf-widget.ui:31 | |
247 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
248 | #: rc.cpp:20 | |
249 | msgid "3" | |
250 | msgstr "3" | |
251 | ||
252 | #. i18n: file: src/dtmf-widget.ui:38 | |
253 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
254 | #: rc.cpp:23 | |
255 | msgid "4" | |
256 | msgstr "4" | |
257 | ||
258 | #. i18n: file: src/dtmf-widget.ui:45 | |
259 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
260 | #: rc.cpp:26 | |
261 | msgid "5" | |
262 | msgstr "5" | |
263 | ||
264 | #. i18n: file: src/dtmf-widget.ui:52 | |
265 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
266 | #: rc.cpp:29 | |
267 | msgid "6" | |
268 | msgstr "6" | |
269 | ||
270 | #. i18n: file: src/dtmf-widget.ui:59 | |
271 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
272 | #: rc.cpp:32 | |
273 | msgid "7" | |
274 | msgstr "7" | |
275 | ||
276 | #. i18n: file: src/dtmf-widget.ui:66 | |
277 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
278 | #: rc.cpp:35 | |
279 | msgid "8" | |
280 | msgstr "8" | |
281 | ||
282 | #. i18n: file: src/dtmf-widget.ui:73 | |
283 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
284 | #: rc.cpp:38 | |
285 | msgid "9" | |
286 | msgstr "9" | |
287 | ||
288 | #. i18n: file: src/dtmf-widget.ui:80 | |
289 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
290 | #: rc.cpp:41 | |
291 | msgid "*" | |
292 | msgstr "*" | |
293 | ||
294 | #. i18n: file: src/dtmf-widget.ui:87 | |
295 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
296 | #: rc.cpp:44 | |
297 | msgid "0" | |
298 | msgstr "0" | |
299 | ||
300 | #. i18n: file: src/dtmf-widget.ui:94 | |
301 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
302 | #: rc.cpp:47 | |
303 | msgid "#" | |
304 | msgstr "#" | |
305 | ||
306 | #~ msgid "Warning: %1" | |
307 | #~ msgstr "Dėmesio: %1" | |
308 | ||
309 | #~ msgid "Error: %1" | |
310 | #~ msgstr "Klaida: %1" | |
311 | ||
312 | #~ msgid "KCall" | |
313 | #~ msgstr "KCall" | |
314 | ||
315 | #~ msgid "Brightness" | |
316 | #~ msgstr "Šviesumas" | |
317 | ||
318 | #~ msgid "Contrast" | |
319 | #~ msgstr "Kontrastas" | |
320 | ||
321 | #~ msgid "Hue" | |
322 | #~ msgstr "Atspalvis" | |
323 | ||
324 | #~ msgid "Saturation" | |
325 | #~ msgstr "Sodrumas" | |
326 | ||
327 | #~ msgctxt "@action:inmenu" | |
328 | #~ msgid "Show participants" | |
329 | #~ msgstr "Rodyti dalyvius" | |
330 | ||
331 | #~ msgctxt "@action:inmenu" | |
332 | #~ msgid "Show log" | |
333 | #~ msgstr "Rodyti žurnalą" | |
334 | ||
335 | #~ msgctxt "@action:inmenu" | |
336 | #~ msgid "Status" | |
337 | #~ msgstr "Būsena" | |
338 | ||
339 | #~ msgctxt "@action:inmenu" | |
340 | #~ msgid "Available" | |
341 | #~ msgstr "Prieinamas (-a)" | |
342 | ||
343 | #~ msgctxt "@action:inmenu" | |
344 | #~ msgid "Away" | |
345 | #~ msgstr "Pasitraukęs (-usi)" | |
346 | ||
347 | #~ msgctxt "@action:inmenu" | |
348 | #~ msgid "Be right back" | |
349 | #~ msgstr "Tuoj grįšiu" | |
350 | ||
351 | #~ msgctxt "@action:inmenu" | |
352 | #~ msgid "Busy" | |
353 | #~ msgstr "Užimtas (-a)" | |
354 | ||
355 | #~ msgctxt "@action:inmenu" | |
356 | #~ msgid "Do not disturb" | |
357 | #~ msgstr "Netrukdyti" | |
358 | ||
359 | #~ msgctxt "@action:inmenu" | |
360 | #~ msgid "Extended Away" | |
361 | #~ msgstr "Ilgam pasitraukęs (-usi)" | |
362 | ||
363 | #~ msgctxt "@action:inmenu" | |
364 | #~ msgid "Invisible" | |
365 | #~ msgstr "Nematomas (-a)" | |
366 | ||
367 | #~ msgctxt "@action:inmenu" | |
368 | #~ msgid "Offline" | |
369 | #~ msgstr "Neprisijungęs (-usi)" | |
370 | ||
371 | #~ msgctxt "protocol - display name (Connecting)" | |
372 | #~ msgid "%1 - %2 (Connecting)" | |
373 | #~ msgstr "%1 – %2 (Jungiamasi)" | |
374 | ||
375 | #~ msgctxt "protocol - display name" | |
376 | #~ msgid "%1 - %2" | |
377 | #~ msgstr "%1 – %2" | |
378 | ||
379 | #~ msgctxt "@title:window" | |
380 | #~ msgid "KCall" | |
381 | #~ msgstr "KCall" | |
382 | ||
383 | #~ msgctxt "@info:status" | |
384 | #~ msgid "Connected" | |
385 | #~ msgstr "Prisijungta" | |
386 | ||
387 | #~ msgctxt "@action" | |
388 | #~ msgid "Disconnect" | |
389 | #~ msgstr "Atsijungti" | |
390 | ||
391 | #~ msgctxt "@action" | |
392 | #~ msgid "Connect" | |
393 | #~ msgstr "Prisijungta" | |
394 | ||
395 | #~ msgid "Volume" | |
396 | #~ msgstr "Garsumas" | |
397 | ||
398 | #~ msgid "Speakers" | |
399 | #~ msgstr "Garsiakalbiai" | |
400 | ||
401 | #~ msgid "Microphone" | |
402 | #~ msgstr "Mikrofonas" | |
403 | ||
404 | #~ msgid "Participants" | |
405 | #~ msgstr "Dalyviai" | |
406 | ||
407 | #~ msgctxt "@title:tab" | |
408 | #~ msgid "&Contact list" | |
409 | #~ msgstr "&Kontaktų sąrašas" | |
410 | ||
411 | #~ msgid "Account" | |
412 | #~ msgstr "Paskyra" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( mai ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of kcall.po to Maithili | |
1 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # | |
4 | # Rajesh Ranjan <rajesh672@gmail.com>, 2010. | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: kcall\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2010-09-24 13:00+0530\n" | |
11 | "Last-Translator: Rajesh Ranjan <rajesh672@gmail.com>\n" | |
12 | "Language-Team: Maithili <bhashaghar@googlegroups.com>\n" | |
13 | "Language: mai\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "X-Generator: KBabel 1.11.4\n" | |
18 | "Plural-Forms: nplurals=2; plural=(n!=1);\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | msgid "Incoming video call" | |
22 | msgstr "" | |
23 | ||
24 | #: src/approver.cpp:39 | |
25 | #, kde-format | |
26 | msgid "<p>%1 is asking you for a video call</p>" | |
27 | msgstr "" | |
28 | ||
29 | #: src/approver.cpp:41 | |
30 | msgid "Incoming call" | |
31 | msgstr "" | |
32 | ||
33 | #: src/approver.cpp:42 | |
34 | #, kde-format | |
35 | msgid "<p>%1 is calling you</p>" | |
36 | msgstr "" | |
37 | ||
38 | #: src/approver.cpp:58 src/approver.cpp:80 | |
39 | msgctxt "action, answers the incoming call" | |
40 | msgid "Answer" | |
41 | msgstr "" | |
42 | ||
43 | #: src/approver.cpp:59 src/approver.cpp:82 | |
44 | msgctxt "action, rejects the incoming call" | |
45 | msgid "Reject" | |
46 | msgstr "" | |
47 | ||
48 | #: src/call-window.cpp:95 | |
49 | #, kde-format | |
50 | msgid "Call with %1" | |
51 | msgstr "" | |
52 | ||
53 | #: src/call-window.cpp:109 | |
54 | msgctxt "@info:status" | |
55 | msgid "Connecting..." | |
56 | msgstr "कनेक्ट कए रहल अछि...." | |
57 | ||
58 | #: src/call-window.cpp:113 | |
59 | #, fuzzy | |
60 | #| msgctxt "@info:status" | |
61 | #| msgid "Connecting..." | |
62 | msgctxt "@info:status the remote user's phone is ringing" | |
63 | msgid "Ringing..." | |
64 | msgstr "कनेक्ट कए रहल अछि...." | |
65 | ||
66 | #: src/call-window.cpp:117 | |
67 | msgctxt "@info:status" | |
68 | msgid "Remote user accepted the call, waiting for connection..." | |
69 | msgstr "" | |
70 | ||
71 | #: src/call-window.cpp:120 | |
72 | msgctxt "@info:status" | |
73 | msgid "Talking..." | |
74 | msgstr "" | |
75 | ||
76 | #: src/call-window.cpp:136 | |
77 | msgctxt "@info:status" | |
78 | msgid "Remote contact ended the call." | |
79 | msgstr "" | |
80 | ||
81 | #: src/call-window.cpp:143 | |
82 | msgctxt "@info:status" | |
83 | msgid "Remote contact rejected the call." | |
84 | msgstr "" | |
85 | ||
86 | #: src/call-window.cpp:148 | |
87 | msgctxt "@info:status" | |
88 | msgid "Remote contact didn't answer." | |
89 | msgstr "" | |
90 | ||
91 | #: src/call-window.cpp:152 | |
92 | msgctxt "@info:status" | |
93 | msgid "Invalid number or contact." | |
94 | msgstr "" | |
95 | ||
96 | #: src/call-window.cpp:156 | |
97 | msgctxt "@info:status" | |
98 | msgid "You don't have enough balance to make this call." | |
99 | msgstr "" | |
100 | ||
101 | #: src/call-window.cpp:158 | |
102 | msgctxt "@info:status" | |
103 | msgid "You don't have permission to make this call." | |
104 | msgstr "" | |
105 | ||
106 | #: src/call-window.cpp:163 | |
107 | msgctxt "@info:status" | |
108 | msgid "Remote contact is currently busy." | |
109 | msgstr "" | |
110 | ||
111 | #: src/call-window.cpp:167 | |
112 | msgctxt "@info:status" | |
113 | msgid "Internal component error." | |
114 | msgstr "" | |
115 | ||
116 | #: src/call-window.cpp:170 | |
117 | msgctxt "@info:status" | |
118 | msgid "Remote service error." | |
119 | msgstr "" | |
120 | ||
121 | #: src/call-window.cpp:173 | |
122 | msgctxt "@info:status" | |
123 | msgid "Network error." | |
124 | msgstr "" | |
125 | ||
126 | #: src/call-window.cpp:177 | |
127 | msgctxt "@info:status" | |
128 | msgid "Failed to negotiate codecs." | |
129 | msgstr "" | |
130 | ||
131 | #: src/call-window.cpp:179 | |
132 | msgctxt "@info:status" | |
133 | msgid "Unsupported media type." | |
134 | msgstr "" | |
135 | ||
136 | #: src/call-window.cpp:183 | |
137 | msgctxt "@info:status" | |
138 | msgid "Connectivity error." | |
139 | msgstr "" | |
140 | ||
141 | #: src/call-window.cpp:187 | |
142 | #, fuzzy | |
143 | #| msgctxt "Unknown audio or video system" | |
144 | #| msgid "Unknown" | |
145 | msgctxt "@info:status" | |
146 | msgid "Unknown error." | |
147 | msgstr "अज्ञात" | |
148 | ||
149 | #: src/call-window.cpp:192 | |
150 | msgctxt "@info:status" | |
151 | msgid "Disconnected." | |
152 | msgstr "संबंधन नहि अछि" | |
153 | ||
154 | #: src/call-window.cpp:196 | |
155 | #, fuzzy, kde-format | |
156 | #| msgctxt "@info:status" | |
157 | #| msgid "Disconnected" | |
158 | msgctxt "@info:status the call was disconnected because..." | |
159 | msgid "Disconnected: %1" | |
160 | msgstr "बिसंबंधित" | |
161 | ||
162 | #: src/call-window.cpp:339 | |
163 | msgctxt "@action" | |
164 | msgid "Show my video" | |
165 | msgstr "" | |
166 | ||
167 | #: src/call-window.cpp:344 | |
168 | #, fuzzy | |
169 | #| msgid "Show details" | |
170 | msgctxt "@action" | |
171 | msgid "Show dialpad" | |
172 | msgstr "विवरण देखाबू" | |
173 | ||
174 | #: src/call-window.cpp:351 | |
175 | msgctxt "@action" | |
176 | msgid "Send video" | |
177 | msgstr "" | |
178 | ||
179 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
180 | msgctxt "@action" | |
181 | msgid "Mute" | |
182 | msgstr "" | |
183 | ||
184 | #: src/call-window.cpp:363 | |
185 | msgctxt "@action" | |
186 | msgid "Hold" | |
187 | msgstr "" | |
188 | ||
189 | #: src/call-window.cpp:368 | |
190 | msgctxt "@action" | |
191 | msgid "Hangup" | |
192 | msgstr "हैंगअप" | |
193 | ||
194 | #: src/main.cpp:36 | |
195 | msgid "KDE Telepathy Call Ui" | |
196 | msgstr "" | |
197 | ||
198 | #: src/main.cpp:37 | |
199 | msgid "VoIP client for KDE" | |
200 | msgstr "" | |
201 | ||
202 | #: src/main.cpp:38 | |
203 | msgid "(C) 2009, George Kiagiadakis" | |
204 | msgstr "" | |
205 | ||
206 | #: src/main.cpp:40 | |
207 | msgctxt "@info:credit" | |
208 | msgid "George Kiagiadakis" | |
209 | msgstr "George Kiagiadakis" | |
210 | ||
211 | #: rc.cpp:1 | |
212 | msgctxt "NAME OF TRANSLATORS" | |
213 | msgid "Your names" | |
214 | msgstr "संगीता कुमारी" | |
215 | ||
216 | #: rc.cpp:2 | |
217 | msgctxt "EMAIL OF TRANSLATORS" | |
218 | msgid "Your emails" | |
219 | msgstr "sangeeta09@gmail.com" | |
220 | ||
221 | #. i18n: file: src/callwindowui.rc:11 | |
222 | #. i18n: ectx: Menu (call) | |
223 | #: rc.cpp:5 | |
224 | msgid "Call" | |
225 | msgstr "कॉल" | |
226 | ||
227 | #. i18n: file: src/callwindowui.rc:20 | |
228 | #. i18n: ectx: Menu (media) | |
229 | #: rc.cpp:8 | |
230 | msgid "Media" | |
231 | msgstr "" | |
232 | ||
233 | #. i18n: file: src/callwindowui.rc:27 | |
234 | #. i18n: ectx: ToolBar (mainToolBar) | |
235 | #: rc.cpp:11 | |
236 | msgid "Main Toolbar" | |
237 | msgstr "मुख्य अओजार पट्टी" | |
238 | ||
239 | #. i18n: file: src/dtmf-widget.ui:17 | |
240 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
241 | #: rc.cpp:14 | |
242 | msgid "1" | |
243 | msgstr "1" | |
244 | ||
245 | #. i18n: file: src/dtmf-widget.ui:24 | |
246 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
247 | #: rc.cpp:17 | |
248 | msgid "2" | |
249 | msgstr "2" | |
250 | ||
251 | #. i18n: file: src/dtmf-widget.ui:31 | |
252 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
253 | #: rc.cpp:20 | |
254 | msgid "3" | |
255 | msgstr "3" | |
256 | ||
257 | #. i18n: file: src/dtmf-widget.ui:38 | |
258 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
259 | #: rc.cpp:23 | |
260 | msgid "4" | |
261 | msgstr "4" | |
262 | ||
263 | #. i18n: file: src/dtmf-widget.ui:45 | |
264 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
265 | #: rc.cpp:26 | |
266 | msgid "5" | |
267 | msgstr "5" | |
268 | ||
269 | #. i18n: file: src/dtmf-widget.ui:52 | |
270 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
271 | #: rc.cpp:29 | |
272 | msgid "6" | |
273 | msgstr "6" | |
274 | ||
275 | #. i18n: file: src/dtmf-widget.ui:59 | |
276 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
277 | #: rc.cpp:32 | |
278 | msgid "7" | |
279 | msgstr "7" | |
280 | ||
281 | #. i18n: file: src/dtmf-widget.ui:66 | |
282 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
283 | #: rc.cpp:35 | |
284 | msgid "8" | |
285 | msgstr "8" | |
286 | ||
287 | #. i18n: file: src/dtmf-widget.ui:73 | |
288 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
289 | #: rc.cpp:38 | |
290 | msgid "9" | |
291 | msgstr "9" | |
292 | ||
293 | #. i18n: file: src/dtmf-widget.ui:80 | |
294 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
295 | #: rc.cpp:41 | |
296 | msgid "*" | |
297 | msgstr "*" | |
298 | ||
299 | #. i18n: file: src/dtmf-widget.ui:87 | |
300 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
301 | #: rc.cpp:44 | |
302 | msgid "0" | |
303 | msgstr "0" | |
304 | ||
305 | #. i18n: file: src/dtmf-widget.ui:94 | |
306 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
307 | #: rc.cpp:47 | |
308 | msgid "#" | |
309 | msgstr "#" | |
310 | ||
311 | #~ msgid "Error: %1" | |
312 | #~ msgstr "त्रुटि: %1" | |
313 | ||
314 | #~ msgid "Brightness" | |
315 | #~ msgstr "चमकीलापन" | |
316 | ||
317 | #~ msgid "Contrast" | |
318 | #~ msgstr "विरोधी" | |
319 | ||
320 | #~ msgid "Hue" | |
321 | #~ msgstr "वर्ण" | |
322 | ||
323 | #~ msgid "Saturation" | |
324 | #~ msgstr "संतृप्ति" | |
325 | ||
326 | #~ msgid "Dialpad" | |
327 | #~ msgstr "डॉयलपैड" | |
328 | ||
329 | #~ msgctxt "@action:inmenu" | |
330 | #~ msgid "Status" | |
331 | #~ msgstr "स्थिति" | |
332 | ||
333 | #~ msgctxt "@action:inmenu" | |
334 | #~ msgid "Available" | |
335 | #~ msgstr "उपलब्ध" | |
336 | ||
337 | #~ msgctxt "@action:inmenu" | |
338 | #~ msgid "Away" | |
339 | #~ msgstr "दूरि" | |
340 | ||
341 | #~ msgctxt "@action:inmenu" | |
342 | #~ msgid "Busy" | |
343 | #~ msgstr "व्यस्त" | |
344 | ||
345 | #~ msgctxt "@action:inmenu" | |
346 | #~ msgid "Do not disturb" | |
347 | #~ msgstr "तँग नहि करू" | |
348 | ||
349 | #~ msgctxt "@action:inmenu" | |
350 | #~ msgid "Extended Away" | |
351 | #~ msgstr "बड़ समय लेल अनुपस्थित" | |
352 | ||
353 | #~ msgctxt "@action:inmenu" | |
354 | #~ msgid "Invisible" | |
355 | #~ msgstr "अदृश्य" | |
356 | ||
357 | #~ msgctxt "@action:inmenu" | |
358 | #~ msgid "Offline" | |
359 | #~ msgstr "आफलाइन" | |
360 | ||
361 | #~ msgctxt "@info:status" | |
362 | #~ msgid "Connected" | |
363 | #~ msgstr "संबंधित" | |
364 | ||
365 | #~ msgctxt "@action" | |
366 | #~ msgid "Disconnect" | |
367 | #~ msgstr "डिसकनेक्ट करू" | |
368 | ||
369 | #~ msgctxt "@action" | |
370 | #~ msgid "Connect" | |
371 | #~ msgstr "जोड़ू" | |
372 | ||
373 | #~ msgid "Volume" | |
374 | #~ msgstr "आवाज" | |
375 | ||
376 | #~ msgid "Speakers" | |
377 | #~ msgstr "स्पीकर" | |
378 | ||
379 | #~ msgid "Microphone" | |
380 | #~ msgstr "माइक्रोफोन" | |
381 | ||
382 | #~ msgid "Account" | |
383 | #~ msgstr "खाता" | |
384 | ||
385 | #~ msgid "Audio input device" | |
386 | #~ msgstr "ऑडियो इनपुट डिवायस" | |
387 | ||
388 | #~ msgid "Audio output device" | |
389 | #~ msgstr "ऑडियो आउटपुट डिवायस" | |
390 | ||
391 | #~ msgid "Video input device" | |
392 | #~ msgstr "वीडियो इनपुट डिवाइस" | |
393 | ||
394 | #~ msgid "Autodetect" | |
395 | #~ msgstr "अपने जाँचू" | |
396 | ||
397 | #~ msgid "ALSA" | |
398 | #~ msgstr "आल्सा" | |
399 | ||
400 | #~ msgid "OSS" | |
401 | #~ msgstr "OSS" | |
402 | ||
403 | #~ msgid "Device name" | |
404 | #~ msgstr "डिवाइस नाम" | |
405 | ||
406 | #~ msgctxt "test the device" | |
407 | #~ msgid "Test" | |
408 | #~ msgstr "जाँच" | |
409 | ||
410 | #~ msgid "Hide details" | |
411 | #~ msgstr "विवरण नुकाबू" | |
412 | ||
413 | #~ msgid "Ignore" | |
414 | #~ msgstr "उपेक्षा" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( nds ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of kcall.po to Low Saxon | |
1 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # Manfred Wiese <m.j.wiese@web.de>, 2009, 2010, 2011. | |
4 | # | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: kcall\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2010-11-15 07:51+0100\n" | |
11 | "Last-Translator: Manfred Wiese <m.j.wiese@web.de>\n" | |
12 | "Language-Team: Low Saxon <kde-i18n-nds@kde.org>\n" | |
13 | "Language: nds\n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "X-Generator: Lokalize 1.0\n" | |
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | #, fuzzy | |
22 | #| msgctxt "@action:inmenu" | |
23 | #| msgid "Video call" | |
24 | msgid "Incoming video call" | |
25 | msgstr "Videoanroop" | |
26 | ||
27 | #: src/approver.cpp:39 | |
28 | #, kde-format | |
29 | msgid "<p>%1 is asking you for a video call</p>" | |
30 | msgstr "" | |
31 | ||
32 | #: src/approver.cpp:41 | |
33 | #, fuzzy | |
34 | #| msgctxt "@action:inmenu" | |
35 | #| msgid "Voice call" | |
36 | msgid "Incoming call" | |
37 | msgstr "Stimmanroop" | |
38 | ||
39 | #: src/approver.cpp:42 | |
40 | #, fuzzy, kde-format | |
41 | #| msgid "%1 is calling you" | |
42 | msgid "<p>%1 is calling you</p>" | |
43 | msgstr "%1 röppt Di an" | |
44 | ||
45 | #: src/approver.cpp:58 src/approver.cpp:80 | |
46 | #, fuzzy | |
47 | #| msgid "Answer" | |
48 | msgctxt "action, answers the incoming call" | |
49 | msgid "Answer" | |
50 | msgstr "Antern" | |
51 | ||
52 | #: src/approver.cpp:59 src/approver.cpp:82 | |
53 | msgctxt "action, rejects the incoming call" | |
54 | msgid "Reject" | |
55 | msgstr "" | |
56 | ||
57 | #: src/call-window.cpp:95 | |
58 | #, kde-format | |
59 | msgid "Call with %1" | |
60 | msgstr "" | |
61 | ||
62 | #: src/call-window.cpp:109 | |
63 | msgctxt "@info:status" | |
64 | msgid "Connecting..." | |
65 | msgstr "An't Tokoppeln..." | |
66 | ||
67 | #: src/call-window.cpp:113 | |
68 | #, fuzzy | |
69 | #| msgctxt "@info:status" | |
70 | #| msgid "Ringing..." | |
71 | msgctxt "@info:status the remote user's phone is ringing" | |
72 | msgid "Ringing..." | |
73 | msgstr "An't Pingeln" | |
74 | ||
75 | #: src/call-window.cpp:117 | |
76 | msgctxt "@info:status" | |
77 | msgid "Remote user accepted the call, waiting for connection..." | |
78 | msgstr "" | |
79 | ||
80 | #: src/call-window.cpp:120 | |
81 | msgctxt "@info:status" | |
82 | msgid "Talking..." | |
83 | msgstr "An't Snacken" | |
84 | ||
85 | #: src/call-window.cpp:136 | |
86 | msgctxt "@info:status" | |
87 | msgid "Remote contact ended the call." | |
88 | msgstr "" | |
89 | ||
90 | #: src/call-window.cpp:143 | |
91 | msgctxt "@info:status" | |
92 | msgid "Remote contact rejected the call." | |
93 | msgstr "" | |
94 | ||
95 | #: src/call-window.cpp:148 | |
96 | msgctxt "@info:status" | |
97 | msgid "Remote contact didn't answer." | |
98 | msgstr "" | |
99 | ||
100 | #: src/call-window.cpp:152 | |
101 | msgctxt "@info:status" | |
102 | msgid "Invalid number or contact." | |
103 | msgstr "" | |
104 | ||
105 | #: src/call-window.cpp:156 | |
106 | msgctxt "@info:status" | |
107 | msgid "You don't have enough balance to make this call." | |
108 | msgstr "" | |
109 | ||
110 | #: src/call-window.cpp:158 | |
111 | msgctxt "@info:status" | |
112 | msgid "You don't have permission to make this call." | |
113 | msgstr "" | |
114 | ||
115 | #: src/call-window.cpp:163 | |
116 | msgctxt "@info:status" | |
117 | msgid "Remote contact is currently busy." | |
118 | msgstr "" | |
119 | ||
120 | #: src/call-window.cpp:167 | |
121 | msgctxt "@info:status" | |
122 | msgid "Internal component error." | |
123 | msgstr "" | |
124 | ||
125 | #: src/call-window.cpp:170 | |
126 | msgctxt "@info:status" | |
127 | msgid "Remote service error." | |
128 | msgstr "" | |
129 | ||
130 | #: src/call-window.cpp:173 | |
131 | msgctxt "@info:status" | |
132 | msgid "Network error." | |
133 | msgstr "" | |
134 | ||
135 | #: src/call-window.cpp:177 | |
136 | msgctxt "@info:status" | |
137 | msgid "Failed to negotiate codecs." | |
138 | msgstr "" | |
139 | ||
140 | #: src/call-window.cpp:179 | |
141 | msgctxt "@info:status" | |
142 | msgid "Unsupported media type." | |
143 | msgstr "" | |
144 | ||
145 | #: src/call-window.cpp:183 | |
146 | #, fuzzy | |
147 | #| msgctxt "@info:status" | |
148 | #| msgid "Disconnected with error." | |
149 | msgctxt "@info:status" | |
150 | msgid "Connectivity error." | |
151 | msgstr "Mit Fehler afkoppelt" | |
152 | ||
153 | #: src/call-window.cpp:187 | |
154 | #, fuzzy | |
155 | #| msgctxt "Unknown audio or video system" | |
156 | #| msgid "Unknown" | |
157 | msgctxt "@info:status" | |
158 | msgid "Unknown error." | |
159 | msgstr "Nich begäng" | |
160 | ||
161 | #: src/call-window.cpp:192 | |
162 | msgctxt "@info:status" | |
163 | msgid "Disconnected." | |
164 | msgstr "Afkoppelt." | |
165 | ||
166 | #: src/call-window.cpp:196 | |
167 | #, fuzzy, kde-format | |
168 | #| msgctxt "@info:status" | |
169 | #| msgid "Disconnected" | |
170 | msgctxt "@info:status the call was disconnected because..." | |
171 | msgid "Disconnected: %1" | |
172 | msgstr "Afkoppelt" | |
173 | ||
174 | #: src/call-window.cpp:339 | |
175 | #, fuzzy | |
176 | #| msgctxt "@action" | |
177 | #| msgid "Send video" | |
178 | msgctxt "@action" | |
179 | msgid "Show my video" | |
180 | msgstr "Video loosstüern" | |
181 | ||
182 | #: src/call-window.cpp:344 | |
183 | #, fuzzy | |
184 | #| msgid "Show details" | |
185 | msgctxt "@action" | |
186 | msgid "Show dialpad" | |
187 | msgstr "Enkelheiten wiesen" | |
188 | ||
189 | #: src/call-window.cpp:351 | |
190 | msgctxt "@action" | |
191 | msgid "Send video" | |
192 | msgstr "Video loosstüern" | |
193 | ||
194 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
195 | msgctxt "@action" | |
196 | msgid "Mute" | |
197 | msgstr "" | |
198 | ||
199 | #: src/call-window.cpp:363 | |
200 | msgctxt "@action" | |
201 | msgid "Hold" | |
202 | msgstr "" | |
203 | ||
204 | #: src/call-window.cpp:368 | |
205 | msgctxt "@action" | |
206 | msgid "Hangup" | |
207 | msgstr "Ophangen" | |
208 | ||
209 | #: src/main.cpp:36 | |
210 | msgid "KDE Telepathy Call Ui" | |
211 | msgstr "" | |
212 | ||
213 | #: src/main.cpp:37 | |
214 | msgid "VoIP client for KDE" | |
215 | msgstr "En VoIP-Programm för KDE" | |
216 | ||
217 | #: src/main.cpp:38 | |
218 | msgid "(C) 2009, George Kiagiadakis" | |
219 | msgstr "© 2009: George Kiagiadakis" | |
220 | ||
221 | #: src/main.cpp:40 | |
222 | msgctxt "@info:credit" | |
223 | msgid "George Kiagiadakis" | |
224 | msgstr "George Kiagiadakis" | |
225 | ||
226 | #: rc.cpp:1 | |
227 | msgctxt "NAME OF TRANSLATORS" | |
228 | msgid "Your names" | |
229 | msgstr "Manfred Wiese" | |
230 | ||
231 | #: rc.cpp:2 | |
232 | msgctxt "EMAIL OF TRANSLATORS" | |
233 | msgid "Your emails" | |
234 | msgstr "m.j.wiese@web.de" | |
235 | ||
236 | #. i18n: file: src/callwindowui.rc:11 | |
237 | #. i18n: ectx: Menu (call) | |
238 | #: rc.cpp:5 | |
239 | msgid "Call" | |
240 | msgstr "Anroop" | |
241 | ||
242 | #. i18n: file: src/callwindowui.rc:20 | |
243 | #. i18n: ectx: Menu (media) | |
244 | #: rc.cpp:8 | |
245 | msgid "Media" | |
246 | msgstr "" | |
247 | ||
248 | #. i18n: file: src/callwindowui.rc:27 | |
249 | #. i18n: ectx: ToolBar (mainToolBar) | |
250 | #: rc.cpp:11 | |
251 | msgid "Main Toolbar" | |
252 | msgstr "Hööftbalken" | |
253 | ||
254 | #. i18n: file: src/dtmf-widget.ui:17 | |
255 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
256 | #: rc.cpp:14 | |
257 | msgid "1" | |
258 | msgstr "1" | |
259 | ||
260 | #. i18n: file: src/dtmf-widget.ui:24 | |
261 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
262 | #: rc.cpp:17 | |
263 | msgid "2" | |
264 | msgstr "2" | |
265 | ||
266 | #. i18n: file: src/dtmf-widget.ui:31 | |
267 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
268 | #: rc.cpp:20 | |
269 | msgid "3" | |
270 | msgstr "3" | |
271 | ||
272 | #. i18n: file: src/dtmf-widget.ui:38 | |
273 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
274 | #: rc.cpp:23 | |
275 | msgid "4" | |
276 | msgstr "4" | |
277 | ||
278 | #. i18n: file: src/dtmf-widget.ui:45 | |
279 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
280 | #: rc.cpp:26 | |
281 | msgid "5" | |
282 | msgstr "5" | |
283 | ||
284 | #. i18n: file: src/dtmf-widget.ui:52 | |
285 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
286 | #: rc.cpp:29 | |
287 | msgid "6" | |
288 | msgstr "6" | |
289 | ||
290 | #. i18n: file: src/dtmf-widget.ui:59 | |
291 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
292 | #: rc.cpp:32 | |
293 | msgid "7" | |
294 | msgstr "7" | |
295 | ||
296 | #. i18n: file: src/dtmf-widget.ui:66 | |
297 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
298 | #: rc.cpp:35 | |
299 | msgid "8" | |
300 | msgstr "8" | |
301 | ||
302 | #. i18n: file: src/dtmf-widget.ui:73 | |
303 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
304 | #: rc.cpp:38 | |
305 | msgid "9" | |
306 | msgstr "9" | |
307 | ||
308 | #. i18n: file: src/dtmf-widget.ui:80 | |
309 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
310 | #: rc.cpp:41 | |
311 | msgid "*" | |
312 | msgstr "*" | |
313 | ||
314 | #. i18n: file: src/dtmf-widget.ui:87 | |
315 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
316 | #: rc.cpp:44 | |
317 | msgid "0" | |
318 | msgstr "0" | |
319 | ||
320 | #. i18n: file: src/dtmf-widget.ui:94 | |
321 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
322 | #: rc.cpp:47 | |
323 | msgid "#" | |
324 | msgstr "#" | |
325 | ||
326 | #~ msgid "Warning: %1" | |
327 | #~ msgstr "Wohrschoen: %1" | |
328 | ||
329 | #~ msgid "Error: %1" | |
330 | #~ msgstr "Fehler: %1" | |
331 | ||
332 | #~ msgid "KCall" | |
333 | #~ msgstr "KCall" | |
334 | ||
335 | #~ msgid "Brightness" | |
336 | #~ msgstr "Helligkeit" | |
337 | ||
338 | #~ msgid "Contrast" | |
339 | #~ msgstr "Kontrast" | |
340 | ||
341 | #~ msgid "Hue" | |
342 | #~ msgstr "Klöörtoon" | |
343 | ||
344 | #~ msgid "Saturation" | |
345 | #~ msgstr "Sattheit" | |
346 | ||
347 | #~ msgid "Dialpad" | |
348 | #~ msgstr "Bedeendeel" | |
349 | ||
350 | #~ msgid "" | |
351 | #~ "Defines whether the window should close automatically after a timeout " | |
352 | #~ "when the call is over." | |
353 | #~ msgstr "" | |
354 | #~ "Dit maakt dat Finster automaatsch na en fastleggt Tiet to, wenn de Anroop " | |
355 | #~ "beendt is." | |
356 | ||
357 | #~ msgid "" | |
358 | #~ "Defines how many seconds the call window should remain visible after the " | |
359 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
360 | #~ msgstr "" | |
361 | #~ "Gifft an, woveel Sekunnen dat Anroopfinster noch sichtbor blifft, wenn de " | |
362 | #~ "Anroop al beendt is. Disse Optschoon hangt vun " | |
363 | #~ "»CloseOnDisconnect« (Tomaken na't Afkoppeln) af." | |
364 | ||
365 | #~ msgid "The audio input device could not be initialized" | |
366 | #~ msgstr "De Reedschap för de Klangingaav lett sik nich torechtmaken." | |
367 | ||
368 | #, fuzzy | |
369 | #~| msgid "The video input device could not be initialized." | |
370 | #~ msgid "The video input device could not be initialized" | |
371 | #~ msgstr "De Reedschap för de Videoingaav lett sik nich torechtmaken." | |
372 | ||
373 | #, fuzzy | |
374 | #~| msgid "" | |
375 | #~| "Some gstreamer elements could not be created. Please check your " | |
376 | #~| "gstreamer installation." | |
377 | #~ msgid "" | |
378 | #~ "Could not create some of the required elements. Please check your " | |
379 | #~ "GStreamer installation." | |
380 | #~ msgstr "" | |
381 | #~ "En Reeg vun GStreamer-Elementen laat sik nich opstellen. Bitte prööv Dien " | |
382 | #~ "GStreamer-Installatschoon.." | |
383 | ||
384 | #~ msgid "The audio output device could not be initialized" | |
385 | #~ msgstr "De Reedschap för de Klangutgaav lett sik nich torechtmaken." | |
386 | ||
387 | #~ msgctxt "@action:inmenu" | |
388 | #~ msgid "Show participants" | |
389 | #~ msgstr "Deelnehmers wiesen" | |
390 | ||
391 | #~ msgctxt "@action:inmenu" | |
392 | #~ msgid "Show log" | |
393 | #~ msgstr "Logbook wiesen" | |
394 | ||
395 | #~ msgctxt "@action" | |
396 | #~ msgid "Stop sending video" | |
397 | #~ msgstr "Videoöverdregen afbreken" | |
398 | ||
399 | #~ msgctxt "@action:inmenu" | |
400 | #~ msgid "Status" | |
401 | #~ msgstr "Status" | |
402 | ||
403 | #~ msgctxt "@action:inmenu" | |
404 | #~ msgid "Available" | |
405 | #~ msgstr "Verföögbor" | |
406 | ||
407 | #~ msgctxt "@action:inmenu" | |
408 | #~ msgid "Away" | |
409 | #~ msgstr "Weg" | |
410 | ||
411 | #~ msgctxt "@action:inmenu" | |
412 | #~ msgid "Be right back" | |
413 | #~ msgstr "Glieks torüch" | |
414 | ||
415 | #~ msgctxt "@action:inmenu" | |
416 | #~ msgid "Busy" | |
417 | #~ msgstr "Besett" | |
418 | ||
419 | #~ msgctxt "@action:inmenu" | |
420 | #~ msgid "Do not disturb" | |
421 | #~ msgstr "Nich stören" | |
422 | ||
423 | #~ msgctxt "@action:inmenu" | |
424 | #~ msgid "Extended Away" | |
425 | #~ msgstr "Länger weg" | |
426 | ||
427 | #~ msgctxt "@action:inmenu" | |
428 | #~ msgid "Invisible" | |
429 | #~ msgstr "Nich sichtbor" | |
430 | ||
431 | #~ msgctxt "@action:inmenu" | |
432 | #~ msgid "Offline" | |
433 | #~ msgstr "Afkoppelt" | |
434 | ||
435 | #~ msgctxt "@info:status" | |
436 | #~ msgid "Waiting for account information..." | |
437 | #~ msgstr "An't Töven op Anmelleninformatschoon..." | |
438 | ||
439 | #~ msgctxt "protocol - display name (Connecting)" | |
440 | #~ msgid "%1 - %2 (Connecting)" | |
441 | #~ msgstr "%1 - %2 (An't Tokoppeln)" | |
442 | ||
443 | #~ msgctxt "protocol - display name" | |
444 | #~ msgid "%1 - %2" | |
445 | #~ msgstr "%1 - %2" | |
446 | ||
447 | #~ msgctxt "@title:window" | |
448 | #~ msgid "KCall" | |
449 | #~ msgstr "KCall" | |
450 | ||
451 | #~ msgctxt "@info:status" | |
452 | #~ msgid "Connected" | |
453 | #~ msgstr "Tokoppelt" | |
454 | ||
455 | #~ msgctxt "@action" | |
456 | #~ msgid "Disconnect" | |
457 | #~ msgstr "Afkoppeln" | |
458 | ||
459 | #~ msgctxt "@action" | |
460 | #~ msgid "Cancel connection attempt" | |
461 | #~ msgstr "Tokoppelversöök afbreken" | |
462 | ||
463 | #~ msgctxt "@action" | |
464 | #~ msgid "Connect" | |
465 | #~ msgstr "Tokoppeln" | |
466 | ||
467 | #~ msgid "" | |
468 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
469 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
470 | #~ "calls." | |
471 | #~ msgstr "" | |
472 | #~ "Du wullt KCall tomaken. Beacht, dat KCall nich redig utmaakt warrt, man " | |
473 | #~ "in'n Systeemafsnitt op rinkamen Anrööp luustert." | |
474 | ||
475 | #~ msgid "Volume" | |
476 | #~ msgstr "Luutstärk" | |
477 | ||
478 | #~ msgid "Speakers" | |
479 | #~ msgstr "Luutsprekers" | |
480 | ||
481 | #~ msgid "Microphone" | |
482 | #~ msgstr "Mikrofoon" | |
483 | ||
484 | #~ msgid "Video controls" | |
485 | #~ msgstr "Videokuntrull" | |
486 | ||
487 | #~ msgid "Video input" | |
488 | #~ msgstr "Videoingaav" | |
489 | ||
490 | #~ msgid "Call log" | |
491 | #~ msgstr "Anrooplogbook" | |
492 | ||
493 | #~ msgid "Participants" | |
494 | #~ msgstr "Deelnehmers" | |
495 | ||
496 | #~ msgctxt "@title:tab" | |
497 | #~ msgid "&Contact list" | |
498 | #~ msgstr "&Kontaktenlist" | |
499 | ||
500 | #~ msgid "Dial directly" | |
501 | #~ msgstr "Direktanroop" | |
502 | ||
503 | #~ msgid "Account" | |
504 | #~ msgstr "Konto" | |
505 | ||
506 | #~ msgid "Contact handle" | |
507 | #~ msgstr "Kontakt-Hanteren" | |
508 | ||
509 | #~ msgid "Dial (Audio only)" | |
510 | #~ msgstr "Wählen (Bloots Klang)" | |
511 | ||
512 | #~ msgid "Dial (Audio/Video)" | |
513 | #~ msgstr "Wählen (Bloots Bild)" | |
514 | ||
515 | #~ msgctxt "@info:status" | |
516 | #~ msgid "Hanging up..." | |
517 | #~ msgstr "An't Ophangen..." | |
518 | ||
519 | #~ msgid "Channel closed" | |
520 | #~ msgstr "Kanaal tomaakt" | |
521 | ||
522 | #~ msgid "Channel closed with error: %1" | |
523 | #~ msgstr "Kanaal mit Fehler tomaakt: %1" | |
524 | ||
525 | #~ msgid "Audio stream created. Stream id: %1." | |
526 | #~ msgstr "Klangstroom opstellt. Stroom-ID: %1" | |
527 | ||
528 | #~ msgid "Video stream created. Stream id: %1." | |
529 | #~ msgstr "Videostroom opstellt. Stroom-ID: %1" | |
530 | ||
531 | #~ msgctxt "1 is the stream's id" | |
532 | #~ msgid "Stream %1 direction is: %2." | |
533 | #~ msgstr "Richt vun Stroom %1 is: %2." | |
534 | ||
535 | #~ msgctxt "1 is the stream's id" | |
536 | #~ msgid "Stream %1 removed." | |
537 | #~ msgstr "Stroom %1 wegdaan" | |
538 | ||
539 | #~ msgctxt "1 is the stream's id" | |
540 | #~ msgid "Stream %1 direction changed to: %2." | |
541 | #~ msgstr "Richt vun Stroom %1 ännert na: %2" | |
542 | ||
543 | #~ msgctxt "1 is the stream's id" | |
544 | #~ msgid "Stream %1 state changed to: %2." | |
545 | #~ msgstr "Status vun Stroom %1 ännert na: %2" | |
546 | ||
547 | #~ msgid "User %1 joined the conference." | |
548 | #~ msgstr "Bruker %1 is na den Koppelsnack rinkamen." | |
549 | ||
550 | #~ msgid "Awaiting answer from user %1." | |
551 | #~ msgstr "Antwoort vun Bruker %1 verwacht." | |
552 | ||
553 | #~ msgid "User %1 left the conference." | |
554 | #~ msgstr "Bruker %1 is ut den Koppelsnack weggahn." | |
555 | ||
556 | #~ msgid "Audio input device" | |
557 | #~ msgstr "Klangingaavreedschap" | |
558 | ||
559 | #~ msgid "Audio output device" | |
560 | #~ msgstr "Klangutgaavreedschap" | |
561 | ||
562 | #~ msgid "Video input device" | |
563 | #~ msgstr "Videoingaavreedschap" | |
564 | ||
565 | #~ msgid "Video output driver" | |
566 | #~ msgstr "Videoutgaavreedschap" | |
567 | ||
568 | #~ msgid "Xv video renderer" | |
569 | #~ msgstr "Xv-Videodorstellen" | |
570 | ||
571 | #~ msgid "X11 video renderer" | |
572 | #~ msgstr "X11-Videodorstellen" | |
573 | ||
574 | #~ msgid "Autodetect" | |
575 | #~ msgstr "Automaatsch opdecken" | |
576 | ||
577 | #~ msgid "Test input device" | |
578 | #~ msgstr "Ingaavreedschap utproberen" | |
579 | ||
580 | #~ msgctxt "autodetected audio or video system" | |
581 | #~ msgid "Autodetected" | |
582 | #~ msgstr "Automaatsch opdeckt" | |
583 | ||
584 | #~ msgid "ALSA" | |
585 | #~ msgstr "ALSA" | |
586 | ||
587 | #~ msgid "OSS" | |
588 | #~ msgstr "OSS" | |
589 | ||
590 | #~ msgid "JACK" | |
591 | #~ msgstr "JACK" | |
592 | ||
593 | #~ msgid "PULSE" | |
594 | #~ msgstr "PULSE" | |
595 | ||
596 | #~ msgid "Video4Linux" | |
597 | #~ msgstr "Video4Linux" | |
598 | ||
599 | #~ msgid "Device name" | |
600 | #~ msgstr "Reedschapnaam" | |
601 | ||
602 | #~ msgid "Sound system" | |
603 | #~ msgstr "Klangsysteem" | |
604 | ||
605 | #~ msgid "Video system" | |
606 | #~ msgstr "Videosysteem" | |
607 | ||
608 | #~ msgid "Gstreamer element" | |
609 | #~ msgstr "Gstreamer-Element" | |
610 | ||
611 | #~ msgid "Driver-specific handle" | |
612 | #~ msgstr "Besünner Driever bruken" | |
613 | ||
614 | #~ msgctxt "test the device" | |
615 | #~ msgid "Test" | |
616 | #~ msgstr "Utproberen" | |
617 | ||
618 | #~ msgid "Add custom device..." | |
619 | #~ msgstr "Egen Reedschap tofögen..." | |
620 | ||
621 | #~ msgid "" | |
622 | #~ "The gstreamer element for the selected device could not be created. " | |
623 | #~ "Please check your gstreamer installation." | |
624 | #~ msgstr "" | |
625 | #~ "Dat GStreamer-Element för de fastleggt Reedschap lett sik nich opstellen. " | |
626 | #~ "Bitte prööv Dien GStreamer-Installatschoon..." | |
627 | ||
628 | #~ msgid "" | |
629 | #~ "The selected device could not be initialized. Please select another " | |
630 | #~ "device." | |
631 | #~ msgstr "" | |
632 | #~ "De fastleggt Reedschap lett sik nich torechtmaken. Bitte en anner " | |
633 | #~ "Reedschap utsöken." | |
634 | ||
635 | #~ msgid "" | |
636 | #~ "The gstreamer element for the audio output device could not be created. " | |
637 | #~ "Please check your gstreamer installation" | |
638 | #~ msgstr "" | |
639 | #~ "Dat GStreamer-Element för de Klangutgaavreedschap lett sik nich " | |
640 | #~ "opstellen. Bitte prööv Dien GStreamer-Installatschoon.." | |
641 | ||
642 | #~ msgid "The audio output device could not be initialized." | |
643 | #~ msgstr "De Reedschap för de Klangutgaav lett sik nich torechtmaken." | |
644 | ||
645 | #~ msgid "The video output driver could not be initialized." | |
646 | #~ msgstr "De Reedschap för de Videoutgaav lett sik nich torechtmaken." | |
647 | ||
648 | #~ msgid "" | |
649 | #~ "The selected video output driver could not be initialized. Please select " | |
650 | #~ "another driver." | |
651 | #~ msgstr "" | |
652 | #~ "De fastleggt Driever för de Videoutgaav lett sik nich torechtmaken. Bitte " | |
653 | #~ "en anner Driever utsöken." | |
654 | ||
655 | #~ msgctxt "stop audio/video test" | |
656 | #~ msgid "Stop test" | |
657 | #~ msgstr "Utproberen ophollen" | |
658 | ||
659 | #~ msgid "Hide details" | |
660 | #~ msgstr "Enkelheiten versteken" | |
661 | ||
662 | #~ msgid "Automatically close the call window after a timeout" | |
663 | #~ msgstr "Anroopfinster automaatsch na en fastleggt Tiet tomaken." | |
664 | ||
665 | #~ msgid "Timeout in seconds:" | |
666 | #~ msgstr "Tietgrenz in Sekunnen:" | |
667 | ||
668 | #~ msgid "" | |
669 | #~ "The gstreamer element for the audio input device could not be created. " | |
670 | #~ "Please check your gstreamer installation" | |
671 | #~ msgstr "" | |
672 | #~ "Dat GStreamer-Element för de Klangingaavreedschap lett sik nich " | |
673 | #~ "opstellen. Bitte prööv Dien GStreamer-Installatschoon.." | |
674 | ||
675 | #~ msgid "" | |
676 | #~ "The gstreamer element for the video input device could not be created. " | |
677 | #~ "Please check your gstreamer installation." | |
678 | #~ msgstr "" | |
679 | #~ "Dat GStreamer-Element för de Videoingaavreedschap lett sik nich " | |
680 | #~ "opstellen. Bitte prööv Dien GStreamer-Installatschoon.." | |
681 | ||
682 | #~ msgid "Could not initialize the channel" | |
683 | #~ msgstr "De Kanaal lett sik nich torechtmaken." | |
684 | ||
685 | #~ msgid "Ignore" | |
686 | #~ msgstr "Övergahn" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( nl ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Freek de Kruijf <freekdekruijf@kde.nl>, 2012. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2012-05-02 00:40+0200\n" | |
10 | "Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n" | |
11 | "Language-Team: Dutch <kde-i18n-nl@kde.org>\n" | |
12 | "Language: \n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.2\n" | |
17 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "Inkomende video-oproep" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "<p>%1 vraagt u om een video-oproep</p>" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | msgid "Incoming call" | |
30 | msgstr "Inkomend gesprek" | |
31 | ||
32 | #: src/approver.cpp:42 | |
33 | #, kde-format | |
34 | msgid "<p>%1 is calling you</p>" | |
35 | msgstr "<p>%1 roept u op</p>" | |
36 | ||
37 | #: src/approver.cpp:58 src/approver.cpp:80 | |
38 | msgctxt "action, answers the incoming call" | |
39 | msgid "Answer" | |
40 | msgstr "Antwoord" | |
41 | ||
42 | #: src/approver.cpp:59 src/approver.cpp:82 | |
43 | msgctxt "action, rejects the incoming call" | |
44 | msgid "Reject" | |
45 | msgstr "Verwerpen" | |
46 | ||
47 | #: src/call-window.cpp:95 | |
48 | #, kde-format | |
49 | msgid "Call with %1" | |
50 | msgstr "Oproepen met %1" | |
51 | ||
52 | #: src/call-window.cpp:109 | |
53 | msgctxt "@info:status" | |
54 | msgid "Connecting..." | |
55 | msgstr "Verbinden..." | |
56 | ||
57 | #: src/call-window.cpp:113 | |
58 | msgctxt "@info:status the remote user's phone is ringing" | |
59 | msgid "Ringing..." | |
60 | msgstr "Bel gaat over..." | |
61 | ||
62 | #: src/call-window.cpp:117 | |
63 | msgctxt "@info:status" | |
64 | msgid "Remote user accepted the call, waiting for connection..." | |
65 | msgstr "" | |
66 | "De gebruiker op afstand heeft de aanroep geaccepteerd, wacht op de " | |
67 | "verbinding..." | |
68 | ||
69 | #: src/call-window.cpp:120 | |
70 | msgctxt "@info:status" | |
71 | msgid "Talking..." | |
72 | msgstr "Praten..." | |
73 | ||
74 | #: src/call-window.cpp:136 | |
75 | msgctxt "@info:status" | |
76 | msgid "Remote contact ended the call." | |
77 | msgstr "Het contact op afstand heeft de aanroep beëindigd." | |
78 | ||
79 | #: src/call-window.cpp:143 | |
80 | msgctxt "@info:status" | |
81 | msgid "Remote contact rejected the call." | |
82 | msgstr "Het contact op afstand heeft de aanroep geweigerd." | |
83 | ||
84 | #: src/call-window.cpp:148 | |
85 | msgctxt "@info:status" | |
86 | msgid "Remote contact didn't answer." | |
87 | msgstr "Geen antwoord van het contact op afstand." | |
88 | ||
89 | #: src/call-window.cpp:152 | |
90 | msgctxt "@info:status" | |
91 | msgid "Invalid number or contact." | |
92 | msgstr "Ongeldig nummer of contact." | |
93 | ||
94 | #: src/call-window.cpp:156 | |
95 | msgctxt "@info:status" | |
96 | msgid "You don't have enough balance to make this call." | |
97 | msgstr "U hebt niet voldoende saldo om deze aanroep te doen." | |
98 | ||
99 | #: src/call-window.cpp:158 | |
100 | msgctxt "@info:status" | |
101 | msgid "You don't have permission to make this call." | |
102 | msgstr "U bezit niet de nodige permissies om deze aanroep te doen." | |
103 | ||
104 | #: src/call-window.cpp:163 | |
105 | msgctxt "@info:status" | |
106 | msgid "Remote contact is currently busy." | |
107 | msgstr "Het contact op afstand is bezet." | |
108 | ||
109 | #: src/call-window.cpp:167 | |
110 | msgctxt "@info:status" | |
111 | msgid "Internal component error." | |
112 | msgstr "Interne fout in component." | |
113 | ||
114 | #: src/call-window.cpp:170 | |
115 | msgctxt "@info:status" | |
116 | msgid "Remote service error." | |
117 | msgstr "Fout in de service op afstand." | |
118 | ||
119 | #: src/call-window.cpp:173 | |
120 | msgctxt "@info:status" | |
121 | msgid "Network error." | |
122 | msgstr "Netwerkfout." | |
123 | ||
124 | #: src/call-window.cpp:177 | |
125 | msgctxt "@info:status" | |
126 | msgid "Failed to negotiate codecs." | |
127 | msgstr "Onderhandelen over codecs is mislukt." | |
128 | ||
129 | #: src/call-window.cpp:179 | |
130 | msgctxt "@info:status" | |
131 | msgid "Unsupported media type." | |
132 | msgstr "Niet-ondersteund schijftype." | |
133 | ||
134 | #: src/call-window.cpp:183 | |
135 | msgctxt "@info:status" | |
136 | msgid "Connectivity error." | |
137 | msgstr "Fout met verbinding." | |
138 | ||
139 | #: src/call-window.cpp:187 | |
140 | msgctxt "@info:status" | |
141 | msgid "Unknown error." | |
142 | msgstr "Onbekende fout." | |
143 | ||
144 | #: src/call-window.cpp:192 | |
145 | msgctxt "@info:status" | |
146 | msgid "Disconnected." | |
147 | msgstr "Verbinding verbroken." | |
148 | ||
149 | #: src/call-window.cpp:196 | |
150 | #, kde-format | |
151 | msgctxt "@info:status the call was disconnected because..." | |
152 | msgid "Disconnected: %1" | |
153 | msgstr "Verbinding verbroken: %1" | |
154 | ||
155 | #: src/call-window.cpp:339 | |
156 | msgctxt "@action" | |
157 | msgid "Show my video" | |
158 | msgstr "Mijn video weergeven" | |
159 | ||
160 | #: src/call-window.cpp:344 | |
161 | msgctxt "@action" | |
162 | msgid "Show dialpad" | |
163 | msgstr "Kiestoetsen tonen" | |
164 | ||
165 | #: src/call-window.cpp:351 | |
166 | msgctxt "@action" | |
167 | msgid "Send video" | |
168 | msgstr "Video verzenden" | |
169 | ||
170 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
171 | msgctxt "@action" | |
172 | msgid "Mute" | |
173 | msgstr "Dempen" | |
174 | ||
175 | #: src/call-window.cpp:363 | |
176 | msgctxt "@action" | |
177 | msgid "Hold" | |
178 | msgstr "In wacht" | |
179 | ||
180 | #: src/call-window.cpp:368 | |
181 | msgctxt "@action" | |
182 | msgid "Hangup" | |
183 | msgstr "Ophangen" | |
184 | ||
185 | #: src/main.cpp:36 | |
186 | msgid "KDE Telepathy Call Ui" | |
187 | msgstr "UI voor opbellen met KDE Telepathy" | |
188 | ||
189 | #: src/main.cpp:37 | |
190 | msgid "VoIP client for KDE" | |
191 | msgstr "VoIP-client voor KDE" | |
192 | ||
193 | #: src/main.cpp:38 | |
194 | msgid "(C) 2009, George Kiagiadakis" | |
195 | msgstr "(C) 2009, George Kiagiadakis" | |
196 | ||
197 | #: src/main.cpp:40 | |
198 | msgctxt "@info:credit" | |
199 | msgid "George Kiagiadakis" | |
200 | msgstr "George Kiagiadakis" | |
201 | ||
202 | #: rc.cpp:1 | |
203 | msgctxt "NAME OF TRANSLATORS" | |
204 | msgid "Your names" | |
205 | msgstr "Freek de Kruijf" | |
206 | ||
207 | #: rc.cpp:2 | |
208 | msgctxt "EMAIL OF TRANSLATORS" | |
209 | msgid "Your emails" | |
210 | msgstr "freekdekruijf@kde.nl" | |
211 | ||
212 | #. i18n: file: src/callwindowui.rc:11 | |
213 | #. i18n: ectx: Menu (call) | |
214 | #: rc.cpp:5 | |
215 | msgid "Call" | |
216 | msgstr "Aanroep" | |
217 | ||
218 | #. i18n: file: src/callwindowui.rc:20 | |
219 | #. i18n: ectx: Menu (media) | |
220 | #: rc.cpp:8 | |
221 | msgid "Media" | |
222 | msgstr "Media" | |
223 | ||
224 | #. i18n: file: src/callwindowui.rc:27 | |
225 | #. i18n: ectx: ToolBar (mainToolBar) | |
226 | #: rc.cpp:11 | |
227 | msgid "Main Toolbar" | |
228 | msgstr "Hoofdwerkbalk" | |
229 | ||
230 | #. i18n: file: src/dtmf-widget.ui:17 | |
231 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
232 | #: rc.cpp:14 | |
233 | msgid "1" | |
234 | msgstr "1" | |
235 | ||
236 | #. i18n: file: src/dtmf-widget.ui:24 | |
237 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
238 | #: rc.cpp:17 | |
239 | msgid "2" | |
240 | msgstr "2" | |
241 | ||
242 | #. i18n: file: src/dtmf-widget.ui:31 | |
243 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
244 | #: rc.cpp:20 | |
245 | msgid "3" | |
246 | msgstr "3" | |
247 | ||
248 | #. i18n: file: src/dtmf-widget.ui:38 | |
249 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
250 | #: rc.cpp:23 | |
251 | msgid "4" | |
252 | msgstr "4" | |
253 | ||
254 | #. i18n: file: src/dtmf-widget.ui:45 | |
255 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
256 | #: rc.cpp:26 | |
257 | msgid "5" | |
258 | msgstr "5" | |
259 | ||
260 | #. i18n: file: src/dtmf-widget.ui:52 | |
261 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
262 | #: rc.cpp:29 | |
263 | msgid "6" | |
264 | msgstr "6" | |
265 | ||
266 | #. i18n: file: src/dtmf-widget.ui:59 | |
267 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
268 | #: rc.cpp:32 | |
269 | msgid "7" | |
270 | msgstr "7" | |
271 | ||
272 | #. i18n: file: src/dtmf-widget.ui:66 | |
273 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
274 | #: rc.cpp:35 | |
275 | msgid "8" | |
276 | msgstr "8" | |
277 | ||
278 | #. i18n: file: src/dtmf-widget.ui:73 | |
279 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
280 | #: rc.cpp:38 | |
281 | msgid "9" | |
282 | msgstr "9" | |
283 | ||
284 | #. i18n: file: src/dtmf-widget.ui:80 | |
285 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
286 | #: rc.cpp:41 | |
287 | msgid "*" | |
288 | msgstr "*" | |
289 | ||
290 | #. i18n: file: src/dtmf-widget.ui:87 | |
291 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
292 | #: rc.cpp:44 | |
293 | msgid "0" | |
294 | msgstr "0" | |
295 | ||
296 | #. i18n: file: src/dtmf-widget.ui:94 | |
297 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
298 | #: rc.cpp:47 | |
299 | msgid "#" | |
300 | msgstr "#" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( pl ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>, 2011, 2012. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2012-05-12 08:54+0200\n" | |
10 | "Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>\n" | |
11 | "Language-Team: Polish <kde-i18n-doc@kde.org>\n" | |
12 | "Language: pl\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.4\n" | |
17 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " | |
18 | "|| n%100>=20) ? 1 : 2);\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | msgid "Incoming video call" | |
22 | msgstr "Przychodząca rozmowa wideo" | |
23 | ||
24 | #: src/approver.cpp:39 | |
25 | #, kde-format | |
26 | msgid "<p>%1 is asking you for a video call</p>" | |
27 | msgstr "<p>%1 prosi cię o rozmowę wideo</p>" | |
28 | ||
29 | #: src/approver.cpp:41 | |
30 | msgid "Incoming call" | |
31 | msgstr "Rozmowa przychodząca" | |
32 | ||
33 | #: src/approver.cpp:42 | |
34 | #, kde-format | |
35 | msgid "<p>%1 is calling you</p>" | |
36 | msgstr "<p>%1 dzwoni do ciebie</p>" | |
37 | ||
38 | #: src/approver.cpp:58 src/approver.cpp:80 | |
39 | msgctxt "action, answers the incoming call" | |
40 | msgid "Answer" | |
41 | msgstr "Odpowiedz" | |
42 | ||
43 | #: src/approver.cpp:59 src/approver.cpp:82 | |
44 | msgctxt "action, rejects the incoming call" | |
45 | msgid "Reject" | |
46 | msgstr "Odrzuć" | |
47 | ||
48 | #: src/call-window.cpp:95 | |
49 | #, kde-format | |
50 | msgid "Call with %1" | |
51 | msgstr "Zadzwoń do %1" | |
52 | ||
53 | #: src/call-window.cpp:109 | |
54 | msgctxt "@info:status" | |
55 | msgid "Connecting..." | |
56 | msgstr "Łączenie..." | |
57 | ||
58 | #: src/call-window.cpp:113 | |
59 | msgctxt "@info:status the remote user's phone is ringing" | |
60 | msgid "Ringing..." | |
61 | msgstr "Dzwonienie..." | |
62 | ||
63 | #: src/call-window.cpp:117 | |
64 | msgctxt "@info:status" | |
65 | msgid "Remote user accepted the call, waiting for connection..." | |
66 | msgstr "Zdalny użytkownik zaakceptował rozmowę, oczekiwanie na połączenie..." | |
67 | ||
68 | #: src/call-window.cpp:120 | |
69 | msgctxt "@info:status" | |
70 | msgid "Talking..." | |
71 | msgstr "Rozmawianie..." | |
72 | ||
73 | #: src/call-window.cpp:136 | |
74 | msgctxt "@info:status" | |
75 | msgid "Remote contact ended the call." | |
76 | msgstr "Zdalny kontakt zakończył dzwonienie." | |
77 | ||
78 | #: src/call-window.cpp:143 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact rejected the call." | |
81 | msgstr "Zdalny kontakt odrzucił dzwonienie." | |
82 | ||
83 | #: src/call-window.cpp:148 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact didn't answer." | |
86 | msgstr "Zdalny kontakt nie odpowiedział." | |
87 | ||
88 | #: src/call-window.cpp:152 | |
89 | msgctxt "@info:status" | |
90 | msgid "Invalid number or contact." | |
91 | msgstr "Nieprawidłowy numer lub kontakt." | |
92 | ||
93 | #: src/call-window.cpp:156 | |
94 | msgctxt "@info:status" | |
95 | msgid "You don't have enough balance to make this call." | |
96 | msgstr "Nie masz wystarczająco pieniędzy, aby wykonać tą rozmowę." | |
97 | ||
98 | #: src/call-window.cpp:158 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have permission to make this call." | |
101 | msgstr "Nie masz wystarczających uprawnień, aby wykonać tą rozmowę." | |
102 | ||
103 | #: src/call-window.cpp:163 | |
104 | msgctxt "@info:status" | |
105 | msgid "Remote contact is currently busy." | |
106 | msgstr "Zdalny kontakt jest obecnie zajęty." | |
107 | ||
108 | #: src/call-window.cpp:167 | |
109 | msgctxt "@info:status" | |
110 | msgid "Internal component error." | |
111 | msgstr "Błąd wewnętrznego składnika." | |
112 | ||
113 | #: src/call-window.cpp:170 | |
114 | msgctxt "@info:status" | |
115 | msgid "Remote service error." | |
116 | msgstr "Błąd zdalnej usługi." | |
117 | ||
118 | #: src/call-window.cpp:173 | |
119 | msgctxt "@info:status" | |
120 | msgid "Network error." | |
121 | msgstr "Błąd sieci." | |
122 | ||
123 | #: src/call-window.cpp:177 | |
124 | msgctxt "@info:status" | |
125 | msgid "Failed to negotiate codecs." | |
126 | msgstr "Negocjacja kodeków nie udała się." | |
127 | ||
128 | #: src/call-window.cpp:179 | |
129 | msgctxt "@info:status" | |
130 | msgid "Unsupported media type." | |
131 | msgstr "Nieobsługiwany typ mediów." | |
132 | ||
133 | #: src/call-window.cpp:183 | |
134 | msgctxt "@info:status" | |
135 | msgid "Connectivity error." | |
136 | msgstr "Błąd łączności." | |
137 | ||
138 | #: src/call-window.cpp:187 | |
139 | msgctxt "@info:status" | |
140 | msgid "Unknown error." | |
141 | msgstr "Nieznany błąd." | |
142 | ||
143 | #: src/call-window.cpp:192 | |
144 | msgctxt "@info:status" | |
145 | msgid "Disconnected." | |
146 | msgstr "Rozłączony." | |
147 | ||
148 | #: src/call-window.cpp:196 | |
149 | #, kde-format | |
150 | msgctxt "@info:status the call was disconnected because..." | |
151 | msgid "Disconnected: %1" | |
152 | msgstr "Rozłączony: %1" | |
153 | ||
154 | #: src/call-window.cpp:339 | |
155 | msgctxt "@action" | |
156 | msgid "Show my video" | |
157 | msgstr "Pokaż mój obraz" | |
158 | ||
159 | #: src/call-window.cpp:344 | |
160 | msgctxt "@action" | |
161 | msgid "Show dialpad" | |
162 | msgstr "Pokaż panel wybierania" | |
163 | ||
164 | #: src/call-window.cpp:351 | |
165 | msgctxt "@action" | |
166 | msgid "Send video" | |
167 | msgstr "Wyślij obraz" | |
168 | ||
169 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
170 | msgctxt "@action" | |
171 | msgid "Mute" | |
172 | msgstr "Wycisz" | |
173 | ||
174 | #: src/call-window.cpp:363 | |
175 | msgctxt "@action" | |
176 | msgid "Hold" | |
177 | msgstr "Trzymaj" | |
178 | ||
179 | #: src/call-window.cpp:368 | |
180 | msgctxt "@action" | |
181 | msgid "Hangup" | |
182 | msgstr "Odwieś" | |
183 | ||
184 | #: src/main.cpp:36 | |
185 | msgid "KDE Telepathy Call Ui" | |
186 | msgstr "Interfejs użytkownika dzwonienia KDE Telepathy" | |
187 | ||
188 | #: src/main.cpp:37 | |
189 | msgid "VoIP client for KDE" | |
190 | msgstr "Klient VoIP dla KDE" | |
191 | ||
192 | #: src/main.cpp:38 | |
193 | msgid "(C) 2009, George Kiagiadakis" | |
194 | msgstr "(C) 2009, George Kiagiadakis" | |
195 | ||
196 | #: src/main.cpp:40 | |
197 | msgctxt "@info:credit" | |
198 | msgid "George Kiagiadakis" | |
199 | msgstr "George Kiagiadakis" | |
200 | ||
201 | #: rc.cpp:1 | |
202 | msgctxt "NAME OF TRANSLATORS" | |
203 | msgid "Your names" | |
204 | msgstr "Łukasz Wojniłowicz" | |
205 | ||
206 | #: rc.cpp:2 | |
207 | msgctxt "EMAIL OF TRANSLATORS" | |
208 | msgid "Your emails" | |
209 | msgstr "lukasz.wojnilowicz@gmail.com" | |
210 | ||
211 | #. i18n: file: src/callwindowui.rc:11 | |
212 | #. i18n: ectx: Menu (call) | |
213 | #: rc.cpp:5 | |
214 | msgid "Call" | |
215 | msgstr "Rozmowa" | |
216 | ||
217 | #. i18n: file: src/callwindowui.rc:20 | |
218 | #. i18n: ectx: Menu (media) | |
219 | #: rc.cpp:8 | |
220 | msgid "Media" | |
221 | msgstr "Media" | |
222 | ||
223 | #. i18n: file: src/callwindowui.rc:27 | |
224 | #. i18n: ectx: ToolBar (mainToolBar) | |
225 | #: rc.cpp:11 | |
226 | msgid "Main Toolbar" | |
227 | msgstr "Główny pasek narzędzi" | |
228 | ||
229 | #. i18n: file: src/dtmf-widget.ui:17 | |
230 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
231 | #: rc.cpp:14 | |
232 | msgid "1" | |
233 | msgstr "1" | |
234 | ||
235 | #. i18n: file: src/dtmf-widget.ui:24 | |
236 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
237 | #: rc.cpp:17 | |
238 | msgid "2" | |
239 | msgstr "2" | |
240 | ||
241 | #. i18n: file: src/dtmf-widget.ui:31 | |
242 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
243 | #: rc.cpp:20 | |
244 | msgid "3" | |
245 | msgstr "3" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:38 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
249 | #: rc.cpp:23 | |
250 | msgid "4" | |
251 | msgstr "4" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:45 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
255 | #: rc.cpp:26 | |
256 | msgid "5" | |
257 | msgstr "5" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:52 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
261 | #: rc.cpp:29 | |
262 | msgid "6" | |
263 | msgstr "6" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:59 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
267 | #: rc.cpp:32 | |
268 | msgid "7" | |
269 | msgstr "7" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:66 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
273 | #: rc.cpp:35 | |
274 | msgid "8" | |
275 | msgstr "8" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:73 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
279 | #: rc.cpp:38 | |
280 | msgid "9" | |
281 | msgstr "9" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:80 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
285 | #: rc.cpp:41 | |
286 | msgid "*" | |
287 | msgstr "*" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:87 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
291 | #: rc.cpp:44 | |
292 | msgid "0" | |
293 | msgstr "0" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:94 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
297 | #: rc.cpp:47 | |
298 | msgid "#" | |
299 | msgstr "#" | |
300 | ||
301 | #~ msgid "Warning: %1" | |
302 | #~ msgstr "Ostrzeżenie: %1" | |
303 | ||
304 | #~ msgid "Error: %1" | |
305 | #~ msgstr "Błąd: %1" | |
306 | ||
307 | #~ msgid "KCall" | |
308 | #~ msgstr "KCall" | |
309 | ||
310 | #~ msgid "Brightness" | |
311 | #~ msgstr "Jasność" | |
312 | ||
313 | #~ msgid "Contrast" | |
314 | #~ msgstr "Kontrast" | |
315 | ||
316 | #~ msgid "Hue" | |
317 | #~ msgstr "Odcień" | |
318 | ||
319 | #~ msgid "Saturation" | |
320 | #~ msgstr "Nasycenie" | |
321 | ||
322 | #~ msgid "Dialpad" | |
323 | #~ msgstr "Panel wyboru" | |
324 | ||
325 | #~ msgid "" | |
326 | #~ "Defines whether the window should close automatically after a timeout " | |
327 | #~ "when the call is over." | |
328 | #~ msgstr "" | |
329 | #~ "Określa czy okno powinno automatycznie zamknąć się, po czasie " | |
330 | #~ "oczekiwania , po skończonej rozmowie." | |
331 | ||
332 | #~ msgid "" | |
333 | #~ "Defines how many seconds the call window should remain visible after the " | |
334 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
335 | #~ msgstr "" | |
336 | #~ "Określa ile sekund okno rozmowy powinno zostać widoczne, po skończeniu " | |
337 | #~ "rozmowy. Opcja ta zależy od \"ZamknijPrzyRozłączeniu\"." | |
338 | ||
339 | #~ msgid "The audio input device could not be initialized" | |
340 | #~ msgstr "Nie można zainicjować wejściowego urządzenia dźwiękowego" | |
341 | ||
342 | #~ msgid "The video input device could not be initialized" | |
343 | #~ msgstr "Nie można zainicjować wejściowego urządzenia obrazu" | |
344 | ||
345 | #~ msgid "" | |
346 | #~ "Could not create some of the required elements. Please check your " | |
347 | #~ "GStreamer installation." | |
348 | #~ msgstr "" | |
349 | #~ "Nie można utworzyć pewnych wymaganych elementów. Proszę sprawdzić swoją " | |
350 | #~ "instalację GStreamer." | |
351 | ||
352 | #~ msgid "The audio output device could not be initialized" | |
353 | #~ msgstr "Nie można zainicjować wyjściowego urządzenia dźwiękowego" | |
354 | ||
355 | #~ msgctxt "@action:inmenu" | |
356 | #~ msgid "Show participants" | |
357 | #~ msgstr "Pokaż uczestników" | |
358 | ||
359 | #~ msgctxt "@action:inmenu" | |
360 | #~ msgid "Show log" | |
361 | #~ msgstr "Pokaż dziennik" | |
362 | ||
363 | #~ msgctxt "@action" | |
364 | #~ msgid "Stop sending video" | |
365 | #~ msgstr "Przestań wysyłać obraz" | |
366 | ||
367 | #~ msgctxt "@action:inmenu" | |
368 | #~ msgid "Status" | |
369 | #~ msgstr "Stan" | |
370 | ||
371 | #~ msgctxt "@action:inmenu" | |
372 | #~ msgid "Available" | |
373 | #~ msgstr "Dostępny" | |
374 | ||
375 | #~ msgctxt "@action:inmenu" | |
376 | #~ msgid "Away" | |
377 | #~ msgstr "Nieobecny" | |
378 | ||
379 | #~ msgctxt "@action:inmenu" | |
380 | #~ msgid "Be right back" | |
381 | #~ msgstr "Zaraz wracam" | |
382 | ||
383 | #~ msgctxt "@action:inmenu" | |
384 | #~ msgid "Busy" | |
385 | #~ msgstr "Zajęty" | |
386 | ||
387 | #~ msgctxt "@action:inmenu" | |
388 | #~ msgid "Do not disturb" | |
389 | #~ msgstr "Nie przeszkadzać" | |
390 | ||
391 | #~ msgctxt "@action:inmenu" | |
392 | #~ msgid "Extended Away" | |
393 | #~ msgstr "Nieobecny na dłużej" | |
394 | ||
395 | #~ msgctxt "@action:inmenu" | |
396 | #~ msgid "Invisible" | |
397 | #~ msgstr "Niewidoczny" | |
398 | ||
399 | #~ msgctxt "@action:inmenu" | |
400 | #~ msgid "Offline" | |
401 | #~ msgstr "Niedostępny" | |
402 | ||
403 | #~ msgctxt "@info:status" | |
404 | #~ msgid "Waiting for account information..." | |
405 | #~ msgstr "Oczekiwanie na informacje o koncie..." | |
406 | ||
407 | #~ msgctxt "protocol - display name (Connecting)" | |
408 | #~ msgid "%1 - %2 (Connecting)" | |
409 | #~ msgstr "%1 - %2 (Łączenie)" | |
410 | ||
411 | #~ msgctxt "protocol - display name" | |
412 | #~ msgid "%1 - %2" | |
413 | #~ msgstr "%1 - %2" | |
414 | ||
415 | #~ msgctxt "@title:window" | |
416 | #~ msgid "KCall" | |
417 | #~ msgstr "KCall" | |
418 | ||
419 | #~ msgctxt "@info:status" | |
420 | #~ msgid "Connected" | |
421 | #~ msgstr "Połączony" | |
422 | ||
423 | #~ msgctxt "@action" | |
424 | #~ msgid "Disconnect" | |
425 | #~ msgstr "Rozłącz" | |
426 | ||
427 | #~ msgctxt "@action" | |
428 | #~ msgid "Cancel connection attempt" | |
429 | #~ msgstr "Anuluj próbę połączenia" | |
430 | ||
431 | #~ msgctxt "@action" | |
432 | #~ msgid "Connect" | |
433 | #~ msgstr "Połącz" | |
434 | ||
435 | #~ msgid "" | |
436 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
437 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
438 | #~ "calls." | |
439 | #~ msgstr "" | |
440 | #~ "Zażądano zamknięcia KCall. Wiedz, że KCall, tak właściwie to nie " | |
441 | #~ "zakończy, ale pozostanie aktywny w tacce systemowej, oczekując na " | |
442 | #~ "przychodzące rozmowy." | |
443 | ||
444 | #~ msgid "Volume" | |
445 | #~ msgstr "Głośność" | |
446 | ||
447 | #~ msgid "Speakers" | |
448 | #~ msgstr "Głośniki" | |
449 | ||
450 | #~ msgid "Microphone" | |
451 | #~ msgstr "Mikrofon" | |
452 | ||
453 | #~ msgid "Video controls" | |
454 | #~ msgstr "Sterowanie obrazem" | |
455 | ||
456 | #~ msgid "Video input" | |
457 | #~ msgstr "Wejście obrazu" | |
458 | ||
459 | #~ msgid "Call log" | |
460 | #~ msgstr "Dziennik rozmów" | |
461 | ||
462 | #~ msgid "Participants" | |
463 | #~ msgstr "Uczestnicy" | |
464 | ||
465 | #~ msgctxt "@title:tab" | |
466 | #~ msgid "&Contact list" | |
467 | #~ msgstr "Lista &kontaktów" | |
468 | ||
469 | #~ msgid "Dial directly" | |
470 | #~ msgstr "Bezpośrednie wybieranie" | |
471 | ||
472 | #~ msgid "Account" | |
473 | #~ msgstr "Konto" | |
474 | ||
475 | #~ msgid "Contact handle" | |
476 | #~ msgstr "Obsługa kontaktu" | |
477 | ||
478 | #~ msgid "Dial (Audio only)" | |
479 | #~ msgstr "Wybierz (Tylko dźwięk)" | |
480 | ||
481 | #~ msgid "Dial (Audio/Video)" | |
482 | #~ msgstr "Wybierz (Dźwięk/Obraz)" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( pt ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: ktp-call-ui\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2012-05-02 10:14+0100\n" | |
11 | "Last-Translator: José Nuno Coelho Pires <zepires@gmail.com>\n" | |
12 | "Language-Team: Portuguese <kde-i18n-pt@kde.org>\n" | |
13 | "Language: \n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "X-POFile-SpellExtra: Kiagiadakis\n" | |
18 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | msgid "Incoming video call" | |
22 | msgstr "Chamada de vídeo recebida" | |
23 | ||
24 | #: src/approver.cpp:39 | |
25 | #, kde-format | |
26 | msgid "<p>%1 is asking you for a video call</p>" | |
27 | msgstr "<p>%1 está a pedir uma chamada de vídeo consigo</p>" | |
28 | ||
29 | #: src/approver.cpp:41 | |
30 | msgid "Incoming call" | |
31 | msgstr "Chamada recebida" | |
32 | ||
33 | #: src/approver.cpp:42 | |
34 | #, kde-format | |
35 | msgid "<p>%1 is calling you</p>" | |
36 | msgstr "<p>%1 está a ligar-lhe</p>" | |
37 | ||
38 | #: src/approver.cpp:58 src/approver.cpp:80 | |
39 | msgctxt "action, answers the incoming call" | |
40 | msgid "Answer" | |
41 | msgstr "Responder" | |
42 | ||
43 | #: src/approver.cpp:59 src/approver.cpp:82 | |
44 | msgctxt "action, rejects the incoming call" | |
45 | msgid "Reject" | |
46 | msgstr "Rejeitar" | |
47 | ||
48 | #: src/call-window.cpp:95 | |
49 | #, kde-format | |
50 | msgid "Call with %1" | |
51 | msgstr "Chamar com %1" | |
52 | ||
53 | #: src/call-window.cpp:109 | |
54 | msgctxt "@info:status" | |
55 | msgid "Connecting..." | |
56 | msgstr "A ligar..." | |
57 | ||
58 | #: src/call-window.cpp:113 | |
59 | msgctxt "@info:status the remote user's phone is ringing" | |
60 | msgid "Ringing..." | |
61 | msgstr "A tocar..." | |
62 | ||
63 | #: src/call-window.cpp:117 | |
64 | msgctxt "@info:status" | |
65 | msgid "Remote user accepted the call, waiting for connection..." | |
66 | msgstr "O utilizador remoto aceitou a chamada; à espera da ligação..." | |
67 | ||
68 | #: src/call-window.cpp:120 | |
69 | msgctxt "@info:status" | |
70 | msgid "Talking..." | |
71 | msgstr "A falar..." | |
72 | ||
73 | #: src/call-window.cpp:136 | |
74 | msgctxt "@info:status" | |
75 | msgid "Remote contact ended the call." | |
76 | msgstr "O contacto remoto terminou a chamada." | |
77 | ||
78 | #: src/call-window.cpp:143 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact rejected the call." | |
81 | msgstr "O contacto remoto rejeitou a chamada." | |
82 | ||
83 | #: src/call-window.cpp:148 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact didn't answer." | |
86 | msgstr "O contacto remoto não respondeu." | |
87 | ||
88 | #: src/call-window.cpp:152 | |
89 | msgctxt "@info:status" | |
90 | msgid "Invalid number or contact." | |
91 | msgstr "O número ou o contacto são inválidos." | |
92 | ||
93 | #: src/call-window.cpp:156 | |
94 | msgctxt "@info:status" | |
95 | msgid "You don't have enough balance to make this call." | |
96 | msgstr "Não tem saldo suficiente para fazer esta chamada." | |
97 | ||
98 | #: src/call-window.cpp:158 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have permission to make this call." | |
101 | msgstr "Não tem permissões para fazer esta chamada." | |
102 | ||
103 | #: src/call-window.cpp:163 | |
104 | msgctxt "@info:status" | |
105 | msgid "Remote contact is currently busy." | |
106 | msgstr "O contacto remoto está ocupado de momento." | |
107 | ||
108 | #: src/call-window.cpp:167 | |
109 | msgctxt "@info:status" | |
110 | msgid "Internal component error." | |
111 | msgstr "Ocorreu um erro interno do componente." | |
112 | ||
113 | #: src/call-window.cpp:170 | |
114 | msgctxt "@info:status" | |
115 | msgid "Remote service error." | |
116 | msgstr "Ocorreu um erro interno do serviço remoto." | |
117 | ||
118 | #: src/call-window.cpp:173 | |
119 | msgctxt "@info:status" | |
120 | msgid "Network error." | |
121 | msgstr "Ocorreu um erro de rede." | |
122 | ||
123 | #: src/call-window.cpp:177 | |
124 | msgctxt "@info:status" | |
125 | msgid "Failed to negotiate codecs." | |
126 | msgstr "Não foi possível negociar os codificadores." | |
127 | ||
128 | #: src/call-window.cpp:179 | |
129 | msgctxt "@info:status" | |
130 | msgid "Unsupported media type." | |
131 | msgstr "O tipo de conteúdos não é suportado." | |
132 | ||
133 | #: src/call-window.cpp:183 | |
134 | msgctxt "@info:status" | |
135 | msgid "Connectivity error." | |
136 | msgstr "Ocorreu um erro na ligação." | |
137 | ||
138 | #: src/call-window.cpp:187 | |
139 | msgctxt "@info:status" | |
140 | msgid "Unknown error." | |
141 | msgstr "Erro desconhecido." | |
142 | ||
143 | #: src/call-window.cpp:192 | |
144 | msgctxt "@info:status" | |
145 | msgid "Disconnected." | |
146 | msgstr "Desligado." | |
147 | ||
148 | #: src/call-window.cpp:196 | |
149 | #, kde-format | |
150 | msgctxt "@info:status the call was disconnected because..." | |
151 | msgid "Disconnected: %1" | |
152 | msgstr "Desligada: %1" | |
153 | ||
154 | #: src/call-window.cpp:339 | |
155 | msgctxt "@action" | |
156 | msgid "Show my video" | |
157 | msgstr "Mostrar o meu vídeo" | |
158 | ||
159 | #: src/call-window.cpp:344 | |
160 | msgctxt "@action" | |
161 | msgid "Show dialpad" | |
162 | msgstr "Mostrar o marcador" | |
163 | ||
164 | #: src/call-window.cpp:351 | |
165 | msgctxt "@action" | |
166 | msgid "Send video" | |
167 | msgstr "Enviar o vídeo" | |
168 | ||
169 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
170 | msgctxt "@action" | |
171 | msgid "Mute" | |
172 | msgstr "Silenciar" | |
173 | ||
174 | #: src/call-window.cpp:363 | |
175 | msgctxt "@action" | |
176 | msgid "Hold" | |
177 | msgstr "Suspender" | |
178 | ||
179 | #: src/call-window.cpp:368 | |
180 | msgctxt "@action" | |
181 | msgid "Hangup" | |
182 | msgstr "Desligar" | |
183 | ||
184 | #: src/main.cpp:36 | |
185 | msgid "KDE Telepathy Call Ui" | |
186 | msgstr "GUI de Chamadas pelo Telepathy KDE" | |
187 | ||
188 | #: src/main.cpp:37 | |
189 | msgid "VoIP client for KDE" | |
190 | msgstr "Cliente de VoIP para o KDE" | |
191 | ||
192 | #: src/main.cpp:38 | |
193 | msgid "(C) 2009, George Kiagiadakis" | |
194 | msgstr "(C) 2009, George Kiagiadakis" | |
195 | ||
196 | #: src/main.cpp:40 | |
197 | msgctxt "@info:credit" | |
198 | msgid "George Kiagiadakis" | |
199 | msgstr "George Kiagiadakis" | |
200 | ||
201 | #: rc.cpp:1 | |
202 | msgctxt "NAME OF TRANSLATORS" | |
203 | msgid "Your names" | |
204 | msgstr "José Nuno Pires" | |
205 | ||
206 | #: rc.cpp:2 | |
207 | msgctxt "EMAIL OF TRANSLATORS" | |
208 | msgid "Your emails" | |
209 | msgstr "zepires@gmail.com" | |
210 | ||
211 | #. i18n: file: src/callwindowui.rc:11 | |
212 | #. i18n: ectx: Menu (call) | |
213 | #: rc.cpp:5 | |
214 | msgid "Call" | |
215 | msgstr "Chamada" | |
216 | ||
217 | #. i18n: file: src/callwindowui.rc:20 | |
218 | #. i18n: ectx: Menu (media) | |
219 | #: rc.cpp:8 | |
220 | msgid "Media" | |
221 | msgstr "Itens Multimédia" | |
222 | ||
223 | #. i18n: file: src/callwindowui.rc:27 | |
224 | #. i18n: ectx: ToolBar (mainToolBar) | |
225 | #: rc.cpp:11 | |
226 | msgid "Main Toolbar" | |
227 | msgstr "Barra Principal" | |
228 | ||
229 | #. i18n: file: src/dtmf-widget.ui:17 | |
230 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
231 | #: rc.cpp:14 | |
232 | msgid "1" | |
233 | msgstr "1" | |
234 | ||
235 | #. i18n: file: src/dtmf-widget.ui:24 | |
236 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
237 | #: rc.cpp:17 | |
238 | msgid "2" | |
239 | msgstr "2" | |
240 | ||
241 | #. i18n: file: src/dtmf-widget.ui:31 | |
242 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
243 | #: rc.cpp:20 | |
244 | msgid "3" | |
245 | msgstr "3" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:38 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
249 | #: rc.cpp:23 | |
250 | msgid "4" | |
251 | msgstr "4" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:45 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
255 | #: rc.cpp:26 | |
256 | msgid "5" | |
257 | msgstr "5" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:52 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
261 | #: rc.cpp:29 | |
262 | msgid "6" | |
263 | msgstr "6" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:59 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
267 | #: rc.cpp:32 | |
268 | msgid "7" | |
269 | msgstr "7" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:66 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
273 | #: rc.cpp:35 | |
274 | msgid "8" | |
275 | msgstr "8" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:73 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
279 | #: rc.cpp:38 | |
280 | msgid "9" | |
281 | msgstr "9" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:80 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
285 | #: rc.cpp:41 | |
286 | msgid "*" | |
287 | msgstr "*" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:87 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
291 | #: rc.cpp:44 | |
292 | msgid "0" | |
293 | msgstr "0" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:94 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
297 | #: rc.cpp:47 | |
298 | msgid "#" | |
299 | msgstr "#" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( pt_BR ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Luiz Fernando Ranghetti <elchevive@opensuse.org>, 2012. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2012-05-06 10:52-0300\n" | |
10 | "Last-Translator: Luiz Fernando Ranghetti <elchevive@opensuse.org>\n" | |
11 | "Language-Team: Brazilian Portuguese <kde-i18n-pt_BR@kde.org>\n" | |
12 | "Language: \n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.2\n" | |
17 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "Chamada de vídeo recebida" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "<p>%1 está chamando você para uma chamada de vídeo</p>" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | msgid "Incoming call" | |
30 | msgstr "Chamada recebida" | |
31 | ||
32 | #: src/approver.cpp:42 | |
33 | #, kde-format | |
34 | msgid "<p>%1 is calling you</p>" | |
35 | msgstr "<p>%1 está chamando você</p>" | |
36 | ||
37 | #: src/approver.cpp:58 src/approver.cpp:80 | |
38 | msgctxt "action, answers the incoming call" | |
39 | msgid "Answer" | |
40 | msgstr "Responder" | |
41 | ||
42 | #: src/approver.cpp:59 src/approver.cpp:82 | |
43 | msgctxt "action, rejects the incoming call" | |
44 | msgid "Reject" | |
45 | msgstr "Rejeitar" | |
46 | ||
47 | #: src/call-window.cpp:95 | |
48 | #, kde-format | |
49 | msgid "Call with %1" | |
50 | msgstr "Chamar com %1" | |
51 | ||
52 | #: src/call-window.cpp:109 | |
53 | msgctxt "@info:status" | |
54 | msgid "Connecting..." | |
55 | msgstr "Conectando..." | |
56 | ||
57 | #: src/call-window.cpp:113 | |
58 | msgctxt "@info:status the remote user's phone is ringing" | |
59 | msgid "Ringing..." | |
60 | msgstr "Chamando..." | |
61 | ||
62 | #: src/call-window.cpp:117 | |
63 | msgctxt "@info:status" | |
64 | msgid "Remote user accepted the call, waiting for connection..." | |
65 | msgstr "O usuário remoto aceitou a chamada, aguardando pela conexão..." | |
66 | ||
67 | #: src/call-window.cpp:120 | |
68 | msgctxt "@info:status" | |
69 | msgid "Talking..." | |
70 | msgstr "Falando..." | |
71 | ||
72 | #: src/call-window.cpp:136 | |
73 | msgctxt "@info:status" | |
74 | msgid "Remote contact ended the call." | |
75 | msgstr "O contato remoto finalizou a chamada." | |
76 | ||
77 | #: src/call-window.cpp:143 | |
78 | msgctxt "@info:status" | |
79 | msgid "Remote contact rejected the call." | |
80 | msgstr "O contato remoto rejeitou a chamada." | |
81 | ||
82 | #: src/call-window.cpp:148 | |
83 | msgctxt "@info:status" | |
84 | msgid "Remote contact didn't answer." | |
85 | msgstr "O contato remoto não respondeu." | |
86 | ||
87 | #: src/call-window.cpp:152 | |
88 | msgctxt "@info:status" | |
89 | msgid "Invalid number or contact." | |
90 | msgstr "Número ou contato inválido." | |
91 | ||
92 | #: src/call-window.cpp:156 | |
93 | msgctxt "@info:status" | |
94 | msgid "You don't have enough balance to make this call." | |
95 | msgstr "Você não tem saldo suficiente para fazer esta chamada." | |
96 | ||
97 | #: src/call-window.cpp:158 | |
98 | msgctxt "@info:status" | |
99 | msgid "You don't have permission to make this call." | |
100 | msgstr "Você não tem permissão para fazer esta chamada." | |
101 | ||
102 | #: src/call-window.cpp:163 | |
103 | msgctxt "@info:status" | |
104 | msgid "Remote contact is currently busy." | |
105 | msgstr "O contato remoto está ocupado no momento." | |
106 | ||
107 | #: src/call-window.cpp:167 | |
108 | msgctxt "@info:status" | |
109 | msgid "Internal component error." | |
110 | msgstr "Erro interno do componente." | |
111 | ||
112 | #: src/call-window.cpp:170 | |
113 | msgctxt "@info:status" | |
114 | msgid "Remote service error." | |
115 | msgstr "Erro do serviço remoto." | |
116 | ||
117 | #: src/call-window.cpp:173 | |
118 | msgctxt "@info:status" | |
119 | msgid "Network error." | |
120 | msgstr "Erro de rede." | |
121 | ||
122 | #: src/call-window.cpp:177 | |
123 | msgctxt "@info:status" | |
124 | msgid "Failed to negotiate codecs." | |
125 | msgstr "Falha ao negociar os codecs." | |
126 | ||
127 | #: src/call-window.cpp:179 | |
128 | msgctxt "@info:status" | |
129 | msgid "Unsupported media type." | |
130 | msgstr "Tipo de mídia não suportado." | |
131 | ||
132 | #: src/call-window.cpp:183 | |
133 | msgctxt "@info:status" | |
134 | msgid "Connectivity error." | |
135 | msgstr "Erro de conectividade." | |
136 | ||
137 | #: src/call-window.cpp:187 | |
138 | msgctxt "@info:status" | |
139 | msgid "Unknown error." | |
140 | msgstr "Erro desconhecido." | |
141 | ||
142 | #: src/call-window.cpp:192 | |
143 | msgctxt "@info:status" | |
144 | msgid "Disconnected." | |
145 | msgstr "Desconectado." | |
146 | ||
147 | #: src/call-window.cpp:196 | |
148 | #, kde-format | |
149 | msgctxt "@info:status the call was disconnected because..." | |
150 | msgid "Disconnected: %1" | |
151 | msgstr "Desconectado: %1" | |
152 | ||
153 | #: src/call-window.cpp:339 | |
154 | msgctxt "@action" | |
155 | msgid "Show my video" | |
156 | msgstr "Exibir meu vídeo" | |
157 | ||
158 | #: src/call-window.cpp:344 | |
159 | msgctxt "@action" | |
160 | msgid "Show dialpad" | |
161 | msgstr "Exibir teclado numérico" | |
162 | ||
163 | #: src/call-window.cpp:351 | |
164 | msgctxt "@action" | |
165 | msgid "Send video" | |
166 | msgstr "Enviar vídeo" | |
167 | ||
168 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
169 | msgctxt "@action" | |
170 | msgid "Mute" | |
171 | msgstr "Mudo" | |
172 | ||
173 | #: src/call-window.cpp:363 | |
174 | msgctxt "@action" | |
175 | msgid "Hold" | |
176 | msgstr "Aguardar" | |
177 | ||
178 | #: src/call-window.cpp:368 | |
179 | msgctxt "@action" | |
180 | msgid "Hangup" | |
181 | msgstr "Desligar" | |
182 | ||
183 | #: src/main.cpp:36 | |
184 | msgid "KDE Telepathy Call Ui" | |
185 | msgstr "Interface de chamada KDE Telepathy" | |
186 | ||
187 | #: src/main.cpp:37 | |
188 | msgid "VoIP client for KDE" | |
189 | msgstr "Cliente VoIP para o KDE" | |
190 | ||
191 | #: src/main.cpp:38 | |
192 | msgid "(C) 2009, George Kiagiadakis" | |
193 | msgstr "(C) 2009, George Kiagiadakis" | |
194 | ||
195 | #: src/main.cpp:40 | |
196 | msgctxt "@info:credit" | |
197 | msgid "George Kiagiadakis" | |
198 | msgstr "George Kiagiadakis" | |
199 | ||
200 | #: rc.cpp:1 | |
201 | msgctxt "NAME OF TRANSLATORS" | |
202 | msgid "Your names" | |
203 | msgstr "Luiz Fernando Ranghetti" | |
204 | ||
205 | #: rc.cpp:2 | |
206 | msgctxt "EMAIL OF TRANSLATORS" | |
207 | msgid "Your emails" | |
208 | msgstr "elchevive@opensuse.org" | |
209 | ||
210 | #. i18n: file: src/callwindowui.rc:11 | |
211 | #. i18n: ectx: Menu (call) | |
212 | #: rc.cpp:5 | |
213 | msgid "Call" | |
214 | msgstr "Chamada" | |
215 | ||
216 | #. i18n: file: src/callwindowui.rc:20 | |
217 | #. i18n: ectx: Menu (media) | |
218 | #: rc.cpp:8 | |
219 | msgid "Media" | |
220 | msgstr "Mídia" | |
221 | ||
222 | #. i18n: file: src/callwindowui.rc:27 | |
223 | #. i18n: ectx: ToolBar (mainToolBar) | |
224 | #: rc.cpp:11 | |
225 | msgid "Main Toolbar" | |
226 | msgstr "Barra de ferramentas principal" | |
227 | ||
228 | #. i18n: file: src/dtmf-widget.ui:17 | |
229 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
230 | #: rc.cpp:14 | |
231 | msgid "1" | |
232 | msgstr "1" | |
233 | ||
234 | #. i18n: file: src/dtmf-widget.ui:24 | |
235 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
236 | #: rc.cpp:17 | |
237 | msgid "2" | |
238 | msgstr "2" | |
239 | ||
240 | #. i18n: file: src/dtmf-widget.ui:31 | |
241 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
242 | #: rc.cpp:20 | |
243 | msgid "3" | |
244 | msgstr "3" | |
245 | ||
246 | #. i18n: file: src/dtmf-widget.ui:38 | |
247 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
248 | #: rc.cpp:23 | |
249 | msgid "4" | |
250 | msgstr "4" | |
251 | ||
252 | #. i18n: file: src/dtmf-widget.ui:45 | |
253 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
254 | #: rc.cpp:26 | |
255 | msgid "5" | |
256 | msgstr "5" | |
257 | ||
258 | #. i18n: file: src/dtmf-widget.ui:52 | |
259 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
260 | #: rc.cpp:29 | |
261 | msgid "6" | |
262 | msgstr "6" | |
263 | ||
264 | #. i18n: file: src/dtmf-widget.ui:59 | |
265 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
266 | #: rc.cpp:32 | |
267 | msgid "7" | |
268 | msgstr "7" | |
269 | ||
270 | #. i18n: file: src/dtmf-widget.ui:66 | |
271 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
272 | #: rc.cpp:35 | |
273 | msgid "8" | |
274 | msgstr "8" | |
275 | ||
276 | #. i18n: file: src/dtmf-widget.ui:73 | |
277 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
278 | #: rc.cpp:38 | |
279 | msgid "9" | |
280 | msgstr "9" | |
281 | ||
282 | #. i18n: file: src/dtmf-widget.ui:80 | |
283 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
284 | #: rc.cpp:41 | |
285 | msgid "*" | |
286 | msgstr "*" | |
287 | ||
288 | #. i18n: file: src/dtmf-widget.ui:87 | |
289 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
290 | #: rc.cpp:44 | |
291 | msgid "0" | |
292 | msgstr "0" | |
293 | ||
294 | #. i18n: file: src/dtmf-widget.ui:94 | |
295 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
296 | #: rc.cpp:47 | |
297 | msgid "#" | |
298 | msgstr "#" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( sk ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of ktp-call-ui.po to Slovak | |
1 | # Roman Paholik <wizzardsk@gmail.com>, 2012. | |
2 | msgid "" | |
3 | msgstr "" | |
4 | "Project-Id-Version: ktp-call-ui\n" | |
5 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
6 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
7 | "PO-Revision-Date: 2012-03-02 15:27+0100\n" | |
8 | "Last-Translator: Roman Paholík <wizzardsk@gmail.com>\n" | |
9 | "Language-Team: Slovak <kde-sk@linux.sk>\n" | |
10 | "Language: sk\n" | |
11 | "MIME-Version: 1.0\n" | |
12 | "Content-Type: text/plain; charset=UTF-8\n" | |
13 | "Content-Transfer-Encoding: 8bit\n" | |
14 | "X-Generator: Lokalize 0.2\n" | |
15 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" | |
16 | ||
17 | #: src/approver.cpp:38 | |
18 | msgid "Incoming video call" | |
19 | msgstr "" | |
20 | ||
21 | #: src/approver.cpp:39 | |
22 | #, kde-format | |
23 | msgid "<p>%1 is asking you for a video call</p>" | |
24 | msgstr "" | |
25 | ||
26 | #: src/approver.cpp:41 | |
27 | msgid "Incoming call" | |
28 | msgstr "" | |
29 | ||
30 | #: src/approver.cpp:42 | |
31 | #, kde-format | |
32 | msgid "<p>%1 is calling you</p>" | |
33 | msgstr "" | |
34 | ||
35 | #: src/approver.cpp:58 src/approver.cpp:80 | |
36 | msgctxt "action, answers the incoming call" | |
37 | msgid "Answer" | |
38 | msgstr "" | |
39 | ||
40 | #: src/approver.cpp:59 src/approver.cpp:82 | |
41 | msgctxt "action, rejects the incoming call" | |
42 | msgid "Reject" | |
43 | msgstr "" | |
44 | ||
45 | #: src/call-window.cpp:95 | |
46 | #, kde-format | |
47 | msgid "Call with %1" | |
48 | msgstr "" | |
49 | ||
50 | #: src/call-window.cpp:109 | |
51 | msgctxt "@info:status" | |
52 | msgid "Connecting..." | |
53 | msgstr "Pripájanie..." | |
54 | ||
55 | #: src/call-window.cpp:113 | |
56 | #, fuzzy | |
57 | #| msgctxt "@info:status" | |
58 | #| msgid "Connecting..." | |
59 | msgctxt "@info:status the remote user's phone is ringing" | |
60 | msgid "Ringing..." | |
61 | msgstr "Pripájanie..." | |
62 | ||
63 | #: src/call-window.cpp:117 | |
64 | msgctxt "@info:status" | |
65 | msgid "Remote user accepted the call, waiting for connection..." | |
66 | msgstr "" | |
67 | ||
68 | #: src/call-window.cpp:120 | |
69 | #, fuzzy | |
70 | msgctxt "@info:status" | |
71 | msgid "Talking..." | |
72 | msgstr "Hovoriť s vami" | |
73 | ||
74 | #: src/call-window.cpp:136 | |
75 | msgctxt "@info:status" | |
76 | msgid "Remote contact ended the call." | |
77 | msgstr "" | |
78 | ||
79 | #: src/call-window.cpp:143 | |
80 | msgctxt "@info:status" | |
81 | msgid "Remote contact rejected the call." | |
82 | msgstr "" | |
83 | ||
84 | #: src/call-window.cpp:148 | |
85 | msgctxt "@info:status" | |
86 | msgid "Remote contact didn't answer." | |
87 | msgstr "" | |
88 | ||
89 | #: src/call-window.cpp:152 | |
90 | msgctxt "@info:status" | |
91 | msgid "Invalid number or contact." | |
92 | msgstr "" | |
93 | ||
94 | #: src/call-window.cpp:156 | |
95 | msgctxt "@info:status" | |
96 | msgid "You don't have enough balance to make this call." | |
97 | msgstr "" | |
98 | ||
99 | #: src/call-window.cpp:158 | |
100 | msgctxt "@info:status" | |
101 | msgid "You don't have permission to make this call." | |
102 | msgstr "" | |
103 | ||
104 | #: src/call-window.cpp:163 | |
105 | msgctxt "@info:status" | |
106 | msgid "Remote contact is currently busy." | |
107 | msgstr "" | |
108 | ||
109 | #: src/call-window.cpp:167 | |
110 | msgctxt "@info:status" | |
111 | msgid "Internal component error." | |
112 | msgstr "" | |
113 | ||
114 | #: src/call-window.cpp:170 | |
115 | msgctxt "@info:status" | |
116 | msgid "Remote service error." | |
117 | msgstr "" | |
118 | ||
119 | #: src/call-window.cpp:173 | |
120 | msgctxt "@info:status" | |
121 | msgid "Network error." | |
122 | msgstr "" | |
123 | ||
124 | #: src/call-window.cpp:177 | |
125 | msgctxt "@info:status" | |
126 | msgid "Failed to negotiate codecs." | |
127 | msgstr "" | |
128 | ||
129 | #: src/call-window.cpp:179 | |
130 | msgctxt "@info:status" | |
131 | msgid "Unsupported media type." | |
132 | msgstr "" | |
133 | ||
134 | #: src/call-window.cpp:183 | |
135 | msgctxt "@info:status" | |
136 | msgid "Connectivity error." | |
137 | msgstr "" | |
138 | ||
139 | #: src/call-window.cpp:187 | |
140 | msgctxt "@info:status" | |
141 | msgid "Unknown error." | |
142 | msgstr "" | |
143 | ||
144 | #: src/call-window.cpp:192 | |
145 | msgctxt "@info:status" | |
146 | msgid "Disconnected." | |
147 | msgstr "Odpojený." | |
148 | ||
149 | #: src/call-window.cpp:196 | |
150 | #, fuzzy, kde-format | |
151 | #| msgctxt "@info:status" | |
152 | #| msgid "Disconnected." | |
153 | msgctxt "@info:status the call was disconnected because..." | |
154 | msgid "Disconnected: %1" | |
155 | msgstr "Odpojený." | |
156 | ||
157 | #: src/call-window.cpp:339 | |
158 | #, fuzzy | |
159 | msgctxt "@action" | |
160 | msgid "Show my video" | |
161 | msgstr "Zobraz moje záložky" | |
162 | ||
163 | #: src/call-window.cpp:344 | |
164 | #, fuzzy | |
165 | msgctxt "@action" | |
166 | msgid "Show dialpad" | |
167 | msgstr "Zobraziť &sledované" | |
168 | ||
169 | #: src/call-window.cpp:351 | |
170 | #, fuzzy | |
171 | msgctxt "@action" | |
172 | msgid "Send video" | |
173 | msgstr "Prehrávač videa" | |
174 | ||
175 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
176 | msgctxt "@action" | |
177 | msgid "Mute" | |
178 | msgstr "Stlmiť" | |
179 | ||
180 | #: src/call-window.cpp:363 | |
181 | #, fuzzy | |
182 | msgctxt "@action" | |
183 | msgid "Hold" | |
184 | msgstr "Pozdržaná" | |
185 | ||
186 | #: src/call-window.cpp:368 | |
187 | #, fuzzy | |
188 | msgctxt "@action" | |
189 | msgid "Hangup" | |
190 | msgstr "Zavesiť" | |
191 | ||
192 | #: src/main.cpp:36 | |
193 | msgid "KDE Telepathy Call Ui" | |
194 | msgstr "" | |
195 | ||
196 | #: src/main.cpp:37 | |
197 | #, fuzzy | |
198 | msgid "VoIP client for KDE" | |
199 | msgstr "BitTorrent klient pre KDE" | |
200 | ||
201 | #: src/main.cpp:38 | |
202 | msgid "(C) 2009, George Kiagiadakis" | |
203 | msgstr "(C) 2009, George Kiagiadakis" | |
204 | ||
205 | #: src/main.cpp:40 | |
206 | msgctxt "@info:credit" | |
207 | msgid "George Kiagiadakis" | |
208 | msgstr "George Kiagiadakis" | |
209 | ||
210 | #: rc.cpp:1 | |
211 | msgctxt "NAME OF TRANSLATORS" | |
212 | msgid "Your names" | |
213 | msgstr "Roman Paholík" | |
214 | ||
215 | #: rc.cpp:2 | |
216 | msgctxt "EMAIL OF TRANSLATORS" | |
217 | msgid "Your emails" | |
218 | msgstr "wizzardsk@gmail.com" | |
219 | ||
220 | #. i18n: file: src/callwindowui.rc:11 | |
221 | #. i18n: ectx: Menu (call) | |
222 | #: rc.cpp:5 | |
223 | msgid "Call" | |
224 | msgstr "Volanie" | |
225 | ||
226 | #. i18n: file: src/callwindowui.rc:20 | |
227 | #. i18n: ectx: Menu (media) | |
228 | #: rc.cpp:8 | |
229 | msgid "Media" | |
230 | msgstr "Médiá" | |
231 | ||
232 | #. i18n: file: src/callwindowui.rc:27 | |
233 | #. i18n: ectx: ToolBar (mainToolBar) | |
234 | #: rc.cpp:11 | |
235 | msgid "Main Toolbar" | |
236 | msgstr "Hlavný panel nástrojov" | |
237 | ||
238 | #. i18n: file: src/dtmf-widget.ui:17 | |
239 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
240 | #: rc.cpp:14 | |
241 | msgid "1" | |
242 | msgstr "1" | |
243 | ||
244 | #. i18n: file: src/dtmf-widget.ui:24 | |
245 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
246 | #: rc.cpp:17 | |
247 | msgid "2" | |
248 | msgstr "2" | |
249 | ||
250 | #. i18n: file: src/dtmf-widget.ui:31 | |
251 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
252 | #: rc.cpp:20 | |
253 | msgid "3" | |
254 | msgstr "3" | |
255 | ||
256 | #. i18n: file: src/dtmf-widget.ui:38 | |
257 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
258 | #: rc.cpp:23 | |
259 | msgid "4" | |
260 | msgstr "4" | |
261 | ||
262 | #. i18n: file: src/dtmf-widget.ui:45 | |
263 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
264 | #: rc.cpp:26 | |
265 | msgid "5" | |
266 | msgstr "5" | |
267 | ||
268 | #. i18n: file: src/dtmf-widget.ui:52 | |
269 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
270 | #: rc.cpp:29 | |
271 | msgid "6" | |
272 | msgstr "6" | |
273 | ||
274 | #. i18n: file: src/dtmf-widget.ui:59 | |
275 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
276 | #: rc.cpp:32 | |
277 | msgid "7" | |
278 | msgstr "7" | |
279 | ||
280 | #. i18n: file: src/dtmf-widget.ui:66 | |
281 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
282 | #: rc.cpp:35 | |
283 | msgid "8" | |
284 | msgstr "8" | |
285 | ||
286 | #. i18n: file: src/dtmf-widget.ui:73 | |
287 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
288 | #: rc.cpp:38 | |
289 | msgid "9" | |
290 | msgstr "9" | |
291 | ||
292 | #. i18n: file: src/dtmf-widget.ui:80 | |
293 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
294 | #: rc.cpp:41 | |
295 | msgid "*" | |
296 | msgstr "*" | |
297 | ||
298 | #. i18n: file: src/dtmf-widget.ui:87 | |
299 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
300 | #: rc.cpp:44 | |
301 | msgid "0" | |
302 | msgstr "0" | |
303 | ||
304 | #. i18n: file: src/dtmf-widget.ui:94 | |
305 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
306 | #: rc.cpp:47 | |
307 | msgid "#" | |
308 | msgstr "#" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( sv ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # translation of ktp-call-ui.po to Swedish | |
1 | # Copyright (C) 2012 This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # | |
4 | # Stefan Asserhäll <stefan.asserhall@comhem.se>, 2009. | |
5 | # Stefan Asserhall <stefan.asserhall@comhem.se>, 2010, 2011, 2012. | |
6 | msgid "" | |
7 | msgstr "" | |
8 | "Project-Id-Version: ktp\n" | |
9 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
10 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
11 | "PO-Revision-Date: 2012-05-22 19:55+0200\n" | |
12 | "Last-Translator: Stefan Asserhäll <stefan.asserhall@comhem.se>\n" | |
13 | "Language-Team: Swedish <kde-i18n-doc@kde.org>\n" | |
14 | "Language: sv\n" | |
15 | "MIME-Version: 1.0\n" | |
16 | "Content-Type: text/plain; charset=UTF-8\n" | |
17 | "Content-Transfer-Encoding: 8bit\n" | |
18 | "X-Generator: Lokalize 1.4\n" | |
19 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | |
20 | ||
21 | #: src/approver.cpp:38 | |
22 | msgid "Incoming video call" | |
23 | msgstr "Inkommande videosamtal" | |
24 | ||
25 | #: src/approver.cpp:39 | |
26 | #, kde-format | |
27 | msgid "<p>%1 is asking you for a video call</p>" | |
28 | msgstr "<p>%1 ber om ett videosamtal</p>" | |
29 | ||
30 | #: src/approver.cpp:41 | |
31 | msgid "Incoming call" | |
32 | msgstr "Inkommande samtal" | |
33 | ||
34 | #: src/approver.cpp:42 | |
35 | #, kde-format | |
36 | msgid "<p>%1 is calling you</p>" | |
37 | msgstr "<p>%1 ringer till dig</p>" | |
38 | ||
39 | #: src/approver.cpp:58 src/approver.cpp:80 | |
40 | msgctxt "action, answers the incoming call" | |
41 | msgid "Answer" | |
42 | msgstr "Svara" | |
43 | ||
44 | #: src/approver.cpp:59 src/approver.cpp:82 | |
45 | msgctxt "action, rejects the incoming call" | |
46 | msgid "Reject" | |
47 | msgstr "Avslå" | |
48 | ||
49 | #: src/call-window.cpp:95 | |
50 | #, kde-format | |
51 | msgid "Call with %1" | |
52 | msgstr "Samtal med %1" | |
53 | ||
54 | #: src/call-window.cpp:109 | |
55 | msgctxt "@info:status" | |
56 | msgid "Connecting..." | |
57 | msgstr "Ansluter..." | |
58 | ||
59 | #: src/call-window.cpp:113 | |
60 | msgctxt "@info:status the remote user's phone is ringing" | |
61 | msgid "Ringing..." | |
62 | msgstr "Ringer upp..." | |
63 | ||
64 | #: src/call-window.cpp:117 | |
65 | msgctxt "@info:status" | |
66 | msgid "Remote user accepted the call, waiting for connection..." | |
67 | msgstr "Samtalspartnern accepterade samtalet, väntar på anslutning..." | |
68 | ||
69 | #: src/call-window.cpp:120 | |
70 | msgctxt "@info:status" | |
71 | msgid "Talking..." | |
72 | msgstr "Pratar..." | |
73 | ||
74 | #: src/call-window.cpp:136 | |
75 | msgctxt "@info:status" | |
76 | msgid "Remote contact ended the call." | |
77 | msgstr "Samtalspartnern avslutade samtalet." | |
78 | ||
79 | #: src/call-window.cpp:143 | |
80 | msgctxt "@info:status" | |
81 | msgid "Remote contact rejected the call." | |
82 | msgstr "Samtalspartnern avslog samtalet." | |
83 | ||
84 | #: src/call-window.cpp:148 | |
85 | msgctxt "@info:status" | |
86 | msgid "Remote contact didn't answer." | |
87 | msgstr "Samtalspartnern svarade inte." | |
88 | ||
89 | #: src/call-window.cpp:152 | |
90 | msgctxt "@info:status" | |
91 | msgid "Invalid number or contact." | |
92 | msgstr "Felaktigt nummer eller kontakt." | |
93 | ||
94 | #: src/call-window.cpp:156 | |
95 | msgctxt "@info:status" | |
96 | msgid "You don't have enough balance to make this call." | |
97 | msgstr "Du har inte tillräcklig behållning för att ringa samtalet." | |
98 | ||
99 | #: src/call-window.cpp:158 | |
100 | msgctxt "@info:status" | |
101 | msgid "You don't have permission to make this call." | |
102 | msgstr "Du har inte rättighet att ringa samtalet." | |
103 | ||
104 | #: src/call-window.cpp:163 | |
105 | msgctxt "@info:status" | |
106 | msgid "Remote contact is currently busy." | |
107 | msgstr "Samtalspartnern är för närvarande upptagen." | |
108 | ||
109 | #: src/call-window.cpp:167 | |
110 | msgctxt "@info:status" | |
111 | msgid "Internal component error." | |
112 | msgstr "Internt komponentfel." | |
113 | ||
114 | #: src/call-window.cpp:170 | |
115 | msgctxt "@info:status" | |
116 | msgid "Remote service error." | |
117 | msgstr "Fjärrtjänstfel." | |
118 | ||
119 | #: src/call-window.cpp:173 | |
120 | msgctxt "@info:status" | |
121 | msgid "Network error." | |
122 | msgstr "Nätverksfel." | |
123 | ||
124 | #: src/call-window.cpp:177 | |
125 | msgctxt "@info:status" | |
126 | msgid "Failed to negotiate codecs." | |
127 | msgstr "Misslyckades förhandla kodning." | |
128 | ||
129 | #: src/call-window.cpp:179 | |
130 | msgctxt "@info:status" | |
131 | msgid "Unsupported media type." | |
132 | msgstr "Mediatypen stöds inte." | |
133 | ||
134 | #: src/call-window.cpp:183 | |
135 | msgctxt "@info:status" | |
136 | msgid "Connectivity error." | |
137 | msgstr "Anslutningsfel." | |
138 | ||
139 | #: src/call-window.cpp:187 | |
140 | msgctxt "@info:status" | |
141 | msgid "Unknown error." | |
142 | msgstr "Okänt fel." | |
143 | ||
144 | #: src/call-window.cpp:192 | |
145 | msgctxt "@info:status" | |
146 | msgid "Disconnected." | |
147 | msgstr "Nerkopplad." | |
148 | ||
149 | #: src/call-window.cpp:196 | |
150 | #, kde-format | |
151 | msgctxt "@info:status the call was disconnected because..." | |
152 | msgid "Disconnected: %1" | |
153 | msgstr "Nerkopplad: %1" | |
154 | ||
155 | #: src/call-window.cpp:339 | |
156 | msgctxt "@action" | |
157 | msgid "Show my video" | |
158 | msgstr "Visa min video" | |
159 | ||
160 | #: src/call-window.cpp:344 | |
161 | msgctxt "@action" | |
162 | msgid "Show dialpad" | |
163 | msgstr "Visa knappsats" | |
164 | ||
165 | #: src/call-window.cpp:351 | |
166 | msgctxt "@action" | |
167 | msgid "Send video" | |
168 | msgstr "Skicka video" | |
169 | ||
170 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
171 | msgctxt "@action" | |
172 | msgid "Mute" | |
173 | msgstr "Tyst" | |
174 | ||
175 | #: src/call-window.cpp:363 | |
176 | msgctxt "@action" | |
177 | msgid "Hold" | |
178 | msgstr "Håll" | |
179 | ||
180 | #: src/call-window.cpp:368 | |
181 | msgctxt "@action" | |
182 | msgid "Hangup" | |
183 | msgstr "Lägg på" | |
184 | ||
185 | #: src/main.cpp:36 | |
186 | msgid "KDE Telepathy Call Ui" | |
187 | msgstr "KDE Telepathy samtalsgränssnitt" | |
188 | ||
189 | #: src/main.cpp:37 | |
190 | msgid "VoIP client for KDE" | |
191 | msgstr "IP-telefonprogram för KDE" | |
192 | ||
193 | #: src/main.cpp:38 | |
194 | msgid "(C) 2009, George Kiagiadakis" | |
195 | msgstr "© 2009, George Kiagiadakis" | |
196 | ||
197 | #: src/main.cpp:40 | |
198 | msgctxt "@info:credit" | |
199 | msgid "George Kiagiadakis" | |
200 | msgstr "George Kiagiadakis" | |
201 | ||
202 | #: rc.cpp:1 | |
203 | msgctxt "NAME OF TRANSLATORS" | |
204 | msgid "Your names" | |
205 | msgstr "Stefan Asserhäll" | |
206 | ||
207 | #: rc.cpp:2 | |
208 | msgctxt "EMAIL OF TRANSLATORS" | |
209 | msgid "Your emails" | |
210 | msgstr "stefan.asserhall@comhem.se" | |
211 | ||
212 | #. i18n: file: src/callwindowui.rc:11 | |
213 | #. i18n: ectx: Menu (call) | |
214 | #: rc.cpp:5 | |
215 | msgid "Call" | |
216 | msgstr "Samtal" | |
217 | ||
218 | #. i18n: file: src/callwindowui.rc:20 | |
219 | #. i18n: ectx: Menu (media) | |
220 | #: rc.cpp:8 | |
221 | msgid "Media" | |
222 | msgstr "Medier" | |
223 | ||
224 | #. i18n: file: src/callwindowui.rc:27 | |
225 | #. i18n: ectx: ToolBar (mainToolBar) | |
226 | #: rc.cpp:11 | |
227 | msgid "Main Toolbar" | |
228 | msgstr "Huvudverktygsrad" | |
229 | ||
230 | #. i18n: file: src/dtmf-widget.ui:17 | |
231 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
232 | #: rc.cpp:14 | |
233 | msgid "1" | |
234 | msgstr "1" | |
235 | ||
236 | #. i18n: file: src/dtmf-widget.ui:24 | |
237 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
238 | #: rc.cpp:17 | |
239 | msgid "2" | |
240 | msgstr "2" | |
241 | ||
242 | #. i18n: file: src/dtmf-widget.ui:31 | |
243 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
244 | #: rc.cpp:20 | |
245 | msgid "3" | |
246 | msgstr "3" | |
247 | ||
248 | #. i18n: file: src/dtmf-widget.ui:38 | |
249 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
250 | #: rc.cpp:23 | |
251 | msgid "4" | |
252 | msgstr "4" | |
253 | ||
254 | #. i18n: file: src/dtmf-widget.ui:45 | |
255 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
256 | #: rc.cpp:26 | |
257 | msgid "5" | |
258 | msgstr "5" | |
259 | ||
260 | #. i18n: file: src/dtmf-widget.ui:52 | |
261 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
262 | #: rc.cpp:29 | |
263 | msgid "6" | |
264 | msgstr "6" | |
265 | ||
266 | #. i18n: file: src/dtmf-widget.ui:59 | |
267 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
268 | #: rc.cpp:32 | |
269 | msgid "7" | |
270 | msgstr "7" | |
271 | ||
272 | #. i18n: file: src/dtmf-widget.ui:66 | |
273 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
274 | #: rc.cpp:35 | |
275 | msgid "8" | |
276 | msgstr "8" | |
277 | ||
278 | #. i18n: file: src/dtmf-widget.ui:73 | |
279 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
280 | #: rc.cpp:38 | |
281 | msgid "9" | |
282 | msgstr "9" | |
283 | ||
284 | #. i18n: file: src/dtmf-widget.ui:80 | |
285 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
286 | #: rc.cpp:41 | |
287 | msgid "*" | |
288 | msgstr "*" | |
289 | ||
290 | #. i18n: file: src/dtmf-widget.ui:87 | |
291 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
292 | #: rc.cpp:44 | |
293 | msgid "0" | |
294 | msgstr "0" | |
295 | ||
296 | #. i18n: file: src/dtmf-widget.ui:94 | |
297 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
298 | #: rc.cpp:47 | |
299 | msgid "#" | |
300 | msgstr "#" | |
301 | ||
302 | #~ msgid "Warning: %1" | |
303 | #~ msgstr "Varning: %1" | |
304 | ||
305 | #~ msgid "Error: %1" | |
306 | #~ msgstr "Fel: %1" | |
307 | ||
308 | #~ msgid "KCall" | |
309 | #~ msgstr "Kcall" | |
310 | ||
311 | #~ msgid "Brightness" | |
312 | #~ msgstr "Ljusstyrka" | |
313 | ||
314 | #~ msgid "Contrast" | |
315 | #~ msgstr "Kontrast" | |
316 | ||
317 | #~ msgid "Hue" | |
318 | #~ msgstr "Färgton" | |
319 | ||
320 | #~ msgid "Saturation" | |
321 | #~ msgstr "Färgmättnad" | |
322 | ||
323 | #~ msgid "Dialpad" | |
324 | #~ msgstr "Knappsats" | |
325 | ||
326 | #~ msgid "" | |
327 | #~ "Defines whether the window should close automatically after a timeout " | |
328 | #~ "when the call is over." | |
329 | #~ msgstr "" | |
330 | #~ "Definierar om fönstret ska stängas automatiskt när en tidsgräns går ut " | |
331 | #~ "efter samtalet är klart." | |
332 | ||
333 | #~ msgid "" | |
334 | #~ "Defines how many seconds the call window should remain visible after the " | |
335 | #~ "call is over. This option depends on \"CloseOnDisconnect\"." | |
336 | #~ msgstr "" | |
337 | #~ "Definierar hur många sekunder samtalsfönstret ska förbli synligt efter " | |
338 | #~ "samtalet är klart. Alternativet beror på \"stäng vid nerkoppling\"." | |
339 | ||
340 | #~ msgid "The audio input device could not be initialized" | |
341 | #~ msgstr "Ljudinenheten kunde inte initieras" | |
342 | ||
343 | #~ msgid "The video input device could not be initialized" | |
344 | #~ msgstr "Videoinenheten kunde inte initieras" | |
345 | ||
346 | #~ msgid "" | |
347 | #~ "Could not create some of the required elements. Please check your " | |
348 | #~ "GStreamer installation." | |
349 | #~ msgstr "" | |
350 | #~ "Vissa nödvändiga element kunde inte skapas. Kontrollera installationen av " | |
351 | #~ "Gstreamer." | |
352 | ||
353 | #~ msgid "The audio output device could not be initialized" | |
354 | #~ msgstr "Ljudutenheten kunde inte initieras" | |
355 | ||
356 | #~ msgctxt "@action:inmenu" | |
357 | #~ msgid "Show participants" | |
358 | #~ msgstr "Visa deltagare" | |
359 | ||
360 | #~ msgctxt "@action:inmenu" | |
361 | #~ msgid "Show log" | |
362 | #~ msgstr "Visa logg" | |
363 | ||
364 | #~ msgctxt "@action" | |
365 | #~ msgid "Stop sending video" | |
366 | #~ msgstr "Stoppa skicka video" | |
367 | ||
368 | #~ msgctxt "@action:inmenu" | |
369 | #~ msgid "Status" | |
370 | #~ msgstr "Status" | |
371 | ||
372 | #~ msgctxt "@action:inmenu" | |
373 | #~ msgid "Available" | |
374 | #~ msgstr "Tillgänglig" | |
375 | ||
376 | #~ msgctxt "@action:inmenu" | |
377 | #~ msgid "Away" | |
378 | #~ msgstr "Borta" | |
379 | ||
380 | #~ msgctxt "@action:inmenu" | |
381 | #~ msgid "Be right back" | |
382 | #~ msgstr "Snart tillbaka" | |
383 | ||
384 | #~ msgctxt "@action:inmenu" | |
385 | #~ msgid "Busy" | |
386 | #~ msgstr "Upptagen" | |
387 | ||
388 | #~ msgctxt "@action:inmenu" | |
389 | #~ msgid "Do not disturb" | |
390 | #~ msgstr "Stör inte" | |
391 | ||
392 | #~ msgctxt "@action:inmenu" | |
393 | #~ msgid "Extended Away" | |
394 | #~ msgstr "Borta en längre tid" | |
395 | ||
396 | #~ msgctxt "@action:inmenu" | |
397 | #~ msgid "Invisible" | |
398 | #~ msgstr "Osynlig" | |
399 | ||
400 | #~ msgctxt "@action:inmenu" | |
401 | #~ msgid "Offline" | |
402 | #~ msgstr "Nerkopplad" | |
403 | ||
404 | #~ msgctxt "@info:status" | |
405 | #~ msgid "Waiting for account information..." | |
406 | #~ msgstr "Väntar på kontoinformation..." | |
407 | ||
408 | #~ msgctxt "protocol - display name (Connecting)" | |
409 | #~ msgid "%1 - %2 (Connecting)" | |
410 | #~ msgstr "%1 - %2 (ansluter)" | |
411 | ||
412 | #~ msgctxt "protocol - display name" | |
413 | #~ msgid "%1 - %2" | |
414 | #~ msgstr "%1 - %2" | |
415 | ||
416 | #~ msgctxt "@title:window" | |
417 | #~ msgid "KCall" | |
418 | #~ msgstr "Kcall" | |
419 | ||
420 | #~ msgctxt "@info:status" | |
421 | #~ msgid "Connected" | |
422 | #~ msgstr "Ansluten" | |
423 | ||
424 | #~ msgctxt "@action" | |
425 | #~ msgid "Disconnect" | |
426 | #~ msgstr "Koppla ner" | |
427 | ||
428 | #~ msgctxt "@action" | |
429 | #~ msgid "Cancel connection attempt" | |
430 | #~ msgstr "Avbryt anslutningsförsök" | |
431 | ||
432 | #~ msgctxt "@action" | |
433 | #~ msgid "Connect" | |
434 | #~ msgstr "Anslut" | |
435 | ||
436 | #~ msgid "" | |
437 | #~ "You have requested to close KCall. Note that KCall will not actually " | |
438 | #~ "quit, but it will stay active in the system tray waiting for incoming " | |
439 | #~ "calls." | |
440 | #~ msgstr "" | |
441 | #~ "Du har begärt att avsluta Kcall. Observera att Kcall inte verkligen " | |
442 | #~ "avslutas, utan förblir aktivt i systembrickan och väntar på inkommande " | |
443 | #~ "samtal." | |
444 | ||
445 | #~ msgid "Volume" | |
446 | #~ msgstr "Volym" | |
447 | ||
448 | #~ msgid "Speakers" | |
449 | #~ msgstr "Högtalare" | |
450 | ||
451 | #~ msgid "Microphone" | |
452 | #~ msgstr "Mikrofon" | |
453 | ||
454 | #~ msgid "Video controls" | |
455 | #~ msgstr "Videokontroller" | |
456 | ||
457 | #~ msgid "Video input" | |
458 | #~ msgstr "Videoinmatning" | |
459 | ||
460 | #~ msgid "Call log" | |
461 | #~ msgstr "Samtalslogg" | |
462 | ||
463 | #~ msgid "Participants" | |
464 | #~ msgstr "Deltagare" | |
465 | ||
466 | #~ msgctxt "@title:tab" | |
467 | #~ msgid "&Contact list" | |
468 | #~ msgstr "&Kontaktlista" | |
469 | ||
470 | #~ msgid "Dial directly" | |
471 | #~ msgstr "Ring direkt" | |
472 | ||
473 | #~ msgid "Account" | |
474 | #~ msgstr "Konto" | |
475 | ||
476 | #~ msgid "Contact handle" | |
477 | #~ msgstr "Kontaktgrepp" | |
478 | ||
479 | #~ msgid "Dial (Audio only)" | |
480 | #~ msgstr "Ring (bara ljud)" | |
481 | ||
482 | #~ msgid "Dial (Audio/Video)" | |
483 | #~ msgstr "Ring (ljud och video)" | |
484 | ||
485 | #~ msgctxt "@info:status" | |
486 | #~ msgid "Hanging up..." | |
487 | #~ msgstr "Lägger på..." | |
488 | ||
489 | #~ msgid "Channel closed" | |
490 | #~ msgstr "Kanal stängd" | |
491 | ||
492 | #~ msgid "Channel closed with error: %1" | |
493 | #~ msgstr "Kanal stängd med fel: %1" | |
494 | ||
495 | #~ msgid "Audio stream created. Stream id: %1." | |
496 | #~ msgstr "Ljudström skapad. Strömidentifierare: %1." | |
497 | ||
498 | #~ msgid "Video stream created. Stream id: %1." | |
499 | #~ msgstr "Videoström skapad. Strömidentifierare: %1." | |
500 | ||
501 | #~ msgctxt "1 is the stream's id" | |
502 | #~ msgid "Stream %1 direction is: %2." | |
503 | #~ msgstr "Riktning för ström %1 är: %2" | |
504 | ||
505 | #~ msgctxt "1 is the stream's id" | |
506 | #~ msgid "Stream %1 removed." | |
507 | #~ msgstr "Ström %1 borttagen." | |
508 | ||
509 | #~ msgctxt "1 is the stream's id" | |
510 | #~ msgid "Stream %1 direction changed to: %2." | |
511 | #~ msgstr "Riktning för ström %1 ändrad till: %2" | |
512 | ||
513 | #~ msgctxt "1 is the stream's id" | |
514 | #~ msgid "Stream %1 state changed to: %2." | |
515 | #~ msgstr "Tillstånd för ström %1 ändrad till: %2" | |
516 | ||
517 | #~ msgid "User %1 joined the conference." | |
518 | #~ msgstr "Användaren %1 gick med i konferensen." | |
519 | ||
520 | #~ msgid "Awaiting answer from user %1." | |
521 | #~ msgstr "Väntar på svar från användaren %1." | |
522 | ||
523 | #~ msgid "User %1 left the conference." | |
524 | #~ msgstr "Användaren %1 lämnade konferensen." | |
525 | ||
526 | #~ msgid "Audio input device" | |
527 | #~ msgstr "Ljudinenhet" | |
528 | ||
529 | #~ msgid "Audio output device" | |
530 | #~ msgstr "Ljudutenhet" | |
531 | ||
532 | #~ msgid "Video input device" | |
533 | #~ msgstr "Videoinenhet" | |
534 | ||
535 | #~ msgid "Video output driver" | |
536 | #~ msgstr "Drivrutin för videoutmatning" | |
537 | ||
538 | #~ msgid "Xv video renderer" | |
539 | #~ msgstr "Xv-videoåtergivning" | |
540 | ||
541 | #~ msgid "X11 video renderer" | |
542 | #~ msgstr "X11-videoåtergivning" | |
543 | ||
544 | #~ msgid "Autodetect" | |
545 | #~ msgstr "Detektera automatiskt" | |
546 | ||
547 | #~ msgid "Test input device" | |
548 | #~ msgstr "Prova inenhet" | |
549 | ||
550 | #~ msgctxt "autodetected audio or video system" | |
551 | #~ msgid "Autodetected" | |
552 | #~ msgstr "Automatiskt detekterat" | |
553 | ||
554 | #~ msgid "ALSA" | |
555 | #~ msgstr "ALSA" | |
556 | ||
557 | #~ msgid "OSS" | |
558 | #~ msgstr "OSS" | |
559 | ||
560 | #~ msgid "JACK" | |
561 | #~ msgstr "JACK" | |
562 | ||
563 | #~ msgid "PULSE" | |
564 | #~ msgstr "PULSE" | |
565 | ||
566 | #~ msgid "Video4Linux" | |
567 | #~ msgstr "Video4Linux" | |
568 | ||
569 | #~ msgid "Device name" | |
570 | #~ msgstr "Enhetsnamn" | |
571 | ||
572 | #~ msgid "Sound system" | |
573 | #~ msgstr "Ljudsystem" | |
574 | ||
575 | #~ msgid "Video system" | |
576 | #~ msgstr "Videosystem" | |
577 | ||
578 | #~ msgid "Gstreamer element" | |
579 | #~ msgstr "Gstreamer-element" | |
580 | ||
581 | #~ msgid "Driver-specific handle" | |
582 | #~ msgstr "Drivrutinspecifik hantering" | |
583 | ||
584 | #~ msgctxt "test the device" | |
585 | #~ msgid "Test" | |
586 | #~ msgstr "Prova" | |
587 | ||
588 | #~ msgid "Add custom device..." | |
589 | #~ msgstr "Lägg till egen enhet..." | |
590 | ||
591 | #~ msgid "" | |
592 | #~ "The gstreamer element for the selected device could not be created. " | |
593 | #~ "Please check your gstreamer installation." | |
594 | #~ msgstr "" | |
595 | #~ "Gstreamer-elementet för vald enhet kunde inte skapas. Kontrollera " | |
596 | #~ "installationen av Gstreamer." | |
597 | ||
598 | #~ msgid "" | |
599 | #~ "The selected device could not be initialized. Please select another " | |
600 | #~ "device." | |
601 | #~ msgstr "Den valda enheten kunde inte initieras. Välj en annan enhet." | |
602 | ||
603 | #~ msgid "" | |
604 | #~ "The gstreamer element for the audio output device could not be created. " | |
605 | #~ "Please check your gstreamer installation" | |
606 | #~ msgstr "" | |
607 | #~ "Gstreamer-elementet för ljudutenheten kunde inte skapas. Kontrollera " | |
608 | #~ "installationen av Gstreamer." | |
609 | ||
610 | #~ msgid "The audio output device could not be initialized." | |
611 | #~ msgstr "Ljudutenheten kunde inte initieras." | |
612 | ||
613 | #~ msgid "The video output driver could not be initialized." | |
614 | #~ msgstr "Drivrutinen för videoutmatning kunde inte initieras." | |
615 | ||
616 | #~ msgid "" | |
617 | #~ "The selected video output driver could not be initialized. Please select " | |
618 | #~ "another driver." | |
619 | #~ msgstr "" | |
620 | #~ "Den valda drivrutinen för videoutmatning kunde inte initieras. Välj en " | |
621 | #~ "annan enhet." | |
622 | ||
623 | #~ msgctxt "stop audio/video test" | |
624 | #~ msgid "Stop test" | |
625 | #~ msgstr "Stoppa prov" | |
626 | ||
627 | #~ msgid "Hide details" | |
628 | #~ msgstr "Dölj detaljinformation" | |
629 | ||
630 | #~ msgid "Automatically close the call window after a timeout" | |
631 | #~ msgstr "Stäng automatiskt samtalsfönstret efter tidsgräns gått ut" | |
632 | ||
633 | #~ msgid "Timeout in seconds:" | |
634 | #~ msgstr "Tidsgräns i sekunder:" | |
635 | ||
636 | #~ msgid "" | |
637 | #~ "The gstreamer element for the audio input device could not be created. " | |
638 | #~ "Please check your gstreamer installation" | |
639 | #~ msgstr "" | |
640 | #~ "Gstreamer-elementet för ljudinenheten kunde inte skapas. Kontrollera " | |
641 | #~ "installationen av Gstreamer." | |
642 | ||
643 | #~ msgid "" | |
644 | #~ "The gstreamer element for the video input device could not be created. " | |
645 | #~ "Please check your gstreamer installation." | |
646 | #~ msgstr "" | |
647 | #~ "Gstreamer-elementet för videoinenheten kunde inte skapas. Kontrollera " | |
648 | #~ "installationen av Gstreamer." | |
649 | ||
650 | #~ msgid "Could not initialize the channel" | |
651 | #~ msgstr "Kunde inte initiera kanalen" | |
652 | ||
653 | #~ msgid "Ignore" | |
654 | #~ msgstr "Ignorera" | |
655 | ||
656 | #~ msgid "Form" | |
657 | #~ msgstr "Formulär" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( th ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Phuwanat Sakornsakolpat <narachai@gmail.com>, 2010. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2010-12-06 14:47+0700\n" | |
10 | "Last-Translator: Phuwanat Sakornsakolpat <narachai@gmail.com>\n" | |
11 | "Language-Team: Thai <thai-l10n@googlegroups.com>\n" | |
12 | "Language: th\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 1.0\n" | |
17 | "Plural-Forms: nplurals=1; plural=0;\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | #, fuzzy | |
30 | #| msgctxt "@action:inmenu" | |
31 | #| msgid "Voice call" | |
32 | msgid "Incoming call" | |
33 | msgstr "โทรศัพท์" | |
34 | ||
35 | #: src/approver.cpp:42 | |
36 | #, kde-format | |
37 | msgid "<p>%1 is calling you</p>" | |
38 | msgstr "" | |
39 | ||
40 | #: src/approver.cpp:58 src/approver.cpp:80 | |
41 | msgctxt "action, answers the incoming call" | |
42 | msgid "Answer" | |
43 | msgstr "" | |
44 | ||
45 | #: src/approver.cpp:59 src/approver.cpp:82 | |
46 | msgctxt "action, rejects the incoming call" | |
47 | msgid "Reject" | |
48 | msgstr "" | |
49 | ||
50 | #: src/call-window.cpp:95 | |
51 | #, kde-format | |
52 | msgid "Call with %1" | |
53 | msgstr "" | |
54 | ||
55 | #: src/call-window.cpp:109 | |
56 | msgctxt "@info:status" | |
57 | msgid "Connecting..." | |
58 | msgstr "กำลังเชื่อมต่อ..." | |
59 | ||
60 | #: src/call-window.cpp:113 | |
61 | #, fuzzy | |
62 | #| msgctxt "@info:status" | |
63 | #| msgid "Ringing..." | |
64 | msgctxt "@info:status the remote user's phone is ringing" | |
65 | msgid "Ringing..." | |
66 | msgstr "มีสายเข้า..." | |
67 | ||
68 | #: src/call-window.cpp:117 | |
69 | msgctxt "@info:status" | |
70 | msgid "Remote user accepted the call, waiting for connection..." | |
71 | msgstr "" | |
72 | ||
73 | #: src/call-window.cpp:120 | |
74 | msgctxt "@info:status" | |
75 | msgid "Talking..." | |
76 | msgstr "กำลังพูด..." | |
77 | ||
78 | #: src/call-window.cpp:136 | |
79 | msgctxt "@info:status" | |
80 | msgid "Remote contact ended the call." | |
81 | msgstr "" | |
82 | ||
83 | #: src/call-window.cpp:143 | |
84 | msgctxt "@info:status" | |
85 | msgid "Remote contact rejected the call." | |
86 | msgstr "" | |
87 | ||
88 | #: src/call-window.cpp:148 | |
89 | msgctxt "@info:status" | |
90 | msgid "Remote contact didn't answer." | |
91 | msgstr "" | |
92 | ||
93 | #: src/call-window.cpp:152 | |
94 | msgctxt "@info:status" | |
95 | msgid "Invalid number or contact." | |
96 | msgstr "" | |
97 | ||
98 | #: src/call-window.cpp:156 | |
99 | msgctxt "@info:status" | |
100 | msgid "You don't have enough balance to make this call." | |
101 | msgstr "" | |
102 | ||
103 | #: src/call-window.cpp:158 | |
104 | msgctxt "@info:status" | |
105 | msgid "You don't have permission to make this call." | |
106 | msgstr "" | |
107 | ||
108 | #: src/call-window.cpp:163 | |
109 | msgctxt "@info:status" | |
110 | msgid "Remote contact is currently busy." | |
111 | msgstr "" | |
112 | ||
113 | #: src/call-window.cpp:167 | |
114 | msgctxt "@info:status" | |
115 | msgid "Internal component error." | |
116 | msgstr "" | |
117 | ||
118 | #: src/call-window.cpp:170 | |
119 | msgctxt "@info:status" | |
120 | msgid "Remote service error." | |
121 | msgstr "" | |
122 | ||
123 | #: src/call-window.cpp:173 | |
124 | msgctxt "@info:status" | |
125 | msgid "Network error." | |
126 | msgstr "" | |
127 | ||
128 | #: src/call-window.cpp:177 | |
129 | msgctxt "@info:status" | |
130 | msgid "Failed to negotiate codecs." | |
131 | msgstr "" | |
132 | ||
133 | #: src/call-window.cpp:179 | |
134 | msgctxt "@info:status" | |
135 | msgid "Unsupported media type." | |
136 | msgstr "" | |
137 | ||
138 | #: src/call-window.cpp:183 | |
139 | #, fuzzy | |
140 | #| msgctxt "@info:status" | |
141 | #| msgid "Disconnected with error." | |
142 | msgctxt "@info:status" | |
143 | msgid "Connectivity error." | |
144 | msgstr "ยุติการเชื่อมต่อเพราะมีข้อผิดพลาด" | |
145 | ||
146 | #: src/call-window.cpp:187 | |
147 | #, fuzzy | |
148 | #| msgctxt "Unknown audio or video system" | |
149 | #| msgid "Unknown" | |
150 | msgctxt "@info:status" | |
151 | msgid "Unknown error." | |
152 | msgstr "ไม่ทราบ" | |
153 | ||
154 | #: src/call-window.cpp:192 | |
155 | msgctxt "@info:status" | |
156 | msgid "Disconnected." | |
157 | msgstr "ถูกตัดการเชื่อมต่อ" | |
158 | ||
159 | #: src/call-window.cpp:196 | |
160 | #, fuzzy, kde-format | |
161 | #| msgctxt "@info:status" | |
162 | #| msgid "Disconnected" | |
163 | msgctxt "@info:status the call was disconnected because..." | |
164 | msgid "Disconnected: %1" | |
165 | msgstr "ถูกตัดการเชื่อมต่อ" | |
166 | ||
167 | #: src/call-window.cpp:339 | |
168 | #, fuzzy | |
169 | #| msgctxt "@action" | |
170 | #| msgid "Send video" | |
171 | msgctxt "@action" | |
172 | msgid "Show my video" | |
173 | msgstr "ส่งวิดีโอ" | |
174 | ||
175 | #: src/call-window.cpp:344 | |
176 | #, fuzzy | |
177 | #| msgid "Show details" | |
178 | msgctxt "@action" | |
179 | msgid "Show dialpad" | |
180 | msgstr "แสดงรายละเอียด" | |
181 | ||
182 | #: src/call-window.cpp:351 | |
183 | msgctxt "@action" | |
184 | msgid "Send video" | |
185 | msgstr "ส่งวิดีโอ" | |
186 | ||
187 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
188 | msgctxt "@action" | |
189 | msgid "Mute" | |
190 | msgstr "" | |
191 | ||
192 | #: src/call-window.cpp:363 | |
193 | msgctxt "@action" | |
194 | msgid "Hold" | |
195 | msgstr "" | |
196 | ||
197 | #: src/call-window.cpp:368 | |
198 | msgctxt "@action" | |
199 | msgid "Hangup" | |
200 | msgstr "" | |
201 | ||
202 | #: src/main.cpp:36 | |
203 | msgid "KDE Telepathy Call Ui" | |
204 | msgstr "" | |
205 | ||
206 | #: src/main.cpp:37 | |
207 | msgid "VoIP client for KDE" | |
208 | msgstr "ลูกข่าย VoIP สำหรับ KDE" | |
209 | ||
210 | #: src/main.cpp:38 | |
211 | msgid "(C) 2009, George Kiagiadakis" | |
212 | msgstr "สงวนลิขสิทธิ์ 2552 โดย George Kiagiadakis" | |
213 | ||
214 | #: src/main.cpp:40 | |
215 | msgctxt "@info:credit" | |
216 | msgid "George Kiagiadakis" | |
217 | msgstr "George Kiagiadakis" | |
218 | ||
219 | #: rc.cpp:1 | |
220 | msgctxt "NAME OF TRANSLATORS" | |
221 | msgid "Your names" | |
222 | msgstr "" | |
223 | ||
224 | #: rc.cpp:2 | |
225 | msgctxt "EMAIL OF TRANSLATORS" | |
226 | msgid "Your emails" | |
227 | msgstr "" | |
228 | ||
229 | #. i18n: file: src/callwindowui.rc:11 | |
230 | #. i18n: ectx: Menu (call) | |
231 | #: rc.cpp:5 | |
232 | msgid "Call" | |
233 | msgstr "โทร" | |
234 | ||
235 | #. i18n: file: src/callwindowui.rc:20 | |
236 | #. i18n: ectx: Menu (media) | |
237 | #: rc.cpp:8 | |
238 | msgid "Media" | |
239 | msgstr "" | |
240 | ||
241 | #. i18n: file: src/callwindowui.rc:27 | |
242 | #. i18n: ectx: ToolBar (mainToolBar) | |
243 | #: rc.cpp:11 | |
244 | msgid "Main Toolbar" | |
245 | msgstr "แถบเครื่องมือหลัก" | |
246 | ||
247 | #. i18n: file: src/dtmf-widget.ui:17 | |
248 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
249 | #: rc.cpp:14 | |
250 | msgid "1" | |
251 | msgstr "" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:24 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
255 | #: rc.cpp:17 | |
256 | msgid "2" | |
257 | msgstr "" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:31 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
261 | #: rc.cpp:20 | |
262 | msgid "3" | |
263 | msgstr "" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:38 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
267 | #: rc.cpp:23 | |
268 | msgid "4" | |
269 | msgstr "" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:45 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
273 | #: rc.cpp:26 | |
274 | msgid "5" | |
275 | msgstr "" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:52 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
279 | #: rc.cpp:29 | |
280 | msgid "6" | |
281 | msgstr "" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:59 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
285 | #: rc.cpp:32 | |
286 | msgid "7" | |
287 | msgstr "" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:66 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
291 | #: rc.cpp:35 | |
292 | msgid "8" | |
293 | msgstr "" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:73 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
297 | #: rc.cpp:38 | |
298 | msgid "9" | |
299 | msgstr "" | |
300 | ||
301 | #. i18n: file: src/dtmf-widget.ui:80 | |
302 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
303 | #: rc.cpp:41 | |
304 | msgid "*" | |
305 | msgstr "" | |
306 | ||
307 | #. i18n: file: src/dtmf-widget.ui:87 | |
308 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
309 | #: rc.cpp:44 | |
310 | msgid "0" | |
311 | msgstr "" | |
312 | ||
313 | #. i18n: file: src/dtmf-widget.ui:94 | |
314 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
315 | #: rc.cpp:47 | |
316 | msgid "#" | |
317 | msgstr "" | |
318 | ||
319 | #~ msgid "Warning: %1" | |
320 | #~ msgstr "คำเตือน: %1" | |
321 | ||
322 | #~ msgid "Error: %1" | |
323 | #~ msgstr "ข้อผิดพลาด: %1" | |
324 | ||
325 | #~ msgid "KCall" | |
326 | #~ msgstr "KCall" | |
327 | ||
328 | #~ msgid "Brightness" | |
329 | #~ msgstr "ความสว่าง" | |
330 | ||
331 | #~ msgid "Contrast" | |
332 | #~ msgstr "ความเปรียบต่าง" | |
333 | ||
334 | #~ msgid "Hue" | |
335 | #~ msgstr "ความเข้มสี" | |
336 | ||
337 | #~ msgid "Saturation" | |
338 | #~ msgstr "ความอิ่มสี" | |
339 | ||
340 | #~ msgid "Dialpad" | |
341 | #~ msgstr "แป้นหมุน" | |
342 | ||
343 | #~ msgid "The audio input device could not be initialized" | |
344 | #~ msgstr "ไม่สามารถเริ่มอุปกรณ์นำเข้าเสียงได้" | |
345 | ||
346 | #, fuzzy | |
347 | #~| msgid "The video input device could not be initialized." | |
348 | #~ msgid "The video input device could not be initialized" | |
349 | #~ msgstr "ไม่สามารถเริ่มอุปกรณ์นำเข้าวิดีโอได้" | |
350 | ||
351 | #~ msgid "The audio output device could not be initialized" | |
352 | #~ msgstr "ไม่สามารถเริ่มอุปกรณ์ส่งออกเสียงได้" | |
353 | ||
354 | #~ msgctxt "@action:inmenu" | |
355 | #~ msgid "Show participants" | |
356 | #~ msgstr "แสดงผู้เข้าร่วม" | |
357 | ||
358 | #~ msgctxt "@action:inmenu" | |
359 | #~ msgid "Show log" | |
360 | #~ msgstr "แสดงบันทึก" | |
361 | ||
362 | #~ msgctxt "@action" | |
363 | #~ msgid "Stop sending video" | |
364 | #~ msgstr "หยุดการส่งวิดีโอ" | |
365 | ||
366 | #~ msgctxt "@action:inmenu" | |
367 | #~ msgid "Status" | |
368 | #~ msgstr "สถานะ" | |
369 | ||
370 | #~ msgctxt "@action:inmenu" | |
371 | #~ msgid "Available" | |
372 | #~ msgstr "ว่าง" | |
373 | ||
374 | #~ msgctxt "@action:inmenu" | |
375 | #~ msgid "Away" | |
376 | #~ msgstr "ไม่อยู่" | |
377 | ||
378 | #~ msgctxt "@action:inmenu" | |
379 | #~ msgid "Be right back" | |
380 | #~ msgstr "เดี๋ยวกลับมา" | |
381 | ||
382 | #~ msgctxt "@action:inmenu" | |
383 | #~ msgid "Busy" | |
384 | #~ msgstr "ยังไม่ว่าง" | |
385 | ||
386 | #~ msgctxt "@action:inmenu" | |
387 | #~ msgid "Do not disturb" | |
388 | #~ msgstr "ห้ามรบกวน" | |
389 | ||
390 | #~ msgctxt "@action:inmenu" | |
391 | #~ msgid "Invisible" | |
392 | #~ msgstr "ไม่ปรากฎตัว" | |
393 | ||
394 | #~ msgctxt "@action:inmenu" | |
395 | #~ msgid "Offline" | |
396 | #~ msgstr "ออฟไลน์" | |
397 | ||
398 | #~ msgctxt "@info:status" | |
399 | #~ msgid "Waiting for account information..." | |
400 | #~ msgstr "กำลังรอข้อมูลบัญชี..." | |
401 | ||
402 | #~ msgctxt "protocol - display name (Connecting)" | |
403 | #~ msgid "%1 - %2 (Connecting)" | |
404 | #~ msgstr "%1 - %2 (กำลังเชื่อมต่อ)" | |
405 | ||
406 | #~ msgctxt "protocol - display name" | |
407 | #~ msgid "%1 - %2" | |
408 | #~ msgstr "%1 - %2" | |
409 | ||
410 | #~ msgctxt "@title:window" | |
411 | #~ msgid "KCall" | |
412 | #~ msgstr "KCall" | |
413 | ||
414 | #~ msgctxt "@info:status" | |
415 | #~ msgid "Connected" | |
416 | #~ msgstr "เชื่อมต่อแล้ว" | |
417 | ||
418 | #~ msgctxt "@action" | |
419 | #~ msgid "Disconnect" | |
420 | #~ msgstr "ยุติการเชื่อมต่อ" | |
421 | ||
422 | #~ msgctxt "@action" | |
423 | #~ msgid "Cancel connection attempt" | |
424 | #~ msgstr "ยกเลิกการพยายามเชื่อมต่อ" | |
425 | ||
426 | #~ msgctxt "@action" | |
427 | #~ msgid "Connect" | |
428 | #~ msgstr "ติดต่อ" | |
429 | ||
430 | #~ msgid "Volume" | |
431 | #~ msgstr "ระดับเสียง" | |
432 | ||
433 | #~ msgid "Video controls" | |
434 | #~ msgstr "ควบคุมวิดีโอ" | |
435 | ||
436 | #~ msgid "Video input" | |
437 | #~ msgstr "รับวิดีโอ" | |
438 | ||
439 | #~ msgid "Call log" | |
440 | #~ msgstr "บันทึกการสนทนา" | |
441 | ||
442 | #~ msgid "Participants" | |
443 | #~ msgstr "ผู้เข้าร่วม" | |
444 | ||
445 | #~ msgctxt "@title:tab" | |
446 | #~ msgid "&Contact list" | |
447 | #~ msgstr "&รายชื่อผู้ติดต่อ" | |
448 | ||
449 | #~ msgid "Account" | |
450 | #~ msgstr "บัญชี" | |
451 | ||
452 | #~ msgid "Channel closed" | |
453 | #~ msgstr "ช่องถูกปิด" | |
454 | ||
455 | #~ msgid "Channel closed with error: %1" | |
456 | #~ msgstr "ช่องถูกปิดด้วยข้อผิดพลาด: %1" | |
457 | ||
458 | #~ msgid "User %1 joined the conference." | |
459 | #~ msgstr "ผู้ใช้ %1 เข้าร่วมการสนทนา" | |
460 | ||
461 | #~ msgid "Awaiting answer from user %1." | |
462 | #~ msgstr "รอคำตอบจากผู้ใช้ %1" | |
463 | ||
464 | #~ msgid "User %1 left the conference." | |
465 | #~ msgstr "ผู้ใช้ %1 ออกจากการสนทนา" | |
466 | ||
467 | #~ msgid "Audio input device" | |
468 | #~ msgstr "อุปกรณ์นำเข้าเสียง" | |
469 | ||
470 | #~ msgid "Audio output device" | |
471 | #~ msgstr "อุปกรณ์ส่งออกเสียง" | |
472 | ||
473 | #~ msgid "Video input device" | |
474 | #~ msgstr "อุปกรณ์นำเข้าวิดีโอ" | |
475 | ||
476 | #~ msgid "Video output driver" | |
477 | #~ msgstr "ไดรเวอร์การแสดงผลวิดีโอ" | |
478 | ||
479 | #~ msgid "Autodetect" | |
480 | #~ msgstr "ตรวจหาอัตโนมัติ" | |
481 | ||
482 | #~ msgid "Test input device" | |
483 | #~ msgstr "ทดสอบอุปกรณ์นำเข้า" | |
484 | ||
485 | #~ msgctxt "autodetected audio or video system" | |
486 | #~ msgid "Autodetected" | |
487 | #~ msgstr "ตรวจหาอัตโนมัติ" | |
488 | ||
489 | #~ msgid "Device name" | |
490 | #~ msgstr "ชื่ออุปกรณ์" | |
491 | ||
492 | #~ msgid "Sound system" | |
493 | #~ msgstr "ระบบเสียง" | |
494 | ||
495 | #~ msgid "Video system" | |
496 | #~ msgstr "ระบบวิดีโอ" | |
497 | ||
498 | #~ msgctxt "test the device" | |
499 | #~ msgid "Test" | |
500 | #~ msgstr "ทดสอบ" | |
501 | ||
502 | #~ msgid "Add custom device..." | |
503 | #~ msgstr "เพิ่มอุปกรณ์เอง..." | |
504 | ||
505 | #~ msgid "The audio output device could not be initialized." | |
506 | #~ msgstr "ไม่สามารถเริ่มอุปกรณ์ส่งออกเสียงได้" | |
507 | ||
508 | #~ msgid "The video output driver could not be initialized." | |
509 | #~ msgstr "ไม่สามารถเริ่มไดรเวอร์การแสดงผลวิดีโอได้" | |
510 | ||
511 | #~ msgid "" | |
512 | #~ "The selected video output driver could not be initialized. Please select " | |
513 | #~ "another driver." | |
514 | #~ msgstr "ไม่สามารถเริ่มไดรเวอร์การแสดงผลวิดีโอที่เลือก กรุณาเลือกอุปกรณ์อื่น" | |
515 | ||
516 | #~ msgctxt "stop audio/video test" | |
517 | #~ msgid "Stop test" | |
518 | #~ msgstr "ยุติการทดสอบ" | |
519 | ||
520 | #~ msgid "Hide details" | |
521 | #~ msgstr "ซ่อนรายละเอียด" | |
522 | ||
523 | #~ msgid "Timeout in seconds:" | |
524 | #~ msgstr "หมดเวลาอีก (วินาที):" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( tr ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Serdar Soytetir <tulliana@gmail.com>, 2009. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: kcall\n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2009-08-30 14:35+0300\n" | |
10 | "Last-Translator: Serdar Soytetir <tulliana@gmail.com>\n" | |
11 | "Language-Team: Turkish <yerellestirme@kde.org.tr>\n" | |
12 | "Language: tr\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Lokalize 0.3\n" | |
17 | "Plural-Forms: nplurals=1; plural=0;\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | #, fuzzy | |
21 | #| msgctxt "@action:inmenu" | |
22 | #| msgid "Video call" | |
23 | msgid "Incoming video call" | |
24 | msgstr "Görüntülü arama" | |
25 | ||
26 | #: src/approver.cpp:39 | |
27 | #, kde-format | |
28 | msgid "<p>%1 is asking you for a video call</p>" | |
29 | msgstr "" | |
30 | ||
31 | #: src/approver.cpp:41 | |
32 | #, fuzzy | |
33 | #| msgctxt "@action:inmenu" | |
34 | #| msgid "Voice call" | |
35 | msgid "Incoming call" | |
36 | msgstr "Sesli arama" | |
37 | ||
38 | #: src/approver.cpp:42 | |
39 | #, fuzzy, kde-format | |
40 | #| msgid "%1 is calling you" | |
41 | msgid "<p>%1 is calling you</p>" | |
42 | msgstr "%1 sizi arıyor" | |
43 | ||
44 | #: src/approver.cpp:58 src/approver.cpp:80 | |
45 | #, fuzzy | |
46 | #| msgid "Answer" | |
47 | msgctxt "action, answers the incoming call" | |
48 | msgid "Answer" | |
49 | msgstr "Yanıtla" | |
50 | ||
51 | #: src/approver.cpp:59 src/approver.cpp:82 | |
52 | msgctxt "action, rejects the incoming call" | |
53 | msgid "Reject" | |
54 | msgstr "" | |
55 | ||
56 | #: src/call-window.cpp:95 | |
57 | #, kde-format | |
58 | msgid "Call with %1" | |
59 | msgstr "" | |
60 | ||
61 | #: src/call-window.cpp:109 | |
62 | msgctxt "@info:status" | |
63 | msgid "Connecting..." | |
64 | msgstr "Bağlanılıyor..." | |
65 | ||
66 | #: src/call-window.cpp:113 | |
67 | #, fuzzy | |
68 | #| msgctxt "@info:status" | |
69 | #| msgid "Ringing..." | |
70 | msgctxt "@info:status the remote user's phone is ringing" | |
71 | msgid "Ringing..." | |
72 | msgstr "Çalıyor..." | |
73 | ||
74 | #: src/call-window.cpp:117 | |
75 | msgctxt "@info:status" | |
76 | msgid "Remote user accepted the call, waiting for connection..." | |
77 | msgstr "" | |
78 | ||
79 | #: src/call-window.cpp:120 | |
80 | msgctxt "@info:status" | |
81 | msgid "Talking..." | |
82 | msgstr "Konuşuyor..." | |
83 | ||
84 | #: src/call-window.cpp:136 | |
85 | msgctxt "@info:status" | |
86 | msgid "Remote contact ended the call." | |
87 | msgstr "" | |
88 | ||
89 | #: src/call-window.cpp:143 | |
90 | msgctxt "@info:status" | |
91 | msgid "Remote contact rejected the call." | |
92 | msgstr "" | |
93 | ||
94 | #: src/call-window.cpp:148 | |
95 | msgctxt "@info:status" | |
96 | msgid "Remote contact didn't answer." | |
97 | msgstr "" | |
98 | ||
99 | #: src/call-window.cpp:152 | |
100 | msgctxt "@info:status" | |
101 | msgid "Invalid number or contact." | |
102 | msgstr "" | |
103 | ||
104 | #: src/call-window.cpp:156 | |
105 | msgctxt "@info:status" | |
106 | msgid "You don't have enough balance to make this call." | |
107 | msgstr "" | |
108 | ||
109 | #: src/call-window.cpp:158 | |
110 | msgctxt "@info:status" | |
111 | msgid "You don't have permission to make this call." | |
112 | msgstr "" | |
113 | ||
114 | #: src/call-window.cpp:163 | |
115 | msgctxt "@info:status" | |
116 | msgid "Remote contact is currently busy." | |
117 | msgstr "" | |
118 | ||
119 | #: src/call-window.cpp:167 | |
120 | msgctxt "@info:status" | |
121 | msgid "Internal component error." | |
122 | msgstr "" | |
123 | ||
124 | #: src/call-window.cpp:170 | |
125 | msgctxt "@info:status" | |
126 | msgid "Remote service error." | |
127 | msgstr "" | |
128 | ||
129 | #: src/call-window.cpp:173 | |
130 | msgctxt "@info:status" | |
131 | msgid "Network error." | |
132 | msgstr "" | |
133 | ||
134 | #: src/call-window.cpp:177 | |
135 | msgctxt "@info:status" | |
136 | msgid "Failed to negotiate codecs." | |
137 | msgstr "" | |
138 | ||
139 | #: src/call-window.cpp:179 | |
140 | msgctxt "@info:status" | |
141 | msgid "Unsupported media type." | |
142 | msgstr "" | |
143 | ||
144 | #: src/call-window.cpp:183 | |
145 | #, fuzzy | |
146 | #| msgctxt "@info:status" | |
147 | #| msgid "Disconnected with error." | |
148 | msgctxt "@info:status" | |
149 | msgid "Connectivity error." | |
150 | msgstr "Hata nedeni ile bağlantı kesildi." | |
151 | ||
152 | #: src/call-window.cpp:187 | |
153 | #, fuzzy | |
154 | #| msgctxt "Unknown audio or video system" | |
155 | #| msgid "Unknown" | |
156 | msgctxt "@info:status" | |
157 | msgid "Unknown error." | |
158 | msgstr "Bilinmeyen" | |
159 | ||
160 | #: src/call-window.cpp:192 | |
161 | msgctxt "@info:status" | |
162 | msgid "Disconnected." | |
163 | msgstr "Bağlantı kesildi." | |
164 | ||
165 | #: src/call-window.cpp:196 | |
166 | #, fuzzy, kde-format | |
167 | #| msgctxt "@info:status" | |
168 | #| msgid "Disconnected" | |
169 | msgctxt "@info:status the call was disconnected because..." | |
170 | msgid "Disconnected: %1" | |
171 | msgstr "Bağlantı kesildi" | |
172 | ||
173 | #: src/call-window.cpp:339 | |
174 | #, fuzzy | |
175 | #| msgctxt "@action" | |
176 | #| msgid "Send video" | |
177 | msgctxt "@action" | |
178 | msgid "Show my video" | |
179 | msgstr "Video gönder" | |
180 | ||
181 | #: src/call-window.cpp:344 | |
182 | #, fuzzy | |
183 | #| msgid "Show details" | |
184 | msgctxt "@action" | |
185 | msgid "Show dialpad" | |
186 | msgstr "Ayrıntıları göster" | |
187 | ||
188 | #: src/call-window.cpp:351 | |
189 | msgctxt "@action" | |
190 | msgid "Send video" | |
191 | msgstr "Video gönder" | |
192 | ||
193 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
194 | msgctxt "@action" | |
195 | msgid "Mute" | |
196 | msgstr "" | |
197 | ||
198 | #: src/call-window.cpp:363 | |
199 | msgctxt "@action" | |
200 | msgid "Hold" | |
201 | msgstr "" | |
202 | ||
203 | #: src/call-window.cpp:368 | |
204 | msgctxt "@action" | |
205 | msgid "Hangup" | |
206 | msgstr "Kapat" | |
207 | ||
208 | #: src/main.cpp:36 | |
209 | msgid "KDE Telepathy Call Ui" | |
210 | msgstr "" | |
211 | ||
212 | #: src/main.cpp:37 | |
213 | msgid "VoIP client for KDE" | |
214 | msgstr "KDE için VoIP istemcisi" | |
215 | ||
216 | #: src/main.cpp:38 | |
217 | msgid "(C) 2009, George Kiagiadakis" | |
218 | msgstr "(C) 2009, George Kiagiadakis" | |
219 | ||
220 | #: src/main.cpp:40 | |
221 | msgctxt "@info:credit" | |
222 | msgid "George Kiagiadakis" | |
223 | msgstr "George Kiagiadakis" | |
224 | ||
225 | #: rc.cpp:1 | |
226 | msgctxt "NAME OF TRANSLATORS" | |
227 | msgid "Your names" | |
228 | msgstr "Serdar Soytetir" | |
229 | ||
230 | #: rc.cpp:2 | |
231 | msgctxt "EMAIL OF TRANSLATORS" | |
232 | msgid "Your emails" | |
233 | msgstr "tulliana@gmail.com" | |
234 | ||
235 | #. i18n: file: src/callwindowui.rc:11 | |
236 | #. i18n: ectx: Menu (call) | |
237 | #: rc.cpp:5 | |
238 | msgid "Call" | |
239 | msgstr "Ara" | |
240 | ||
241 | #. i18n: file: src/callwindowui.rc:20 | |
242 | #. i18n: ectx: Menu (media) | |
243 | #: rc.cpp:8 | |
244 | msgid "Media" | |
245 | msgstr "" | |
246 | ||
247 | #. i18n: file: src/callwindowui.rc:27 | |
248 | #. i18n: ectx: ToolBar (mainToolBar) | |
249 | #: rc.cpp:11 | |
250 | msgid "Main Toolbar" | |
251 | msgstr "Ana Araç Çubuğu" | |
252 | ||
253 | #. i18n: file: src/dtmf-widget.ui:17 | |
254 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
255 | #: rc.cpp:14 | |
256 | msgid "1" | |
257 | msgstr "1" | |
258 | ||
259 | #. i18n: file: src/dtmf-widget.ui:24 | |
260 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
261 | #: rc.cpp:17 | |
262 | msgid "2" | |
263 | msgstr "2" | |
264 | ||
265 | #. i18n: file: src/dtmf-widget.ui:31 | |
266 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
267 | #: rc.cpp:20 | |
268 | msgid "3" | |
269 | msgstr "3" | |
270 | ||
271 | #. i18n: file: src/dtmf-widget.ui:38 | |
272 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
273 | #: rc.cpp:23 | |
274 | msgid "4" | |
275 | msgstr "4" | |
276 | ||
277 | #. i18n: file: src/dtmf-widget.ui:45 | |
278 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
279 | #: rc.cpp:26 | |
280 | msgid "5" | |
281 | msgstr "5" | |
282 | ||
283 | #. i18n: file: src/dtmf-widget.ui:52 | |
284 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
285 | #: rc.cpp:29 | |
286 | msgid "6" | |
287 | msgstr "6" | |
288 | ||
289 | #. i18n: file: src/dtmf-widget.ui:59 | |
290 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
291 | #: rc.cpp:32 | |
292 | msgid "7" | |
293 | msgstr "7" | |
294 | ||
295 | #. i18n: file: src/dtmf-widget.ui:66 | |
296 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
297 | #: rc.cpp:35 | |
298 | msgid "8" | |
299 | msgstr "8" | |
300 | ||
301 | #. i18n: file: src/dtmf-widget.ui:73 | |
302 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
303 | #: rc.cpp:38 | |
304 | msgid "9" | |
305 | msgstr "9" | |
306 | ||
307 | #. i18n: file: src/dtmf-widget.ui:80 | |
308 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
309 | #: rc.cpp:41 | |
310 | msgid "*" | |
311 | msgstr "*" | |
312 | ||
313 | #. i18n: file: src/dtmf-widget.ui:87 | |
314 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
315 | #: rc.cpp:44 | |
316 | msgid "0" | |
317 | msgstr "0" | |
318 | ||
319 | #. i18n: file: src/dtmf-widget.ui:94 | |
320 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
321 | #: rc.cpp:47 | |
322 | msgid "#" | |
323 | msgstr "#" | |
324 | ||
325 | #~ msgid "Warning: %1" | |
326 | #~ msgstr "Uyarı: %1" | |
327 | ||
328 | #~ msgid "Error: %1" | |
329 | #~ msgstr "Hata: %1" | |
330 | ||
331 | #~ msgid "KCall" | |
332 | #~ msgstr "KCall" | |
333 | ||
334 | #~ msgid "Brightness" | |
335 | #~ msgstr "Parlaklık" | |
336 | ||
337 | #~ msgid "Contrast" | |
338 | #~ msgstr "Karşıtlık" | |
339 | ||
340 | #~ msgid "Hue" | |
341 | #~ msgstr "Ton" | |
342 | ||
343 | #~ msgid "Saturation" | |
344 | #~ msgstr "Doygunluk" | |
345 | ||
346 | #~ msgctxt "@action:inmenu" | |
347 | #~ msgid "Show participants" | |
348 | #~ msgstr "Katılımcıları göster" | |
349 | ||
350 | #~ msgctxt "@action:inmenu" | |
351 | #~ msgid "Show log" | |
352 | #~ msgstr "Günlük kaydını göster" | |
353 | ||
354 | #~ msgctxt "@action" | |
355 | #~ msgid "Stop sending video" | |
356 | #~ msgstr "Video göndermeyi durdur" | |
357 | ||
358 | #~ msgctxt "@action:inmenu" | |
359 | #~ msgid "Status" | |
360 | #~ msgstr "Durum" | |
361 | ||
362 | #~ msgctxt "@action:inmenu" | |
363 | #~ msgid "Available" | |
364 | #~ msgstr "Kullanılabilir" | |
365 | ||
366 | #~ msgctxt "@action:inmenu" | |
367 | #~ msgid "Away" | |
368 | #~ msgstr "Uzakta" | |
369 | ||
370 | #~ msgctxt "@action:inmenu" | |
371 | #~ msgid "Be right back" | |
372 | #~ msgstr "Geri döneceğim" | |
373 | ||
374 | #~ msgctxt "@action:inmenu" | |
375 | #~ msgid "Busy" | |
376 | #~ msgstr "Meşgul" | |
377 | ||
378 | #, fuzzy | |
379 | #~| msgctxt "@action:inmenu" | |
380 | #~| msgid "Do not distrurb" | |
381 | #~ msgctxt "@action:inmenu" | |
382 | #~ msgid "Do not disturb" | |
383 | #~ msgstr "Rahatsız etmeyin" | |
384 | ||
385 | #~ msgctxt "@action:inmenu" | |
386 | #~ msgid "Extended Away" | |
387 | #~ msgstr "Uzatılmış Uzakta" | |
388 | ||
389 | #~ msgctxt "@action:inmenu" | |
390 | #~ msgid "Invisible" | |
391 | #~ msgstr "Görünmez" | |
392 | ||
393 | #~ msgctxt "@action:inmenu" | |
394 | #~ msgid "Offline" | |
395 | #~ msgstr "Çevrimdışı" | |
396 | ||
397 | #~ msgctxt "@info:status" | |
398 | #~ msgid "Waiting for account information..." | |
399 | #~ msgstr "Hesap bilgileri bekleniyor..." | |
400 | ||
401 | #~ msgctxt "protocol - display name (Connecting)" | |
402 | #~ msgid "%1 - %2 (Connecting)" | |
403 | #~ msgstr "%1 - %2 (Bağlanılıyor)" | |
404 | ||
405 | #~ msgctxt "protocol - display name" | |
406 | #~ msgid "%1 - %2" | |
407 | #~ msgstr "%1 - %2" | |
408 | ||
409 | #~ msgctxt "@title:window" | |
410 | #~ msgid "KCall" | |
411 | #~ msgstr "KCall" | |
412 | ||
413 | #~ msgctxt "@info:status" | |
414 | #~ msgid "Connected" | |
415 | #~ msgstr "Bağlandı" | |
416 | ||
417 | #~ msgctxt "@action" | |
418 | #~ msgid "Disconnect" | |
419 | #~ msgstr "Bağlantıyı kes" | |
420 | ||
421 | #~ msgctxt "@action" | |
422 | #~ msgid "Cancel connection attempt" | |
423 | #~ msgstr "Bağlanma denemesini iptal et" | |
424 | ||
425 | #~ msgctxt "@action" | |
426 | #~ msgid "Connect" | |
427 | #~ msgstr "Bağlan" | |
428 | ||
429 | #~ msgid "Volume" | |
430 | #~ msgstr "Ses Düzeyi" | |
431 | ||
432 | #~ msgid "Speakers" | |
433 | #~ msgstr "Hoparlörler" | |
434 | ||
435 | #~ msgid "Microphone" | |
436 | #~ msgstr "Mikrofon" | |
437 | ||
438 | #~ msgid "Video controls" | |
439 | #~ msgstr "Video denetimleri" | |
440 | ||
441 | #~ msgid "Video input" | |
442 | #~ msgstr "Video girişi" | |
443 | ||
444 | #~ msgid "Call log" | |
445 | #~ msgstr "Arama günlük kaydı" | |
446 | ||
447 | #~ msgid "Participants" | |
448 | #~ msgstr "Katılımcılar" | |
449 | ||
450 | #~ msgctxt "@title:tab" | |
451 | #~ msgid "&Contact list" | |
452 | #~ msgstr "&Kişi listesi" | |
453 | ||
454 | #~ msgid "Dial directly" | |
455 | #~ msgstr "Doğrudan çevir" | |
456 | ||
457 | #~ msgid "Account" | |
458 | #~ msgstr "Hesap" | |
459 | ||
460 | #~ msgid "Dial (Audio only)" | |
461 | #~ msgstr "Ara (Sadece ses)" | |
462 | ||
463 | #~ msgid "Dial (Audio/Video)" | |
464 | #~ msgstr "Ara (Ses/Görüntü)" | |
465 | ||
466 | #~ msgctxt "@info:status" | |
467 | #~ msgid "Hanging up..." | |
468 | #~ msgstr "Kapatılıyor..." | |
469 | ||
470 | #~ msgid "Channel closed" | |
471 | #~ msgstr "Kanal kapatıldı" | |
472 | ||
473 | #~ msgid "Channel closed with error: %1" | |
474 | #~ msgstr "Kanal bir hata nedeniyle kapatıldı: %1" | |
475 | ||
476 | #~ msgid "Audio input device" | |
477 | #~ msgstr "Ses giriş aygıtı" | |
478 | ||
479 | #~ msgid "Audio output device" | |
480 | #~ msgstr "Ses çıktı aygıtı" | |
481 | ||
482 | #~ msgid "Video input device" | |
483 | #~ msgstr "Video giriş aygıtı" | |
484 | ||
485 | #~ msgid "Video output driver" | |
486 | #~ msgstr "Video çıkış aygıtı" | |
487 | ||
488 | #~ msgid "Xv video renderer" | |
489 | #~ msgstr "Xv video hazırlayıcı" | |
490 | ||
491 | #~ msgid "X11 video renderer" | |
492 | #~ msgstr "X11 video hazırlayıcı" | |
493 | ||
494 | #~ msgid "Autodetect" | |
495 | #~ msgstr "Otomatik bul" | |
496 | ||
497 | #~ msgid "Test input device" | |
498 | #~ msgstr "Giriş aygıtını dene" | |
499 | ||
500 | #~ msgctxt "autodetected audio or video system" | |
501 | #~ msgid "Autodetected" | |
502 | #~ msgstr "Otomatik bulunan" | |
503 | ||
504 | #~ msgid "ALSA" | |
505 | #~ msgstr "ALSA" | |
506 | ||
507 | #~ msgid "OSS" | |
508 | #~ msgstr "OSS" | |
509 | ||
510 | #~ msgid "JACK" | |
511 | #~ msgstr "JACK" | |
512 | ||
513 | #~ msgid "PULSE" | |
514 | #~ msgstr "PULSE" | |
515 | ||
516 | #~ msgid "Video4Linux" | |
517 | #~ msgstr "Video4Linux" | |
518 | ||
519 | #~ msgid "Device name" | |
520 | #~ msgstr "Aygıt adı" | |
521 | ||
522 | #~ msgid "Sound system" | |
523 | #~ msgstr "Ses sistemi" | |
524 | ||
525 | #~ msgid "Video system" | |
526 | #~ msgstr "Video sistemi" | |
527 | ||
528 | #~ msgid "Gstreamer element" | |
529 | #~ msgstr "Gstreamer ögesi" | |
530 | ||
531 | #~ msgctxt "test the device" | |
532 | #~ msgid "Test" | |
533 | #~ msgstr "Dene" | |
534 | ||
535 | #~ msgid "Add custom device..." | |
536 | #~ msgstr "Özel aygıt ekle..." | |
537 | ||
538 | #~ msgctxt "stop audio/video test" | |
539 | #~ msgid "Stop test" | |
540 | #~ msgstr "Denemeyi durdur" | |
541 | ||
542 | #~ msgid "Hide details" | |
543 | #~ msgstr "Ayrıntıları gizle" | |
544 | ||
545 | #~ msgid "Ignore" | |
546 | #~ msgstr "Yoksay" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( ug ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Uyghur translation for kcall. | |
1 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # Sahran <sahran.ug@gmail.com>, 2011. | |
4 | # | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: kcall\n" | |
8 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
9 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
10 | "PO-Revision-Date: 2011-05-09 19:00+0900\n" | |
11 | "Last-Translator: Sahran <sahran@live.com>\n" | |
12 | "Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n" | |
13 | "Language: \n" | |
14 | "MIME-Version: 1.0\n" | |
15 | "Content-Type: text/plain; charset=UTF-8\n" | |
16 | "Content-Transfer-Encoding: 8bit\n" | |
17 | "Plural-Forms: nplurals=1; plural=0;\n" | |
18 | ||
19 | #: src/approver.cpp:38 | |
20 | msgid "Incoming video call" | |
21 | msgstr "" | |
22 | ||
23 | #: src/approver.cpp:39 | |
24 | #, kde-format | |
25 | msgid "<p>%1 is asking you for a video call</p>" | |
26 | msgstr "" | |
27 | ||
28 | #: src/approver.cpp:41 | |
29 | msgid "Incoming call" | |
30 | msgstr "" | |
31 | ||
32 | #: src/approver.cpp:42 | |
33 | #, kde-format | |
34 | msgid "<p>%1 is calling you</p>" | |
35 | msgstr "" | |
36 | ||
37 | #: src/approver.cpp:58 src/approver.cpp:80 | |
38 | msgctxt "action, answers the incoming call" | |
39 | msgid "Answer" | |
40 | msgstr "" | |
41 | ||
42 | #: src/approver.cpp:59 src/approver.cpp:82 | |
43 | msgctxt "action, rejects the incoming call" | |
44 | msgid "Reject" | |
45 | msgstr "" | |
46 | ||
47 | #: src/call-window.cpp:95 | |
48 | #, kde-format | |
49 | msgid "Call with %1" | |
50 | msgstr "" | |
51 | ||
52 | #: src/call-window.cpp:109 | |
53 | msgctxt "@info:status" | |
54 | msgid "Connecting..." | |
55 | msgstr "باغلىنىۋاتىدۇ…" | |
56 | ||
57 | #: src/call-window.cpp:113 | |
58 | #, fuzzy | |
59 | #| msgctxt "@info:status" | |
60 | #| msgid "Connecting..." | |
61 | msgctxt "@info:status the remote user's phone is ringing" | |
62 | msgid "Ringing..." | |
63 | msgstr "باغلىنىۋاتىدۇ…" | |
64 | ||
65 | #: src/call-window.cpp:117 | |
66 | msgctxt "@info:status" | |
67 | msgid "Remote user accepted the call, waiting for connection..." | |
68 | msgstr "" | |
69 | ||
70 | #: src/call-window.cpp:120 | |
71 | msgctxt "@info:status" | |
72 | msgid "Talking..." | |
73 | msgstr "" | |
74 | ||
75 | #: src/call-window.cpp:136 | |
76 | msgctxt "@info:status" | |
77 | msgid "Remote contact ended the call." | |
78 | msgstr "" | |
79 | ||
80 | #: src/call-window.cpp:143 | |
81 | msgctxt "@info:status" | |
82 | msgid "Remote contact rejected the call." | |
83 | msgstr "" | |
84 | ||
85 | #: src/call-window.cpp:148 | |
86 | msgctxt "@info:status" | |
87 | msgid "Remote contact didn't answer." | |
88 | msgstr "" | |
89 | ||
90 | #: src/call-window.cpp:152 | |
91 | msgctxt "@info:status" | |
92 | msgid "Invalid number or contact." | |
93 | msgstr "" | |
94 | ||
95 | #: src/call-window.cpp:156 | |
96 | msgctxt "@info:status" | |
97 | msgid "You don't have enough balance to make this call." | |
98 | msgstr "" | |
99 | ||
100 | #: src/call-window.cpp:158 | |
101 | msgctxt "@info:status" | |
102 | msgid "You don't have permission to make this call." | |
103 | msgstr "" | |
104 | ||
105 | #: src/call-window.cpp:163 | |
106 | msgctxt "@info:status" | |
107 | msgid "Remote contact is currently busy." | |
108 | msgstr "" | |
109 | ||
110 | #: src/call-window.cpp:167 | |
111 | msgctxt "@info:status" | |
112 | msgid "Internal component error." | |
113 | msgstr "" | |
114 | ||
115 | #: src/call-window.cpp:170 | |
116 | msgctxt "@info:status" | |
117 | msgid "Remote service error." | |
118 | msgstr "" | |
119 | ||
120 | #: src/call-window.cpp:173 | |
121 | msgctxt "@info:status" | |
122 | msgid "Network error." | |
123 | msgstr "" | |
124 | ||
125 | #: src/call-window.cpp:177 | |
126 | msgctxt "@info:status" | |
127 | msgid "Failed to negotiate codecs." | |
128 | msgstr "" | |
129 | ||
130 | #: src/call-window.cpp:179 | |
131 | msgctxt "@info:status" | |
132 | msgid "Unsupported media type." | |
133 | msgstr "" | |
134 | ||
135 | #: src/call-window.cpp:183 | |
136 | msgctxt "@info:status" | |
137 | msgid "Connectivity error." | |
138 | msgstr "" | |
139 | ||
140 | #: src/call-window.cpp:187 | |
141 | msgctxt "@info:status" | |
142 | msgid "Unknown error." | |
143 | msgstr "" | |
144 | ||
145 | #: src/call-window.cpp:192 | |
146 | msgctxt "@info:status" | |
147 | msgid "Disconnected." | |
148 | msgstr "ئۈزۈلدى." | |
149 | ||
150 | #: src/call-window.cpp:196 | |
151 | #, fuzzy, kde-format | |
152 | #| msgctxt "@info:status" | |
153 | #| msgid "Disconnected" | |
154 | msgctxt "@info:status the call was disconnected because..." | |
155 | msgid "Disconnected: %1" | |
156 | msgstr "ئۈزۈلدى" | |
157 | ||
158 | #: src/call-window.cpp:339 | |
159 | msgctxt "@action" | |
160 | msgid "Show my video" | |
161 | msgstr "" | |
162 | ||
163 | #: src/call-window.cpp:344 | |
164 | msgctxt "@action" | |
165 | msgid "Show dialpad" | |
166 | msgstr "نومۇر تاختا كۆرسەت" | |
167 | ||
168 | #: src/call-window.cpp:351 | |
169 | msgctxt "@action" | |
170 | msgid "Send video" | |
171 | msgstr "" | |
172 | ||
173 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
174 | msgctxt "@action" | |
175 | msgid "Mute" | |
176 | msgstr "ئۈنسىز" | |
177 | ||
178 | #: src/call-window.cpp:363 | |
179 | msgctxt "@action" | |
180 | msgid "Hold" | |
181 | msgstr "كۈتۈش" | |
182 | ||
183 | #: src/call-window.cpp:368 | |
184 | msgctxt "@action" | |
185 | msgid "Hangup" | |
186 | msgstr "ئېسىپ قوي" | |
187 | ||
188 | #: src/main.cpp:36 | |
189 | msgid "KDE Telepathy Call Ui" | |
190 | msgstr "" | |
191 | ||
192 | #: src/main.cpp:37 | |
193 | msgid "VoIP client for KDE" | |
194 | msgstr "" | |
195 | ||
196 | #: src/main.cpp:38 | |
197 | msgid "(C) 2009, George Kiagiadakis" | |
198 | msgstr "" | |
199 | ||
200 | #: src/main.cpp:40 | |
201 | msgctxt "@info:credit" | |
202 | msgid "George Kiagiadakis" | |
203 | msgstr "George Kiagiadakis" | |
204 | ||
205 | #: rc.cpp:1 | |
206 | msgctxt "NAME OF TRANSLATORS" | |
207 | msgid "Your names" | |
208 | msgstr "ئابدۇقادىر ئابلىز, غەيرەت كەنجى" | |
209 | ||
210 | #: rc.cpp:2 | |
211 | msgctxt "EMAIL OF TRANSLATORS" | |
212 | msgid "Your emails" | |
213 | msgstr "sahran.ug@gmail.com, gheyret@gmail.com" | |
214 | ||
215 | #. i18n: file: src/callwindowui.rc:11 | |
216 | #. i18n: ectx: Menu (call) | |
217 | #: rc.cpp:5 | |
218 | msgid "Call" | |
219 | msgstr "چاقىر" | |
220 | ||
221 | #. i18n: file: src/callwindowui.rc:20 | |
222 | #. i18n: ectx: Menu (media) | |
223 | #: rc.cpp:8 | |
224 | msgid "Media" | |
225 | msgstr "ۋاسىتە" | |
226 | ||
227 | #. i18n: file: src/callwindowui.rc:27 | |
228 | #. i18n: ectx: ToolBar (mainToolBar) | |
229 | #: rc.cpp:11 | |
230 | msgid "Main Toolbar" | |
231 | msgstr "ئاساسىي قورال بالداق" | |
232 | ||
233 | #. i18n: file: src/dtmf-widget.ui:17 | |
234 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
235 | #: rc.cpp:14 | |
236 | msgid "1" | |
237 | msgstr "1" | |
238 | ||
239 | #. i18n: file: src/dtmf-widget.ui:24 | |
240 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
241 | #: rc.cpp:17 | |
242 | msgid "2" | |
243 | msgstr "2" | |
244 | ||
245 | #. i18n: file: src/dtmf-widget.ui:31 | |
246 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
247 | #: rc.cpp:20 | |
248 | msgid "3" | |
249 | msgstr "3" | |
250 | ||
251 | #. i18n: file: src/dtmf-widget.ui:38 | |
252 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
253 | #: rc.cpp:23 | |
254 | msgid "4" | |
255 | msgstr "4" | |
256 | ||
257 | #. i18n: file: src/dtmf-widget.ui:45 | |
258 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
259 | #: rc.cpp:26 | |
260 | msgid "5" | |
261 | msgstr "5" | |
262 | ||
263 | #. i18n: file: src/dtmf-widget.ui:52 | |
264 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
265 | #: rc.cpp:29 | |
266 | msgid "6" | |
267 | msgstr "6" | |
268 | ||
269 | #. i18n: file: src/dtmf-widget.ui:59 | |
270 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
271 | #: rc.cpp:32 | |
272 | msgid "7" | |
273 | msgstr "7" | |
274 | ||
275 | #. i18n: file: src/dtmf-widget.ui:66 | |
276 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
277 | #: rc.cpp:35 | |
278 | msgid "8" | |
279 | msgstr "8" | |
280 | ||
281 | #. i18n: file: src/dtmf-widget.ui:73 | |
282 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
283 | #: rc.cpp:38 | |
284 | msgid "9" | |
285 | msgstr "9" | |
286 | ||
287 | #. i18n: file: src/dtmf-widget.ui:80 | |
288 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
289 | #: rc.cpp:41 | |
290 | msgid "*" | |
291 | msgstr "*" | |
292 | ||
293 | #. i18n: file: src/dtmf-widget.ui:87 | |
294 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
295 | #: rc.cpp:44 | |
296 | msgid "0" | |
297 | msgstr "0" | |
298 | ||
299 | #. i18n: file: src/dtmf-widget.ui:94 | |
300 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
301 | #: rc.cpp:47 | |
302 | msgid "#" | |
303 | msgstr "#" | |
304 | ||
305 | #~ msgid "Warning: %1" | |
306 | #~ msgstr "ئاگاھلاندۇرۇش: %1" | |
307 | ||
308 | #~ msgid "Error: %1" | |
309 | #~ msgstr "خاتالىق: %1" | |
310 | ||
311 | #~ msgid "Brightness" | |
312 | #~ msgstr "يورۇقلۇق" | |
313 | ||
314 | #~ msgid "Contrast" | |
315 | #~ msgstr "ئاق-قارىلىقى" | |
316 | ||
317 | #~ msgid "Hue" | |
318 | #~ msgstr "رەڭگى" | |
319 | ||
320 | #~ msgid "Saturation" | |
321 | #~ msgstr "تويۇنۇش" | |
322 | ||
323 | #~ msgid "Dialpad" | |
324 | #~ msgstr "نومۇر تاختىسى" | |
325 | ||
326 | #~ msgctxt "@action:inmenu" | |
327 | #~ msgid "Status" | |
328 | #~ msgstr "ھالەت" | |
329 | ||
330 | #~ msgctxt "@action:inmenu" | |
331 | #~ msgid "Available" | |
332 | #~ msgstr "ئىشلىتىلىشچان" | |
333 | ||
334 | #~ msgctxt "@action:inmenu" | |
335 | #~ msgid "Away" | |
336 | #~ msgstr "يوق" | |
337 | ||
338 | #~ msgctxt "@action:inmenu" | |
339 | #~ msgid "Busy" | |
340 | #~ msgstr "ئالدىراش" | |
341 | ||
342 | #~ msgctxt "@action:inmenu" | |
343 | #~ msgid "Invisible" | |
344 | #~ msgstr "يوشۇرۇن" | |
345 | ||
346 | #~ msgctxt "@action:inmenu" | |
347 | #~ msgid "Offline" | |
348 | #~ msgstr "توردا يوق" | |
349 | ||
350 | #~ msgctxt "protocol - display name" | |
351 | #~ msgid "%1 - %2" | |
352 | #~ msgstr "%1 - %2" | |
353 | ||
354 | #~ msgctxt "@info:status" | |
355 | #~ msgid "Connected" | |
356 | #~ msgstr "باغلاندى" | |
357 | ||
358 | #~ msgctxt "@action" | |
359 | #~ msgid "Disconnect" | |
360 | #~ msgstr "ئۈز" | |
361 | ||
362 | #~ msgctxt "@action" | |
363 | #~ msgid "Connect" | |
364 | #~ msgstr "باغلان" | |
365 | ||
366 | #~ msgid "Volume" | |
367 | #~ msgstr "دىسكا" | |
368 | ||
369 | #~ msgid "Speakers" | |
370 | #~ msgstr "ئاۋاز ياڭراتقۇ" | |
371 | ||
372 | #~ msgid "Microphone" | |
373 | #~ msgstr "مىكروفون" | |
374 | ||
375 | #~ msgid "Video input" | |
376 | #~ msgstr "سىن كىرگۈزۈش" | |
377 | ||
378 | #~ msgid "Account" | |
379 | #~ msgstr "ھېسابات" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( uk ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # Copyright (C) YEAR This_file_is_part_of_KDE | |
1 | # This file is distributed under the same license as the PACKAGE package. | |
2 | # | |
3 | # Yuri Chornoivan <yurchor@ukr.net>, 2012. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: \n" | |
7 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
8 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
9 | "PO-Revision-Date: 2012-05-01 10:35+0300\n" | |
10 | "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" | |
11 | "Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n" | |
12 | "Language: uk\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" | |
17 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" | |
18 | "X-Generator: Lokalize 1.5\n" | |
19 | ||
20 | #: src/approver.cpp:38 | |
21 | msgid "Incoming video call" | |
22 | msgstr "Вхідний відеодзвінок" | |
23 | ||
24 | #: src/approver.cpp:39 | |
25 | #, kde-format | |
26 | msgid "<p>%1 is asking you for a video call</p>" | |
27 | msgstr "<p>%1 запрошує вас до відеоспілкування</p>" | |
28 | ||
29 | #: src/approver.cpp:41 | |
30 | msgid "Incoming call" | |
31 | msgstr "Вхідний дзвінок" | |
32 | ||
33 | #: src/approver.cpp:42 | |
34 | #, kde-format | |
35 | msgid "<p>%1 is calling you</p>" | |
36 | msgstr "<p>Вам дзвонить %1</p>" | |
37 | ||
38 | #: src/approver.cpp:58 src/approver.cpp:80 | |
39 | msgctxt "action, answers the incoming call" | |
40 | msgid "Answer" | |
41 | msgstr "Відповісти" | |
42 | ||
43 | #: src/approver.cpp:59 src/approver.cpp:82 | |
44 | msgctxt "action, rejects the incoming call" | |
45 | msgid "Reject" | |
46 | msgstr "Відмовити" | |
47 | ||
48 | #: src/call-window.cpp:95 | |
49 | #, kde-format | |
50 | msgid "Call with %1" | |
51 | msgstr "Спілкування з %1" | |
52 | ||
53 | #: src/call-window.cpp:109 | |
54 | msgctxt "@info:status" | |
55 | msgid "Connecting..." | |
56 | msgstr "З'єднання..." | |
57 | ||
58 | #: src/call-window.cpp:113 | |
59 | msgctxt "@info:status the remote user's phone is ringing" | |
60 | msgid "Ringing..." | |
61 | msgstr "Дзвінок…" | |
62 | ||
63 | #: src/call-window.cpp:117 | |
64 | msgctxt "@info:status" | |
65 | msgid "Remote user accepted the call, waiting for connection..." | |
66 | msgstr "" | |
67 | "Вхідний дзвінок підтверджено віддаленим користувачем, очікування на " | |
68 | "з’єднання…" | |
69 | ||
70 | #: src/call-window.cpp:120 | |
71 | msgctxt "@info:status" | |
72 | msgid "Talking..." | |
73 | msgstr "Розмова..." | |
74 | ||
75 | #: src/call-window.cpp:136 | |
76 | msgctxt "@info:status" | |
77 | msgid "Remote contact ended the call." | |
78 | msgstr "Дзвінок завершено віддаленим контактом." | |
79 | ||
80 | #: src/call-window.cpp:143 | |
81 | msgctxt "@info:status" | |
82 | msgid "Remote contact rejected the call." | |
83 | msgstr "Віддаленим контактом відмовлено у вхідному дзвінку." | |
84 | ||
85 | #: src/call-window.cpp:148 | |
86 | msgctxt "@info:status" | |
87 | msgid "Remote contact didn't answer." | |
88 | msgstr "Не отримано відповіді від віддаленого контакту." | |
89 | ||
90 | #: src/call-window.cpp:152 | |
91 | msgctxt "@info:status" | |
92 | msgid "Invalid number or contact." | |
93 | msgstr "Некоректний номер або контакт." | |
94 | ||
95 | #: src/call-window.cpp:156 | |
96 | msgctxt "@info:status" | |
97 | msgid "You don't have enough balance to make this call." | |
98 | msgstr "На вашому балансі недостатньо коштів для здійснення цього дзвінка." | |
99 | ||
100 | #: src/call-window.cpp:158 | |
101 | msgctxt "@info:status" | |
102 | msgid "You don't have permission to make this call." | |
103 | msgstr "У вас немає прав на здійснення цього дзвінка." | |
104 | ||
105 | #: src/call-window.cpp:163 | |
106 | msgctxt "@info:status" | |
107 | msgid "Remote contact is currently busy." | |
108 | msgstr "Віддалений контакт зараз не може відповісти." | |
109 | ||
110 | #: src/call-window.cpp:167 | |
111 | msgctxt "@info:status" | |
112 | msgid "Internal component error." | |
113 | msgstr "Помилка внутрішнього компонента." | |
114 | ||
115 | #: src/call-window.cpp:170 | |
116 | msgctxt "@info:status" | |
117 | msgid "Remote service error." | |
118 | msgstr "Помилка віддаленої служби." | |
119 | ||
120 | #: src/call-window.cpp:173 | |
121 | msgctxt "@info:status" | |
122 | msgid "Network error." | |
123 | msgstr "Помилка мережі." | |
124 | ||
125 | #: src/call-window.cpp:177 | |
126 | msgctxt "@info:status" | |
127 | msgid "Failed to negotiate codecs." | |
128 | msgstr "Не вдалося узгодити кодеки." | |
129 | ||
130 | #: src/call-window.cpp:179 | |
131 | msgctxt "@info:status" | |
132 | msgid "Unsupported media type." | |
133 | msgstr "Непідтримуваний тип носія даних." | |
134 | ||
135 | #: src/call-window.cpp:183 | |
136 | msgctxt "@info:status" | |
137 | msgid "Connectivity error." | |
138 | msgstr "Помилка під час спроби з’єднання." | |
139 | ||
140 | #: src/call-window.cpp:187 | |
141 | msgctxt "@info:status" | |
142 | msgid "Unknown error." | |
143 | msgstr "Невідома помилка." | |
144 | ||
145 | #: src/call-window.cpp:192 | |
146 | msgctxt "@info:status" | |
147 | msgid "Disconnected." | |
148 | msgstr "Роз'єднано." | |
149 | ||
150 | #: src/call-window.cpp:196 | |
151 | #, kde-format | |
152 | msgctxt "@info:status the call was disconnected because..." | |
153 | msgid "Disconnected: %1" | |
154 | msgstr "Від’єднано: %1" | |
155 | ||
156 | #: src/call-window.cpp:339 | |
157 | msgctxt "@action" | |
158 | msgid "Show my video" | |
159 | msgstr "Показати моє відео" | |
160 | ||
161 | #: src/call-window.cpp:344 | |
162 | msgctxt "@action" | |
163 | msgid "Show dialpad" | |
164 | msgstr "Показати панель набору номера" | |
165 | ||
166 | #: src/call-window.cpp:351 | |
167 | msgctxt "@action" | |
168 | msgid "Send video" | |
169 | msgstr "Надіслати відео" | |
170 | ||
171 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
172 | msgctxt "@action" | |
173 | msgid "Mute" | |
174 | msgstr "Вимкнути звук" | |
175 | ||
176 | #: src/call-window.cpp:363 | |
177 | msgctxt "@action" | |
178 | msgid "Hold" | |
179 | msgstr "Утримувати зв’язок" | |
180 | ||
181 | #: src/call-window.cpp:368 | |
182 | msgctxt "@action" | |
183 | msgid "Hangup" | |
184 | msgstr "Повісити слухавку" | |
185 | ||
186 | #: src/main.cpp:36 | |
187 | msgid "KDE Telepathy Call Ui" | |
188 | msgstr "Інтерфейс здійснення дзвінків KDE Telepathy" | |
189 | ||
190 | #: src/main.cpp:37 | |
191 | msgid "VoIP client for KDE" | |
192 | msgstr "Клієнт VoIP для KDE" | |
193 | ||
194 | #: src/main.cpp:38 | |
195 | msgid "(C) 2009, George Kiagiadakis" | |
196 | msgstr "© George Kiagiadakis, 2009" | |
197 | ||
198 | #: src/main.cpp:40 | |
199 | msgctxt "@info:credit" | |
200 | msgid "George Kiagiadakis" | |
201 | msgstr "George Kiagiadakis" | |
202 | ||
203 | #: rc.cpp:1 | |
204 | msgctxt "NAME OF TRANSLATORS" | |
205 | msgid "Your names" | |
206 | msgstr "Юрій Чорноіван" | |
207 | ||
208 | #: rc.cpp:2 | |
209 | msgctxt "EMAIL OF TRANSLATORS" | |
210 | msgid "Your emails" | |
211 | msgstr "yurchor@ukr.net" | |
212 | ||
213 | #. i18n: file: src/callwindowui.rc:11 | |
214 | #. i18n: ectx: Menu (call) | |
215 | #: rc.cpp:5 | |
216 | msgid "Call" | |
217 | msgstr "Дзвінок" | |
218 | ||
219 | #. i18n: file: src/callwindowui.rc:20 | |
220 | #. i18n: ectx: Menu (media) | |
221 | #: rc.cpp:8 | |
222 | msgid "Media" | |
223 | msgstr "Мультимедіа" | |
224 | ||
225 | #. i18n: file: src/callwindowui.rc:27 | |
226 | #. i18n: ectx: ToolBar (mainToolBar) | |
227 | #: rc.cpp:11 | |
228 | msgid "Main Toolbar" | |
229 | msgstr "Головна панель" | |
230 | ||
231 | #. i18n: file: src/dtmf-widget.ui:17 | |
232 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
233 | #: rc.cpp:14 | |
234 | msgid "1" | |
235 | msgstr "1" | |
236 | ||
237 | #. i18n: file: src/dtmf-widget.ui:24 | |
238 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
239 | #: rc.cpp:17 | |
240 | msgid "2" | |
241 | msgstr "2" | |
242 | ||
243 | #. i18n: file: src/dtmf-widget.ui:31 | |
244 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
245 | #: rc.cpp:20 | |
246 | msgid "3" | |
247 | msgstr "3" | |
248 | ||
249 | #. i18n: file: src/dtmf-widget.ui:38 | |
250 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
251 | #: rc.cpp:23 | |
252 | msgid "4" | |
253 | msgstr "4" | |
254 | ||
255 | #. i18n: file: src/dtmf-widget.ui:45 | |
256 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
257 | #: rc.cpp:26 | |
258 | msgid "5" | |
259 | msgstr "5" | |
260 | ||
261 | #. i18n: file: src/dtmf-widget.ui:52 | |
262 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
263 | #: rc.cpp:29 | |
264 | msgid "6" | |
265 | msgstr "6" | |
266 | ||
267 | #. i18n: file: src/dtmf-widget.ui:59 | |
268 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
269 | #: rc.cpp:32 | |
270 | msgid "7" | |
271 | msgstr "7" | |
272 | ||
273 | #. i18n: file: src/dtmf-widget.ui:66 | |
274 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
275 | #: rc.cpp:35 | |
276 | msgid "8" | |
277 | msgstr "8" | |
278 | ||
279 | #. i18n: file: src/dtmf-widget.ui:73 | |
280 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
281 | #: rc.cpp:38 | |
282 | msgid "9" | |
283 | msgstr "9" | |
284 | ||
285 | #. i18n: file: src/dtmf-widget.ui:80 | |
286 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
287 | #: rc.cpp:41 | |
288 | msgid "*" | |
289 | msgstr "*" | |
290 | ||
291 | #. i18n: file: src/dtmf-widget.ui:87 | |
292 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
293 | #: rc.cpp:44 | |
294 | msgid "0" | |
295 | msgstr "0" | |
296 | ||
297 | #. i18n: file: src/dtmf-widget.ui:94 | |
298 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
299 | #: rc.cpp:47 | |
300 | msgid "#" | |
301 | msgstr "#" |
0 | file(GLOB _po_files *.po) | |
1 | GETTEXT_PROCESS_PO_FILES( zh_TW ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} ) |
0 | # | |
1 | # Franklin Weng <franklin@goodhorse.idv.tw>, 2012. | |
2 | msgid "" | |
3 | msgstr "" | |
4 | "Project-Id-Version: kcall\n" | |
5 | "Report-Msgid-Bugs-To: http://bugs.kde.org\n" | |
6 | "POT-Creation-Date: 2012-05-27 04:45+0200\n" | |
7 | "PO-Revision-Date: 2012-05-02 12:43+0800\n" | |
8 | "Last-Translator: Franklin Weng <franklin@goodhorse.idv.tw>\n" | |
9 | "Language-Team: Chinese Traditional <kde-i18n-doc@kde.org>\n" | |
10 | "Language: \n" | |
11 | "MIME-Version: 1.0\n" | |
12 | "Content-Type: text/plain; charset=UTF-8\n" | |
13 | "Content-Transfer-Encoding: 8bit\n" | |
14 | "Plural-Forms: nplurals=1; plural=0;\n" | |
15 | "X-Generator: Lokalize 1.1\n" | |
16 | ||
17 | #: src/approver.cpp:38 | |
18 | msgid "Incoming video call" | |
19 | msgstr "視訊呼叫" | |
20 | ||
21 | #: src/approver.cpp:39 | |
22 | #, kde-format | |
23 | msgid "<p>%1 is asking you for a video call</p>" | |
24 | msgstr "<p>%1 正在請求跟您視訊</p>" | |
25 | ||
26 | #: src/approver.cpp:41 | |
27 | msgid "Incoming call" | |
28 | msgstr "來電呼叫" | |
29 | ||
30 | #: src/approver.cpp:42 | |
31 | #, kde-format | |
32 | msgid "<p>%1 is calling you</p>" | |
33 | msgstr "<p>%1 正在呼叫您</p>" | |
34 | ||
35 | #: src/approver.cpp:58 src/approver.cpp:80 | |
36 | msgctxt "action, answers the incoming call" | |
37 | msgid "Answer" | |
38 | msgstr "答案" | |
39 | ||
40 | #: src/approver.cpp:59 src/approver.cpp:82 | |
41 | msgctxt "action, rejects the incoming call" | |
42 | msgid "Reject" | |
43 | msgstr "拒絕" | |
44 | ||
45 | #: src/call-window.cpp:95 | |
46 | #, kde-format | |
47 | msgid "Call with %1" | |
48 | msgstr "呼叫 %1" | |
49 | ||
50 | #: src/call-window.cpp:109 | |
51 | msgctxt "@info:status" | |
52 | msgid "Connecting..." | |
53 | msgstr "連接中..." | |
54 | ||
55 | #: src/call-window.cpp:113 | |
56 | msgctxt "@info:status the remote user's phone is ringing" | |
57 | msgid "Ringing..." | |
58 | msgstr "響鈴中..." | |
59 | ||
60 | #: src/call-window.cpp:117 | |
61 | msgctxt "@info:status" | |
62 | msgid "Remote user accepted the call, waiting for connection..." | |
63 | msgstr "遠端使用者接受了呼叫。等待連線中..." | |
64 | ||
65 | #: src/call-window.cpp:120 | |
66 | msgctxt "@info:status" | |
67 | msgid "Talking..." | |
68 | msgstr "談話中..." | |
69 | ||
70 | #: src/call-window.cpp:136 | |
71 | msgctxt "@info:status" | |
72 | msgid "Remote contact ended the call." | |
73 | msgstr "遠端聯絡人結束了通話。" | |
74 | ||
75 | #: src/call-window.cpp:143 | |
76 | msgctxt "@info:status" | |
77 | msgid "Remote contact rejected the call." | |
78 | msgstr "遠端聯絡人拒絕了通話。" | |
79 | ||
80 | #: src/call-window.cpp:148 | |
81 | msgctxt "@info:status" | |
82 | msgid "Remote contact didn't answer." | |
83 | msgstr "遠端聯絡人未回覆。" | |
84 | ||
85 | #: src/call-window.cpp:152 | |
86 | msgctxt "@info:status" | |
87 | msgid "Invalid number or contact." | |
88 | msgstr "不合法的編號或聯絡人。" | |
89 | ||
90 | #: src/call-window.cpp:156 | |
91 | msgctxt "@info:status" | |
92 | msgid "You don't have enough balance to make this call." | |
93 | msgstr "您沒有足夠的餘額進行呼叫。" | |
94 | ||
95 | #: src/call-window.cpp:158 | |
96 | msgctxt "@info:status" | |
97 | msgid "You don't have permission to make this call." | |
98 | msgstr "您沒有足夠的權限進行呼叫。" | |
99 | ||
100 | #: src/call-window.cpp:163 | |
101 | msgctxt "@info:status" | |
102 | msgid "Remote contact is currently busy." | |
103 | msgstr "遠端聯絡人忙線中。" | |
104 | ||
105 | #: src/call-window.cpp:167 | |
106 | msgctxt "@info:status" | |
107 | msgid "Internal component error." | |
108 | msgstr "內部組件錯誤。" | |
109 | ||
110 | #: src/call-window.cpp:170 | |
111 | msgctxt "@info:status" | |
112 | msgid "Remote service error." | |
113 | msgstr "遠端服務錯誤。" | |
114 | ||
115 | #: src/call-window.cpp:173 | |
116 | msgctxt "@info:status" | |
117 | msgid "Network error." | |
118 | msgstr "網路錯誤。" | |
119 | ||
120 | #: src/call-window.cpp:177 | |
121 | msgctxt "@info:status" | |
122 | msgid "Failed to negotiate codecs." | |
123 | msgstr "與編解碼器協商失敗。" | |
124 | ||
125 | #: src/call-window.cpp:179 | |
126 | msgctxt "@info:status" | |
127 | msgid "Unsupported media type." | |
128 | msgstr "不支援的媒體類型。" | |
129 | ||
130 | #: src/call-window.cpp:183 | |
131 | msgctxt "@info:status" | |
132 | msgid "Connectivity error." | |
133 | msgstr "連線錯誤。" | |
134 | ||
135 | #: src/call-window.cpp:187 | |
136 | msgctxt "@info:status" | |
137 | msgid "Unknown error." | |
138 | msgstr "未知的錯誤。" | |
139 | ||
140 | #: src/call-window.cpp:192 | |
141 | msgctxt "@info:status" | |
142 | msgid "Disconnected." | |
143 | msgstr "已斷線。" | |
144 | ||
145 | #: src/call-window.cpp:196 | |
146 | #, kde-format | |
147 | msgctxt "@info:status the call was disconnected because..." | |
148 | msgid "Disconnected: %1" | |
149 | msgstr "已斷線:%1" | |
150 | ||
151 | #: src/call-window.cpp:339 | |
152 | msgctxt "@action" | |
153 | msgid "Show my video" | |
154 | msgstr "顯示我自己的影像" | |
155 | ||
156 | #: src/call-window.cpp:344 | |
157 | msgctxt "@action" | |
158 | msgid "Show dialpad" | |
159 | msgstr "顯示撥號盤" | |
160 | ||
161 | #: src/call-window.cpp:351 | |
162 | msgctxt "@action" | |
163 | msgid "Send video" | |
164 | msgstr "傳送影像" | |
165 | ||
166 | #: src/call-window.cpp:356 src/call-window.cpp:357 | |
167 | msgctxt "@action" | |
168 | msgid "Mute" | |
169 | msgstr "靜音" | |
170 | ||
171 | #: src/call-window.cpp:363 | |
172 | msgctxt "@action" | |
173 | msgid "Hold" | |
174 | msgstr "保留" | |
175 | ||
176 | #: src/call-window.cpp:368 | |
177 | msgctxt "@action" | |
178 | msgid "Hangup" | |
179 | msgstr "掛斷" | |
180 | ||
181 | #: src/main.cpp:36 | |
182 | msgid "KDE Telepathy Call Ui" | |
183 | msgstr "KDE Telepathy 呼叫介面" | |
184 | ||
185 | #: src/main.cpp:37 | |
186 | msgid "VoIP client for KDE" | |
187 | msgstr "KDE 的 VoIP 客戶端程式" | |
188 | ||
189 | #: src/main.cpp:38 | |
190 | msgid "(C) 2009, George Kiagiadakis" | |
191 | msgstr "(C) 2009, George Kiagiadakis" | |
192 | ||
193 | #: src/main.cpp:40 | |
194 | msgctxt "@info:credit" | |
195 | msgid "George Kiagiadakis" | |
196 | msgstr "George Kiagiadakis" | |
197 | ||
198 | #: rc.cpp:1 | |
199 | msgctxt "NAME OF TRANSLATORS" | |
200 | msgid "Your names" | |
201 | msgstr "Frank Weng (a.k.a. Franklin)" | |
202 | ||
203 | #: rc.cpp:2 | |
204 | msgctxt "EMAIL OF TRANSLATORS" | |
205 | msgid "Your emails" | |
206 | msgstr "franklin at goodhorse dot idv dot tw" | |
207 | ||
208 | #. i18n: file: src/callwindowui.rc:11 | |
209 | #. i18n: ectx: Menu (call) | |
210 | #: rc.cpp:5 | |
211 | msgid "Call" | |
212 | msgstr "呼叫" | |
213 | ||
214 | #. i18n: file: src/callwindowui.rc:20 | |
215 | #. i18n: ectx: Menu (media) | |
216 | #: rc.cpp:8 | |
217 | msgid "Media" | |
218 | msgstr "媒體" | |
219 | ||
220 | #. i18n: file: src/callwindowui.rc:27 | |
221 | #. i18n: ectx: ToolBar (mainToolBar) | |
222 | #: rc.cpp:11 | |
223 | msgid "Main Toolbar" | |
224 | msgstr "主工具列" | |
225 | ||
226 | #. i18n: file: src/dtmf-widget.ui:17 | |
227 | #. i18n: ectx: property (text), widget (QPushButton, button1) | |
228 | #: rc.cpp:14 | |
229 | msgid "1" | |
230 | msgstr "1" | |
231 | ||
232 | #. i18n: file: src/dtmf-widget.ui:24 | |
233 | #. i18n: ectx: property (text), widget (QPushButton, button2) | |
234 | #: rc.cpp:17 | |
235 | msgid "2" | |
236 | msgstr "2" | |
237 | ||
238 | #. i18n: file: src/dtmf-widget.ui:31 | |
239 | #. i18n: ectx: property (text), widget (QPushButton, button3) | |
240 | #: rc.cpp:20 | |
241 | msgid "3" | |
242 | msgstr "3" | |
243 | ||
244 | #. i18n: file: src/dtmf-widget.ui:38 | |
245 | #. i18n: ectx: property (text), widget (QPushButton, button4) | |
246 | #: rc.cpp:23 | |
247 | msgid "4" | |
248 | msgstr "4" | |
249 | ||
250 | #. i18n: file: src/dtmf-widget.ui:45 | |
251 | #. i18n: ectx: property (text), widget (QPushButton, button5) | |
252 | #: rc.cpp:26 | |
253 | msgid "5" | |
254 | msgstr "5" | |
255 | ||
256 | #. i18n: file: src/dtmf-widget.ui:52 | |
257 | #. i18n: ectx: property (text), widget (QPushButton, button6) | |
258 | #: rc.cpp:29 | |
259 | msgid "6" | |
260 | msgstr "6" | |
261 | ||
262 | #. i18n: file: src/dtmf-widget.ui:59 | |
263 | #. i18n: ectx: property (text), widget (QPushButton, button7) | |
264 | #: rc.cpp:32 | |
265 | msgid "7" | |
266 | msgstr "7" | |
267 | ||
268 | #. i18n: file: src/dtmf-widget.ui:66 | |
269 | #. i18n: ectx: property (text), widget (QPushButton, button8) | |
270 | #: rc.cpp:35 | |
271 | msgid "8" | |
272 | msgstr "8" | |
273 | ||
274 | #. i18n: file: src/dtmf-widget.ui:73 | |
275 | #. i18n: ectx: property (text), widget (QPushButton, button9) | |
276 | #: rc.cpp:38 | |
277 | msgid "9" | |
278 | msgstr "9" | |
279 | ||
280 | #. i18n: file: src/dtmf-widget.ui:80 | |
281 | #. i18n: ectx: property (text), widget (QPushButton, buttonAsterisk) | |
282 | #: rc.cpp:41 | |
283 | msgid "*" | |
284 | msgstr "*" | |
285 | ||
286 | #. i18n: file: src/dtmf-widget.ui:87 | |
287 | #. i18n: ectx: property (text), widget (QPushButton, button0) | |
288 | #: rc.cpp:44 | |
289 | msgid "0" | |
290 | msgstr "0" | |
291 | ||
292 | #. i18n: file: src/dtmf-widget.ui:94 | |
293 | #. i18n: ectx: property (text), widget (QPushButton, buttonHash) | |
294 | #: rc.cpp:47 | |
295 | msgid "#" | |
296 | msgstr "#" | |
297 | ||
298 | #~ msgid "KCall" | |
299 | #~ msgstr "KCall" | |
300 | ||
301 | #, fuzzy | |
302 | #~| msgctxt "@title:tab" | |
303 | #~| msgid "&Contact list" | |
304 | #~ msgid "Contrast" | |
305 | #~ msgstr "聯絡人清單(&C)" | |
306 | ||
307 | #~ msgid "Dialpad" | |
308 | #~ msgstr "撥號盤" | |
309 | ||
310 | #, fuzzy | |
311 | #~| msgid "Participants" | |
312 | #~ msgctxt "@action:inmenu" | |
313 | #~ msgid "Show participants" | |
314 | #~ msgstr "參與者" | |
315 | ||
316 | #~ msgctxt "@action:inmenu" | |
317 | #~ msgid "Status" | |
318 | #~ msgstr "狀態" | |
319 | ||
320 | #~ msgctxt "@action:inmenu" | |
321 | #~ msgid "Available" | |
322 | #~ msgstr "可呼叫" | |
323 | ||
324 | #~ msgctxt "@action:inmenu" | |
325 | #~ msgid "Away" | |
326 | #~ msgstr "離開" | |
327 | ||
328 | #~ msgctxt "@action:inmenu" | |
329 | #~ msgid "Be right back" | |
330 | #~ msgstr "馬上回來" | |
331 | ||
332 | #~ msgctxt "@action:inmenu" | |
333 | #~ msgid "Busy" | |
334 | #~ msgstr "忙碌中" | |
335 | ||
336 | #, fuzzy | |
337 | #~| msgctxt "@action:inmenu" | |
338 | #~| msgid "Do not distrurb" | |
339 | #~ msgctxt "@action:inmenu" | |
340 | #~ msgid "Do not disturb" | |
341 | #~ msgstr "請勿打擾" | |
342 | ||
343 | #~ msgctxt "@action:inmenu" | |
344 | #~ msgid "Extended Away" | |
345 | #~ msgstr "延伸離開" | |
346 | ||
347 | #~ msgctxt "@action:inmenu" | |
348 | #~ msgid "Invisible" | |
349 | #~ msgstr "隱身" | |
350 | ||
351 | #~ msgctxt "@action:inmenu" | |
352 | #~ msgid "Offline" | |
353 | #~ msgstr "離線" | |
354 | ||
355 | #~ msgctxt "@info:status" | |
356 | #~ msgid "Waiting for account information..." | |
357 | #~ msgstr "等待帳號資訊中..." | |
358 | ||
359 | #, fuzzy | |
360 | #~| msgctxt "@info:status" | |
361 | #~| msgid "Connecting..." | |
362 | #~ msgctxt "protocol - display name (Connecting)" | |
363 | #~ msgid "%1 - %2 (Connecting)" | |
364 | #~ msgstr "連接中..." | |
365 | ||
366 | #~ msgctxt "@title:window" | |
367 | #~ msgid "KCall" | |
368 | #~ msgstr "KCall" | |
369 | ||
370 | #, fuzzy | |
371 | #~| msgctxt "@info:status" | |
372 | #~| msgid "Disconnected." | |
373 | #~ msgctxt "@info:status" | |
374 | #~ msgid "Connected" | |
375 | #~ msgstr "已斷線。" | |
376 | ||
377 | #, fuzzy | |
378 | #~| msgctxt "@info:status" | |
379 | #~| msgid "Disconnected." | |
380 | #~ msgctxt "@action" | |
381 | #~ msgid "Disconnect" | |
382 | #~ msgstr "已斷線。" | |
383 | ||
384 | #, fuzzy | |
385 | #~| msgctxt "@info:status" | |
386 | #~| msgid "Connecting..." | |
387 | #~ msgctxt "@action" | |
388 | #~ msgid "Connect" | |
389 | #~ msgstr "連接中..." | |
390 | ||
391 | #~ msgid "Volume" | |
392 | #~ msgstr "音量" | |
393 | ||
394 | #~ msgid "Speakers" | |
395 | #~ msgstr "揚聲器" | |
396 | ||
397 | #~ msgid "Microphone" | |
398 | #~ msgstr "麥克風" | |
399 | ||
400 | #, fuzzy | |
401 | #~| msgctxt "@action:inmenu" | |
402 | #~| msgid "Call" | |
403 | #~ msgid "Call log" | |
404 | #~ msgstr "呼叫" | |
405 | ||
406 | #~ msgid "Participants" | |
407 | #~ msgstr "參與者" | |
408 | ||
409 | #~ msgctxt "@title:tab" | |
410 | #~ msgid "&Contact list" | |
411 | #~ msgstr "聯絡人清單(&C)" | |
412 | ||
413 | #, fuzzy | |
414 | #~| msgctxt "@title:tab" | |
415 | #~| msgid "&Contact list" | |
416 | #~ msgid "Contact handle" | |
417 | #~ msgstr "聯絡人清單(&C)" | |
418 | ||
419 | #~ msgctxt "@info:status" | |
420 | #~ msgid "Hanging up..." | |
421 | #~ msgstr "掛斷中..." | |
422 | ||
423 | #, fuzzy | |
424 | #~| msgctxt "@info:status" | |
425 | #~| msgid "Disconnected with error." | |
426 | #~ msgid "Channel closed with error: %1" | |
427 | #~ msgstr "發生錯誤而斷線。" | |
428 | ||
429 | #~ msgid "Ignore" | |
430 | #~ msgstr "忽略" | |
431 | ||
432 | #, fuzzy | |
433 | #~| msgid "Dialpad" | |
434 | #~ msgid "Dial" | |
435 | #~ msgstr "撥號盤" |
0 | include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) | |
1 | ||
2 | set(ktp-call-ui_SRCS | |
3 | main.cpp | |
4 | call-window.cpp | |
5 | call-handler.cpp | |
6 | dtmf-handler.cpp | |
7 | dtmf-widget.cpp | |
8 | status-area.cpp | |
9 | call-manager.cpp | |
10 | approver.cpp | |
11 | ) | |
12 | ||
13 | kde4_add_ui_files(ktp-call-ui_SRCS call-window.ui dtmf-widget.ui) | |
14 | kde4_add_executable(ktp-call-ui ${ktp-call-ui_SRCS}) | |
15 | target_link_libraries(ktp-call-ui | |
16 | ${KDE4_KDEUI_LIBS} | |
17 | ${TELEPATHY_QT4_LIBRARIES} | |
18 | ${KTP_LIBRARIES} | |
19 | ${QTGSTREAMER_UI_LIBRARIES} | |
20 | ktpcall | |
21 | ) | |
22 | ||
23 | install(TARGETS ktp-call-ui DESTINATION ${LIBEXEC_INSTALL_DIR}) | |
24 | install(FILES callwindowui.rc DESTINATION ${DATA_INSTALL_DIR}/ktp-call-ui) | |
25 | ||
26 | configure_file(org.freedesktop.Telepathy.Client.KTp.CallUi.service.in | |
27 | org.freedesktop.Telepathy.Client.KTp.CallUi.service) | |
28 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.Telepathy.Client.KTp.CallUi.service | |
29 | DESTINATION ${DBUS_SERVICES_INSTALL_DIR}) | |
30 | ||
31 | install(FILES KTp.CallUi.client DESTINATION ${SHARE_INSTALL_PREFIX}/telepathy/clients/) |
0 | [org.freedesktop.Telepathy.Client] | |
1 | Interfaces=org.freedesktop.Telepathy.Client.Handler | |
2 | ||
3 | [org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 0] | |
4 | org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 | |
5 | org.freedesktop.Telepathy.Channel.TargetHandleType u=1 | |
6 | ||
7 | [org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 1] | |
8 | org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 | |
9 | org.freedesktop.Telepathy.Channel.TargetHandleType u=1 | |
10 | org.freedesktop.Telepathy.Channel.Type.Call1.InitialAudio b=true | |
11 | ||
12 | [org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 2] | |
13 | org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 | |
14 | org.freedesktop.Telepathy.Channel.TargetHandleType u=1 | |
15 | org.freedesktop.Telepathy.Channel.Type.Call1.InitialVideo b=true | |
16 | ||
17 | [org.freedesktop.Telepathy.Client.Handler.Capabilities] | |
18 | org.freedesktop.Telepathy.Channel.Type.Call1/audio=true | |
19 | org.freedesktop.Telepathy.Channel.Type.Call1/video=true | |
20 | org.freedesktop.Telepathy.Channel.Type.Call1/ice=true | |
21 | org.freedesktop.Telepathy.Channel.Type.Call1/gtalk-p2p=true | |
22 | org.freedesktop.Telepathy.Channel.Type.Call1/video/h264=true |
0 | /* | |
1 | Copyright (C) 2010-2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "approver.h" | |
18 | #include <KNotification> | |
19 | #include <KStatusNotifierItem> | |
20 | #include <KLocale> | |
21 | #include <KDebug> | |
22 | #include <KAboutData> | |
23 | #include <KActionCollection> | |
24 | #include <KMenu> | |
25 | #include <TelepathyQt/AvatarData> | |
26 | #include <TelepathyQt/Contact> | |
27 | ||
28 | Approver::Approver(const Tp::CallChannelPtr & channel, QObject *parent) | |
29 | : QObject(parent) | |
30 | { | |
31 | kDebug(); | |
32 | ||
33 | Tp::ContactPtr sender = channel->initiatorContact(); | |
34 | QString message; | |
35 | QString title; | |
36 | if (channel->hasInitialVideo()) { | |
37 | title = i18n("Incoming video call"); | |
38 | message = i18n("<p>%1 is asking you for a video call</p>", sender->alias()); | |
39 | } else { | |
40 | title = i18n("Incoming call"); | |
41 | message = i18n("<p>%1 is calling you</p>", sender->alias()); | |
42 | } | |
43 | ||
44 | //notification | |
45 | m_notification = new KNotification("incoming_call"); | |
46 | KAboutData aboutData("ktelepathy",0,KLocalizedString(),0); | |
47 | m_notification.data()->setComponentData(KComponentData(aboutData)); | |
48 | m_notification.data()->setTitle(title); | |
49 | m_notification.data()->setText(message); | |
50 | ||
51 | QPixmap pixmap; | |
52 | if (pixmap.load(sender->avatarData().fileName)) { | |
53 | m_notification.data()->setPixmap(pixmap); | |
54 | } | |
55 | ||
56 | m_notification.data()->setActions(QStringList() | |
57 | << i18nc("action, answers the incoming call", "Answer") | |
58 | << i18nc("action, rejects the incoming call", "Reject")); | |
59 | connect(m_notification.data(), SIGNAL(action1Activated()), SIGNAL(channelAccepted())); | |
60 | connect(m_notification.data(), SIGNAL(action2Activated()), SIGNAL(channelRejected())); | |
61 | ||
62 | m_notification.data()->sendEvent(); | |
63 | ||
64 | //tray icon | |
65 | m_notifierItem = new KStatusNotifierItem; | |
66 | m_notifierItem->setCategory(KStatusNotifierItem::Communications); | |
67 | m_notifierItem->setStatus(KStatusNotifierItem::NeedsAttention); | |
68 | m_notifierItem->setIconByName(QLatin1String("internet-telephony")); | |
69 | ||
70 | if (channel->hasInitialVideo()) { | |
71 | m_notifierItem->setAttentionIconByName(QLatin1String("camera-web")); | |
72 | } else { | |
73 | m_notifierItem->setAttentionIconByName(QLatin1String("audio-headset")); | |
74 | } | |
75 | ||
76 | m_notifierItem->setStandardActionsEnabled(false); | |
77 | m_notifierItem->setTitle(title); | |
78 | m_notifierItem->setToolTip(QLatin1String("internet-telephony"), message, QString()); | |
79 | m_notifierItem->contextMenu()->addAction(i18nc("action, answers the incoming call", "Answer"), | |
80 | this, SIGNAL(channelAccepted())); | |
81 | m_notifierItem->contextMenu()->addAction(i18nc("action, rejects the incoming call", "Reject"), | |
82 | this, SIGNAL(channelRejected())); | |
83 | connect(m_notifierItem, SIGNAL(activateRequested(bool,QPoint)), SIGNAL(channelAccepted())); | |
84 | } | |
85 | ||
86 | Approver::~Approver() | |
87 | { | |
88 | kDebug(); | |
89 | ||
90 | //destroy the notification | |
91 | if (m_notification) { | |
92 | m_notification.data()->close(); | |
93 | } | |
94 | ||
95 | //destroy the tray icon | |
96 | delete m_notifierItem; | |
97 | } | |
98 | ||
99 | #include "moc_approver.cpp" |
0 | /* | |
1 | Copyright (C) 2010-2011 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef APPROVER_H | |
18 | #define APPROVER_H | |
19 | ||
20 | #include <QtCore/QSharedPointer> | |
21 | #include <TelepathyQt/CallChannel> | |
22 | ||
23 | class KStatusNotifierItem; | |
24 | class KNotification; | |
25 | ||
26 | class Approver : public QObject | |
27 | { | |
28 | Q_OBJECT | |
29 | public: | |
30 | Approver(const Tp::CallChannelPtr & channel, QObject *parent); | |
31 | virtual ~Approver(); | |
32 | ||
33 | Q_SIGNALS: | |
34 | void channelAccepted(); | |
35 | void channelRejected(); | |
36 | ||
37 | private: | |
38 | QWeakPointer<KNotification> m_notification; | |
39 | KStatusNotifierItem *m_notifierItem; | |
40 | }; | |
41 | ||
42 | #endif //APPROVER_H |
0 | /* | |
1 | Copyright (C) 2009-2012 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This program is free software: you can redistribute it and/or modify | |
4 | it under the terms of the GNU General Public License as published by | |
5 | the Free Software Foundation, either version 2 of the License, or | |
6 | (at your option) any later version. | |
7 | ||
8 | This program is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | GNU General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #include "call-handler.h" | |
17 | #include "call-manager.h" | |
18 | #include <KDebug> | |
19 | #include <TelepathyQt/CallChannel> | |
20 | #include <TelepathyQt/ChannelClassSpec> | |
21 | ||
22 | static inline Tp::ChannelClassSpecList channelClassSpecList() | |
23 | { | |
24 | return Tp::ChannelClassSpecList() << Tp::ChannelClassSpec::audioCall() | |
25 | << Tp::ChannelClassSpec::videoCall() | |
26 | << Tp::ChannelClassSpec::videoCallWithAudio(); | |
27 | } | |
28 | ||
29 | CallHandler::CallHandler() | |
30 | : Tp::AbstractClientHandler(channelClassSpecList()) | |
31 | { | |
32 | kDebug(); | |
33 | } | |
34 | ||
35 | CallHandler::~CallHandler() | |
36 | { | |
37 | } | |
38 | ||
39 | bool CallHandler::bypassApproval() const | |
40 | { | |
41 | return false; | |
42 | } | |
43 | ||
44 | void CallHandler::handleChannels(const Tp::MethodInvocationContextPtr<> & context, | |
45 | const Tp::AccountPtr & account, | |
46 | const Tp::ConnectionPtr & connection, | |
47 | const QList<Tp::ChannelPtr> & channels, | |
48 | const QList<Tp::ChannelRequestPtr> & requestsSatisfied, | |
49 | const QDateTime & userActionTime, | |
50 | const Tp::AbstractClientHandler::HandlerInfo & handlerInfo) | |
51 | { | |
52 | kDebug(); | |
53 | Q_UNUSED(account); | |
54 | Q_UNUSED(connection); | |
55 | Q_UNUSED(requestsSatisfied); | |
56 | Q_UNUSED(userActionTime); | |
57 | Q_UNUSED(handlerInfo); | |
58 | ||
59 | Q_FOREACH(const Tp::ChannelPtr & channel, channels) { | |
60 | Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::qObjectCast(channel); | |
61 | if (!callChannel) { | |
62 | kDebug() << "Channel is not a Call channel. Ignoring"; | |
63 | continue; | |
64 | } | |
65 | ||
66 | //TODO handle multiple calls - queue them if there is an active one | |
67 | CallManager *manager = new CallManager(callChannel, this); | |
68 | } | |
69 | ||
70 | context->setFinished(); | |
71 | } |
0 | /* | |
1 | Copyright (C) 2009 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This program is free software: you can redistribute it and/or modify | |
4 | it under the terms of the GNU General Public License as published by | |
5 | the Free Software Foundation, either version 2 of the License, or | |
6 | (at your option) any later version. | |
7 | ||
8 | This program is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | GNU General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #ifndef CALL_HANDLER_H | |
17 | #define CALL_HANDLER_H | |
18 | ||
19 | #include <TelepathyQt/AbstractClientHandler> | |
20 | ||
21 | class CallHandler : public QObject, public Tp::AbstractClientHandler | |
22 | { | |
23 | Q_OBJECT | |
24 | public: | |
25 | CallHandler(); | |
26 | virtual ~CallHandler(); | |
27 | ||
28 | virtual bool bypassApproval() const; | |
29 | virtual void handleChannels(const Tp::MethodInvocationContextPtr<> & context, | |
30 | const Tp::AccountPtr & account, | |
31 | const Tp::ConnectionPtr & connection, | |
32 | const QList<Tp::ChannelPtr> & channels, | |
33 | const QList<Tp::ChannelRequestPtr> & requestsSatisfied, | |
34 | const QDateTime & userActionTime, | |
35 | const Tp::AbstractClientHandler::HandlerInfo & handlerInfo); | |
36 | }; | |
37 | ||
38 | #endif |
0 | /* | |
1 | Copyright (C) 2012 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This library is free software; you can redistribute it and/or | |
4 | modify it under the terms of the GNU Lesser General Public | |
5 | License as published by the Free Software Foundation; either | |
6 | version 2.1 of the License, or (at your option) any later version. | |
7 | ||
8 | This library is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | Lesser General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU Lesser General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #include "call-manager.h" | |
17 | #include "call-window.h" | |
18 | #include "approver.h" | |
19 | #include "../libktpcall/call-channel-handler.h" | |
20 | ||
21 | #include <KDebug> | |
22 | #include <KTp/telepathy-handler-application.h> | |
23 | ||
24 | struct CallManager::Private | |
25 | { | |
26 | Tp::CallChannelPtr callChannel; | |
27 | CallChannelHandler *channelHandler; | |
28 | QWeakPointer<CallWindow> callWindow; | |
29 | QWeakPointer<Approver> approver; | |
30 | }; | |
31 | ||
32 | CallManager::CallManager(const Tp::CallChannelPtr & callChannel, QObject *parent) | |
33 | : QObject(parent), d(new Private) | |
34 | { | |
35 | KTp::TelepathyHandlerApplication::newJob(); | |
36 | ||
37 | d->callChannel = callChannel; | |
38 | connect(callChannel.data(), SIGNAL(callStateChanged(Tp::CallState)), | |
39 | SLOT(onCallStateChanged(Tp::CallState))); | |
40 | ||
41 | //create the channel handler | |
42 | d->channelHandler = new CallChannelHandler(callChannel, this); | |
43 | ||
44 | //delete the CallManager when the channel has closed | |
45 | //and the farstream side has safely shut down. | |
46 | //NOTE this MUST be used with Qt::QueuedConnection because of | |
47 | // https://bugreports.qt-project.org/browse/QTBUG-24571 | |
48 | connect(d->channelHandler, SIGNAL(channelClosed()), | |
49 | this, SLOT(deleteLater()), Qt::QueuedConnection); | |
50 | ||
51 | //bring us up-to-date with the current call state | |
52 | onCallStateChanged(d->callChannel->callState()); | |
53 | } | |
54 | ||
55 | CallManager::~CallManager() | |
56 | { | |
57 | kDebug() << "Deleting CallManager"; | |
58 | delete d; | |
59 | ||
60 | KTp::TelepathyHandlerApplication::jobFinished(); | |
61 | } | |
62 | ||
63 | void CallManager::onCallStateChanged(Tp::CallState state) | |
64 | { | |
65 | kDebug() << "new call state:" << state; | |
66 | ||
67 | switch (state) { | |
68 | case Tp::CallStatePendingInitiator: | |
69 | Q_ASSERT(d->callChannel->isRequested()); | |
70 | (void) d->callChannel->accept(); | |
71 | break; | |
72 | case Tp::CallStateInitialising: | |
73 | if (d->callChannel->isRequested()) { | |
74 | //show status that the call is conneting | |
75 | ensureCallWindow(); | |
76 | d->callWindow.data()->setStatus(CallWindow::StatusConnecting); | |
77 | } else { | |
78 | kDebug() << "Call is initialising"; | |
79 | } | |
80 | break; | |
81 | case Tp::CallStateInitialised: | |
82 | if (d->callChannel->isRequested()) { | |
83 | //show status that the remote end is ringing | |
84 | ensureCallWindow(); | |
85 | d->callWindow.data()->setStatus(CallWindow::StatusRemoteRinging); | |
86 | } else { | |
87 | //show approver | |
88 | d->approver = new Approver(d->callChannel, this); | |
89 | connect(d->approver.data(), SIGNAL(channelAccepted()), SLOT(onCallAccepted())); | |
90 | connect(d->approver.data(), SIGNAL(channelRejected()), SLOT(onCallRejected())); | |
91 | (void) d->callChannel->setRinging(); | |
92 | } | |
93 | break; | |
94 | case Tp::CallStateAccepted: | |
95 | if (d->callChannel->isRequested()) { | |
96 | //show status that the remote end accepted the call | |
97 | ensureCallWindow(); | |
98 | d->callWindow.data()->setStatus(CallWindow::StatusRemoteAccepted); | |
99 | } else { | |
100 | //hide approver & show call window | |
101 | delete d->approver.data(); | |
102 | ensureCallWindow(); | |
103 | d->callWindow.data()->setStatus(CallWindow::StatusConnecting); | |
104 | } | |
105 | break; | |
106 | case Tp::CallStateActive: | |
107 | //normally the approver is already deleted and the call window | |
108 | //already exists at this point, but we just want to be safe | |
109 | //in case the CM decides to do a weird state jump | |
110 | if (!d->callChannel->isRequested()) { | |
111 | delete d->approver.data(); | |
112 | } | |
113 | ensureCallWindow(); | |
114 | d->callWindow.data()->setStatus(CallWindow::StatusActive); | |
115 | break; | |
116 | case Tp::CallStateEnded: | |
117 | //if we requested the call, make sure we have a window to show the error (if any) | |
118 | if (d->callChannel->isRequested()) { | |
119 | ensureCallWindow(); | |
120 | } | |
121 | ||
122 | if (d->callWindow) { | |
123 | Tp::CallStateReason reason = d->callChannel->callStateReason(); | |
124 | d->callWindow.data()->setStatus(CallWindow::StatusDisconnected, reason); | |
125 | ||
126 | //kill the call manager when the call window is closed, | |
127 | //after shutting down the channelHandler | |
128 | connect(d->callWindow.data(), SIGNAL(destroyed()), d->channelHandler, SLOT(shutdown())); | |
129 | } else { | |
130 | //missed the call | |
131 | kDebug() << "missed call"; | |
132 | delete d->approver.data(); | |
133 | d->channelHandler->shutdown(); | |
134 | } | |
135 | break; | |
136 | default: | |
137 | Q_ASSERT(false); | |
138 | } | |
139 | } | |
140 | ||
141 | void CallManager::onCallAccepted() | |
142 | { | |
143 | (void) d->callChannel->accept(); | |
144 | } | |
145 | ||
146 | void CallManager::onCallRejected() | |
147 | { | |
148 | (void) d->callChannel->hangup(Tp::CallStateChangeReasonRejected, TP_QT_ERROR_REJECTED); | |
149 | } | |
150 | ||
151 | void CallManager::ensureCallWindow() | |
152 | { | |
153 | if (!d->callWindow) { | |
154 | d->callWindow = new CallWindow(d->callChannel); | |
155 | d->callWindow.data()->show(); | |
156 | d->callWindow.data()->setAttribute(Qt::WA_DeleteOnClose); | |
157 | ||
158 | connect(d->channelHandler, SIGNAL(contentAdded(CallContentHandler*)), | |
159 | d->callWindow.data(), SLOT(onContentAdded(CallContentHandler*))); | |
160 | connect(d->channelHandler, SIGNAL(contentRemoved(CallContentHandler*)), | |
161 | d->callWindow.data(), SLOT(onContentRemoved(CallContentHandler*))); | |
162 | ||
163 | //inform the ui about already existing contents | |
164 | Q_FOREACH(CallContentHandler *content, d->channelHandler->contents()) { | |
165 | d->callWindow.data()->onContentAdded(content); | |
166 | } | |
167 | } | |
168 | } |
0 | /* | |
1 | Copyright (C) 2012 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This library is free software; you can redistribute it and/or | |
4 | modify it under the terms of the GNU Lesser General Public | |
5 | License as published by the Free Software Foundation; either | |
6 | version 2.1 of the License, or (at your option) any later version. | |
7 | ||
8 | This library is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | Lesser General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU Lesser General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #ifndef CALL_MANAGER_H | |
17 | #define CALL_MANAGER_H | |
18 | ||
19 | #include <QObject> | |
20 | #include <TelepathyQt/CallChannel> | |
21 | ||
22 | class CallManager : public QObject | |
23 | { | |
24 | Q_OBJECT | |
25 | public: | |
26 | explicit CallManager(const Tp::CallChannelPtr & callChannel, QObject *parent = 0); | |
27 | virtual ~CallManager(); | |
28 | ||
29 | private Q_SLOTS: | |
30 | void onCallStateChanged(Tp::CallState state); | |
31 | void onCallAccepted(); | |
32 | void onCallRejected(); | |
33 | ||
34 | private: | |
35 | void ensureCallWindow(); | |
36 | ||
37 | private: | |
38 | struct Private; | |
39 | Private *const d; | |
40 | }; | |
41 | ||
42 | #endif // CALL_MANAGER_H |
0 | /* | |
1 | Copyright (C) 2009-2012 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | Copyright (C) 2010-2011 Collabora Ltd. <info@collabora.co.uk> | |
3 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
4 | ||
5 | This program is free software: you can redistribute it and/or modify | |
6 | it under the terms of the GNU General Public License as published by | |
7 | the Free Software Foundation, either version 2 of the License, or | |
8 | (at your option) any later version. | |
9 | ||
10 | This program is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU General Public License | |
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | */ | |
18 | #include "call-window.h" | |
19 | #include "ui_call-window.h" | |
20 | ||
21 | #include "status-area.h" | |
22 | #include "dtmf-handler.h" | |
23 | #include "../libktpcall/call-channel-handler.h" | |
24 | ||
25 | #include <QtGui/QCloseEvent> | |
26 | ||
27 | #include <TelepathyQt/ReferencedHandles> | |
28 | #include <TelepathyQt/AvatarData> | |
29 | #include <TelepathyQt/Contact> | |
30 | ||
31 | #include <KDebug> | |
32 | #include <KLocalizedString> | |
33 | #include <KToggleAction> | |
34 | #include <KActionCollection> | |
35 | #include <KToolBar> | |
36 | ||
37 | #include <QGst/ElementFactory> | |
38 | ||
39 | struct CallWindow::Private | |
40 | { | |
41 | Private() : | |
42 | callEnded(false), | |
43 | currentVideoDisplayState(NoVideo), | |
44 | videoContentHandler(NULL) | |
45 | {} | |
46 | ||
47 | Tp::CallChannelPtr callChannel; | |
48 | CallChannelHandler *channelHandler; | |
49 | StatusArea *statusArea; | |
50 | Ui::CallWindow ui; | |
51 | bool callEnded; | |
52 | ||
53 | KToggleAction *showMyVideoAction; | |
54 | KToggleAction *showDtmfAction; | |
55 | KToggleAction *sendVideoAction; | |
56 | KToggleAction *muteAction; | |
57 | KToggleAction *holdAction; | |
58 | KAction *hangupAction; | |
59 | ||
60 | VideoDisplayFlags currentVideoDisplayState; | |
61 | VideoContentHandler *videoContentHandler; | |
62 | Tp::ContactPtr remoteVideoContact; | |
63 | }; | |
64 | ||
65 | /*! This constructor is used to handle an incoming call, in which case | |
66 | * the specified \a channel must be ready and the call must have been accepted. | |
67 | */ | |
68 | CallWindow::CallWindow(const Tp::CallChannelPtr & callChannel) | |
69 | : KXmlGuiWindow(), d(new Private) | |
70 | { | |
71 | d->callChannel = callChannel; | |
72 | ||
73 | //create ui | |
74 | d->ui.setupUi(this); | |
75 | d->statusArea = new StatusArea(statusBar()); | |
76 | setupActions(); | |
77 | setupGUI(QSize(428, 395), ToolBar | Keys | StatusBar | Create, QLatin1String("callwindowui.rc")); | |
78 | setAutoSaveSettings(QLatin1String("CallWindow"), false); | |
79 | toolBar()->setToolButtonStyle(Qt::ToolButtonIconOnly); | |
80 | ||
81 | DtmfHandler *handler = new DtmfHandler(d->callChannel, this); | |
82 | handler->connectDtmfWidget(d->ui.dtmfWidget); | |
83 | ||
84 | //TODO handle member joining later | |
85 | if (!d->callChannel->remoteMembers().isEmpty()) { | |
86 | Tp::ContactPtr remoteMember = *d->callChannel->remoteMembers().begin(); | |
87 | d->ui.remoteUserDisplayLabel->setText(QString::fromAscii( | |
88 | "<html><body>" | |
89 | "<p align=\"center\"><img src=\"%1\" /></p>" | |
90 | "<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px;\">" | |
91 | "<span style=\" font-weight:600;\">%2</span></p>" | |
92 | "</body></html>") | |
93 | .arg(remoteMember->avatarData().fileName, remoteMember->alias())); | |
94 | setWindowTitle(i18n("Call with %1", remoteMember->alias())); | |
95 | } | |
96 | } | |
97 | ||
98 | CallWindow::~CallWindow() | |
99 | { | |
100 | kDebug() << "Deleting CallWindow"; | |
101 | delete d; | |
102 | } | |
103 | ||
104 | void CallWindow::setStatus(Status status, const Tp::CallStateReason & reason) | |
105 | { | |
106 | switch (status) { | |
107 | case StatusConnecting: | |
108 | d->statusArea->setMessage(StatusArea::Status, i18nc("@info:status", "Connecting...")); | |
109 | break; | |
110 | case StatusRemoteRinging: | |
111 | d->statusArea->setMessage(StatusArea::Status, | |
112 | i18nc("@info:status the remote user's phone is ringing", "Ringing...")); | |
113 | break; | |
114 | case StatusRemoteAccepted: | |
115 | d->statusArea->setMessage(StatusArea::Status, | |
116 | i18nc("@info:status", "Remote user accepted the call, waiting for connection...")); | |
117 | break; | |
118 | case StatusActive: | |
119 | d->statusArea->setMessage(StatusArea::Status, i18nc("@info:status", "Talking...")); | |
120 | d->statusArea->startDurationTimer(); | |
121 | break; | |
122 | case StatusDisconnected: | |
123 | { | |
124 | bool actorIsRemoteContact = false; | |
125 | Q_FOREACH(const Tp::ContactPtr & contact, d->callChannel->remoteMembers()) { | |
126 | if (contact->handle()[0] == reason.actor) { | |
127 | actorIsRemoteContact = true; | |
128 | } | |
129 | } | |
130 | ||
131 | QString message; | |
132 | switch(reason.reason) { | |
133 | case Tp::CallStateChangeReasonUserRequested: | |
134 | if (actorIsRemoteContact) { | |
135 | message = i18nc("@info:status", "Remote contact ended the call."); | |
136 | } | |
137 | //when disconnected normally, close the window after a while | |
138 | QTimer::singleShot(5000, this, SLOT(close())); | |
139 | break; | |
140 | case Tp::CallStateChangeReasonRejected: | |
141 | if (actorIsRemoteContact) { | |
142 | message = i18nc("@info:status", "Remote contact rejected the call."); | |
143 | } | |
144 | break; | |
145 | case Tp::CallStateChangeReasonNoAnswer: | |
146 | if (actorIsRemoteContact) { | |
147 | message = i18nc("@info:status", "Remote contact didn't answer."); | |
148 | } | |
149 | break; | |
150 | case Tp::CallStateChangeReasonInvalidContact: | |
151 | message = i18nc("@info:status", "Invalid number or contact."); | |
152 | break; | |
153 | case Tp::CallStateChangeReasonPermissionDenied: | |
154 | if (reason.DBusReason == TP_QT_ERROR_INSUFFICIENT_BALANCE) { | |
155 | message = i18nc("@info:status", "You don't have enough balance to make this call."); | |
156 | } else { | |
157 | message = i18nc("@info:status", "You don't have permission to make this call."); | |
158 | } | |
159 | break; | |
160 | case Tp::CallStateChangeReasonBusy: | |
161 | if (actorIsRemoteContact) { | |
162 | message = i18nc("@info:status", "Remote contact is currently busy."); | |
163 | } | |
164 | break; | |
165 | case Tp::CallStateChangeReasonInternalError: | |
166 | message = i18nc("@info:status", "Internal component error."); | |
167 | break; | |
168 | case Tp::CallStateChangeReasonServiceError: | |
169 | message = i18nc("@info:status", "Remote service error."); | |
170 | break; | |
171 | case Tp::CallStateChangeReasonNetworkError: | |
172 | message = i18nc("@info:status", "Network error."); | |
173 | break; | |
174 | case Tp::CallStateChangeReasonMediaError: | |
175 | if (reason.DBusReason == TP_QT_ERROR_MEDIA_CODECS_INCOMPATIBLE) { | |
176 | message = i18nc("@info:status", "Failed to negotiate codecs."); | |
177 | } else { | |
178 | message = i18nc("@info:status", "Unsupported media type."); | |
179 | } | |
180 | break; | |
181 | case Tp::CallStateChangeReasonConnectivityError: | |
182 | message = i18nc("@info:status", "Connectivity error."); | |
183 | break; | |
184 | case Tp::CallStateChangeReasonUnknown: | |
185 | default: | |
186 | message = i18nc("@info:status", "Unknown error."); | |
187 | break; | |
188 | } | |
189 | ||
190 | if (message.isEmpty()) { | |
191 | d->statusArea->setMessage(StatusArea::Status, i18nc("@info:status", "Disconnected.")); | |
192 | } else { | |
193 | d->statusArea->setMessage(StatusArea::Status, | |
194 | i18nc("@info:status the call was disconnected because...", | |
195 | "Disconnected: %1", message)); | |
196 | } | |
197 | ||
198 | changeVideoDisplayState(NoVideo); | |
199 | d->statusArea->stopDurationTimer(); | |
200 | d->callEnded = true; | |
201 | break; | |
202 | } | |
203 | default: | |
204 | Q_ASSERT(false); | |
205 | } | |
206 | } | |
207 | ||
208 | void CallWindow::onContentAdded(CallContentHandler *contentHandler) | |
209 | { | |
210 | kDebug() << "Content added:" << contentHandler->callContent()->name(); | |
211 | ||
212 | if (contentHandler->callContent()->type() == Tp::MediaStreamTypeAudio) { | |
213 | AudioContentHandler *audioContentHandler = qobject_cast<AudioContentHandler*>(contentHandler); | |
214 | Q_ASSERT(audioContentHandler); | |
215 | ||
216 | checkEnableDtmf(); | |
217 | ||
218 | VolumeController *vol = audioContentHandler->sourceVolumeControl(); | |
219 | d->muteAction->setEnabled(vol->volumeControlSupported()); | |
220 | connect(vol, SIGNAL(volumeControlSupportedChanged(bool)), | |
221 | d->muteAction, SLOT(setEnabled(bool))); | |
222 | d->muteAction->setChecked(vol->isMuted()); | |
223 | connect(vol, SIGNAL(mutedChanged(bool)), d->muteAction, SLOT(setChecked(bool))); | |
224 | d->muteAction->setProperty("volumeController", QVariant::fromValue<QObject*>(vol)); | |
225 | ||
226 | d->statusArea->showAudioStatusIcon(true); | |
227 | } else { | |
228 | if (d->videoContentHandler) { | |
229 | kError() << "Multiple video contents are not supported"; | |
230 | return; | |
231 | } | |
232 | ||
233 | d->videoContentHandler = qobject_cast<VideoContentHandler*>(contentHandler); | |
234 | Q_ASSERT(d->videoContentHandler); | |
235 | ||
236 | connect(d->videoContentHandler, SIGNAL(localSendingStateChanged(bool)), | |
237 | SLOT(onLocalVideoSendingStateChanged(bool))); | |
238 | connect(d->videoContentHandler, SIGNAL(remoteSendingStateChanged(Tp::ContactPtr,bool)), | |
239 | SLOT(onRemoteVideoSendingStateChanged(Tp::ContactPtr,bool))); | |
240 | ||
241 | d->statusArea->showVideoStatusIcon(true); | |
242 | } | |
243 | } | |
244 | ||
245 | void CallWindow::onContentRemoved(CallContentHandler *contentHandler) | |
246 | { | |
247 | kDebug() << "Content removed:" << contentHandler->callContent()->name(); | |
248 | ||
249 | if (contentHandler->callContent()->type() == Tp::MediaStreamTypeAudio) { | |
250 | AudioContentHandler *audioContentHandler = qobject_cast<AudioContentHandler*>(contentHandler); | |
251 | Q_ASSERT(audioContentHandler); | |
252 | ||
253 | VolumeController *vol = audioContentHandler->sourceVolumeControl(); | |
254 | disconnect(vol, NULL, d->muteAction, NULL); | |
255 | d->muteAction->setEnabled(false); | |
256 | d->muteAction->setProperty("volumeController", QVariant()); | |
257 | ||
258 | d->statusArea->showAudioStatusIcon(false); | |
259 | } else { | |
260 | if (d->videoContentHandler && d->videoContentHandler == contentHandler) { | |
261 | changeVideoDisplayState(NoVideo); | |
262 | d->videoContentHandler = NULL; | |
263 | d->remoteVideoContact.reset(); | |
264 | } | |
265 | ||
266 | d->statusArea->showVideoStatusIcon(false); | |
267 | } | |
268 | } | |
269 | ||
270 | void CallWindow::onLocalVideoSendingStateChanged(bool sending) | |
271 | { | |
272 | kDebug(); | |
273 | ||
274 | if (sending) { | |
275 | changeVideoDisplayState(d->currentVideoDisplayState | LocalVideoPreview); | |
276 | } else { | |
277 | changeVideoDisplayState(d->currentVideoDisplayState & ~LocalVideoPreview); | |
278 | } | |
279 | } | |
280 | ||
281 | void CallWindow::onRemoteVideoSendingStateChanged(const Tp::ContactPtr & contact, bool sending) | |
282 | { | |
283 | kDebug(); | |
284 | ||
285 | if (d->remoteVideoContact && d->remoteVideoContact != contact) { | |
286 | kError() << "Multiple participants are not supported"; | |
287 | return; | |
288 | } | |
289 | ||
290 | if (!d->remoteVideoContact) { | |
291 | d->remoteVideoContact = contact; | |
292 | } | |
293 | ||
294 | if (sending) { | |
295 | changeVideoDisplayState(d->currentVideoDisplayState | RemoteVideo); | |
296 | } else { | |
297 | changeVideoDisplayState(d->currentVideoDisplayState & ~RemoteVideo); | |
298 | } | |
299 | } | |
300 | ||
301 | void CallWindow::changeVideoDisplayState(VideoDisplayFlags newState) | |
302 | { | |
303 | static const char * const preferredSinkFactory = "xvimagesink"; | |
304 | VideoDisplayFlags oldState = d->currentVideoDisplayState; | |
305 | ||
306 | if (oldState.testFlag(LocalVideoPreview) && !newState.testFlag(LocalVideoPreview)) { | |
307 | d->videoContentHandler->unlinkVideoPreviewSink(); | |
308 | d->ui.videoPreviewWidget->setVideoSink(QGst::ElementPtr()); | |
309 | d->ui.videoPreviewWidget->hide(); | |
310 | } else if (!oldState.testFlag(LocalVideoPreview) && newState.testFlag(LocalVideoPreview)) { | |
311 | QGst::ElementPtr sink = QGst::ElementFactory::make(preferredSinkFactory); | |
312 | d->ui.videoPreviewWidget->show(); | |
313 | d->ui.videoPreviewWidget->setVideoSink(sink); | |
314 | d->videoContentHandler->linkVideoPreviewSink(sink); | |
315 | } | |
316 | ||
317 | if (oldState.testFlag(RemoteVideo) && !newState.testFlag(RemoteVideo)) { | |
318 | d->videoContentHandler->unlinkRemoteMemberVideoSink(d->remoteVideoContact); | |
319 | d->ui.videoWidget->setVideoSink(QGst::ElementPtr()); | |
320 | } else if (!oldState.testFlag(RemoteVideo) && newState.testFlag(RemoteVideo)) { | |
321 | QGst::ElementPtr sink = QGst::ElementFactory::make(preferredSinkFactory); | |
322 | d->ui.videoWidget->setVideoSink(sink); | |
323 | d->videoContentHandler->linkRemoteMemberVideoSink(d->remoteVideoContact, sink); | |
324 | } | |
325 | ||
326 | if (newState == NoVideo) { | |
327 | d->ui.callStackedWidget->setCurrentIndex(0); | |
328 | } else { | |
329 | d->ui.callStackedWidget->setCurrentIndex(1); | |
330 | } | |
331 | ||
332 | d->currentVideoDisplayState = newState; | |
333 | } | |
334 | ||
335 | void CallWindow::setupActions() | |
336 | { | |
337 | //TODO implement this feature | |
338 | d->showMyVideoAction = new KToggleAction(i18nc("@action", "Show my video"), this); | |
339 | d->showMyVideoAction->setIcon(KIcon("camera-web")); | |
340 | d->showMyVideoAction->setEnabled(false); | |
341 | actionCollection()->addAction("showMyVideo", d->showMyVideoAction); | |
342 | ||
343 | d->showDtmfAction = new KToggleAction(i18nc("@action", "Show dialpad"), this); | |
344 | d->showDtmfAction->setIcon(KIcon("phone")); | |
345 | d->showDtmfAction->setEnabled(false); | |
346 | connect(d->showDtmfAction, SIGNAL(toggled(bool)), SLOT(toggleDtmf(bool))); | |
347 | actionCollection()->addAction("showDtmf", d->showDtmfAction); | |
348 | ||
349 | //TODO implement this feature | |
350 | d->sendVideoAction = new KToggleAction(i18nc("@action", "Send video"), this); | |
351 | d->sendVideoAction->setIcon(KIcon("webcamsend")); | |
352 | d->sendVideoAction->setEnabled(false); | |
353 | actionCollection()->addAction("sendVideo", d->sendVideoAction); | |
354 | ||
355 | d->muteAction = new KToggleAction(KIcon("audio-volume-medium"), i18nc("@action", "Mute"), this); | |
356 | d->muteAction->setCheckedState(KGuiItem(i18nc("@action", "Mute"), KIcon("audio-volume-muted"))); | |
357 | d->muteAction->setEnabled(false); //will be enabled later | |
358 | connect(d->muteAction, SIGNAL(toggled(bool)), SLOT(toggleMute(bool))); | |
359 | actionCollection()->addAction("mute", d->muteAction); | |
360 | ||
361 | //TODO implement this feature | |
362 | d->holdAction = new KToggleAction(i18nc("@action", "Hold"), this); | |
363 | d->holdAction->setIcon(KIcon("media-playback-pause")); | |
364 | d->holdAction->setEnabled(false); | |
365 | actionCollection()->addAction("hold", d->holdAction); | |
366 | ||
367 | d->hangupAction = new KAction(KIcon("call-stop"), i18nc("@action", "Hangup"), this); | |
368 | connect(d->hangupAction, SIGNAL(triggered()), SLOT(hangup())); | |
369 | actionCollection()->addAction("hangup", d->hangupAction); | |
370 | } | |
371 | ||
372 | void CallWindow::checkEnableDtmf() | |
373 | { | |
374 | bool dtmfSupported = false; | |
375 | Q_FOREACH(const Tp::CallContentPtr & content, d->callChannel->contentsForType(Tp::MediaStreamTypeAudio)) { | |
376 | if (content->supportsDTMF()) { | |
377 | dtmfSupported = true; | |
378 | break; | |
379 | } | |
380 | } | |
381 | ||
382 | kDebug() << "DTMF supported:" << dtmfSupported; | |
383 | d->showDtmfAction->setEnabled(dtmfSupported); | |
384 | ||
385 | if (!dtmfSupported) { | |
386 | toggleDtmf(false); | |
387 | } | |
388 | } | |
389 | ||
390 | void CallWindow::toggleDtmf(bool checked) | |
391 | { | |
392 | d->ui.dtmfStackedWidget->setCurrentIndex(checked ? 1 : 0); | |
393 | } | |
394 | ||
395 | void CallWindow::toggleMute(bool checked) | |
396 | { | |
397 | //this slot is here to avoid connecting the mute button directly to the VolumeController | |
398 | //as there is a signal loop: toggled() -> setMuted() -> mutedChanged() -> setChecked() | |
399 | QObject *volControl = qvariant_cast<QObject*>(sender()->property("volumeController")); | |
400 | if (volControl) { | |
401 | sender()->blockSignals(true); | |
402 | volControl->setProperty("muted", checked); | |
403 | sender()->blockSignals(false); | |
404 | } | |
405 | } | |
406 | ||
407 | void CallWindow::hangup() | |
408 | { | |
409 | kDebug(); | |
410 | d->callChannel->hangup(); | |
411 | } | |
412 | ||
413 | void CallWindow::closeEvent(QCloseEvent *event) | |
414 | { | |
415 | if (!d->callEnded) { | |
416 | kDebug() << "Ignoring close event"; | |
417 | hangup(); | |
418 | event->ignore(); | |
419 | } else { | |
420 | KXmlGuiWindow::closeEvent(event); | |
421 | } | |
422 | } |
0 | /* | |
1 | Copyright (C) 2009-2012 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | Copyright (C) 2010-2011 Collabora Ltd. <info@collabora.co.uk> | |
3 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
4 | ||
5 | This program is free software: you can redistribute it and/or modify | |
6 | it under the terms of the GNU General Public License as published by | |
7 | the Free Software Foundation, either version 2 of the License, or | |
8 | (at your option) any later version. | |
9 | ||
10 | This program is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU General Public License | |
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | */ | |
18 | #ifndef CALL_WINDOW_H | |
19 | #define CALL_WINDOW_H | |
20 | ||
21 | #include <TelepathyQt/CallChannel> | |
22 | #include <KXmlGuiWindow> | |
23 | class CallContentHandler; | |
24 | ||
25 | class CallWindow : public KXmlGuiWindow | |
26 | { | |
27 | Q_OBJECT | |
28 | public: | |
29 | explicit CallWindow(const Tp::CallChannelPtr & channel); | |
30 | virtual ~CallWindow(); | |
31 | ||
32 | enum Status { | |
33 | StatusConnecting, | |
34 | StatusRemoteRinging, | |
35 | StatusRemoteAccepted, | |
36 | StatusActive, | |
37 | StatusDisconnected | |
38 | }; | |
39 | void setStatus(Status status, const Tp::CallStateReason & reason = Tp::CallStateReason()); | |
40 | ||
41 | public Q_SLOTS: | |
42 | void onContentAdded(CallContentHandler *contentHandler); | |
43 | void onContentRemoved(CallContentHandler *contentHandler); | |
44 | void onLocalVideoSendingStateChanged(bool sending); | |
45 | void onRemoteVideoSendingStateChanged(const Tp::ContactPtr & contact, bool sending); | |
46 | ||
47 | private: | |
48 | enum VideoDisplayFlag { | |
49 | NoVideo = 0, | |
50 | LocalVideoPreview = 0x1, | |
51 | RemoteVideo = 0x2 | |
52 | }; | |
53 | Q_DECLARE_FLAGS(VideoDisplayFlags, VideoDisplayFlag); | |
54 | ||
55 | void changeVideoDisplayState(VideoDisplayFlags newState); | |
56 | ||
57 | void setupActions(); | |
58 | void checkEnableDtmf(); | |
59 | ||
60 | private Q_SLOTS: | |
61 | void toggleDtmf(bool checked); | |
62 | void toggleMute(bool checked); | |
63 | void hangup(); | |
64 | ||
65 | protected: | |
66 | virtual void closeEvent(QCloseEvent *event); | |
67 | ||
68 | private: | |
69 | struct Private; | |
70 | Private *const d; | |
71 | }; | |
72 | ||
73 | #endif |
0 | <?xml version="1.0" encoding="UTF-8"?> | |
1 | <ui version="4.0"> | |
2 | <class>CallWindow</class> | |
3 | <widget class="QMainWindow" name="CallWindow"> | |
4 | <property name="geometry"> | |
5 | <rect> | |
6 | <x>0</x> | |
7 | <y>0</y> | |
8 | <width>420</width> | |
9 | <height>315</height> | |
10 | </rect> | |
11 | </property> | |
12 | <widget class="QWidget" name="centralwidget"> | |
13 | <layout class="QHBoxLayout" name="horizontalLayout"> | |
14 | <item> | |
15 | <widget class="QStackedWidget" name="dtmfStackedWidget"> | |
16 | <widget class="QWidget" name="callPage"> | |
17 | <layout class="QHBoxLayout" name="horizontalLayout_4"> | |
18 | <property name="margin"> | |
19 | <number>0</number> | |
20 | </property> | |
21 | <item> | |
22 | <widget class="QStackedWidget" name="callStackedWidget"> | |
23 | <property name="currentIndex"> | |
24 | <number>0</number> | |
25 | </property> | |
26 | <widget class="QWidget" name="avatarLabelPage"> | |
27 | <layout class="QHBoxLayout" name="horizontalLayout_2"> | |
28 | <item> | |
29 | <widget class="QFrame" name="frame"> | |
30 | <property name="frameShape"> | |
31 | <enum>QFrame::StyledPanel</enum> | |
32 | </property> | |
33 | <property name="frameShadow"> | |
34 | <enum>QFrame::Raised</enum> | |
35 | </property> | |
36 | <layout class="QVBoxLayout" name="verticalLayout_2"> | |
37 | <item> | |
38 | <widget class="QLabel" name="remoteUserDisplayLabel"> | |
39 | <property name="text"> | |
40 | <string/> | |
41 | </property> | |
42 | <property name="alignment"> | |
43 | <set>Qt::AlignCenter</set> | |
44 | </property> | |
45 | </widget> | |
46 | </item> | |
47 | </layout> | |
48 | </widget> | |
49 | </item> | |
50 | </layout> | |
51 | </widget> | |
52 | <widget class="QGst::Ui::VideoWidget" name="videoWidget"> | |
53 | <layout class="QGridLayout" name="gridLayout"> | |
54 | <item row="0" column="0"> | |
55 | <spacer name="verticalSpacer"> | |
56 | <property name="orientation"> | |
57 | <enum>Qt::Vertical</enum> | |
58 | </property> | |
59 | <property name="sizeHint" stdset="0"> | |
60 | <size> | |
61 | <width>20</width> | |
62 | <height>212</height> | |
63 | </size> | |
64 | </property> | |
65 | </spacer> | |
66 | </item> | |
67 | <item row="1" column="0"> | |
68 | <widget class="QGst::Ui::VideoWidget" name="videoPreviewWidget" native="true"> | |
69 | <property name="sizePolicy"> | |
70 | <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> | |
71 | <horstretch>0</horstretch> | |
72 | <verstretch>0</verstretch> | |
73 | </sizepolicy> | |
74 | </property> | |
75 | <property name="minimumSize"> | |
76 | <size> | |
77 | <width>106</width> | |
78 | <height>80</height> | |
79 | </size> | |
80 | </property> | |
81 | </widget> | |
82 | </item> | |
83 | <item row="1" column="1"> | |
84 | <spacer name="horizontalSpacer_3"> | |
85 | <property name="orientation"> | |
86 | <enum>Qt::Horizontal</enum> | |
87 | </property> | |
88 | <property name="sizeHint" stdset="0"> | |
89 | <size> | |
90 | <width>291</width> | |
91 | <height>20</height> | |
92 | </size> | |
93 | </property> | |
94 | </spacer> | |
95 | </item> | |
96 | </layout> | |
97 | </widget> | |
98 | </widget> | |
99 | </item> | |
100 | </layout> | |
101 | <zorder>frame</zorder> | |
102 | <zorder>callStackedWidget</zorder> | |
103 | </widget> | |
104 | <widget class="QWidget" name="dtmfPage"> | |
105 | <layout class="QHBoxLayout" name="horizontalLayout_3"> | |
106 | <item> | |
107 | <spacer name="horizontalSpacer_2"> | |
108 | <property name="orientation"> | |
109 | <enum>Qt::Horizontal</enum> | |
110 | </property> | |
111 | <property name="sizeHint" stdset="0"> | |
112 | <size> | |
113 | <width>190</width> | |
114 | <height>20</height> | |
115 | </size> | |
116 | </property> | |
117 | </spacer> | |
118 | </item> | |
119 | <item> | |
120 | <widget class="DtmfWidget" name="dtmfWidget" native="true"/> | |
121 | </item> | |
122 | <item> | |
123 | <spacer name="horizontalSpacer"> | |
124 | <property name="orientation"> | |
125 | <enum>Qt::Horizontal</enum> | |
126 | </property> | |
127 | <property name="sizeHint" stdset="0"> | |
128 | <size> | |
129 | <width>190</width> | |
130 | <height>20</height> | |
131 | </size> | |
132 | </property> | |
133 | </spacer> | |
134 | </item> | |
135 | </layout> | |
136 | </widget> | |
137 | </widget> | |
138 | </item> | |
139 | </layout> | |
140 | </widget> | |
141 | </widget> | |
142 | <customwidgets> | |
143 | <customwidget> | |
144 | <class>DtmfWidget</class> | |
145 | <extends>QWidget</extends> | |
146 | <header>dtmf-widget.h</header> | |
147 | <container>1</container> | |
148 | </customwidget> | |
149 | <customwidget> | |
150 | <class>QGst::Ui::VideoWidget</class> | |
151 | <extends>QWidget</extends> | |
152 | <header location="global">QGst/Ui/VideoWidget</header> | |
153 | <container>1</container> | |
154 | </customwidget> | |
155 | </customwidgets> | |
156 | <resources/> | |
157 | <connections/> | |
158 | </ui> |
0 | <?xml version="1.0" encoding="UTF-8"?> | |
1 | <gui name="callwindow" | |
2 | version="1" | |
3 | xmlns="http://www.kde.org/standards/kxmlgui/1.0" | |
4 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
5 | xsi:schemaLocation="http://www.kde.org/standards/kxmlgui/1.0 | |
6 | http://www.kde.org/standards/kxmlgui/1.0/kxmlgui.xsd" > | |
7 | ||
8 | <MenuBar> | |
9 | <Menu name="call" > | |
10 | <text>Call</text> | |
11 | <Action name="hangup" /> | |
12 | <Action name="hold" /> | |
13 | </Menu> | |
14 | <Menu name="view"> | |
15 | <Action name="showMyVideo" /> | |
16 | <Action name="showDtmf" /> | |
17 | </Menu> | |
18 | <Menu name="media" > | |
19 | <text>Media</text> | |
20 | <Action name="sendVideo" /> | |
21 | <Action name="mute" /> | |
22 | </Menu> | |
23 | </MenuBar> | |
24 | ||
25 | <ToolBar name="mainToolBar" position="bottom" > | |
26 | <text>Main Toolbar</text> | |
27 | <Action name="hangup" /> | |
28 | <Action name="hold" /> | |
29 | <Separator /> | |
30 | <Action name="showDtmf" /> | |
31 | <Action name="showMyVideo" /> | |
32 | <Separator /> | |
33 | <Action name="mute" /> | |
34 | <Action name="sendVideo" /> | |
35 | </ToolBar> | |
36 | ||
37 | </gui> |
0 | /* | |
1 | Copyright (C) 2009 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This program is free software: you can redistribute it and/or modify | |
4 | it under the terms of the GNU General Public License as published by | |
5 | the Free Software Foundation, either version 2 of the License, or | |
6 | (at your option) any later version. | |
7 | ||
8 | This program is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | GNU General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #include "dtmf-handler.h" | |
17 | #include "dtmf-widget.h" | |
18 | ||
19 | struct DtmfHandler::Private | |
20 | { | |
21 | Tp::CallChannelPtr channel; | |
22 | }; | |
23 | ||
24 | DtmfHandler::DtmfHandler(const Tp::CallChannelPtr & channel, QObject *parent) | |
25 | : QObject(parent), d(new Private) | |
26 | { | |
27 | d->channel = channel; | |
28 | } | |
29 | ||
30 | DtmfHandler::~DtmfHandler() | |
31 | { | |
32 | delete d; | |
33 | } | |
34 | ||
35 | void DtmfHandler::connectDtmfWidget(DtmfWidget *dtmfWidget) | |
36 | { | |
37 | connect(dtmfWidget, SIGNAL(startSendDtmfEvent(Tp::DTMFEvent)), | |
38 | SLOT(onStartSendDtmfEvent(Tp::DTMFEvent))); | |
39 | connect(dtmfWidget, SIGNAL(stopSendDtmfEvent()), | |
40 | SLOT(onStopSendDtmfEvent())); | |
41 | } | |
42 | ||
43 | void DtmfHandler::onStartSendDtmfEvent(Tp::DTMFEvent event) | |
44 | { | |
45 | Q_FOREACH(const Tp::CallContentPtr & content, d->channel->contentsForType(Tp::MediaStreamTypeAudio)) { | |
46 | content->startDTMFTone(event); | |
47 | } | |
48 | } | |
49 | ||
50 | void DtmfHandler::onStopSendDtmfEvent() | |
51 | { | |
52 | Q_FOREACH(const Tp::CallContentPtr & content, d->channel->contentsForType(Tp::MediaStreamTypeAudio)) { | |
53 | content->stopDTMFTone(); | |
54 | } | |
55 | } |
0 | /* | |
1 | Copyright (C) 2009 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This program is free software: you can redistribute it and/or modify | |
4 | it under the terms of the GNU General Public License as published by | |
5 | the Free Software Foundation, either version 2 of the License, or | |
6 | (at your option) any later version. | |
7 | ||
8 | This program is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | GNU General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #ifndef DTMF_HANDLER_H | |
17 | #define DTMF_HANDLER_H | |
18 | ||
19 | #include <TelepathyQt/CallChannel> | |
20 | class DtmfWidget; | |
21 | ||
22 | class DtmfHandler : public QObject | |
23 | { | |
24 | Q_OBJECT | |
25 | public: | |
26 | explicit DtmfHandler(const Tp::CallChannelPtr & channel, QObject *parent = 0); | |
27 | virtual ~DtmfHandler(); | |
28 | ||
29 | void connectDtmfWidget(DtmfWidget *dtmfWidget); | |
30 | ||
31 | private Q_SLOTS: | |
32 | void onStartSendDtmfEvent(Tp::DTMFEvent event); | |
33 | void onStopSendDtmfEvent(); | |
34 | ||
35 | private: | |
36 | struct Private; | |
37 | Private *const d; | |
38 | }; | |
39 | ||
40 | #endif |
0 | /* | |
1 | Copyright (C) 2009 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This library is free software; you can redistribute it and/or modify | |
4 | it under the terms of the GNU Lesser General Public License as published | |
5 | by the Free Software Foundation; either version 2.1 of the License, or | |
6 | (at your option) any later version. | |
7 | ||
8 | This program is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | GNU General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU Lesser General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #include "dtmf-widget.h" | |
17 | #include "ui_dtmf-widget.h" | |
18 | #include <QtCore/QSignalMapper> | |
19 | ||
20 | struct DtmfWidget::Private | |
21 | { | |
22 | Ui::DtmfWidget ui; | |
23 | QSignalMapper mapper; | |
24 | }; | |
25 | ||
26 | DtmfWidget::DtmfWidget(QWidget *parent) | |
27 | : QWidget(parent), d(new Private) | |
28 | { | |
29 | d->ui.setupUi(this); | |
30 | connect(&d->mapper, SIGNAL(mapped(int)), SLOT(onButtonPressed(int))); | |
31 | ||
32 | d->mapper.setMapping(d->ui.button0, Tp::DTMFEventDigit0); | |
33 | d->mapper.setMapping(d->ui.button1, Tp::DTMFEventDigit1); | |
34 | d->mapper.setMapping(d->ui.button2, Tp::DTMFEventDigit2); | |
35 | d->mapper.setMapping(d->ui.button3, Tp::DTMFEventDigit3); | |
36 | d->mapper.setMapping(d->ui.button4, Tp::DTMFEventDigit4); | |
37 | d->mapper.setMapping(d->ui.button5, Tp::DTMFEventDigit5); | |
38 | d->mapper.setMapping(d->ui.button6, Tp::DTMFEventDigit6); | |
39 | d->mapper.setMapping(d->ui.button7, Tp::DTMFEventDigit7); | |
40 | d->mapper.setMapping(d->ui.button8, Tp::DTMFEventDigit8); | |
41 | d->mapper.setMapping(d->ui.button9, Tp::DTMFEventDigit9); | |
42 | d->mapper.setMapping(d->ui.buttonAsterisk, Tp::DTMFEventAsterisk); | |
43 | d->mapper.setMapping(d->ui.buttonHash, Tp::DTMFEventHash); | |
44 | ||
45 | connect(d->ui.button0, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
46 | connect(d->ui.button1, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
47 | connect(d->ui.button2, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
48 | connect(d->ui.button3, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
49 | connect(d->ui.button4, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
50 | connect(d->ui.button5, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
51 | connect(d->ui.button6, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
52 | connect(d->ui.button7, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
53 | connect(d->ui.button8, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
54 | connect(d->ui.button9, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
55 | connect(d->ui.buttonAsterisk, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
56 | connect(d->ui.buttonHash, SIGNAL(pressed()), &d->mapper, SLOT(map())); | |
57 | ||
58 | connect(d->ui.button0, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
59 | connect(d->ui.button1, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
60 | connect(d->ui.button2, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
61 | connect(d->ui.button3, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
62 | connect(d->ui.button4, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
63 | connect(d->ui.button5, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
64 | connect(d->ui.button6, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
65 | connect(d->ui.button7, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
66 | connect(d->ui.button8, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
67 | connect(d->ui.button9, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
68 | connect(d->ui.buttonAsterisk, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
69 | connect(d->ui.buttonHash, SIGNAL(released()), SIGNAL(stopSendDtmfEvent())); | |
70 | } | |
71 | ||
72 | DtmfWidget::~DtmfWidget() | |
73 | { | |
74 | delete d; | |
75 | } | |
76 | ||
77 | void DtmfWidget::onButtonPressed(int code) | |
78 | { | |
79 | Q_EMIT startSendDtmfEvent(static_cast<Tp::DTMFEvent>(code)); | |
80 | } |
0 | /* | |
1 | Copyright (C) 2009 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | ||
3 | This library is free software; you can redistribute it and/or modify | |
4 | it under the terms of the GNU Lesser General Public License as published | |
5 | by the Free Software Foundation; either version 2.1 of the License, or | |
6 | (at your option) any later version. | |
7 | ||
8 | This program is distributed in the hope that it will be useful, | |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | GNU General Public License for more details. | |
12 | ||
13 | You should have received a copy of the GNU Lesser General Public License | |
14 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #ifndef DTMF_WIDGET_H | |
17 | #define DTMF_WIDGET_H | |
18 | ||
19 | #include <QtGui/QWidget> | |
20 | #include <TelepathyQt/Constants> | |
21 | ||
22 | class DtmfWidget : public QWidget | |
23 | { | |
24 | Q_OBJECT | |
25 | public: | |
26 | explicit DtmfWidget(QWidget *parent = 0); | |
27 | virtual ~DtmfWidget(); | |
28 | ||
29 | Q_SIGNALS: | |
30 | void startSendDtmfEvent(Tp::DTMFEvent event); | |
31 | void stopSendDtmfEvent(); | |
32 | ||
33 | private Q_SLOTS: | |
34 | void onButtonPressed(int code); | |
35 | ||
36 | private: | |
37 | struct Private; | |
38 | Private *const d; | |
39 | }; | |
40 | ||
41 | #endif |
0 | <?xml version="1.0" encoding="UTF-8"?> | |
1 | <ui version="4.0"> | |
2 | <class>DtmfWidget</class> | |
3 | <widget class="QWidget" name="DtmfWidget"> | |
4 | <property name="geometry"> | |
5 | <rect> | |
6 | <x>0</x> | |
7 | <y>0</y> | |
8 | <width>168</width> | |
9 | <height>161</height> | |
10 | </rect> | |
11 | </property> | |
12 | <layout class="QGridLayout"> | |
13 | <item row="0" column="0"> | |
14 | <widget class="QPushButton" name="button1"> | |
15 | <property name="text"> | |
16 | <string>1</string> | |
17 | </property> | |
18 | </widget> | |
19 | </item> | |
20 | <item row="0" column="1"> | |
21 | <widget class="QPushButton" name="button2"> | |
22 | <property name="text"> | |
23 | <string>2</string> | |
24 | </property> | |
25 | </widget> | |
26 | </item> | |
27 | <item row="0" column="2"> | |
28 | <widget class="QPushButton" name="button3"> | |
29 | <property name="text"> | |
30 | <string>3</string> | |
31 | </property> | |
32 | </widget> | |
33 | </item> | |
34 | <item row="1" column="0"> | |
35 | <widget class="QPushButton" name="button4"> | |
36 | <property name="text"> | |
37 | <string>4</string> | |
38 | </property> | |
39 | </widget> | |
40 | </item> | |
41 | <item row="1" column="1"> | |
42 | <widget class="QPushButton" name="button5"> | |
43 | <property name="text"> | |
44 | <string>5</string> | |
45 | </property> | |
46 | </widget> | |
47 | </item> | |
48 | <item row="1" column="2"> | |
49 | <widget class="QPushButton" name="button6"> | |
50 | <property name="text"> | |
51 | <string>6</string> | |
52 | </property> | |
53 | </widget> | |
54 | </item> | |
55 | <item row="2" column="0"> | |
56 | <widget class="QPushButton" name="button7"> | |
57 | <property name="text"> | |
58 | <string>7</string> | |
59 | </property> | |
60 | </widget> | |
61 | </item> | |
62 | <item row="2" column="1"> | |
63 | <widget class="QPushButton" name="button8"> | |
64 | <property name="text"> | |
65 | <string>8</string> | |
66 | </property> | |
67 | </widget> | |
68 | </item> | |
69 | <item row="2" column="2"> | |
70 | <widget class="QPushButton" name="button9"> | |
71 | <property name="text"> | |
72 | <string>9</string> | |
73 | </property> | |
74 | </widget> | |
75 | </item> | |
76 | <item row="3" column="0"> | |
77 | <widget class="QPushButton" name="buttonAsterisk"> | |
78 | <property name="text"> | |
79 | <string>*</string> | |
80 | </property> | |
81 | </widget> | |
82 | </item> | |
83 | <item row="3" column="1"> | |
84 | <widget class="QPushButton" name="button0"> | |
85 | <property name="text"> | |
86 | <string>0</string> | |
87 | </property> | |
88 | </widget> | |
89 | </item> | |
90 | <item row="3" column="2"> | |
91 | <widget class="QPushButton" name="buttonHash"> | |
92 | <property name="text"> | |
93 | <string>#</string> | |
94 | </property> | |
95 | </widget> | |
96 | </item> | |
97 | </layout> | |
98 | </widget> | |
99 | <resources/> | |
100 | <connections/> | |
101 | </ui> |
0 | /* | |
1 | Copyright (C) 2009 George Kiagiadakis <kiagiadakis.george@gmail.com> | |
2 | Copyright (C) 2011 Collabora Ltd. | |
3 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
4 | ||
5 | This program is free software: you can redistribute it and/or modify | |
6 | it under the terms of the GNU General Public License as published by | |
7 | the Free Software Foundation, either version 2 of the License, or | |
8 | (at your option) any later version. | |
9 | ||
10 | This program is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU General Public License | |
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | */ | |
18 | #include "call-handler.h" | |
19 | ||
20 | #include <KAboutData> | |
21 | #include <KCmdLineArgs> | |
22 | #include <KLocalizedString> | |
23 | ||
24 | #include <TelepathyQt/Types> | |
25 | #include <TelepathyQt/Debug> | |
26 | #include <TelepathyQt/ClientRegistrar> | |
27 | #include <TelepathyQt/CallChannel> | |
28 | #include <TelepathyQt/ChannelClassSpec> | |
29 | #include <TelepathyQt/ChannelFactory> | |
30 | ||
31 | #include <KTp/telepathy-handler-application.h> | |
32 | ||
33 | int main(int argc, char **argv) | |
34 | { | |
35 | KAboutData aboutData("ktp-call-ui", 0, ki18n("KDE Telepathy Call Ui"), "0.4", | |
36 | ki18n("VoIP client for KDE"), KAboutData::License_GPL, | |
37 | ki18n("(C) 2009, George Kiagiadakis")); | |
38 | aboutData.setProgramIconName("internet-telephony"); | |
39 | aboutData.addAuthor(ki18nc("@info:credit", "George Kiagiadakis"), KLocalizedString(), | |
40 | "kiagiadakis.george@gmail.com"); | |
41 | ||
42 | KCmdLineArgs::init(argc, argv, &aboutData); | |
43 | ||
44 | KTp::TelepathyHandlerApplication app; | |
45 | ||
46 | Tp::AccountFactoryPtr accountFactory = Tp::AccountFactory::create( | |
47 | QDBusConnection::sessionBus(), | |
48 | Tp::Features() << Tp::Account::FeatureCore | |
49 | ); | |
50 | ||
51 | Tp::ConnectionFactoryPtr connectionFactory = Tp::ConnectionFactory::create( | |
52 | QDBusConnection::sessionBus(), | |
53 | Tp::Features() << Tp::Connection::FeatureCore | |
54 | << Tp::Connection::FeatureSelfContact | |
55 | ); | |
56 | ||
57 | Tp::ChannelFactoryPtr channelFactory = Tp::ChannelFactory::create( | |
58 | QDBusConnection::sessionBus() | |
59 | ); | |
60 | channelFactory->addCommonFeatures(Tp::Channel::FeatureCore); | |
61 | channelFactory->addFeaturesForCalls( | |
62 | Tp::Features() << Tp::CallChannel::FeatureContents | |
63 | << Tp::CallChannel::FeatureCallState | |
64 | << Tp::CallChannel::FeatureCallMembers | |
65 | ); | |
66 | ||
67 | Tp::ContactFactoryPtr contactFactory = Tp::ContactFactory::create( | |
68 | Tp::Features() << Tp::Contact::FeatureAlias | |
69 | << Tp::Contact::FeatureAvatarData | |
70 | ); | |
71 | ||
72 | KGlobal::ref(); //do not allow the KMainWindow destructor to shut us down | |
73 | ||
74 | Tp::ClientRegistrarPtr registrar = | |
75 | Tp::ClientRegistrar::create(accountFactory, connectionFactory, | |
76 | channelFactory, contactFactory); | |
77 | ||
78 | Tp::SharedPtr<CallHandler> callHandler = Tp::SharedPtr<CallHandler>(new CallHandler()); | |
79 | registrar->registerClient(Tp::AbstractClientPtr::dynamicCast(callHandler), "KTp.CallUi"); | |
80 | ||
81 | return app.exec(); | |
82 | } |
0 | [D-BUS Service] | |
1 | Name=org.freedesktop.Telepathy.Client.KTp.CallUi | |
2 | Exec=@LIBEXEC_INSTALL_DIR@/ktp-call-ui |
0 | /* | |
1 | Copyright (C) 2010 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #include "status-area.h" | |
18 | #include <KIcon> | |
19 | #include <KDebug> | |
20 | ||
21 | StatusArea::StatusArea(KStatusBar *statusBar) | |
22 | : QObject(statusBar), m_statusBar(statusBar) | |
23 | { | |
24 | connect(&m_callDurationTimer, SIGNAL(timeout()), SLOT(onCallDurationTimerTimeout())); | |
25 | ||
26 | m_callDuration.setHMS(0, 0, 0); | |
27 | m_statusBar->insertPermanentItem(m_callDuration.toString(), 1); | |
28 | ||
29 | m_statusLabel = new QLabel; | |
30 | m_statusBar->addWidget(m_statusLabel); | |
31 | } | |
32 | ||
33 | void StatusArea::startDurationTimer() | |
34 | { | |
35 | m_callDurationTimer.start(1000); | |
36 | } | |
37 | ||
38 | void StatusArea::stopDurationTimer() | |
39 | { | |
40 | m_callDurationTimer.stop(); | |
41 | } | |
42 | ||
43 | void StatusArea::setMessage(MessageType type, const QString& message) | |
44 | { | |
45 | if (type == Status) { | |
46 | m_statusLabel->setText(message); | |
47 | } else { | |
48 | kDebug() << "ERROR message:" << message; | |
49 | //TODO handle error messages | |
50 | } | |
51 | } | |
52 | ||
53 | void StatusArea::onCallDurationTimerTimeout() | |
54 | { | |
55 | m_callDuration = m_callDuration.addSecs(1); | |
56 | m_statusBar->changeItem(m_callDuration.toString(), 1); | |
57 | } | |
58 | ||
59 | void StatusArea::showAudioStatusIcon(bool show) | |
60 | { | |
61 | if (show) { | |
62 | if (!m_audioStatusIcon) { | |
63 | QLabel *label = new QLabel; | |
64 | label->setPixmap(KIcon("audio-headset").pixmap(16)); | |
65 | m_audioStatusIcon = label; | |
66 | m_statusBar->insertPermanentWidget(1, m_audioStatusIcon.data()); | |
67 | } else { | |
68 | m_statusBar->insertPermanentWidget(1, m_audioStatusIcon.data()); | |
69 | m_audioStatusIcon.data()->show(); | |
70 | } | |
71 | } else { | |
72 | if (m_audioStatusIcon) { | |
73 | m_statusBar->removeWidget(m_audioStatusIcon.data()); | |
74 | } | |
75 | } | |
76 | } | |
77 | ||
78 | void StatusArea::showVideoStatusIcon(bool show) | |
79 | { | |
80 | if (show) { | |
81 | if (!m_videoStatusIcon) { | |
82 | QLabel *label = new QLabel; | |
83 | label->setPixmap(KIcon("camera-web").pixmap(16)); | |
84 | m_videoStatusIcon = label; | |
85 | m_statusBar->insertPermanentWidget(1, m_videoStatusIcon.data()); | |
86 | } else { | |
87 | m_statusBar->insertPermanentWidget(1, m_videoStatusIcon.data()); | |
88 | m_videoStatusIcon.data()->show(); | |
89 | } | |
90 | } else { | |
91 | if (m_videoStatusIcon) { | |
92 | m_statusBar->removeWidget(m_videoStatusIcon.data()); | |
93 | } | |
94 | } | |
95 | } |
0 | /* | |
1 | Copyright (C) 2010 Collabora Ltd. <info@collabora.co.uk> | |
2 | @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> | |
3 | ||
4 | This library is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU Lesser General Public License as published | |
6 | by the Free Software Foundation; either version 2.1 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public License | |
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | #ifndef STATUS_AREA_H | |
18 | #define STATUS_AREA_H | |
19 | ||
20 | #include <QtCore/QObject> | |
21 | #include <QtCore/QTime> | |
22 | #include <QtCore/QTimer> | |
23 | #include <QtCore/QWeakPointer> | |
24 | #include <QtGui/QLabel> | |
25 | #include <KStatusBar> | |
26 | ||
27 | class StatusArea : public QObject | |
28 | { | |
29 | Q_OBJECT | |
30 | public: | |
31 | enum MessageType { Status, Error }; | |
32 | ||
33 | StatusArea(KStatusBar *statusBar); | |
34 | ||
35 | public Q_SLOTS: | |
36 | void startDurationTimer(); | |
37 | void stopDurationTimer(); | |
38 | void setMessage(MessageType type, const QString & message); | |
39 | void showAudioStatusIcon(bool show); | |
40 | void showVideoStatusIcon(bool show); | |
41 | ||
42 | private Q_SLOTS: | |
43 | void onCallDurationTimerTimeout(); | |
44 | ||
45 | private: | |
46 | KStatusBar *m_statusBar; | |
47 | QTime m_callDuration; | |
48 | QTimer m_callDurationTimer; | |
49 | QLabel *m_statusLabel; | |
50 | QWeakPointer<QWidget> m_audioStatusIcon; | |
51 | QWeakPointer<QWidget> m_videoStatusIcon; | |
52 | }; | |
53 | ||
54 | #endif // STATUS_AREA_H |