How to input chinese word?

貌似只要是设置成cjk类的字体,都可以解决libreoffice汉化显示不全的问题。
“2,libreoffice-zh-cn is not complete. this is also important。”
libreoffice-zh-cn can be work well when we adjust fonts to the kinds of Cjk at Appearance menu。

初步调试结果,与 DeskBar 的图标处理无关,应该是 input_server 和 DeskBar 交互时 BMenu 还原产生问题。不过,现在 DeskBar 的 ReplicantTray 处理方式欠妥,存在重复加载现象(无论 locale 是中文抑或英文)。具体原因有时间再查一查。

以下为跟踪调试补丁与中英文环境下相应记录。

diff --git a/src/apps/deskbar/BarWindow.cpp b/src/apps/deskbar/BarWindow.cpp
index 418384de..a7c49e61 100644
--- a/src/apps/deskbar/BarWindow.cpp
+++ b/src/apps/deskbar/BarWindow.cpp
@@ -606,6 +606,14 @@ TBarWindow::AddItem(BMessage* message)
 	} else if (message->FindRef("addon", &ref) == B_OK) {
 		BEntry entry(&ref);
 		err = entry.InitCheck();
+
+		BPath aPath;
+		entry.GetPath(&aPath);
+		if(aPath.Path() != NULL)
+ 			debug_printf("Deskbar::TBarWindow::AddItem() err=%x, ref=\"%s\"\n", err, aPath.Path());
+		else
+			debug_printf("Deskbar::TBarWindow::AddItem() err=%x, ref=NULL\n", err);
+
 		if (err == B_OK)
 			err = fBarView->AddItem(&entry, shelf, &id);
 	}
diff --git a/src/apps/deskbar/StatusView.cpp b/src/apps/deskbar/StatusView.cpp
index b20c5e0d..de712e37 100644
--- a/src/apps/deskbar/StatusView.cpp
+++ b/src/apps/deskbar/StatusView.cpp
@@ -656,6 +656,13 @@ TReplicantTray::LoadAddOn(BEntry* entry, int32* id, bool addToSettings)
 	BNode node(entry);
 	BPath path;
 	status_t status = entry->GetPath(&path);
+
+	if(path.Path() != NULL)
+ 		debug_printf("Deskbar::TReplicantTray::LoadAddOn() status=%x, ref=\"%s\"\n", status, path.Path());
+	else
+		debug_printf("Deskbar::TReplicantTray::LoadAddOn() status=%x, ref=NULL\n", status);
+
+
 	if (status != B_OK)
 		return status;
 
@@ -688,11 +695,17 @@ TReplicantTray::LoadAddOn(BEntry* entry, int32* id, bool addToSettings)
 	}
 
 	if (view == NULL || IconExists(view->Name())) {
+		if(view == NULL)
+ 			debug_printf("Deskbar::TReplicantTray::LoadAddOn() view=NULL\n");
+		else
+			debug_printf("Deskbar::TReplicantTray::LoadAddOn() IconExists(view->Name()=\"%s\")\n", view->Name());
 		delete view;
 		unload_add_on(image);
 		return B_ERROR;
 	}
 
+ 	debug_printf("Deskbar::TReplicantTray::LoadAddOn() view->Name()=%s\n", view->Name());
+
 	BMessage* data = new BMessage;
 	view->Archive(data);
 	delete view;
