diff --git a/support/documents/document/font.html b/support/documents/document/font.html index 7ce0942..17e6474 100644 --- a/support/documents/document/font.html +++ b/support/documents/document/font.html @@ -1,103 +1,103 @@
「KDE の起動が遅い! アプリケーションの動作が重い!」
よくこのような苦情が寄せられます。
フォントの設定を適切に行わないと上記のような症状が発生します。
ホームディレクトリに .qti18nrc というファイルを作って
以下の内容を記述してみてください。
ビットマップ(きれいですが、少し遅いです)
* -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0208.1983-0TrueType(フリー版)
fixed -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0208.1983-0 helvetica -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -aliastt-gothic-*-*-*--*-*-*-*-c-*-jisx0208.1983-0 * -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -aliastt-mincho-*-*-*--*-*-*-*-c-*-jisx0208.1983-0TrueType(CR版)
fixed -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0208.1983-0 helvetica -dynalab-dfgothicp-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -dynalab-dfgothicp-*-*-*--*-*-*-*-c-*-jisx0208.1983-0 * -dynalab-dfminchop-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -dynalab-dfminchop-*-*-*--*-*-*-*-c-*-jisx0208.1983-0
調査中
調査中
調査中
パッケージから以下をインストールしてください。
- お使いのグラフィックボードに対応した X-TT サーバ
- ja-truetypefonts
(あくまでフリーのフォントのため、小さい文字では表示が少々潰れます)fixed -misc-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -misc-fixed-*-*-*--*-*-*-*-c-*-jisx0208.1983-0 helvetica -misc-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -wadalab-gothic-*-*-*--*-*-*-*-c-*-jisx0208.1983-0 * -misc-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0, \ -watanabe-mincho-*-*-*--*-*-*-*-c-*-jisx0208.1983-0
(注) 日本語 KDE があらかじめ設定済みのディストリビューションは省略しています。
To begin with we'll just create a very simple GUI consisting only of
a menubar containing a single menu. The only item in the menu will be the
`Exit' command. From this rather humble beginning we'll extend our
application into a simple but functional text editor. This may seem like
a rather formidable task for a tutorial, but as you will see by
reusing the existing components provided by Qt and KDE it is made very
simple in practice. I'll give the code first then go through it
in detail afterwards. All of the example code is available free for
download from the KDE development website at
http://developer.kde.org/examples.tar.gz.
#ifndef EDIT_H #define EDIT_H #include <ktopwidget.h> class Edit : public KTopLevelWidget { Q_OBJECT public: Edit(); ~Edit(); public slots: void commandCallback(int id_); private: // Child widgets KMenuBar *menu; }; #endif // EDIT_H |
#include <kapp.h> #include <kmenubar.h> #include "edit.h" const int ID_EXIT= 111; Edit::Edit() { QPopupMenu *file = new QPopupMenu; file->insertItem(klocale->translate("Exit"), ID_EXIT); menu = new KMenuBar( this ); CHECK_PTR( menu ); menu->insertItem( klocale->translate("File"), file ); menu->show(); setMenu(menu); // Connect things together connect (file, SIGNAL (activated (int)), SLOT (commandCallback (int))); } Edit::~Edit() { } void Edit::commandCallback(int id_) { switch(id_) { case ID_EXIT: exit(0); break; } } #include "edit.moc" |
Now we'll study the implementation of our Edit class, looking first at the constructor. The constructor creates a QPopupMenu object, this is the File menu. We add the `Exit' item using the insertItem() method. The first parameter is the string to be displayed in the menu, the second is an integer id (you can find out about all the methods of a class by looking at it's class documentation). In order to prepare the applet for translation we call klocale->translate() rather than just setting the label to the literal string 'Exit', this should be done for any string the user will see. We don't have to create our own KLocale object as KApplication (the base class of all KDE application objects) creates one for us. We access the KLocate object using the klocale macro provided by kapp.h.
The next thing we need to do is create a menubar to contain our menu, we do this using a KMenuBar widget. The CHECK_PTR macro used to ensure the widget was created successfully is a Qt provided macro that checks it's parameter is not 0 (if the parameter is 0 it terminates the application with an error message). We create the 'File' item in almost the same way as we created the menu entry (the similarity should come as no suprise once you know that QPopupMenu and KMenuBar have a common baseclass QMenuData). Again we need to call KLocale as string 'File' will be visible to the user. We display our menu by calling its show() method then tell KTLW to manage our menu with setMenu().
The final stage in making our applet work is to connect the menubar
entry to some code to exit the application, that's what the
connect() call does. Qt applications (and hence KDE
applications) use signals and slots to wire one widget to another. A
widget (or any other QObject) will emit a signal whenever it's state
changes, our applet uses the activated() signal that a
QPopupMenu emits when a user selects a menu item. This signal must be
connected to the commandCallback() slot we declared in the
Edit class. As you can see the commandCallback() slot
looks no different to a normal method, the only difference is the
declaration that this method is a slot in the header file.
commandCallback() exits the program if the id_ parameter it was
passed is the constand ID_EXIT - the same constant we used to identify
the 'Exit' menu item. Signals and slots can have parameters and they
are treated like those of any other method. Qt checks that the type
signature of the signal matches that of the slot (and reports the
error if they do not match). Now we can take a look at the
connect() method call in the Edit constructor.
connect (file, SIGNAL (activated (int)), SLOT (commandCallback (int))); |
The first parameter is the object that will omit the signal, in our case it's the QPopupMenu file. The next parameter is the signal to be connected, you must specify the name of the signal and the types of it's parameters (as they appear in the class header file or class documentation) using the SIGNAL() macro. The last parameter connect() takes is the slot specified using the SLOT() macro and specifying it's parameters as before. Qt will inform you at run time if the connection is invalid. QObject provides a number of other overloaded versions of the connect() method, you should look at the Qt class documentation for more details. It is perfectly acceptable to connect a signal to more than one slot or to connect more than one signal to a single slot.
The last feature to note about this simple applet is that we include the file edit.moc at the end of the class implementation. The `moc' file is the output of the moc preprocessor that must must be applied to any class that inherits QObject. You normally invoke moc via a makefile rather than directly and you must ensure that its output is compiled and linked to your application. The easiest way to ensure this is to simply include the moc output in the class implementation which is the approach used here. It is important to ensure that moc is rerun if you change the class declaration or you may get strange errors.
You may think that this was a lot of work just to create a completely useless applet, but we've come a long way already: We've learned about session management, creating menus, internationalisation and the basis of Qt, signals and slots. The next stage will be to make our applet actually do something!
You can see the complete code for this version of Edit as example2 in the source files for this tutorial.
Qt provides us with QMultiLineEdit, a widget for editing text, this
will form the core of our editor applet. We declare a member variable
to hold the widget in the Edit class declaration like this:
QMultiLineEdit *view; |
view= new QMultiLineEdit(this, "Main View"); setView(view); |
We already know how to add menu items, so adding some new ones for
load and save is easy. The code is almost the same as that for the
'Exit' item (note that we now need some more constants like ID_SAVE to
identify the new commands).
file->insertItem(klocale->translate("Open..."), ID_OPEN ); file->insertItem(klocale->translate("Save"), ID_SAVE); file->insertItem(klocale->translate("Save As..."), ID_SAVEAS); |
Now that we've created the menu items, all that remains is to make
them do something. The code required is very straight forward. We'll
look first at the `Open' command. All we need to do is create a new
case in the switch statement of the commandCallback() slot, and
then add the code to open a file.
case ID_OPEN: name= QFileDialog::getOpenFileName(); if (!name.isEmpty()) { load(name); } break; |
The load method uses the QFile class to read the contents of the
selected file. The QFile class is provided by Qt and provides an
easy to use platform independent way to access files. It is used
here in combination with QTestStream which lets us read the contents
of the file a line at time. Each line is appended to the text widget
as it is read.
It is important to keep track of the name of the current file name
(so we can implement `Save') so we add a new instance variable
filename_ to the Edit class. This value is set by the load
method.
void Edit::load(const char *filename) { QFile f( filename ); if ( !f.open( IO_ReadOnly ) ) return; view->setAutoUpdate( FALSE ); view->clear(); QTextStream t(&f); while ( !t.eof() ) { QString s = t.readLine(); view->append( s ); } f.close(); view->setAutoUpdate( TRUE ); view->repaint(); filename_= filename; } |
The 'Save As' command is almost the same as the 'Open' command. We now
use the getSaveFileName() which unlike getOpenFileName()
does not require that the filename choosen should be that of an
existing file. The save command is also easy: if we already know the
filename then save the text, if not then call the saveAs()
command.
case ID_SAVE: if (!filename_.isEmpty()) saveAs(filename_); else { name= QFileDialog::getSaveFileName(); if (!name.isEmpty()) saveAs(name); } break; case ID_SAVEAS: name= QFileDialog::getSaveFileName(); if (!name.isEmpty()) saveAs(name); break; |
void Edit::saveAs(const char *filename) { QFile f( filename ); if ( !f.open( IO_WriteOnly ) ) return; QTextStream t(&f); t << view->text(); f.close(); setHint(filename); filename_= filename; } |
case ID_ABOUT: QMessageBox::about(this, "About Edit", "This is a simple text editor example program."); break; |
The first thing we'll tackle is adding a status bar to our applet,
we'll use it to display the name of the currently open file. KDE
provides a status bar widget, KStatusBar, and KTLW knows how to manage
it, so there's not much left for us to do. KStatusBar has an API very
similar to that of the menu widgets so you should be able to figure
out what's going on. Note that after showing our status bar we tell
KTLW to manage it. We can change the string displayed on the status
bar using the id constant ID_HINTTEXT, this is implemented in the slot
setHint().
void Edit::initStatusBar() { statusbar= new KStatusBar(this); statusbar->insertItem("Welcome to Edit", ID_HINTTEXT); statusbar->show(); setStatusBar(statusbar); } void Edit::setHint(const char *text) { statusbar->changeItem(text, ID_HINTTEXT); } |
We set the string in the status bar when the user invokes any method that changes the filename, for example loading and saving.
We'll now add a toolbar to Edit, this is slightly more complicated as
we need to assign icons to the buttons and setup the tooltips. We make
use of the KIconLoader class to handle loading (and caching) of the toolbar
icons. This class searches in the directories specified by the KDE File
System Standard for an icon, which as we're only using standard icons, suits
us fine. We use a macro provided by kapp.h to access the icon loader
created by KApplication.
void Edit::initToolBar() { KIconLoader *loader = kapp->getIconLoader(); toolbar = new KToolBar(this); toolbar->insertButton(loader->loadIcon("filenew.xpm"), ID_NEW, TRUE, klocale->translate("Create a new file")); toolbar->insertButton(loader->loadIcon("fileopen.xpm"), ID_OPEN, FALSE, klocale->translate("Open a file")); toolbar->insertButton(loader->loadIcon("filefloppy.xpm"), ID_SAVE, FALSE, klocale->translate("Save the current file")); addToolBar(toolbar); toolbar->setBarPos(KToolBar::Top); toolbar->show(); connect(toolbar, SIGNAL(clicked(int)), SLOT(commandCallback(int))); } |
We connect the toolbars clicked signal to the same slot as we use for the menus. This is perfectly safe as we are using the same id numbers for commands in each, and we are free to connect as many signals as we want to a slot.
It is generally good practice when designing a user interface to prevent the user invoking an operation that cannot be performed. We do this in Qt by enabling and disabling widgets depending on the state of the application. For example if you have made no changes to a document then saving to its original file makes no sense (though saving it to a different file is often useful). All Qt and KDE widgets have a method setEnabled() which is used to `grey out' the widget and disable it.
KMenuBar and KToolbar both make the process of enabling and disabling
their entries easy by providing a method which will set the state of
an entry specified by its command id. We call both of these in the
implementation of enableCommand().
void Edit::enableCommand(int id) //SLOT { toolbar->setItemEnabled(id, true); menu->setItemEnabled(id, true); } void Edit::disableCommand(int id) // SLOT { toolbar->setItemEnabled(id, false); menu->setItemEnabled(id, false); } |
void Edit::textChanged() { modified= true; enableCommand(ID_SAVE); enableCommand(ID_SAVEAS); } |
The final thing we will add to our editor in this section is a confirmation dialog to be shown when the user tries to exit when there are unsaved changes in the editor. The dialog is a standard Qt warning dialog.
The dialog is implemented using the exit() method. This method simply tests the flag we created to indicate modifications, and uses another static method of QMessageBox to display a warning dialog.
int Edit::exit() { int die= 0; if (!modified) die= 1; else if (QMessageBox::warning(this, klocale->translate("Unsaved Changes"), "You have unsaved changes, you will loose " "them if you exit now.", "Exit", "Cancel", 0, 1, 1)) die= 0; else die= 1; return die; } |
始めるにあたって1つのメニューを含むメニューバーだけから構成されるとても簡単なGUIを作ってみましょう。`Exit'コマンドだけをメニューに含みます。このむしろ謙虚なものから、私たちはアプリケーションをシンプルながら機能的なエディタに拡張していきたいと思います。これはチュートリアルにしては手ごわいものかも知れませんが、QtやKDEによって提供されているコンポーネントを再利用することを見ることで簡単に練習できます。私は最初にコードを見せてあとで詳しく追っていきます。全てのサンプルコードはKDEの開発者用ウェブサイトのhttp://developer.kde.org/examples.tar.gzから自由にダウンロードできます。
#ifndef EDIT_H #define EDIT_H #include <ktopwidget.h> class Edit : public KTopLevelWidget { Q_OBJECT public: Edit(); ~Edit(); public slots: void commandCallback(int id_); private: // 子ウィジェット KMenuBar *menu; }; #endif // EDIT_H |
#include <kapp.h> #include <kmenubar.h> #include "edit.h" const int ID_EXIT= 111; Edit::Edit() { QPopupMenu *file = new QPopupMenu; file->insertItem(klocale->translate("Exit"), ID_EXIT); menu = new KMenuBar( this ); CHECK_PTR( menu ); menu->insertItem( klocale->translate("File"), file ); menu->show(); setMenu(menu); // 互いを接続します connect (file, SIGNAL (activated (int)), SLOT (commandCallback (int))); } Edit::~Edit() { } void Edit::commandCallback(int id_) { switch(id_) { case ID_EXIT: exit(0); break; } } #include "edit.moc" |
私たちは今、コンストラクタを最初に見ることによりEditクラスのインプリメントを学びます。コンストラクタはQPopupMenuオブジェクトを生成します、これはFileメニューです。私たちはinsertItem() メソッドを使って`Exit'アイテムを追加します。最初のパラメターはメニューで表示される文字列で、2番目は整数のidです(あなたはクラスドキュメンテーションを見ることで、クラスの全てのメソッドを見つけることができます)。翻訳のためのアプレットの準備としてただの'Exit'文字列のラベルをセットする代わりにklocale->translate() を呼びます。ユーザーが見るであろうどんな文字列もこうされるべきです。私たちは私たち独自のKLocaleオブジェクトを作る必要はありません、というのはKApplication(全てのKDEアプリケーションオブジェクトの基本クラス)が作ってくれるからです。私たちはkapp.hによって提供されるklocaleマクロを使ってKLocateオブジェクトにアクセスします。
次に私たちがやることは私たちのメニューを含むメニューバーを作ることです、私たちはKMenuBarウィジェットを使ってこれをやります。CHECK_PTRマクロ(ウィジェットがうまく作られたかを確かめる)はQtが供給するパラメターが0かどうかをチェックするマクロです(もしパラメターが0ならアプリケーションをエラーともに終了させます)。私たちは私たちがメニューエントリを作ったのとほぼ同じ方法で'File'アイテムを作ります(この一致は驚くに足りません、なぜならQPopupMenuとKMenuBarは同じ基本クラスQMenuDataを継承しているからです)。再び私たちはKLocaleを呼ぶ必要があります、というのは'File'という文字列はユーザーに見えるからです。私たちはshow() メソッドを使ってメニューを表示し、KTLWにsetMenu()でメニューを管理することを知らせます。
私たちのアプレットが動くようにするための最後のステージは、メニューバーエントリをアプリケーションが終了するためのコードと接続することです、これはconnect()
呼び出しによって行なわれます。Qtアプリケーション(つまりKDEアプリケーション)はウィジェットを繋げるためにシグナルとスロットを使います。ウィジェット(もしくは他のあらゆるQObject)は状態が変わった時はいつでもシグナルを発行します。私たちのアプレットではQPopupMenuがユーザーがメニューアイテムを選択した時に発行する
activated()
シグナルを使用します。このシグナルはEdit クラスで宣言された
commandCallback()
スロットに接続しなければなりません。 commandCallback() を見て分かるように、スロットは通常のメソッドと違いはそうありません。唯一の違いは宣言で、このメソッドはヘッダーファイルにあるスロットです。commandCallback()
は渡されたパラメターが定数 ID_EXIT--私たちが'Exit'メニューアイテムを識別するのと同じ定数--だったらプログラムを終了します。シグナルとスロットはパラメターを持て、それらは他のメソッドのパラメターと同様に扱えます。Qtはシグナルのtype
signatureがスロットのそれとマッチするか(そしてマッチしなければエラーを返します)をチェックします。さて、Editコンストラクタのconnect()
メソッド呼び出しのところを見てみましょう。
connect (file, SIGNAL (activated (int)), SLOT (commandCallback (int))); |
最初のパラメターはシグナルを排除するオブジェクトで、私たちのケースでは QPopupMenu file です。次のパラメターは接続されるべきシグナルです。あなたはシグナルの名前とそのパラメターの型をSIGNAL()マクロを使って特定しなくてはなりません(というのはパラメターはクラスヘッダーファイルかクラスドキュメントに現れるからです)。connect() が取る最後のパラメターはSLOT() マクロを使って特定されるスロットで、前と同様そのパラメターも特定します。Qtは実行時に、もし接続が無効だと知らせます。QObjectはたくさんのオーバーロードバージョンのconnect() メソッドを提供します、詳しくはQt クラスドキュメントを御覧下さい。ひとつのシグナルをひとつ以上のスロットに接続することや、ひとつ以上のシグナルをひとつのスロットに接続することは全く問題はありません。
この簡単なアプレットで注意しておかなければならない最後の特徴はクラスインプリメントの最後の方でインクルードしたedit.mocファイルです。`moc'ファイルはmocプリプロセッサーの出力で、QObjectを継承するどんなクラスにも適用されなければいけません。あなたは通常直接mocを呼び出すよりmakefile経由で呼び出すでしょう。そしてその出力はあなたのアプリケーションにコンパイル、リンクされることを確かめておいて下さい。これを確かめるもっとも簡単な方法は単純にmoc出力をここで使ったクラスインプリメントのアプローチのようにインクルードすることです。あなたがクラス宣言の部分を変更した時にmocが再実行されることを確かめておくことは重要です、というのはそうでないなら変なエラーが出てしまうからです。
あなたはこんな全く使えないアプレットを作るには多過ぎる作業だと考えたでしょう、しかし私たちは長い道のりを来ました。私たちはセッションマネージメント、メニュー作成、国際化、Qtの基礎シグナルとスロットを学びました。次のステージでは私たちのアプレットを実際に何かをさせるようにします!
あなたはこのチュートリアルのソースファイルのexample2でこのバージョンの Edit の完全なコードが見れます。
Qtはテキストを編集するウィジェット、QMultiLineEditを提供します。これは私たちのエディタアプレットの核をなします。私たちはEdit
クラス宣言の中にあるウィジェットのメンバ変数をこのように宣言します:
QMultiLineEdit *view; |
view= new QMultiLineEdit(this, "Main View"); setView(view); |
私たちは既にどうやってメニューアイテムを追加するかを知っています、よってloadとsaveのために新しいものを追加するのは簡単です。そのコードは'Exit'
アイテムとほぼ同じです(今私たちには ID_SAVEのような定数が新しいコマンドのために必要なことに注意して下さい)。
file->insertItem(klocale->translate("Open..."), ID_OPEN ); file->insertItem(klocale->translate("Save"), ID_SAVE); file->insertItem(klocale->translate("Save As..."), ID_SAVEAS); |
今私たちはメニューアイテムを作成しました。残りの仕事はそれらが何かをするようにすることです。必要なコードは非常に直接的です。最初に`Open'
コマンドを見てみましょう。私たちがしなければならないことはommandCallback()
スロットのswitchのところに新しいcaseを作ることです。
case ID_OPEN: name= QFileDialog::getOpenFileName(); if (!name.isEmpty()) { load(name); } break; |
loadメソッドは選択したファイルの中身を読み込むためにQFileクラスを使います。QFileクラスはQtによって提供され、プラットフォーム非依存のファイルアクセスの方法を提供します。ここでは一回にファイルの中身を1行読むことのできるQTestStreamと組み合わせて使われています。それぞれの行は読まれるたびにテキストウィジェットに付加します。現在のファイル名のトラック名を残しておくことは重要なので(それによって'Save'がインプリメントできる)、即席の
filename_
変数をEditクラスに加えます。この値はloadメソッドによってセットされます。
void Edit::load(const char *filename) { QFile f( filename ); if ( !f.open( IO_ReadOnly ) ) return; view->setAutoUpdate( FALSE ); view->clear(); QTextStream t(&f); while ( !t.eof() ) { QString s = t.readLine(); view->append( s ); } f.close(); view->setAutoUpdate( TRUE ); view->repaint(); filename_= filename; } |
'Save As'コマンドはほとんど'Open'コマンドと同じです。私たちは getSaveFileName()を使います、これはgetOpenFileName()と違って選んだファイル名が存在するファイル名であることを要求しません。saveコマンドは簡単です。もし私たちがファイル名を知っているのなら文章を保存し、そうでないならsaveAs()
コマンドが呼び出します。
case ID_SAVE: if (!filename_.isEmpty()) saveAs(filename_); else { name= QFileDialog::getSaveFileName(); if (!name.isEmpty()) saveAs(name); } break; case ID_SAVEAS: name= QFileDialog::getSaveFileName(); if (!name.isEmpty()) saveAs(name); break; |
void Edit::saveAs(const char *filename) { QFile f( filename ); if ( !f.open( IO_WriteOnly ) ) return; QTextStream t(&f); t << view->text(); f.close(); setHint(filename); filename_= filename; } |
case ID_ABOUT: QMessageBox::about(this, "About Edit", "This is a simple text editor example program."); break; |
最初に取り組むことはアプレットにステータスバーを追加することです。わたしたちはそれを現在開いているファイルの名前を表示させるのに使います。KDEはステータスバーウィジェットKStatusBarを提供し、KTLWはその管理ができるのでわたしたちがしなければならないことはそれほど残されていません。KStatusBarはメニューウィジェットととても似たAPIを持っているので何が行なわれているかあなたは分かるでしょう。ステータスバーを表示したあとKTLWにそれを管理させるために報告して下さい。私たちはID_HINTTEXT定数を使ってステータスバーに表示させる文字列を変えることができます。これは
setHint()スロットにインプリメントします。
void Edit::initStatusBar() { statusbar= new KStatusBar(this); statusbar->insertItem("Welcome to Edit", ID_HINTTEXT); statusbar->show(); setStatusBar(statusbar); } void Edit::setHint(const char *text) { statusbar->changeItem(text, ID_HINTTEXT); } |
私たちは例えば読み込みや保存のようにファイル名を変えるようなメソッドをユーザーが呼び出した時、ステータスバーに文字列をセットします。
今度はツールバーを追加します。これはちょっと複雑です、というのは私たちがボタンアイコンの割り当てやツールチップのセットをする必要があるからです。私たちはツールバーアイコンの読み込み(とキャッシング)を扱うためにKIconLoaderクラスを利用します。
このクラスはKDE File System Standardによって指定されるディレクトリでアイコン(私たちはただ普通の、用途に合うアイコンを使います)を検索します。
私たちはKApplicationによって作られるアイコンローダーにアクセスするためkapp.h
によって提供されるマクロを使います。
void Edit::initToolBar() { KIconLoader *loader = kapp->getIconLoader(); toolbar = new KToolBar(this); toolbar->insertButton(loader->loadIcon("filenew.xpm"), ID_NEW, TRUE, klocale->translate("Create a new file")); toolbar->insertButton(loader->loadIcon("fileopen.xpm"), ID_OPEN, FALSE, klocale->translate("Open a file")); toolbar->insertButton(loader->loadIcon("filefloppy.xpm"), ID_SAVE, FALSE, klocale->translate("Save the current file")); addToolBar(toolbar); toolbar->setBarPos(KToolBar::Top); toolbar->show(); connect(toolbar, SIGNAL(clicked(int)), SLOT(commandCallback(int))); } |
私たちはツールバー"clicked"シグナルをメニューで使ったのと同じスロットに接続します。これは全く安全です。というのはコマンドそれぞれに同じidナンバーを使っているので、わたしたちは多くのシグナルを欲しいだけスロットに自由に接続することができます。
ユーザーインターフェースのデザイン時にユーザーが働きようがない操作を呼び出すことを防止するのは一般的に良い練習です。私たちはこれをQtでアプリケーションの状態に依存して、ウィジェットを有効・無効にすることで行ないます。例えばもしあなたが文章を変更していないのに、元のファイルに保存することはナンセンスです(ただし違うファイルに保存することは有用です)。全てのQt,KDEのウィジェットはウィジェットを`grey out'し無効にする setEnabled() メソッドを持っています。
KMenuBarとKToolbarは両方ともコマンドidによって特定されるエントリーの状態をセットするメソッドを提供することによってそれらのエントリーを有効・無効にするプロセスを簡単に作れます。わたしたちはこれら両方enableCommand()のインプリメントの中で呼び出します。
void Edit::enableCommand(int id) //スロット { toolbar->setItemEnabled(id, true); menu->setItemEnabled(id, true); } void Edit::disableCommand(int id) // スロット { toolbar->setItemEnabled(id, false); menu->setItemEnabled(id, false); } |
void Edit::textChanged() { modified= true; enableCommand(ID_SAVE); enableCommand(ID_SAVEAS); } |
あなたがこのセクションのエディタに最後に加えることは、エディタに保存されていない変更がある時にユーザーが終了しようとした時に表示される確認ダイアログです。
ダイアログはexit()メソッドを使ってインプリメントされます。このメソッドは単に変更を指すためにわたしたちが作ったフラグをテストし、警告ダイアログを表示するためにもうひとつのQMessageBoxスタティックメソッドを使います。
int Edit::exit() { int die= 0; if (!modified) die= 1; else if (QMessageBox::warning(this, klocale->translate("Unsaved Changes"), "You have unsaved changes, you will loose " "them if you exit now.", "Exit", "Cancel", 0, 1, 1)) die= 0; else die= 1; return die; } |
Qt は ver.2 以降、内部コードが Unicode 化されています。
文字列は EUC のまま渡すと文字化けしてしまいます。
そのため Unicode に変換してから渡す必要があります。
内部処理の際にも Unicode であることを意識して行う必要があります。
これらは他のライブラリではあまり見掛けない独特な手法です。
そこで Unicode 関連の処理についてまとめてみました。
Unicode とは世界中の主要な文字を単一の文字テーブルに定義したものです。
テーブルは 16bit で表され、理論上 65,536 文字を収録することができます。
16bit で表された Unicode 体系を UCS-2 といいます。
従来の char* 型文字列では UCS-2 を処理することができません。
そのためマルチバイト処理により 8bit 化して
char* 型文字列として扱えるようにした規格が UTF-8 です。
UCS-2 と UTF-8 との変換では情報の欠損がないため、
表記内容を等価な物として扱うことができます。
そのため char* 型で処理する必要がある場合には、
一時的に UTF-8 に変換して処理後に UCS-2 に戻すという作業が必要になります。
処理対象が UCS-2 または UTF-8 のみであれば
特に難しいことを考えなくても取り扱うことができるのですが、
現状では EUC など従来の文字コードがメインのためそうもいきません。
これが Qt での文字コード処理を複雑にしている主な原因です。
QString str, str2; str.sprintf("%s", str2); ---> str.sprintf("%s", (const char *)str2.utf8());
(const char *) QString::fromLocal8Bit(str).utf8()
qstring.sprintf(unicodestr, args, ...); ---> qstring = QString::fromUtf8(QCString().sprintf(unicodestr.utf8(), args, ...));
kde.orgにあるチュートリアルの翻訳物です。
diff --git a/support/documents/document/start_time.html b/support/documents/document/start_time.html index f1a3f2d..c419485 100644 --- a/support/documents/document/start_time.html +++ b/support/documents/document/start_time.html @@ -1,225 +1,225 @@
KDE自体少し重いプログラムで日本語化KDEはさらに重くなりますが、しかし最近のマシンでは気になる
ことはないと思います。どうしても遅いと感じたら下のデータと比べてみて下さい。もし比べてみてかなり
遅い場合は遅くなっている原因があります。大体~/.qti18nrcが原因のことが多いので見直してみて下さい。
用語
キャッシュある/なし…一回立ちあげたプログラムはメモリにキャッシュが残っていることがあるので
次回立ち上げが高速になります。boot直後は当然キャッシュはありません。
--------------------------------------------------------------------------
[測定環境]
CPU: MMX/233, mem: 96MB
OS: VineLinux1.1CR, kernel: 2.0.36
X: XFree3.3.3.1(+X-TT)
font: ビットマップフォント
[結果]
1回目: 57秒 (boot 直後)
2回目: 36秒 (X 終了後、再度 startx)
[**追加報告**]
KDE 以前の問題ですが、ためしに、XF86Config の
FontPath を最小限にし、
使わないフォント(ハングル等)をはずして、フォント数を半分程度にしてみました。
結果、以下のようになりました。
[計測結果]
・KDE
ビットマップ
boot 直後: 57秒
-> 50秒
X再起動: 36秒
-> 20秒
TrueType
boot 直後: 48秒
X 再起動: 18秒
・WindowMaker(参考)
boot 直後: 20秒
X 再起動: 11秒
ちなみに .qti18nrc は
* -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0,
\
-alias-fixed-*-*-*--*-*-*-*-c-*-jisx0208.1983-0
XF86Config で5行コメントアウトしました。
FontPath "/usr/X11R6/lib/X11/fonts/japanese:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/TrueType"
FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Type1"
# FontPath "/usr/X11R6/lib/X11/fonts/Speedo"
# FontPath "/usr/X11R6/lib/X11/fonts/japanese"
# FontPath "/usr/X11R6/lib/X11/fonts/misc"
# FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
# FontPath "/usr/X11R6/lib/X11/fonts/100dpi"
--------------------------------------------------------------------------
[測定環境]
キャッシュにある状態ではかりました。
Vine-Linux 1.0(1 -2.0.36 + glibc-2.0.7 + XFree86-3.3.3.1)
Celeron(375MHz(本来は?)) + memory 128MB
で kinput2 + kfm + kvt を立ち上げます。
~/.cshrcでdateコマンドを実行してkvtに表示された時間と
~/.xinitrcの最初に表示させた時間との差をとりました。
1. TrueType fonts
"~/.qti18nrc"
Courier -aliastt-gothic-*-r-normal--0-0-0-0-c-0-jisx0208.1983-0,
-aliastt-mincho-*-r-normal--0-0-0-0-c-0-jisx0208.1983-0
Helvetica -aliastt-gothic-*-r-normal--0-0-0-0-c-0-jisx0208.1983-0,
-aliastt-mincho-*-r-normal--0-0-0-0-c-0-jisx0208.1983-0
*
-aliastt-gothic-*-r-normal--0-0-0-0-c-0-jisx0208.1983-0,
-aliastt-mincho-*-r-normal--0-0-0-0-c-0-jisx0208.1983-0
で16秒。
2. Bitmap fonts
Courier -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0,
-alias-fixed-*-*-*--*-*-*-*-c-*-jisx0208.1983-0
Helvetica -alias-fixed-*-*-*--*-*-*-*-*-*-jisx0208.1983-*,
-alias-fixed-*-*-*--*-*-*-*-*-*-jisx0201.1976-*
* -alias-fixed-*-*-*--*-*-*-*-*-*-jisx0208.1983-*,
-alias-fixed-*-*-*--*-*-*-*-*-*-jisx0201.1976-*
で19から20秒
3. ~/.qti18nrcなし
で42から44秒
でした。
それぞれ2回づつ計測しています。
--------------------------------------------------------------------------
[測定環境]
Pentium2-333(417MHz)x2, Memory 128MB,
FreeBSD-3.2R, XFree3.3.3.1+X-TT
kpanel,kfm等を立ち上げた場合の時間です。
ビットマップ、キャッシュなし: 17秒
ビットマップ、キャッシュあり: 11秒
TrueType、 キャッシュなし: 16秒
TrueType、 キャッシュあり: 10秒
.qti18nrcなし、キャッシュなし: 30秒
.qti18nrcなし、キャッシュあり: 25秒
.qti18nrc は以下のとおりです。
・ビットマップ(FreeBSDにVineのAlias-Fixedを入れています)
fixed -alias-fixed-*-*-*--14-*-*-*-c-*-jisx0201.1976-0,
-alias-fixed-*-*-*--14-*-*-*-c-*-jisx0208.1983-0
* -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0,
-alias-fixed-*-*-*--*-*-*-*-c-*-jisx0208.1983-0
・TrueType
* -wadalab-gothic-*-*-*--*-*-*-*-c-*-jisx0208.1983-0
------------------------------------------------------------------------------
[測定環境]
Cyrix 6x86MX-PR233(200MHz), Memory 64MB
FreeBSD 3.2R, XFree3.3.3.1+X-TT
ビットマップ、キャッシュなし: 30秒
ビットマップ、キャッシュあり: 22秒
TrueType、 キャッシュなし: 30秒
TrueType、 キャッシュあり: 20秒
.qti18nrcなし、キャッシュなし: 62秒
.qti18nrcなし、キャッシュあり: 50秒
ビットマップとTrueTypeで時間がほとんど同じです。
CyrixのCPUは浮動小数演算が遅いかわりに整数演算が速く、
コンパイルや圧縮・解凍では有利だということが言われていましたが、
どうもその辺が関係している可能性があります。
(ビットマップの展開は整数で、TrueTypeは浮動小数?)
CyrixとMMXという違いはあるのですが大体同スペックですので、
ちょっとこれは遅すぎるという感じがします。
~/.qti18nrc はどの設定しておられるでしょうか?
ひょっとして以下のようにすると速くなるかもしれません。
fixed -alias-fixed-*-*-*--14-*-*-*-c-*-jisx0201.1976-0,
-alias-fixed-*-*-*--14-*-*-*-c-*-jisx0208.1983-0
* -alias-fixed-*-*-*--*-*-*-*-c-*-jisx0201.1976-0,
-alias-fixed-*-*-*--*-*-*-*-c-*-jisx0208.1983-0
fixedは変な書き方をしていますが、
11ポイントで半角2文字が全角1文字と同じ幅になるようにしたためです。
(なぜか11ポイントが実際には14ポイントとして表示されるため)
-------------------------------------------------------------------------
[測定環境]
Cyrix 6x86MX-PR233(200MHz), Memory 64MB
Vine Linux 1.1, XFree3.3.3.1+X-TT
ビットマップ、キャッシュなし: 38秒
ビットマップ、キャッシュあり: 20秒
TrueType、 キャッシュなし: 38秒
TrueType、 キャッシュあり: 20秒
.qti18nrcなし、キャッシュなし: 54秒
.qti18nrcなし、キャッシュあり: 35秒
ビットマップとTrueTypeで起動時間が同じでした。
-------------------------------------------------------------------------
[測定環境]
PowerPC604e/200Mhz(PowerMac7600)
512k(2nd cache) , Memory 144MB
LinuxPPC 1999(RedHat6.0見当)
XFree86-3.3.3.1 + X-TT
kde*-1.1.1+i18n
startx(startkde)にかかった時間
キャッシュ無し : 34秒
キャッシュ有り : 21秒
----------------------------------------------------------------------------
[測定環境]
Celeron300A(on 450MHz)x2,memory 128MB
Debian GNU/Linux 2.1(Slink),Linux-2.2.12
XFree3.3.5+X-TT-1.2.1
KDE-1.1.2pre3+patchいろいろ
同時にkinput2,kterm x2も起動,その他のkde関連のプログラム(kfm等)は立ちあげず
フォントにはビットマップフォントを使用
で約15秒です。キャッシュにある状態では11秒ぐらいでした。
----------------------------------------------------------------------------
[測定環境]
P-MMX166, Memory: 128MB
VineLinux1.1CR,kernel 2.0.36
ログインしてkinput2 とkterm が立ち上がるまでの時間を計りました。
Boot直後は、 50秒。
一旦、ログアウトしてから再ログインしたら 32秒(以降、同じ)
試しに、メモリを64MBに落としてみましたが、同じ結果でした。
~/.qti18nrc
fixed -misc-fixed-*-*-*--*-*-*-*-*-*-jisx0201.1976-0,
-misc-fixed-*-*-*--*-*-*-*-*-*-jisx0208.1983-0
* -alias-fixed-*-*-*--*-*-*-*-*-*-jisx0201.1976-0,
-alias-fixed-*-*-*--*-*-*-*-*-*-jisx0208.1983-0
KDE 国際化 HOWTOKDE デスクトップ環境 |
www.kde.org/i18n.html を見ると、アプリケーションの表のところに .pot ファイルへのリンクがあります。それらは以下のような形式になっています。 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHORもしさらに質問があれば日本語化チームコーディネーターに連絡して下さい。 |
原文はこちら
日本誤^H語訳 : 1998/01/11 高木淳司
|
KDEではメッセージ、ドキュメントとも翻訳はメッセージカタログ形式のファイルを使用します。 翻訳をやってみようという方は以下を参考にやってみて下さい。ドキュメント翻訳の詳しい仕組みについてはドキュメントの詳細の項で説明しています。一応本家KDE projectの流儀に乗っ取っていますが一部日本語チームに特化した情報も入っています。
既存の翻訳、一部翻訳されたファイル
またはテンプレートファイルをダウンロードする
↓
翻訳状況を確認する
↓
Kbabelを設定する (翻訳はKBabelというツールを使って行います。KBabelの設定はここ)
↓
対訳表とKDEの独自拡張を読む
↓
訳す
↓
もう一度対訳表を読んで確認
↓
公表する(KDeveloper-MLか担当宛)
以前は翻訳状況をHTMLにして公開していたのですが手間がかかる、利用者が少ないという理由から
現在は更新していません。それではどうやって翻訳状況を確認するかと言うとこれには2つの方法があります。
(1)KBabelを使う
KBabelのカタログマネージャというツールを使います。これを利用するにはテンプレートと日本語翻訳ファイルを
インストールし、KBabelの設定でこれらのディレクトリを指定する必要があります。
(図)カタログマネージャ
(2)i18n.kde.orgのHighscore
for jaを参照する。
これは本家が提供しているTranslation Statisticsです。
更新中です。しばらくお待ち下さい。旧版はここ。
KDEにはgettextにはないメッセージ翻訳の独自拡張があります。これらは間違えると深刻なので気を付けてください。
msgidが_:や_n:で始まるのが特徴です。_:や_n:で始まる行は訳さないで下さい。
translation information
これらは翻訳者情報です。アプリケーションのバージョン情報の「翻訳」のところに表示されます。
複数人いる場合はカンマで区切ります。
#: _translatorinfo.cpp:1
msgid ""
"_: NAME OF TRANSLATORS\n"
"Your names"
msgstr "Taiki Komoda"
#: _translatorinfo.cpp:3
msgid ""
"_: EMAIL OF TRANSLATORS\n"
"Your emails"
msgstr "kom@kde.gr.jp"
context information
これは文脈情報です。短縮語とかで分かりづらい場合に翻訳者にこの語がどういう文脈で使われているかを
示します。
#: kdecore/klocale.cpp:117
msgid ""
"_: June\n"
"Jun"
msgstr "6月"
plural form
これは複数形情報です。gettext-0.10. 36以降で導入されたものとは書式が若干違います。ただ日本語の場合はNo
Pluralですので
単純に下のようになります。
#: kfile/kfiledialog.cpp:1220
kio/defaultprogress.cpp:140
#, c-format
msgid ""
"_n: %n directory\n"
"%n directories"
msgstr "%n ディレクトリ"
ちなみにgettextは0.10.35を使用するのがいいらしいです。
[参考]
Plural=3の言語の場合は以下のようになります。
msgid ""
"_n: %n directory\n"
"%n directories"
msgstr ""
"%n Katalog\n"
"%n Kataloga\n"
"%n Katalogiv"
[注意]
kdelibs.poに以下のような項目があります。
msgid ""
"_: Definition of PluralForm\n"
"Look at klocale.cpp for now"
これは訳すものではなく設定情報です。これに対するmsgstrは"NoPlural"にします。
(kdelibs.poはできるだけ私がメインテナンスします)
査読待ちファイル。いままで日本語化されていないファイルがここにあります。ご覧ください。
過去の翻訳ファイルに関してはのここにあります。
まずKBabelを設定してください。
KBabelで翻訳します。
XML/POフォーマット
KDEでは2.2からドキュメントのフォーマットをXMLに変更しました。これは世界的に標準になりつつあるXMLをドキュメントフォーマットの中核にしようとしたものです。
ドキュメントの翻訳には一つ問題がありました。それはもしオリジナルの文書が更新された場合にそれに追随するのが難しいということです。ましてやSGMLやXMLのタグだらけの文書の中の更新された一部分を探し出すのはそれだけで一苦労で肝心の翻訳に労力が割けません。そこで考え出された方法がXMLから擬似的にPOファイル(メッセージカタログ)を作成し、それを既に熟成された感のあるメッセージカタログ翻訳ツールKBabelで翻訳しそれをまたXMLに変換するという方法です。こうすることで翻訳者はタグをほとんど意識することなく、更新された部分も一目瞭然(原文と翻訳が対応した形になっているため)に翻訳だけに集中して作業ができます。POファイルはCVSで自動的に生成され、PO->XMLの変換は各国語のコーディネータが行います。
このように翻訳者が行うKDEドキュメント翻訳のほぼ全ての作業はKBabelで行えます。つまりKBabelさえ使いこなせるようになれば翻訳に協力して頂くことができるということです。もちろんこの上位でどういうことが行われているかを理解していただくことはKDEのドキュメントシステムに対するより深い理解につながりますが、これは必ずしも必要ではありません。いずれにせよKBabelを使うことで効率的なKDEドキュメントの翻訳が行えるでしょう。
>
ちなみに最初からKBabelで翻訳すればこんな苦労はしなくてすみます;)。
この方法はKDE2のドキュメントが存在し、かつほとんど情報が変わっていない場合に有効です。
以下の手順でXML/PO化します。ただほとんどの場合ものすごい労力を伴うことに注意してください。
エンコーディングをUTF8に変更する。ほとんどの場合元ファイルはEUC-JP。
% iconv -f ujis -t utf8 index.docbook > index.xml
% mv index.xml index.docbook
(注)XMLファイルの拡張子は.xmlではなく.docbookです。
一部の記号をXML対応にする(このコマンドは日本語を破壊するので使用しなくても手間は変わらないかもしれません;()
% xmlizer index.docbook
日本語の場合一部の文字が破壊されるのでYudit(UNICODEエディタ)で直す;(。このエディタは壊れたシーケンスが入っていてもなんとか編集
できます。
% yudit index.docbook
XML的に正しいかのチェック。正しくない場合はYuditで直す(結構エラーが出ます
;()。タグがXMLで定義されていないこともあります。
% checkXML index.docbook
もしくは
% meinproc --check index.docbook
これでエラーが出なくなったら
% meinproc index.docbook
とするとindex.html以下様々なファイルが作成され、ヘルプの閲覧ができます。(適当なディレクトリで
読み込めばスタイルシートのファイルも読み込まれます。)
この状態で閲覧可能なXMLファイルができました。次にメッセージファイルへの分割を行います。メッセージファイルへの分割はタグをいくつか直せば通ることがありますがたいていの場合パラグラフが足りなかったりタグが異なったりします。Kbabelでメッセージカタログ化されたものを確認すれば不整合が起こっているのが分かるでしょう。そのような場合にはタグを直し、パラグラフが足りないところには
その場で訳すか原文をはさみます。
% split2po 原文のXML 翻訳されたXML > app.po
% kbabel app.po
この作業でエラーが出なくなり、かつオフセットがなくなったらXMLに戻す際にエラーが起こらないか確認します。
% po2xml 原文のXML 翻訳されたPOファイル > index.docbook
エラーが出なくなったらようやくそのpo、xmlとも最新のフォーマットに追いつきました。お疲れ様でした。
メッセージカタログ化した後は修正はメッセージカタログに対して行います。なぜならKbabelで翻訳する場合パラグラフ内のタグしか見えません。その他のタグは自動的に処理してくれるためここらへんで起こるエラーが防げます。
手順
既存の翻訳、一部翻訳されたファイルとテンプレートファイルをダウンロードする→
翻訳状況を確認する→ Kbabelを設定する(gettextの知識がない場合は本家
KDE 国際化ページの KDE 国際化 HOWTOを読む)→
対訳表とKDEの独自拡張を読む→
訳す→ もう一度対訳表を読んで確認→公表する
現在KDE-2.2、及びCVS版用の翻訳を募集しています。新規翻訳、翻訳の修正などがありましたら担当までメールを下さい。
最後に行なわれた修正が最近の場合でも新しい翻訳が追加されている場合があるので、既存の翻訳も通読してみて下さい。
既存の翻訳、一部翻訳されたファイル
またはテンプレートファイル
をダウンロードして、その中のpoを翻訳します。
翻訳のファイルの標準のエンコーディングは UTF-8
ですがUTF-8 編集の環境がない場合は日本語 EUC でも構いません。
使いなれるとエラーチェックしてくれたりするKBabelはかなり便利なので、できるだけKBabelを使って下さい。
(2)i18n.kde.orgのHighscore
for jaを参照する。
これは本家が提供しているTranslation Statisticsです。ただし未着手のファイルは表示されていないので
注意してください。パッケージ全体の翻訳状況はStatus
table of KDE Translations for the HEAD branchで参照できます。
translation information
これらは翻訳者情報です。アプリケーションのバージョン情報の「翻訳」のところに表示されます。
複数人いる場合はカンマで区切ります。
#: _translatorinfo.cpp:1
msgid ""
"_: NAME OF TRANSLATORS\n"
"Your names"
msgstr "Taiki Komoda"
#: _translatorinfo.cpp:3
msgid ""
"_: EMAIL OF TRANSLATORS\n"
"Your emails"
msgstr "kom@kde.gr.jp"
context information
これは文脈情報です。短縮語とかで分かりづらい場合に翻訳者にこの語がどういう文脈で使われているかを
示します。
#: kdecore/klocale.cpp:117
msgid ""
"_: June\n"
"Jun"
msgstr "6月"
plural form
これは複数形情報です。gettext-0.10. 36以降で導入されたものとは書式が若干違います。ただ日本語の場合はNo
Pluralですので
単純に下のようになります。
#: kfile/kfiledialog.cpp:1220 kio/defaultprogress.cpp:140
#, c-format
msgid ""
"_n: %n directory\n"
"%n directories"
msgstr "%n ディレクトリ"
ちなみにgettextは0.10.35を使用するのがいいらしいです。
[参考]
Plural=3の言語の場合は以下のようになります。
msgid ""
"_n: %n directory\n"
"%n directories"
msgstr ""
"%n Katalog\n"
"%n Kataloga\n"
"%n Katalogiv"
[注意]
kdelibs.poに以下のような項目があります。
msgid ""
"_: Definition of PluralForm\n"
"Look at klocale.cpp for now"
これは訳すものではなく設定情報です。これに対するmsgstrは"NoPlural"にします。
(kdelibs.poはできるだけ私がメインテナンスします)
KDE-2.2用
KDE-2.2用メッセージファイルは現在JKUGでベータテストを行なっております。
インストールして不具合を見つけ出して下さい。未翻訳の部分の翻訳も受け付けております。
既存の翻訳、一部翻訳されたファイル
テンプレートファイル
KDE-2.0.1, KDE-2.1, KDE-2.1.1用
KDE-2.0.1, KDE-2.1, KDE-2.1.1では本家の配布に含まれます。
KDE-2.0用
kde-i18n-ja-日付.tar.bz2をダウンロードして下さい。
インストールは以下の通りです
$ tar xvIf kde-i18n-ja-日付.tar.bz2
$ cd kde-i18n-ja
$ ./configure --prefix=$KDEDIR
$ make
$ su
パスワード
# make install
KDE-1.1.2 用アップデートパッケージ
KDE-1.1.2 には標準で日本語po,kdelnk日本語エントリーが含まれています。
KDE-1.1.2 の po ファイルのアップデートパッケージです。
解凍後make,make installでインストールされます。
(1)KDE-1.1.2用アップデートパッケージ(kde-1.1.2-ja.po_modified.tar.bz2)
KDE-1.1.1用
最新版では全アプリケーションの po が含まれます。
po と mo はどちらかがあれば十分です。両方は要りません。
(2)開発者用日本語KDE-1.1.1.poファイル(pofile-ja-1.0.0pre1.tar.bz2)
(3)ユーザー用日本語KDE-1.1.1.moファイル(locale-ja-1.0.0pre1.tar.bz2)
その他
(4)非標準アプリケーション用.poファイル
オフィシャルKDEパッケージに含まれないKDEアプリケーションのpoファイルです。
ここではKBabelの最低限の設定と使用法について述べていきます。かなりビジュアルに書いたので読み込みに
時間がかかるかも知れませんが、分かりやすくなっているはずです。
(画面1 設定の入力を求めるダイアログ)
「はい」を押すと次の画面になります。
(画面2 設定ダイアログ- 個人情報)
ここには自分の名前とメールアドレスを入力して下さい。そのほかの情報は上の画面を参考にして下さい。
個人情報の他の大きな設定項目としては「エディタ」、「検索」、「保存」、「カタログマネージャ」、「その他」があります。
そのうち「エディタ」に関しては好みで設定して下さい。「その他」はいじる必要が無いと思います。
次に「検索」の設定を行います。
(画面3 設定ダイアログ-検索)
検索は翻訳中にデータベース(3種類ありますがこれの設定は後で説明します)の中から検索してきて
画面右下部に表示してくれます。「自動的に検索を開始」をチェックすると次のメッセージに移動したときに
自動的に検索を開始して表示してくれます。ちなみに3種類というのは以下の通りです。
翻訳データベース:内蔵データベースシステムによってローカルにあるファイルからインデックスを作成します。
po補助:今までに翻訳されたものを合わせた日本語翻訳ファイルから検索します。
po要約:他の言語(ドイツ語とか)のファイルから該当語を探して来ます。普通必要無いでしょう^^;;;
相当遅いマシンならともかく(まあ486でKDE使っている人とかいないでしょう^^;)、普通のマシンなら
数分でインデックスを作成できるので翻訳データベースを使用するのがよいでしょう。
設定は辞書の設定のところで説明します。
次に「保存」の項目です。
(画面4 設定ダイアログ-保存)
ここで重要なのはエンコーディングです。これは必ずUTF8にして下さい。KDE2ではほとんどの文字を
内部でUTF8で扱っています。メッセージカタログもja.poは全てUTF8になっています。一般的なエディタでは
UTF8を扱えないのが多いですが、KBabelでメッセージカタログを扱う分にはほとんど意識しないで済むので
ここは必ずUTF8にして下さい。
最後にカタログマネージャの項目です。
(画面5 設定ダイアログ-カタログマネージャ)
まずテンプレートと日本語メッセージファイルをここからダウンロードします。
そして展開したディレ
クトリをそれぞれ上に指定します。例えば/usr/local/extend/kde-i18nというディレクトリで
これらのファイルを展開した場合は上の画面の
ようにします。
以上で本体の設定は終了です。なおこれらはメニューバーの「設定」→「KBabelの設定」から再設定できます。
・翻訳データベースの設定
「辞書の設定」から「翻訳データベース」を選択すると設定ダイアログが現れます。
(画面6 翻訳データベース設定ダイアログ)
グッドキーというのはどれだけクエリーに近いかということです。ここらへんはあまりいじる必要が無いでしょう。
データベースインデックスを作成するには上の画面で「ディレクトリ、サブディレクトリをスキャン」を選択して
日本語メッセージファイルを展開したできたディレクトリ(さっきの例なら/usr/local/extend/kde-i18n/ja/messages)
を指定するとインデックス作成が始まります。数分待ちましょう。
・po補助/要約の設定
「辞書の設定」から「po補助」または「po要約」を選択すると設定ダイアログが現れます。
(画面7 po補助設定ダイアログ)
ここからダウンロードしたファイルを解凍しそのファイルが置いてあるディレクトリを指定します。
変数が使用できますが普通に直接指定すると良いでしょう。
左上が翻訳する文字列(Msgid)、左下が翻訳を入力するフィールド(Msgstr)、右上が翻訳情報、左下が翻訳結果です。
左下の部分に翻訳を入力していきます。文法が間違っていると赤く表示されます。
ショートカットキーがいくつか設定されていますが特に以下のショートカットはよく使います。
PageDown 次のメッセージ
PageUp 前のメッセージ
Ctrl+Alt+PageDown 次のFuzzyか未翻訳メッセージ
Ctrl+Space MsgidをMsgstrにコピー
Ctrl+Alt+Space 検索結果をMsgstrにコピー
以上です。KBabelを使ってKDEのメッセージ・ドキュメントをがんがん翻訳して下さい:-)。
不明な点はkom@kde.gr.jpまでメールを下さい。
この下の表にKDE-2.0のメッセージファイル翻訳の進行状況が載っています。
・.poファイルを作ったぞ、もしくはこれは俺が訳すぞ、というのがある方はいう方はMailで送って下さい。
致命的なミスがない限りそのまま載せます。
・MLのほうに流れてきた情報も気付き次第載せます。
・意見、情報等はkom@kde.gr.jp まで
・poファイルというのはKDEにおいてはウィンドウのメニューのところを日本語化するファイルです。
msgfmt(gettext)というプログラムを使ってコンパイルして使います。メッセージカタログというのが正式名称です。
・本家KDE国際化プロジェクトには更新があり次第送っていきます。
この表の見方 ○:翻訳済み /△:翻訳中 /-:手つかず /na:not available
パッケージ名 | .po(2.0用) | 翻訳者(敬称略) |
kdelibs | ||
---|---|---|
desktop | ○ 20010104 | 篠原 昇,Taiki Komoda |
kdelibs | ○ 20010104 | 篠原 昇 |
knotify | ○ 20010104 | 篠原 昇 |
kdeadmin | ||
---|---|---|
kcmlilo | ○ 20010104 | 篠原 昇 |
kcron | ○ 20010104 | 篠原 昇 |
kdat | ○ 20010104 | 篠原 昇 |
kpackage | ○ 20010104 | 篠原 昇 |
ksysctrl | ○ 20010104 | 篠原 昇 |
ksysv | ○ 20010104 | 篠原 昇 |
kuser | ○ 20010104 | 篠原 昇 |
kwuftpd | ○ 20010104 | 篠原 昇 |
secpolicy | ○ 20010104 | 篠原 昇 |
kdebase | ||
---|---|---|
appletproxy | ○ 20010104 | 篠原 昇 |
childpanelextension | ○ 20010104 | 篠原 昇 |
clockapplet | ○ 20010104 | 篠原 昇 |
drkonqi | ○ 20010104 | 篠原 昇 |
extensionproxy | ○ 20010104 | 篠原 昇 |
filetypes | ○ 20010104 | 篠原 昇 |
htmlsearch | ○ 20010104 | 篠原 昇 |
kaccess | ○ 20010104 | 篠原 昇 |
kappfinder | ○ 20010104 | 篠原 昇 |
kcmaccess | ○ 20010104 | 篠原 昇 |
kcmarts | ○ 20010104 | 篠原 昇 |
kcmbackground | ○ 20010104 | 篠原 昇 |
kcmbell | ○ 20010104 | 篠原 昇 |
kcmcolors | ○ 20010104 | 篠原 昇 |
kcmcrypto | ○ 20010104 | 篠原 昇 |
kcmemail | ○ 20010104 | 篠原 昇 |
kcmenergy | ○ 20010104 | 篠原 昇 |
kcmfonts | ○ 20010104 | 篠原 昇 |
kcmhtmlsearch | ○ 20010104 | 篠原 昇 |
kcmicons | ○ 20010104 | 篠原 昇 |
kcmiconthemes | ○ 20010104 | 篠原 昇 |
kcminfo | ○ 20010104 | 篠原 昇 |
kcminput | ○ 20010104 | 篠原 昇 |
kcmkclock | ○ 20010104 | 篠原 昇 |
kcmkdb | ○ 20010104 | 篠原 昇 |
kcmkeys | ○ 20010104 | 篠原 昇 |
kcmkicker | ○ 20010104 | 篠原 昇 |
kcmkio | ○ 20010104 | 篠原 昇 |
kcmkmix | ○ 20010104 | 篠原 昇 |
kcmkonq | ○ 20010104 | 篠原 昇 |
kcmkonqhtml | ○ 20010104 | 篠原 昇 |
kcmkurifilt | ○ 20010104 | 篠原 昇 |
kcmkwm | ○ 20010104 | 篠原 昇 |
kcmlaptop | ○ 20010104 | 篠原 昇 |
kcmlayout | ○ 20010104 | 篠原 昇 |
kcmlilo | ○ 20010104 | 篠原 昇 |
kcmlocale | ○ 20010104 | 篠原 昇 |
kcmmidi | ○ 20010104 | 篠原 昇 |
kcmnotify | ○ 20010104 | 篠原 昇 |
kcmodbc | ○ 20010104 | 篠原 昇 |
kcmsamba | ○ 20010104 | 篠原 昇 |
kcmsample | ○ 20010104 | 篠原 昇 |
kcmscreensaver | ○ 20010104 | 篠原 昇 |
kcmsmserver | ○ 20010104 | 篠原 昇 |
kcmstyle | ○ 20010104 | 篠原 昇 |
kcmtaskbar | ○ 20010104 | 篠原 昇 |
kcmthemes | ○ 20010104 | 篠原 昇 |
kcmvirtualdesktops | ○ 20010104 | 篠原 昇 |
kcontrol | ○ 20010104 | 篠原 昇 |
kdcop | ○ 20010104 | 篠原 昇 |
kdebugdialog | ○ 20010104 | 篠原 昇 |
kdesktop | ○ 20010104 | 篠原 昇 |
kdesu | ○ 20010104 | 篠原 昇 |
kdesud | ○ 20010104 | 篠原 昇 |
kdewizard | ○ 20010104 | 篠原 昇 |
kdm | ○ 20010104 | 篠原 昇 |
kdmconfig | ○ 20010104 | 篠原 昇 |
kfindpart | ○ 20010104 | 篠原 昇 |
kfmclient | ○ 20010104 | 篠原 昇 |
kfmexec | ○ 20010104 | 篠原 昇 |
khelpcenter | ○ 20010104 | 篠原 昇 |
khotkeys | ○ 20010104 | 篠原 昇 |
kicker | ○ 20010104 | 篠原 昇 |
kio_help | ○ 20010104 | 篠原 昇 |
kio_man | ○ 20010104 | 篠原 昇 |
klegacyimport | ○ 20010104 | 篠原 昇 |
klipper | ○ 20010104 | 篠原 昇 |
klock | ○ 20010104 | 篠原 昇 |
kmenuedit | ○ 20010104 | 篠原 昇 |
kminipagerapplet | ○ 20010104 | 篠原 昇 |
konqueror | ○ 20010104 | 篠原 昇 |
konsole | ○ 20010104 | 篠原 昇 |
kpager | ○ 20010104 | 篠原 昇 |
krdb | ○ 20010104 | 篠原 昇 |
krunapplet | ○ 20010104 | 篠原 昇 |
ksmserver | ○ 20010104 | 篠原 昇 |
ksplash | ○ 20010104 | 篠原 昇 |
kstart | ○ 20010104 | 篠原 昇 |
ksysguard | ○ 20010104 | 篠原 昇 |
ktaskbarapplet | ○ 20010104 | 篠原 昇 |
ktip | ○ 20010104 | 篠原 昇 |
kwin | ○ 20010104 | 篠原 昇 |
kwrite | ○ 20010104 | 篠原 昇 |
kxkb | ○ 20010104 | 篠原 昇 |
kxmlrpcd | ○ 20010104 | 篠原 昇 |
kxsconfig | ○ 20010104 | 篠原 昇 |
libkonq | ○ 20010104 | 篠原 昇 |
libtaskbar | ○ 20010104 | 篠原 昇 |
nsplugin | ○ 20010104 | 篠原 昇 |
passwords | ○ 20010104 | 篠原 昇 |
quicklauncher | ○ 20010104 | 篠原 昇 |
kdegames | ||
---|---|---|
kabalone | ○ 20010107 | Taiki Komoda |
kasteroids | ○ 20010107 | Taiki Komoda |
katomic | ○ 20010107 | Taiki Komoda |
kblackbox | ○ 20010107 | Taiki Komoda |
kjezz | ○ 20010107 | Taiki Komoda |
kjumpingcube | ○ 20010107 | Taiki Komoda |
kmahjongg | ○ 20010107 | Taiki Komoda |
kmines | ○ 20010107 | Taiki Komoda |
konquest | ○ 20010107 | Taiki Komoda |
kpat | ○ 20010107 | Taiki Komoda |
kpoker | ○ 20010107 | Taiki Komoda |
kreversi | ○ 20010107 | Taiki Komoda |
ksame | ○ 20010107 | Taiki Komoda |
kshisen | ○ 20010107 | Taiki Komoda |
ksirtet | ○ 20010107 | Taiki Komoda |
ksmiletris | ○ 20010107 | Taiki Komoda |
ksnake | ○ 20010107 | Taiki Komoda |
ksokoban | ○ 20010107 | Taiki Komoda |
kspaceduel | ○ 20010107 | Taiki Komoda |
ktron | ○ 20010107 | Taiki Komoda |
ktuberling | ○ 20010107 | Taiki Komoda |
kwin4 | ○ 20010107 | Taiki Komoda |
lskat | ○ 20010107 | Taiki Komoda |
multiplayers | ○ 20010107 | Taiki Komoda |
kdegraphics | ||
---|---|---|
kdvi | ○ 19990601 | Taiki Komoda |
kfax | ○ 19990601 | Taiki Komoda |
kfract | ○ 19990601 | Taiki Komoda |
kghostview | ○ 20001018 | Taiki Komoda |
kpixmap2bitmap | - | - |
ksnapshot | ○ 19990613 | Kimiyasu Tomiyama |
kview | ○ 20001018 | Taiki Komoda |
kviewshell | ○ 20001018 | Taiki Komoda |
pixie | ○ 20001029 | Taiki Komoda |
kdemultimedia | ||
---|---|---|
aktion | ○ 20010104 | 篠原 昇 |
artsbuilder | ○ 20010104 | 篠原 昇 |
artscontrol | ○ 20010104 | 篠原 昇 |
kaiman | ○ 20010104 | 篠原 昇 |
kcmkmix | ○ 20010104 | 篠原 昇 |
kmid | ○ 20010104 | 篠原 昇 |
kmidi | ○ 20010104 | 篠原 昇 |
kmix | ○ 20010104 | 篠原 昇 |
kscd | ○ 20010104 | 篠原 昇 |
kdenetwork | ||
---|---|---|
kcmktalkd | ○ 20010104 | 篠原 昇 |
keystone | ○ 20010104 | 篠原 昇 |
kit | ○ 20010104 | 篠原 昇 |
kmail | ○ 20010104 | 篠原 昇 |
knode | ○ 20010104 | 篠原 昇 |
korn | ○ 20010104 | 篠原 昇 |
kppp | ○ 20010104 | 篠原 昇 |
kppplogview | ○ 20010104 | 篠原 昇 |
ksirc | ○ 20010104 | 篠原 昇 |
ktalkd | ○ 20010104 | 篠原 昇 |
kdepim | ||
---|---|---|
(abbrowser) | - | - |
(empath) | - | - |
korganizer | ○ 20000930 | Taiki Komoda |
(kpilot) | - | - |
(twister) | - | - |
kdesdk | ||
---|---|---|
kbabel | ○ 20000930 | Taiki Komoda |
kbabeldict | - | - |
kdevelop | ○ 19991020 | Taiki Komoda |
ktranslator | ○ 19991018 | 井村 竜一郎 |
kdetoys | ||
---|---|---|
amor | ○ 20010102 | Taiki Komoda |
kmoon | ○ 20010102 | Taiki Komoda |
kodo | ○ 20010102 | Taiki Komoda |
kscoreapplet | ○ 20010102 | Taiki Komoda |
kteatime | ○ 20010102 | Taiki Komoda |
ktux | ○ 20010102 | Taiki Komoda |
kworldwatch | ○ 20010102 | Taiki Komoda |
kdeutils | ||
---|---|---|
ark | ○ 20010104 | 篠原 昇 |
kab | ○ 20010104 | 篠原 昇 |
karm | ○ 20010104 | 篠原 昇 |
kcalc | ○ 20010104 | 篠原 昇 |
kcharselect | ○ 20010104 | 篠原 昇 |
kcmfontmanager | ○ 20010104 | 篠原 昇 |
kcmlaptop | ○ 20010104 | 篠原 昇 |
kdepasswd | ○ 20010104 | 篠原 昇 |
kdessh | ○ 20010104 | 篠原 昇 |
kdf | ○ 20010104 | 篠原 昇 |
kedit | ○ 20010104 | 篠原 昇 |
kfind | ○ 20010104 | 篠原 昇 |
kfloppy | ○ 20010104 | 篠原 昇 |
khexedit | ○ 20010104 | 篠原 昇 |
kjots | ○ 20010104 | 篠原 昇 |
klaptopdaemon | ○ 20010104 | 篠原 昇 |
kljettool | ○ 20010104 | 篠原 昇 |
klpq | ○ 20010104 | 篠原 昇 |
knotes | ○ 20010104 | 篠原 昇 |
kpm | ○ 20010104 | 篠原 昇 |
ktimemon | ○ 20010104 | 篠原 昇 |
koffice | ||
---|---|---|
kchart | ○ 20000930 | Taiki Komoda |
killustrator | ○ 19990608 | 堀江 信之 |
kimageshop | ○ 20000927 | Taiki Komoda |
koffice | ○ 20001001 | Taiki Komoda |
koshell | ○ 20000924 | Taiki Komoda |
kpresenter | ○ 20000924 | Taiki Komoda |
kspread | ○ 20001228 | Taiki Komoda |
kspreadcalc_calc | ○ 20000930 | Taiki Komoda |
kword | ○ 20000924 | Toshihiro Inoue |
others(for 2.0)、または標準パッケージに含まれていないもの | ||
---|---|---|
caitoo | ○ 19991014 | 塙 雅典 |
gofai | - | - |
iconpackager | ○ 20000730 | Yohei Makaki |
karchie | ○ 19990613 | 井村 竜一郎 |
kautorun | △ 20000710 | Yohei Makaki |
kapm | ○ 19991104 | 塙 雅典 |
kbiff | ○ 19990613 | 井村 竜一郎 |
kcdtools | ○ 19991014 | 塙 雅典 |
kclock | ○ 20000108 | 坂口聡 |
kcmail | ○ 20000124 | 坂口聡 |
kcmbind | - | - |
kcmdhcpd | ○ 20000117 | 坂口聡 |
kcmfontmanager | ○ 20000730 | Yohei Makaki |
kcmgofai | - | - |
kcmiwatcher | - | - |
kcmkisdn | - | - |
kcmprinter | - | - |
kcrontab | - | - |
kdbg | ○ 20000404 | 石田絵理 |
kdepass | - | - |
kdiff | ○ 19990208 | 堀江 信之 |
kexpress | - | - |
kfinger | ○ 19990613 | 井村 竜一郎 |
kfortune | - | - |
kglchess | - | - |
kgoodstuff | ○ 19990208 | 堀江 信之 |
kgrapher | - | - |
kiconedit | ○ 19990608 | 堀江 信之 |
kirc | - | - |
kisdn | - | - |
kjoy | - | - |
kjukebox | ○ 20000518 | Yohei Makaki |
kless | - | - |
klilo | - | - |
klyx | - | - |
kmaster | - | - |
kmessage | - | - |
kmp3 | ○ 19991014 | Koji TORIYAMA |
kmpg | ○ 19990428 | Kimiyasu Tomiyama |
knetmon | - | - |
knotify | - | - |
knu | ○ 19990613 | 井村 竜一郎 |
konv | - | - |
kpaint | 堀江 信之 | 堀江 信之 |
kray | - | - |
krubik | - | - |
ksamba | ○ 20000117 | 坂口聡 |
ksciplot | - | - |
ktalk | - | - |
ktelnet | - | - |
kticker | ○ 19990428 | Kimiyasu Tomiyama |
kuickshow | - | - |
kvidtune | - | - |
kwebtree | - | - |
kwebwatch | ○ 19991014 | 塙 雅典 |
noatun | △ 20000710 | Yohei Makaki |
webmaker | - | - |
訳者メールアドレス - .poファイルを参照して下さい diff --git a/support/documents/po/translate.html b/support/documents/po/translate.html index b6183fb..63f44ef 100644 --- a/support/documents/po/translate.html +++ b/support/documents/po/translate.html @@ -1,329 +1,334 @@ -
> > KDEはそういうレベルでも統一感を出した方が、 > > かっこいいような気がしたので。 > この意見には私も賛成です。 訳がそろっていないとかっこわるいというのもありますが、 それ以上にユーザを混乱させる原因になって ユーザビリティの低下を招いちゃいますから KDE のような統合環境では訳の統一は必須です。 #そういう所でマイナス評価をされるのはもったいないし。ということですので、poファイルの翻訳をされる方は是非ユーザビリティの向上 にご協力下さい。統合環境故の難しさですね。;)
訳語?に対するご意見も募集中です。お気軽にどうぞ。
file | ファイル | ||
new | 新規作成 | ||
open | 開く | ||
save | 上書き保存 | ||
saveas | 名前を付けて保存 | ||
印刷 | |||
close | 閉じる | ||
quit | 終了 | ||
exit | 終了 | ||
edit | 編集 | ||
cut | 切り取り | ||
copy | コピー | ||
paste | 貼り付け | ||
clear | クリア | ||
insert | 挿入 | ||
delete | 削除 | ||
undo | 元に戻す | ||
redo | やり直す | ||
options | オプション | ||
property | 設定 | ||
search | 検索 | ||
find | 検索 | ||
search | 検索 | ||
replace | 置換 | ||
top | 先頭 | ||
bottom | 末尾 | ||
view | 表示 | ||
window | ウィンドウ | ||
cascade | カスケード | ||
browse | ブラウズ | ||
forward | 進む | ||
back | 戻る | ||
reload | 再読み込み | ||
bookmark | ブックマーク | ||
help | ヘルプ | ||
about | バージョン情報 | ||
about xxx | xxx について |
dialog | ダイアログ |
yes | はい |
no | いいえ |
ok | OK |
cancel | キャンセル |
apply | 適用 |
default | 標準 |
dismiss | 閉じる |
about | バージョン情報 |
access | アクセス |
action | 動作 |
add | 追加 |
addressbook | アドレス帳 |
alert | 警告 |
and | & |
appearance | 外観 |
application | アプリケーション |
apply | 適用 |
arrange | 配置 |
attention | 注意 |
authorization | 認可 |
available | 有効な |
back | 戻る |
background | 背景 |
backup | バックアップ |
bar | バー |
bindings | 割り当て |
bold | ボールド |
bookmark | ブックマーク |
bottom | 末尾 |
browse | ブラウズ |
browser | ブラウザ |
browsing | ブラウジング |
bug | バグ |
busy | ビジー |
bytes/s | バイト毎秒 |
bytes | バイト |
cache | キャッシュ |
cancel | キャンセル |
cascade | カスケード |
casesensitive | 大文字小文字を区別 |
change | 変更 |
charset | 文字セット |
clear | クリア |
click | クリック |
close | 閉じる |
color | 色 |
combination | 組合わせ |
comment | コメント |
complete | 完了 |
configure | 設定 |
conflict | 衝突 |
connect | 接続 |
connection | 接続 |
contact | 連絡先 |
contents | 内容 |
continue | 続ける |
cookie | cookie |
copy | コピー |
create | 作成 |
custom | カスタム |
cut | 切り取り |
cyclic | 循環的な |
damage | ダメージ,損害 |
data | データ |
database | データベース |
date | 日付 |
default | 標準 |
defaults | 標準設定 |
deiconify | アイコン化解除 |
delete | 削除 |
desk | デスク |
desktop | デスクトップ |
device | デバイス |
dialog | ダイアログ |
directory | ディレクトリ |
dismiss | 閉じる |
document | 文書 |
drag | ドラッグ |
drop | ドロップ |
edit | 編集 |
edition | 版 |
メール | |
empty | 空 |
encoding | エンコーディング |
entry | エントリ |
error | エラー |
expiration | 失効 |
export | 他に渡す,エキスポートする |
family | ファミリ |
fatal | 致命的な |
fetching | 取得中 |
field | フィールド |
filemanager | ファイルマネージャ |
filter | フィルタ |
find | 検索 |
fit | フィット |
float | フロート化 |
floating | フローティング |
focus | フォーカス |
folder | フォルダ |
font | フォント |
footer | フッタ |
forward | 進む |
general | 一般 |
geometry | ジオメトリ |
global | 広域 |
go | 実行 |
group | グループ |
help | ヘルプ |
hidden | 隠しファイル |
highscore | ハイスコア |
history | ヒストリ |
host | ホスト |
huge | 特大 |
icon | アイコン |
iconify | アイコン化 |
implement | 実装 |
incorrect | 正しくない |
information | 情報 |
insert | 挿入 |
install | インストール |
italic | イタリック |
kb/s | キロバイト毎秒 |
kb | キロバイト |
key-value-map | キーと値のマップ |
kill | 強制終了 |
large | 大 |
layout | 配置 |
line | 行 |
local | ローカル |
location | 場所 |
lock | ロック |
lookandfeel | ルックアンドフィール |
mailer | メーラ |
maintainer | 開発者 |
malformed | おかしな |
maximize | 最大化 |
mb/s | メガバイト毎秒 |
mb | メガバイト |
medium | 中 |
menu | メニュー |
message | メッセージ |
misc | その他 |
miscellaneous | その他 |
mode | モード |
mount | マウント |
new | 新規作成 |
next | 次 |
no | いいえ |
normal | 通常 |
ok | OK |
ooops | おっとぉ |
open | 開く |
options | オプション |
others | 他 |
overview | 概要 |
overwrite | 上書き |
owner | 所有者 |
ownership | 所有権 |
parent | 親ディレクトリ |
paste | 張り付け |
path | パス |
pattern | パターン |
perhaps | たぶん |
permission | 許可 |
permission | 許可情報 |
personal | 個人 |
picture | 画像 |
pixmap | ピックスマップ |
plain | 無地 |
please | choose |
point | 場所 |
印刷 | |
prior | 前 |
process | プロセス |
property | 設定 |
protocol | プロトコル |
quickhelp | クイックヘルプ |
quit | 終了 |
rearrange | 再配置 |
redo | やり直し |
rejected | 拒否されました |
reload | 再読み込み |
remove | 削除 |
replace | 置換 |
restore | 元に戻す |
resume | 元に戻す |
roman | ローマン |
root | ルート |
save | 保存 |
saveas | 名前を付けて保存 |
savedocumentas | 名前を付けて保存 |
search | 検索 |
seconds | 秒 |
section | セクション,節 |
security | セキュリティ |
select | 選択 |
service | サービス |
setting | 設定 |
show | 表示 |
single | シングル |
skip | スキップ |
small | 小 |
socket | ソケット |
special | 特別 |
specified | 指定された |
specify | 指定 |
start | 開始 |
status | 状態 |
sticky | 常に表示 |
stop | 停止 |
store | 保管 |
string | 文字列 |
style | スタイル |
switch | スイッチ |
syntax | 文法 |
task | タスク |
template | テンプレート,雛型 |
terminal | ターミナル |
thumbnails | サムネイル |
tiny | 極小 |
title | タイトル |
toggle | トグル |
top | 先頭 |
trash | ゴミ箱 |
tree | ツリー |
type | タイプ |
unclutter | 整頓 |
undo | 元に戻す |
unfloat | フロート化解除 |
unique | 一意な |
unknown | 未知 |
unmount | マウント解除 |
untitled | 名前なし |
update | 更新 |
usage | 利用法 |
user | ユーザ |
utility | ユーティリティ |
value | 値 |
view | ビュー |
virtual | 仮想 |
warning | 警告 |
yes | はい |
一般的な印刷の流れとしては上図のフローの通りです。
まず各アプリケーションはPostScriptという印刷ファイル形式で印刷を出力します。UNIXのほとんどのアプリケーションはPostScriptファイルで印刷を出力する機能を持っており、問題は多いとはいえUNIXではデファクトスタンダードと言って良いでしょう。
次にGhostScriptというプログラムにデータを渡しPostScriptをプリンターが印刷できる生データに変換します。GhostScriptの最新版はフリーライセンスではありません。GhostScriptの最新版より一つ古いバージョンはGPLで配布されています。通常のディストリビューションにはこのバージョンが入っています。その中でもCKJに対応したものやTrueTypeフォントを使用できるようにしたもの等さまざまなバージョンがありますが、ここではディストリビューションに付属のGhostScriptについてみていきます。またプリンターの中にはPostScriptファイルをそのまま印刷できるものもあります。これはPostScriptプリンターと呼ばれ、店頭で売っていることもあると思いますが、非常に高価なので通常の用途であえてこれを買う人はいないと思います。よって普通はGhostScriptを使用することになると思います。
さて、プリンターの生データに変換できたらスプーラと呼ばれるプログラムにそのデータを渡します。CUPS/LPRはスプールやジョブ管理をするプログラムでGhostScriptから送られてきた生データを一時的に保存しその後プリンターポートにデータを流します。CUPSはスプーラだけではなく高度なプリンタ管理もできます。LPRにはBSDのLPRや高機能なLPRngがあります。基本的な設定、使用法は両者とも同じです。
KDEではバージョン2.2から印刷機構の強化を掲げています。実際KDEアプリケーションからの印刷は
Windowsに比べて遜色なく、それに加えPDF書き出しの機能など便利な機能も備えています。では
Windowsに比べて劣っているところはあるか?というとやはり設定がカンタンにはいかないことが多いです。しかし
KDEの設定ツールを使用すれば簡単にプリンタの設定を行うことが出来ます。このドキュメントでは
KDEでのプリンタの設定の仕方、印刷方法について解説します。また最新の印刷システム、CUPSについての
Tipsも掲載します。
Windows2000/XPではネットワークを介した標準規格の印刷プロトコルであるIPP(Internet Printing Protocol)に対応しています。よってCUPSサーバをIPPサーバ、Windows2000/XPをIPPクライアントとして印刷をすることが可能です。ここではCUPSでrawプリンタを設定してある時にWindows2000/XPをIPPクライアントとして使用する時のWindows2000/XPの設定方法を説明します。
まずコントロールパネルで「プリンタ」を選択し「プリンタの追加」ボタンをダブルクリックします。するとプリンタの追加ウィザードが起動します。「次へ」をクリックします。
次にネットワークかローカルかを聞かれるので「ネットワークプリンタ」を指定し、「次へ」をクリックします。
「インターネットまたはイントラネット上のプリンタに接続します」にチェックし、CUPSサーバのIPPプリンタのアドレスを指定します。
書式は「http://"CUPSサーバのアドレス":631/printers/"プリンタ名"」です。「次へ」をクリックします。
ローカルにドライバをインストールします。自分のモデルを選択して下さい。一覧にない場合はドライバディスクを使用して下さい。(これはドライバ共有などのうまい方法があるかも知れません。)「OK」をクリックします。
最後に「通常使うプリンタ」にするかどうかを選択します。「次へ」をクリックします。
「完了」をクリックするとプリンタが追加されます。
ここではDebianでlprから環境を乗り換える際の注意事項を列記します。多分Debianユーザ以外にも役に立つはずです。試行錯誤しながらやったのと、詳しく手順を記録しなかったので抜けているところもあるかもしれませんが、そこはDebianユーザ、がんばってください(笑)。BSD lprからの乗り換えを前提に書いていますが、まっさらの状態から構築する人にも役に立つはずです。
とりあえず必要なパッケージをapt-get install します。
# apt-get install cupsys
ライブラリとか依存しているものも一緒に入ります。dselectでやるとsuggestされるcupsys-bsdがbsd-lprやlprngとconflictするのでapt-get installがおすすめです。
CUPSはプリンタ情報をPPD(Postscript Printer Description)で扱います。これがないと使用できるプリンタのモデルが激減します。別パッケージなのでインストールしましょう。
# apt-get install cupsomatic-ppd
これもいろいろ依存しているので一緒に入れて下さい。ここからの進め方は2通りあります。
ここではダウンタイムを最小限にする手順で解説していきます。
CUPSのlpr互換環境を残す場合重要なことがあります。それは
ということです(注: 2つのシステムを混在させているからこうなるのであって、単独でインストールしたらCUPSのほうも/etc/printcapを参照するように設定されるものと思われます。ちなみに/etc/cups/cupsd.confにてどのprintcapを使用するかを変更できます)。さらに
CUPSが提供するlpr互換機能は、CUPSのlprがBSDのlprとコマンドが互換になるだけで、設定ファイルまで互換ではないということです
(実はこの後出てくるcupsys-bsdのインストールの際に何か聞かれて「parse」を選択したのですがCUPSに特に変化は起こりませんでした。不充分な情報ですみません)。
このことからCUPSでBSD lprのプリンタ名と同じプリンタ名を持つプリンタをCUPS側で用意しておく必要があります。
例えば/etc/printcapに「hp990c」というプリンタエントリがあった場合、設定で見たようにCUPSを設定します。
エントリを作成したら(Rawプリンタ以外の場合は)テストページが印刷できるか確認してください。
つぎにいよいよlprをCUPSの互換コマンドで置換します。念のため/etc/printcapを/etc/printcap.bakにするなどバックアップをとっておいてください。
# apt-get install cupsys-client
# apt-get install cupsys-bsd
/etc/printcapをCUPSのものにします。
# ln -s printcap.cups printcap
これで移行は終了です。いままでのlprが使用できるかテストしてください。
設定ができたらあとはKDEのアプリケーションの印刷の際、印刷ダイアログで今回追加したプリンターを選択すれば印刷できます。ですがその前に一回テストを行います。
テストのやり方はまずKDEアプリケーションからPSファイルを出力します。KDE
アプリケーションで印刷ボタンをクリックし、「名前」に「ファイルに出力 (PostScript)」を選択し「OK」をクリックします。
そのファイルをkghostviewで開いてみてください。
このようにエラーが出ずに表示されればOKです。
同様の方法でPDFファイルを出力することができます。また、PDFファイルはPSファイルと同様にkghostviewで閲覧することができます。
実際の印刷の場合は下のようにプリンタ「hp990c」を選択し、「OK」をクリックします。
データ転送中の画面。
これでプリンタから出力されます。快適過ぎて紙の無駄使いをしないようにしましょう;)。
ここではリモートプリンタの使用について解説します。
単純にリモートプリンタといっても様々な形態、組み合わせがあります。ここでは私が設定したことのあるものについて説明します。もちろん「こんな事例もあるぞ」というのは大歓迎なので私宛てにメールをしてください:)。
ここは小さな事業所です。いままでSamba+lprでプリントサーバを立てていました。これをCUPSベースに完全に移行させることにしました。
移行の際に必要な要件は以下の通りです。
それでは一つづつ設定を見ていきましょう。それぞれリンクされたドキュメントを見ればできます。
これで移行は完了です。快適なCUPS生活が始まります:)。
PS入力用の「hp990c」と、raw入力用(ローカルでドライバを持たせ、プリンタ言語に変換されたものを入力とする、Samba等で使用される)の「hp990raw」というプリンタをCUPS設定ツールを使用して追加してみましょう。
CUPSサーバへのプリンタの追加はKDEを使用した設定か、KDEがサーバにインストールされていない場合はCUPS設定ツールで行います。ここではCUPS設定ツールを用いたプリンタの追加の仕方を説明します。
CUPS設定ツールはブラウザからアクセスします。CUPSツールを日本語表示させる方法について補足3を御覧ください。
ブラウザを起動し「http://localhost:631」のアドレスを入力します。すると画面のようになります。
プリンタボタンをクリックすると画面のようになります。「プリンタの追加」をクリックします。
ルート権限が必要なのでルートアカウント「root」とそのパスワードを入力します。
ここからはプリンタの追加です。以下のように入力します。
プリンタ名: これは重要です。「hp990c」を入力してください(lprを使用していたのならそれと同じ名前にする必要があります)
設置場所: プリンタの使用される場所を記述します。必須ではありません。
説明: プリンタの説明を記述します。必須ではありません。
デバイスはUSB1に繋がっているものとします。
メーカーの選択: HPを選択します。
モデルの選択: 「HP DeskJet 990C, Foomatic + hpjis (en)」を選択します。
これで完了です。
プリンタボタンをクリックしプリンタのページに移動すると追加したプリンタが表示されます。テストプリントで設定が正しくできているか確認してください。
上と同様ですが、モデルの指定のみが異なります。手順を追ってみましょう。
名前は「hp990raw」です。
接続先を指定します。USBの#1です。
rawプリンタの場合は「Raw」を選択します。
rawプリンタの場合は「Raw Queue (en)」しかありません。これを選択します。
プリンタのページに移動すると追加したプリンタが表示されます。rawプリンタはドライバを持っていないので、テストプリントはしないでください。
rawプリンタで動かすにはmimeの設定が必要です。CUPSの設定を参照してください。これの設定を行うとCUPSに対する設定は終了します。
補足1 CUPS設定ツールはcupsd.confのaccess、adminの設定を変えることでリモートからブラウザを使用しての設定が可能です。しかしこの方法は認証がなく(設定可能?)、通信の暗号化がされていない(これも設定可能?)ので、ローカル以外ではお奨めできません。(設定ファイルを見る限りでは、なんかできそうな気もしますがまだ調べていません。)
補足2 ローカルにあるCUPSサーバの詳細な設定(cupsd.confファイルで行うアクセスやセキュリティなどの設定)についてはcupsdconfというKDEのツールが使用できます。グラフィカルでかつ日本語化されているので、KDEがインストールされている場合はこれを使用するとよいでしょう。
補足3 ディストリビューションによってはCUPS設定ツールが日本語化されていません。これはもともとの配布に日本語化ファイルが含まれていないからです。TurboLinux8では日本語化されたリソースがインストールされます。作成者の許可を得て、この日本語リソースを配布許可を得ることができました。この場を借りてお礼申し上げます。
日本語リソース
日本語リソースのインストール方法
CUPSのリソースは例えば/usr/share/cupsなどにインストールされます。このディレクトリには「doc(debianならdoc-root)」、「templates」というディレクトリがあります。ここでリソースを展開してください。
# cd /usr/share/cups
# tar xjf cupsd-japanese-resources.tar.bz2
するとdoc,templatesディレクトリ以下に「ja」というディレクトリができます。これでブラウザを再読み込みすれば日本語でCUPS設定ツールにアクセスできます。
ここではリモートCUPSサーバへの接続(IPPを利用してCUPSサーバと通信する場合)を解説します。サーバマシンにてKDE印刷マネージャ、またはCUPS設定ツールでプリンタを追加しておいてください。
例として使用するリモートプリンタはPS入力を受け付ける「hp990c」とします(注1)。KDEでのプリンタの追加ですからKDEを使用した設定で見たものと手順はほとんど同じです(注2)。
(注1)KDEクライアントはプリンタ言語の出力をサーバに送るのではなく、PS出力をサーバのスケジューラに送ります(つまりサーバサイドでラスタ化します)。しかしローカルをRawにしておく必要はなく、ローカルもサーバと同じPS入力可能のプリンタ設定にしておいてください。
(注2)言いかえればCUPSシステムを使用するときのローカルプリンタの設定は、ローカルCUPSサーバへのプリンタ設定の追加、クライアントをlocalhost:631という(リモート)CUPSサーバに接続するための設定を行っていることになります。
それでは一つ一つ手順を見ていきましょう。まず印刷マネージャから右クリックし「プリンタ/クラスの追加」を選択します。以下のダイアログが出てきます。
「リモートCUPSサーバ」を選択します。
ゲストアカウント以外でログインする場合は「ゲストアカウント」のチェックを外しログイン名とパスワードを入力します。
リモートCUPSサーバのアドレスを入力します。ポートは通常「631」です。
リモートCUPSサーバに追加されているプリンタがブラウズできます。画面は異なりますが「hp990c」を選択します。
プリンタのメーカーとモデルを選択します。
ドライバを選択します。「推奨」となっているものを使用すると良いでしょう。
プリンタのテストになります。「テスト」ボタンをクリックするとテストプリントが印刷されます。
印刷の前後に挟まれる「バナー」を選択します。通常必要ありません。
印刷容量の制限「クオータ」の設定です。サーバ側に容量がない場合や、クライアントから異常な量の印刷命令が来たときに拒否したい場合に設定してください。
拒否したいユーザを設定できます。
プリンタの名前はローカルでKDEから印刷するときに使用される名前です。混乱を避けるためサーバでのプリンタ名と同じ名前にしておくと良いでしょう。
設定の確認です。「完了」をクリックすると設定が完了し、「hp990c」リモートプリンタが使用できるようになります。
SambaでCUPSを使用するときいくつか設定しておく必要があります。以下に箇条書きでまとめておきます。
(なおここで述べた方法の他に、Windows2000/XPクライアントから直接IPPポートを使用して印刷するという方法があります。これはクライアント側で新しい設定が必要ですがSambaを経由しないためSambaで設定ミスをしても影響を受けなく便利です。新規にクライアントを追加する場合はIPPのほうがおすすめです。)
CUPSの設定ファイルのうち、以下のファイルの以下の行のコメント(#)を外します。これらの設定はSambaをRawプリントサーバとして使用しているときに必要です。
完了したらcupsを再起動してください。
一応smbdを再起動して、SWATでプリンタがマージされているか確認して下さい。
ちなみにCUPS使用時にSambaでスプールディレクトリの印刷データファイルが消えないのはバグです。2.2.6では直っているそうです。
印刷するには印刷のツールがインストールされている必要があります。確認してください。
それでは物理的なレイヤーからひとつづつ見ていきます。
ケーブルを繋げて電源を入れてください:)
通常のディストリビューションでは既に設定されていることがほとんどです。
/dev/lp0 (USBなら例えば /dev/usb/lp0)が存在するか確認して下さい。またlpモジュールかUSBのprinterモジュールが読み込まれているかを確認して下さい。
# /sbin/lsmod
デバイスファイル/ドライバの設定についてはLinux Printing HOWTOを御覧ください。
コマンドラインでgs -vと入力するとバージョン情報が表示されます。ここで重要なのはKDEのアプリケーションから出力した日本語のPS,PDFファイルが正しく扱えることです。TurboやVineなら問題なくいけると思います。これのテストについては印刷前のプレテストのところで行います。
さてこれでKDEで設定する準備が整いました。これまでのステップはちゃんと設定してあるディストリビューションなら必要がないのでここからがKDEでの設定ということになります。
まず一つ印刷システム(ジョブ管理、スプーラ)として何を使用するかを決める必要があります。一般にCUPSかlpr(類似物を含む)が選択肢に上がると思います。これら2つの特徴としては
と言えるでしょう。指針としてはlprに慣れ親しんでいてそのまま使用したい場合はlpr、特にこだわりがない場合はCUPSを使用すると良いかもしれません。
これからの説明では以下のシステムを想定します。
プリンターを設定するには印刷マネージャを立ち上げます。印刷マネージャはKメニューの「設定」→「システム」→「印刷マネージャ」から立ち上げます。またコントロールセンターの「周辺装置」→「プリンタ」でも同様の設定を行なえます。下図のような画面が立ち上がります。
ここで下のほうにある「現在の印刷システム」を「CUPS (Common UNIX Print System)」にします。
プリンタの追加は印刷マネージャの白いあたりのところを右クリックし「プリンタ/クラスの追加...」を選択すると下図のダイアログが現れます。
「次」をクリックします。
まずバックエンドを選択します。ここではローカルで使用するので「ローカルプリンター」にチェックを入れて「次」をクリックします。
次にポートを選択します。パラレルポートの場合は「パラレル」になります。
USBプリンターの場合は「USB」→「USB Printer #1」です。URIのところは「usb:/dev/usblp0」
ですが、システムによっては「usb:/dev/usb/lp0」の場合もあります。上の「プリンタデバイス/ドライバ」を確認して下さい。「次」をクリックします。
次にプリンタのメーカーとモデルを選択します。製造者が「HP」、モデルが「DeskJet 990C」です。「次」をクリックします。
ドライバを選択します。幸せなことにHPのプリンタの場合は利用できるドライバがたくさんあります。ここでは「推奨」となっているものをそのまま使用します。「次」をクリックします。
次はテスト印刷になります。「テスト」をクリックするとテストができます。プリンター追加後でもテストはできるので希望に応じて行なって下さい。
バナーは印刷の前後に文字列やロゴを挿入するものです。通常は「バナーなし」で良いでしょう。「次」をクリックします。
クオータとは大き過ぎるジョブを制限する機能のことです。通常必要ありません。「次」をクリックします。
印刷を禁止したいユーザなどを作成することができます。ひとりや家族で使用する環境の場合には必要ないでしょう。「次」をクリックします。
次に一般情報についての記述です。「名前」はそのままCUPSやlprで使用するプリンター名になるので短い名前が良いです。lprからCUPSに移行する場合はlprでのプリンタ名と同一にして下さい。
「場所」はプリンターが使われる状況をコメントしておく部分で必須ではありません。「次」をクリックします。
そして最後に設定の確認です。ここで「完了」をクリックすると設定が完了し、プリンターが追加されます。
一般ユーザの場合はここでルートパスワードを求められます。
ユーザ名に「root」パスワードにルートパスワードを入力して下さい。
これでプリンタ「hp990c」が追加されました。
ちなみにこの設定はKDEの印刷システムに対してのGUI設定フロントエンドであって、KDE以外でも印刷することができます。例えばlprを使って
% lpr -Php990c foo.ps
とすれば普通に印刷ができますし、既に設定がある場合に印刷マネージャで設定を変更するということもできます。
最後にフォント埋め込みの設定を行います。ヨーロッパ諸国言語と違い日本語の場合はデスクトップ環境としてフォントが統一されていない(フリーのフォントが少なく、ディストリビューション毎にまちまちのフォントをバンドルしているせいです)という欠点があります。また、ネットワークプリンタにデスクトップと同じフォントがインストールされていないこともあります。これらの問題はドキュメントにフォントを埋め込むことで解決します。欠点としてはデータ量が多くなるということがありますが、多くの問題を回避できるのでぜひとも設定しておいてください。
印刷マネージャを起動します。次に印刷マネージャの白いあたりのところを右クリックし
「マネージャの設定」を選択すると下図のダイアログが現れます。
ここの「フォント」の「印刷時にPostScriptにフォントを埋め込む」にチェックを入れて「OK」をクリックします。
ここは必ずしも必要ではありませんがQtアプリケーションを使用するときに必要なので設定しておきましょう。
% qtconfig &
でqtconfigを起動します。そこの「Printer」→「Enable font embedding」をチェックし、メニューの「File」→「Save」を選択し、終了します。
最近ではプリンターメーカーも高品質なLinux用のプリンタフィルタを無料で提供するサービスを行っています。ここでは(株)キャノン販売のCanon Bubble Jet Print Filter for Linuxを使用した設定を試してみます。プリンターにはCanon BJF870を使用しました。このようなフィルタには他にもエプソンコーワの「Photo Image Print System」と「GS Laser Printer Driver」があります。
残念ながらこれらのフィルターを使用するには設定の全てをGUIでできません。インストールとprintcapの設定は手動でやる必要があります。なおCanon Bubble Jet Print Filterのより詳しい設定の詳細はウェブにドキュメントがアーカイブでおいてありますのでそちらをご覧ください。
まずパッケージをインストールします。
# rpm -ivh bjfiltercom-1.3-0.i386.rpm bjfilter870-1.3-0.i386.rpm
次に/etc/printcapに以下のエントリーを追加します。
bjf870raw:\
:lp=/dev/lp0:\
:sd=/var/spool/lpd/bjf870raw:\
:mx#0:\
:sh:\
:rw:\
:if=/usr/local/bin/bjf870raw:
bjf870ps:\
:lp=/dev/lp0:\
:sd=/var/spool/lpd/bjf870ps:\
:mx#0:\
:sh:\
:rw:\
:if=/usr/local/bin/bjf870ps:
次にスプールディレクトリを作成します。
# cd /var/spool/lpd
# mkdir bjf870ps
# mkdir bjf870raw
キャノンの印刷ダイアログを表示するためにxhostを設定します。
# xhost localhost (Xの起動ファイルに追加しておくと良いでしょう)
lpdを再起動します。
# /etc/rc.d/init.d/lpd restart
これでシステム側の設定は終了です。この状態で
% lpr -Pbjf870ps foo.ps
とするとPostScriptファイルが印刷できる状態になっています。bjf870psはPostScriptファイルをGhostScriptでビットマップに変換し、それをフィルタに通すスクリプトです。
KDEの印刷マネージャは/etc/printcapを自動的にパースしてくれるのでKDE側でプリンターの細かい設定をする必要はありません。ここまで設定できたらあとは印刷時のダイアログでbjf870psを選択すればめでたく印刷できます。印刷を実行するとフィルタ側のダイアログがでてきて細かいプリンターの設定ができます。プリンタの設定を行ったら「OK」を押して実際の印刷を開始してください。
ここではリモートCUPSサーバへの接続(IPPを利用してCUPSサーバと通信する場合)を解説します。サーバマシンにてKDE印刷マネージャ、またはCUPS設定ツールでプリンタを追加しておいてください。
この場合使用されるプリンタは前の例では「hp990c」になります(注)。KDEでのプリンタの追加ですからKDEを使用した設定で見たものと手順はほとんど同じです(注2)。
(注)KDEクライアントはプリンタ言語の出力をサーバに送るのではなく、PS出力をサーバに送ります(つまりサーバサイドでラスタ化します)。
(注2)言いかえればCUPSシステムを使用するときのローカルプリンタの設定は、ローカルCUPSサーバへのプリンタ設定の追加、クライアントをlocalhost:631という(リモート)サーバに接続するための設定を行っていることになります)
それでは一つ一つ手順を見ていきましょう。まず印刷マネージャから右クリックし「プリンタ/クラスの追加」を選択します。
「リモートCUPSサーバ」を選択します。
プリンタのモデルを選択するところはKDEを使用した設定と同じです。