diff --git a/src/servers/input/AddOnManager.cpp b/src/servers/input/AddOnManager.cpp
index 61c288df..b9e2e9e4 100644
--- a/src/servers/input/AddOnManager.cpp
+++ b/src/servers/input/AddOnManager.cpp
@@ -585,10 +585,27 @@ void
 AddOnManager::_LoadReplicant()
 {
 	CALLED();
+
+#if 1
 	app_info info;
 	be_app->GetAppInfo(&info);
 
+	BEntry aEnt(&info.ref);
+	BPath aPath;
+	aEnt.GetPath(&aPath);
+	if(aPath.Path() != NULL)
+ 		debug_printf("input_server: info.ref=\"%s\"\n", aPath.Path());
+	else
+		debug_printf("input_server: info.ref=NULL\n");
 	status_t err = BDeskbar().AddItem(&info.ref);
+#else
+	BEntry aEnt("/boot/system/servers/input_server");
+	entry_ref aRef;
+	if (aEnt.Exists())
+		aEnt.GetRef(&aRef);
+	status_t err = BDeskbar().AddItem(&aRef);
+#endif
+
 	if (err != B_OK)
 		ERROR("Deskbar refuses to add method replicant: %s\n", strerror(err));
1 Like

大佬们,可以考虑下把fcitx 打包到Haiku 不?

重新打包移植一个新软件,工作量是比较大的。
不如在原becjk上做精简与当代化代码更新。
目前中文输入法,九成都是拼音。
就精简为一个拼音输入法,然后改善下界面皮肤快捷键等细节就好了。这样不需要太大工作量。
it is better to upgrade the code of becjk than to take fcitx into haiku.

就我所知,fcitx 有 wayland 的后端接口,其前端也有 GTK 实现,如果仅仅针对 wayland 的移植,应该不难(可能 dbus 之类存在难度);不过,现 Haiku 的 wayland 实现有无 input protocol 的接口实现我就不清楚了;如果有可能,建议联系 fcitx 开发人员解决自身移植,同时 Haiku 完成 wayland protocol 与 input_server 的最终接口(我有与其反向的计划,不过暂因 wayland 不完善而作罢),这样便可把其他优秀的输入法轻松引入,当然代价是系统的健壮、性能等会受到一定影响。

DeskBar 的相关补丁如下,用于解决输入法菜单空项的问题。

diff --git a/src/apps/deskbar/BarWindow.cpp b/src/apps/deskbar/BarWindow.cpp
index 418384de..bf88dcdf 100644
--- a/src/apps/deskbar/BarWindow.cpp
+++ b/src/apps/deskbar/BarWindow.cpp
@@ -85,7 +85,7 @@ TDeskbarMenu* TBarWindow::sDeskbarMenu = NULL;
 TBarWindow::TBarWindow()
        :
        BWindow(BRect(-1000.0f, -1000.0f, -1000.0f, -1000.0f),
-               B_TRANSLATE_SYSTEM_NAME("Deskbar"), B_BORDERED_WINDOW,
+               "Deskbar", B_BORDERED_WINDOW,
                B_WILL_ACCEPT_FIRST_CLICK | B_NOT_ZOOMABLE | B_NOT_CLOSABLE
                        | B_NOT_MINIMIZABLE | B_NOT_MOVABLE | B_NOT_V_RESIZABLE
                        | B_AVOID_FRONT | B_ASYNCHRONOUS_CONTROLS,

运行截图:

2 Likes

Can this app support RTL like arabic or hebrew?
Maybe i can elaborate if not too complicated.
I only learn pascal dialect. But i think i can try some coding…

Indeed, it appears the problem is due to input_server AddOnManager looking for Deskbar by the window name, which is the same as the title. I opened #18251 about this problem.

No, it can’t. There is hebrew input method for BeOS used before that you could try to use it on Haiku (32bits) to see it working or not.

Anyway, the sources of BeCJK won’t be so good for you to refer to when writing input method add-on from scratch, it’s recommended that you check out the sources of BeSunPinyin after learning key events of BeOS API.

Since it’s possible to communicate with Deskbar by simply using BMessenger with app’s signature, and the current handling of replicant things seemed too complicated to handle changing icon/menu immediately, Deskbar need to be improved or just use another mechanism which won’t compatible with the old BeOS stuff.

1 Like

Yes, probably there should be a way to get a BMessenger to a specified Replicant without all this hassle.

I try to googling besunpinyin you mentioned but not found it… Can you give me url or hint

Sorry. I dont know why i’m not find it before…

This ?

thanks for your work.
i find the problem 2 and 3 are disappeared with haiku hrev56788.

i am from guangzhou of china。my english is not good,so i write chinese:

关于中文汉化的问题有很多,以下是常被提前的例子:

1,Epiphany无法输入中文汉字(wayland兼容性问题)。虽然不用Epiphany浏览器,但可以用otter和系统自带的webpositive网络浏览器解决。

–依然无法解决目前只有becjk一种输入法的问题。而且拼音输入法的代表becjk的体验超级差,例如没有"模糊音“(an =ang 等)。你看linux和andirds系统,都提供 拼音和五笔的输入法,直接套用windows 积累霞的词库和习惯,无缝对接,降低学习成本。更加不用说 讯飞 等 语音输入法(口说),直接放弃手动输入。希望以后中文输入法因缺乏华裔参加而有所改善。但是,如果 两岸三地的使用方法 都不同(香港澳门,台湾,新加坡马来西亚),编码也是不同的;如果加入的是非中国大陆的程序猿,也是 有很多遗憾的。

2,libreoffice汉化包安装后,部分内容无法显示,全是空白方框。

–依然无法彻底解决了所有常见问题。只能说 汉化包安装后,大幅度减少了bug;例如,你输入“门’字,你老板绝对 要你重新 改过。这样的瑕疵,一堆堆…不胜枚举

3,系统设置本地化格式翻译名称后,becjk托盘图标显示异常,otter会导致deskbar出现一堆?符号。

—haiku下最流畅的浏览器目前个人觉得是“web”(旧名字好像是叫GNOME)。系统自带的webpositive浏览器默认是无法播放在线视频的,要设置和加插件才能。otter 去广告的插件和浏览复杂网站(例如网银或者政府网站)就会不显示,或者崩溃,会导致deskbar出现一堆?符号。当然 “web”(GNOME)没有汉化,和不多的插件,也是硬伤。

4,becjk界面老化

–becjk中文输入不是个案;为什么缺乏华裔参加,还不是因为在haiku系统下开发,无法盈利和养活自己,包括以前用爱发热的haikucn.com也倒闭了。整个depot的汉化(搜索关键字 zh或者cn)不超过10个(libreoffice能有汉化,还要拜linux和andirds的协同效应才有);系统的重要菜单 依然是英文“preferences”和“applications”就是赤裸裸的讽刺。中文化或者汉化,任重道远。

希望有网友扛起振兴haiku的旗子,聚集一群志同道合之人
希望如下:

1.成立 haiku 的微信群或者QQ,聚集一群志同道合之人:

2.多翻译和转载网上的haiku 技术文章或者答疑技巧文章 给大家分享;或者成立一个 haiku的中文网站,毕竟用浏览器的中文插件翻译,能解决部分,但是是下下策。

3.制作一个 windows常用软件 的haiku 替换清单;例如,QQ和微信用什么软件替代; ACDSEE 可以用haiku的什么软件来替换;类似QQ或者微信的软件,可以用haiku的什么软件来替换; 例如haiku的 libreoffice,就可以替换 wps 或者ms office 2016版本;

目前haiku的状态跟当年的windows2000是差不多一样的水平。现在windows20000在世界上的使用客户数量也就最多几十万。这个问题,不是什么举大旗就有用的。
无非两个方法:开源模式下的如何盈利模式;对于华裔而言,就是精简与当代化becjk中文汉字输入法。
一群人搞个什么群,又解决不了什么问题。那没用的。

就操作逻辑与系统生态圈而言,目前haiku已经是都可用的状态了。要达到完美那种,还早。许多内核级的问题,比方防止软件崩溃带来的系统崩溃,比方更多硬件驱动。这些都不是举大旗就能解决的。

什么叫界面老化?如果觉得工具栏不好看,自己改嘛,源码都在那里;如果要跟随所谓大流,甚至直接把工具栏去掉都好。如果觉得字典式输入存在不足(最初时我曾提供过修正,但后续人员直接忽略了),自己也可以改,甚至使用上不便也可以自己增加使用说明等等。

“只有一种输入法”(其实不准确 :wink:),便想能有类似 XXX 更完善的功能,甚至直接把 XXX 移植到 Haiku,这种想法可以理解,但其实背后有很多东西需要实施。2000年左右,很多开发者(包括当时的类 Unix 之类环境的软件开发者)都觉得多线程是个魔鬼;直至今天,大多数 GUI 都其实是单线程处理的(其中包括当今大名鼎鼎的 Windows UI),若他们变换到 BeOS/Haiku API 的话,勉强为之只能给系统的稳定性带来灾难(虽然当今 Haiku 已经比以前健壮却依然蹒跚)。

实际行动从来都比“点拨”、“号召”来得更实在一些,期望大家能让 Haiku 这个 BeOS 的遗孤能继续坚持本色走下去,而不会变成类似某个 *nix,最后落得个四不像而遭人唾弃。

1 Like

微信群或者网站都是 提供一个交流的平台而已。因为 haiku中文网站建设需要时间,所以才提出 成立微信群。对推给haiku的推广,普及和解决问题是有帮助的。就像discuss.haiku-os.org平台一样,我们才有交流心法和观点的地方。呵呵,就是对技术更新没有帮助而已。

交流来官方论坛交流就可以了。没必要分散开来。
推广,就把自己的使用情况,以及在使用中遇到的常见问题以及便捷解决方法发布到各自博客或者A站或B站。有条件做直播做视频发快手抖音也行。主要是让搜索引擎更多地能检索到haiku的使用资料。只要把一些关键字,如。“haiku 安装” “haiku使用” "haiku输入法"等 占据了。就可以自然流传了。
既然不是技术员,就做好使用经验交流与市场推广售后服务这些事情就行。举大旗什么的,就不用了。
haiku的使用操作逻辑,在我看来是比较符合个人电脑用户的。细节上的使用经验,就是我们这些非技术人员的事情了。

制作一个 windows常用软件 的haiku 替换清单;例如,QQ和微信用什么软件替代; ACDSEE 可以用haiku的什么软件来替换;类似QQ或者微信的软件,可以用haiku的什么软件来替换; 例如haiku的 libreoffice,就可以替换 wps 或者ms office 2016版本;

qq和微信,你得找腾讯公司。人家最多给你提供个网页版的解决方案。要不,你就用Irc和email。
看图软件系统默认不是看得了嘛。

系统默认自带这些。
styleEdit记事本、Pe文本编辑器、BePDF文件阅读器、MediaPlayer媒体播放器、Expander归档管理器(文件压缩工具)、DriveSetup磁盘管理器(硬盘分区工具)、HaikuDepot软件库

在软件库里安装的就这些。
libreoffice_zh_cn办公套件(汉化)、Dolphin文件管理器、Audacious音频播放器、Mplayer和SMPlayer视频播放器、GIMP图象编辑器、libreCAD和QCAD绘图建模工具、LyX排版工具、SpeedCrunch科学计算器、Calibre电子书epub阅读器、openshot视频编辑器、blender三维动画创作套件、Android File Transfer手机文件读取工具

制作这软件替代清单也用不了举大旗操作呀。

网页浏览器,系统默认自带的也开发地越来越好。除了放不了电影,其它方面都强过otter了。

中文汉字输入就becjk.

这些软件中,就gimp和Epiphany一样无法输入中文汉字。其它输入汉字都没问题。要解决,还是得等系统级debug。
手机文件读取,对手机型号的支持,这一样要系统级debug来扩展硬件驱动支持范围。

至于360,我是知道那个与统信与麒麟合作,专门推了对应版本的360网页浏览器,可以处理八成以上的企业网银业务。要不你给360公司谈谈让他也出个haiku版本。


目前就如下群体使用haiku.(我认为目前非技术人员的任务就是针对这三类人群推广,其它的群体,系统本身生态还支持不了)

1,非常棒的BeOS风格操作体验,并附完整的unix类POSIX标准兼容。
2,完美的C++编程语言环境,并且有大量其它现代计算机语言支持,比如rust、python。
3,轻量高效的日常办公工作环境,包括CAD、视频、三维动画等。