Merge branch 'develop' into 'master'

Release

See merge request sschueller/peertube!18
This commit is contained in:
Stefan Schüller 2021-02-07 18:22:23 +01:00
commit 528c868be6
29 changed files with 262 additions and 44 deletions

17
.github/workflows/main.yml vendored Normal file
View File

@ -0,0 +1,17 @@
name: CI
on:
pull_request:
branches: [develop]
types: [opened, edited, synchronize]
jobs:
check-for-cc:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: check-for-cc
id: check-for-cc
uses: agenthunt/conventional-commit-checker-action@v1.0.0

View File

@ -4,13 +4,10 @@
2. Locally switch to develop
3. Pull github develop
4. Pull weblate develop
5. Add change logs (fastlane/metadata/android/en-US/changelogs/XXX.txt)
6. Run ci-script/update-changelog.sh
7. Push to gitlab
8. Merge request into master and merge
9. Add Release Tag on master branch
10. Release to play store
11. Wait for gitlab -> github sync
12. Run publishGithub
5. Push to develop gitlab and github
6. Merge develop into master and merge
7. Wait for Release Build and release to play store
8. Wait for gitlab -> github sync
9. Run publishGithub

View File

@ -88,8 +88,14 @@ public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.VideoViewHol
// set Name
holder.name.setText(videoList.get(position).getName());
// set duration
holder.videoDuration.setText(MetaDataHelper.getDuration(videoList.get(position).getDuration().longValue()));
// set duration (if not live stream)
if (videoList.get(position).getLive()) {
holder.videoDuration.setText(R.string.video_list_live_marker);
holder.videoDuration.setBackgroundColor(context.getResources().getColor(R.color.durationLiveBackgroundColor));
} else {
holder.videoDuration.setText(MetaDataHelper.getDuration(videoList.get(position).getDuration().longValue()));
holder.videoDuration.setBackgroundColor(context.getResources().getColor(R.color.durationBackgroundColor));
}
// set age and view count
holder.videoMeta.setText(

View File

@ -18,6 +18,12 @@ package net.schueller.peertube.model;
public class State {
public static final int PUBLISHED = 1;
public static final int TO_TRANSCODE = 2;
public static final int TO_IMPORT = 3;
public static final int WAITING_FOR_LIVE = 4;
public static final int LIVE_ENDED = 5;
private Integer id;
private String label;

View File

@ -43,6 +43,7 @@ public class Video {
private Boolean nsfw;
private String description;
private Boolean isLocal;
private Boolean isLive;
private Integer duration;
private Integer views;
private Integer likes;
@ -149,6 +150,14 @@ public class Video {
isLocal = local;
}
public Boolean getLive() {
return isLive;
}
public void setLive(final Boolean live) {
isLive = live;
}
public Integer getDuration() {
return duration;
}

View File

@ -35,7 +35,8 @@
android:id="@+id/video_duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#000000"/>
android:textColor="@color/durationTextColor"
android:background="@color/durationBackgroundColor"/>
<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/avatar"

View File

@ -35,7 +35,8 @@
android:id="@+id/video_duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#000000"/>
android:textColor="@color/durationTextColor"
android:background="@color/durationBackgroundColor"/>
<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/avatar"

View File

@ -35,7 +35,8 @@
android:id="@+id/video_duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#000000"/>
android:textColor="@color/durationTextColor"
android:background="@color/durationBackgroundColor"/>
<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/avatar"

View File

@ -42,8 +42,8 @@
android:id="@+id/video_duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:background="#232323"/>
android:textColor="@color/durationTextColor"
android:background="@color/durationBackgroundColor"/>
<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/avatar"

View File

@ -34,7 +34,7 @@
<string name="pref_description_language">ভিডিওর ভাষা পছন্দ করো, কিছু পছন্দ না করলে সব ভাষার ভিডিও দেখা যাবে।</string>
<string name="title_activity_url_video_play">ইউআরএলভিডিওপ্লেক্রিয়া</string>
<string name="pref_title_torrent_player">টরেন্ট ভিডিও প্লেয়ার</string>
<string name="pref_description_torrent_player">একটি টরেন্ট স্ট্রিমের মাধ্যমে ভিডিও প্লেব্যাক করুন। এর জন্য স্টোরেজ অনুমতির প্রয়োজন । (আলফা, স্থিতিশীল নয়!)</string>
<string name="pref_description_torrent_player">একটি টরেন্ট স্ট্রিমের মাধ্যমে ভিডিও প্লেব্যাক কর। এর জন্য স্টোরেজ অনুমতির প্রয়োজন । (আলফা, স্থিতিশীল নয়!)</string>
<string name="pref_title_license">অনুমতিপত্র</string>
<string name="pref_description_license">
\n<b>গাহ্নু অফেরও সাধারণ গণ অনুমতিপত্র সং.৩.</b>
@ -273,7 +273,7 @@
<string name="menu_video_more_blacklist">নিষিদ্ধ তালিকা</string>
<string name="video_download_permission_error">লেখার অনুমতি ছাড়া ভিডিও ডাউনলোড করা যাবে না</string>
<string name="video_rating_failed">রেটিং ব্যর্থ</string>
<string name="video_login_required_for_service">এই সেবা ব্যবহারের জন্য লগ ইন করুন</string>
<string name="video_login_required_for_service">এই সেবা ব্যবহারের জন্য লগ ইন কর</string>
<string name="video_meta_button_share">শেয়ার</string>
<string name="video_meta_button_download">ডাউনলোড</string>
<string name="video_meta_button_privacy">Privacy</string>
@ -292,14 +292,14 @@
<string name="account_bottom_menu_about">সম্পর্কিত</string>
<string name="account_about_account">একাউন্ট:</string>
<string name="account_about_subscribers">গ্রাহক সমূহ:</string>
<string name="account_about_description">বিবরণ:</string>
<string name="account_about_joined">যুক্ত হয়েছে:</string>
<string name="api_error">কিছু সমস্যা হয়েছে, অনুগ্রহ করে পরে চেষ্টা করুন!</string>
<string name="action_set_url">সার্ভার পছন্দ করুন</string>
<string name="account_about_description">বিস্তারিত:</string>
<string name="account_about_joined">যুক্ত হয়েছে:</string>
<string name="api_error">কিছু সমস্যা হয়েছে, অনুগ্রহ করে পরে চেষ্টা কর!</string>
<string name="action_set_url">সার্ভার পছন্দ কর</string>
<string name="server_selection_signup_allowed_yes">হ্যা</string>
<string name="server_selection_signup_allowed_no">না</string>
<string name="server_selection_peertube_server_url">পিয়ারটিউব সার্ভার URL</string>
<string name="action_bar_title_server_selection">সার্ভার নির্বাচন করুন</string>
<string name="action_bar_title_server_selection">সার্ভার নির্বাচন কর</string>
<string name="server_selection_set_server">সেট করা সার্ভার: %s</string>
<string name="server_selection_signup_allowed">সাইন আপ করা যাবে: %s</string>
<string name="login_current_server_hint">বর্তমান সার্ভার</string>
@ -309,14 +309,14 @@
<string name="pref_background_behavior">ব্যাকগ্রউন্ড প্লে এর কনফিগারেশন</string>
<string name="settings_activity_look_and_feel_category_title">লুক এবং ফিল</string>
<string name="server_book_list_has_login">লগইন আছে</string>
<string name="pref_background_audio">েছনে অডিও স্ট্রিম হিসেবে চালু রাখুন</string>
<string name="pref_background_audio">িছনে অডিও স্ট্রিম হিসেবে চালু রাখো</string>
<string name="settings_activity_about_category_title">সম্পর্কিত</string>
<string name="settings_activity_video_playback_category_title">ভিডিও প্লেব্যাক</string>
<string name="settings_activity_video_list_category_title">ভিডিও এর লিস্ট</string>
<string name="title_activity_me">আকাউন্ট</string>
<string name="title_activity_select_server">সার্ভার অনুসন্ধান করুন</string>
<string name="title_activity_select_server">সার্ভার অনুসন্ধান কর</string>
<string name="server_book_del_alert_msg">আপনি কি এই সার্ভার রিমুভ করতে চান সার্ভার বই থেকে\?</string>
<string name="server_book_del_alert_title">সার্ভার রিমুভ করুন</string>
<string name="server_book_del_alert_title">সার্ভার সরাও</string>
<string name="title_activity_server_address_book">এড্রেস বই</string>
<string name="server_book_add_add_button">যোগ</string>
<string name="server_book_add_password">পাসওয়ার্ড</string>
@ -333,13 +333,13 @@
<string name="authentication_login_success">লগইন হয়েছে</string>
<string name="bn_rBD">বাংলা (বাংলাদেশ)</string>
<string name="clear_search_history_prompt">আপনি কি পুরোপুরি সার্চ ইতিহাস মুছে ফেলতে চান\?</string>
<string name="clear_search_history">সার্চ ইতিহাস মুছে ফেলুন</string>
<string name="clear_search_history">সার্চ ইতিহাস মুছে ফেল</string>
<string name="pref_background_behavior_summary">চালু ভিডিও কি করবে যখন পেছনে যাবে</string>
<string name="settings_permissions_error_float">অ্যান্ড্রয়েড সেটিং এ পিকচার ইন পিকচার পারমিশন বন্ধ আছে এই আয়াপ এ</string>
<string name="settings_api_error_float">অ্যান্ড্রয়েড ভার্সন ভাসমান ভিডিও সাপোর্ট করে</string>
<string name="pref_background_float">ভাসমান উইন্ডো তে ভিডিও চালু রাখুন</string>
<string name="pref_background_stop">সব প্লেব্যাক বন্ধ করুন</string>
<string name="pref_description_language_app">ভাষা পছন্দ করুন অ্যাপ্লিকেশান এর জন্য। রিস্টার্ট করুন পরিবর্তন দেখার জন্য।</string>
<string name="pref_background_float">ভাসমান উইন্ডোতে ভিডিও চালু রাখো</string>
<string name="pref_background_stop">সব প্লেব্যাক বন্ধ কর</string>
<string name="pref_description_language_app">ভাষা পছন্দ করো অ্যাপ্লিকেশানের জন্য। রিস্টার্ট করো পরিবর্তন দেখার জন্য।</string>
<string name="pref_language_app">অ্যাপ্লিকেশান এর ভাষা</string>
<string name="pref_description_back_pause">ভিডিও চলার সময় ব্যাকগ্রাউন্ড প্লে পজ হবে ব্যাক বাটন প্রেস করলে।</string>
<string name="pref_title_back_pause">ব্যাক বাটন এ পজ</string>
@ -360,4 +360,5 @@
<string name="pref_insecure_confirm_no">না</string>
<string name="pref_insecure_confirm_title">সতর্কতা!</string>
<string name="settings_activity_advanced_category_title">উন্নত</string>
<string name="server_book_add_save_button">সংরক্ষন</string>
</resources>

View File

@ -44,5 +44,8 @@
<string name="pref_title_peertube_server">Εξυπηρετητής PeerTube</string>
<string name="pref_description_language">Επιλογή γλώσσας βίντεο, αντί να εμφανίζονται όλα τα βίντεο σε όλες τις γλώσσες.</string>
<string name="pref_title_version">Έκδοση</string>
<string name="pref_title_license">Άδεια χρήσης</string>
<string name="pref_title_license">Άδεια</string>
<string name="video_meta_button_tags">Ετικέτες</string>
<string name="video_meta_button_language">Γλώσσα</string>
<string name="video_meta_button_license">Άδεια</string>
</resources>

View File

@ -352,4 +352,12 @@
<string name="pref_title_buildtime">Temps de construction</string>
<string name="authentication_token_refresh_success">Jeton rafraîchi</string>
<string name="authentication_token_refresh_failed">Impossible de rafraîchir le jeton</string>
<string name="pref_insecure_confirm_message">Vous êtes sur le point de désactiver toutes les validations des certificats SSL dans Thorium. Le désactiver peut être vraiment dangereux si le serveur Peertube n\'est pas sous votre contrôle, car une attaque du type « attaque de l\'homme du milieu » (anglais: « man in the middle attack ») peut diriger le trafic vers un autre serveur à votre insu. Un attaquant peut enregistrer les mots de passe et d\'autres informations personnelles.</string>
<string name="pref_insecure_confirm_yes">Oui</string>
<string name="pref_insecure_confirm_no">Non</string>
<string name="pref_insecure_confirm_title">Attention !</string>
<string name="settings_activity_advanced_category_title">Avancé</string>
<string name="server_book_add_save_button">Sauvegarder</string>
<string name="pref_title_accept_insecure">Désactiver la vérification des certificats SSL</string>
<string name="pref_description_accept_insecure">Ignorer les connections non sécurisées. Utiliser cette option uniquement si vous connaissez le serveur auquel vous vous connectez. Requiert un redémarrage de l\'application.</string>
</resources>

View File

@ -130,4 +130,135 @@
<string name="login_current_server_hint">现在的服务器</string>
<string name="video_speed_075">0.75倍速</string>
<string name="video_speed_125">1.25倍速</string>
<string name="pt">葡萄牙语</string>
<string name="pl">波兰语</string>
<string name="fa">波斯语</string>
<string name="pa">旁遮普语</string>
<string name="pks">巴基斯坦手语</string>
<string name="os">奥塞梯语</string>
<string name="om">奥罗莫语</string>
<string name="oj">奥吉布瓦语</string>
<string name="oc">欧西坦语</string>
<string name="ny">尼扬贾语</string>
<string name="nn">新挪威语</string>
<string name="nb">书面挪威语</string>
<string name="no">挪威语</string>
<string name="se">北萨米语</string>
<string name="nd">北恩德贝勒语</string>
<string name="ng">恩东加语</string>
<string name="nv">纳瓦霍语</string>
<string name="na">瑙鲁语</string>
<string name="menu_video_options_quality_automated">自动</string>
<string name="authentication_token_refresh_failed">无法刷新令牌</string>
<string name="authentication_token_refresh_success">令牌已刷新</string>
<string name="settings_activity_advanced_category_title">高级</string>
<string name="pref_insecure_confirm_title">警告!</string>
<string name="pref_insecure_confirm_message">你即将在 Thorium 中禁用所有 SSL 认证验证。如果 peertube 服务器不在你的控制之下,禁用这个功能是非常危险的,因为中间人攻击可能会在你不知情的情况下将流量引导到另一个服务器。攻击者可以记录密码和其他个人数据。</string>
<string name="mh">马绍尔语</string>
<string name="mr">马拉地语</string>
<string name="mi">毛利语</string>
<string name="mt">马耳他语</string>
<string name="ml">马拉雅拉姆语</string>
<string name="mg">马达加斯加语</string>
<string name="mk">马其顿语</string>
<string name="lb">卢森堡语</string>
<string name="lu">卢巴加丹加语</string>
<string name="jbo">逻辑语</string>
<string name="lt">立陶宛语</string>
<string name="ln">林加拉语</string>
<string name="li">林堡语</string>
<string name="lv">拉脱维亚语</string>
<string name="ku">库尔德语</string>
<string name="avk">科塔瓦语</string>
<string name="kg">刚果语</string>
<string name="kv">科米语</string>
<string name="tlh">克林贡语</string>
<string name="ky">吉尔吉斯语</string>
<string name="rw">卢旺达语</string>
<string name="ki">基库尤语</string>
<string name="kk">哈萨克语</string>
<string name="ks">克什米尔语</string>
<string name="kr">卡努里语</string>
<string name="kl">格陵兰语</string>
<string name="jsl">日本手语</string>
<string name="ga">爱尔兰语</string>
<string name="ik">伊努皮克语</string>
<string name="iu">因纽特语</string>
<string name="id">印尼语</string>
<string name="ig">伊博语</string>
<string name="is">冰岛语</string>
<string name="hu">匈牙利语</string>
<string name="ho">希里摩图语</string>
<string name="hi">印地语</string>
<string name="hz">赫雷罗语</string>
<string name="ha">豪萨语</string>
<string name="ht">海地语</string>
<string name="gn">瓜拉尼语</string>
<string name="gsg">德语手语</string>
<string name="ka"># 格鲁吉亚语</string>
<string name="gl">加里西亚语</string>
<string name="ff">富拉语</string>
<string name="fsl">法国手语</string>
<string name="fi">芬兰语</string>
<string name="fj">斐济语</string>
<string name="fo">法罗语</string>
<string name="ee">埃维语</string>
<string name="et">爱沙尼亚语</string>
<string name="eo">世界语</string>
<string name="dz">不丹语</string>
<string name="nl">荷兰语</string>
<string name="dv">迪维希语</string>
<string name="dsl">丹麦手语</string>
<string name="da">丹麦语</string>
<string name="cse">捷克手语</string>
<string name="cs">捷克语</string>
<string name="hr">克罗地亚语</string>
<string name="cr">克里语</string>
<string name="co">科西嘉语</string>
<string name="kw">康沃尔语</string>
<string name="cv">楚瓦什语</string>
<string name="csl">中国手语</string>
<string name="ce">车臣语</string>
<string name="ch">查莫罗语</string>
<string name="ca">加泰罗尼亚语</string>
<string name="my">缅甸语</string>
<string name="bg">保加利亚语</string>
<string name="bfi">英国手语</string>
<string name="br">布列塔尼语</string>
<string name="bzs">巴西手语</string>
<string name="bs">波斯尼亚语</string>
<string name="bi">比斯拉马语</string>
<string name="bn_rBD">孟加拉语(孟加拉国)</string>
<string name="be">白罗斯语</string>
<string name="eu">巴斯克菜</string>
<string name="ba">巴什基尔语</string>
<string name="bm">班巴拉语</string>
<string name="az">阿塞拜疆语</string>
<string name="ay">艾马拉语</string>
<string name="av">阿瓦尔语</string>
<string name="as">阿萨姆语</string>
<string name="an">阿拉贡语</string>
<string name="am">阿姆哈拉语</string>
<string name="ase">美国手语</string>
<string name="sq">阿尔巴尼亚语</string>
<string name="ak">阿坎语</string>
<string name="af">南非语</string>
<string name="aa">阿法尔语</string>
<string name="pref_title_accept_insecure">禁用 SSL 证书检查</string>
<string name="pref_description_accept_insecure">忽略不安全的连接。只有当你知道你要连接的服务器时才使用此功能。需要重新启动应用程序。</string>
<string name="clear_search_history_prompt">你想永久删除搜索历史吗?</string>
<string name="clear_search_history">清除搜索历史</string>
<string name="pref_background_behavior_summary">播放视频在进行后台播放时如何响应</string>
<string name="settings_permissions_error_float">在 Android 设置中禁用了此应用的画中画权限</string>
<string name="settings_api_error_float">Android 版本不支持悬浮视频</string>
<string name="pref_background_behavior">后台播放配置</string>
<string name="pref_background_float">在悬浮窗中继续播放视频</string>
<string name="pref_background_stop">停止所有播放</string>
<string name="pref_background_audio">继续作为背景音频流</string>
<string name="pref_description_language_app">选择应用程序界面的语言。重新启动应用程序以使更改生效。</string>
<string name="pref_language_app">应用程序语言</string>
<string name="pref_description_license">
\n<b>GNU Affero General Public License v3.0</b>
\n
\nPermissions of this strongest copyleft license are conditioned on making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license. Copyright and license notices must be preserved. Contributors provide an express grant of patent rights. When a modified version is used to provide a service over a network, the complete source code of the modified version must be made available.</string>
</resources>

View File

@ -5,7 +5,9 @@
<color name="themeSelected">#e300aaff</color>
<color name="seperator">#7ca6a6a6</color>
<color name="videoBackgroundColor">#000000</color>
<color name="durationBackgroundColor">#232323</color>
<color name="durationLiveBackgroundColor">#ff0000</color>
<color name="durationTextColor">#ffffff</color>
<!-- RED Theme -->
<color name="primaryColorRed">#F44336</color>

View File

@ -361,4 +361,5 @@
<string name="pref_insecure_confirm_no">No</string>
<string name="pref_insecure_confirm_yes">Yes</string>
<string name="pref_insecure_confirm_message">You are about the disable all SSL Certification validation in Thorium. Disabling this can be very dangerous if the peertube server is not under your control, because a man-in-the-middle attack could direct traffic to another server without your knowledge. An attacker could record passwords and other personal data.</string>
<string name="video_list_live_marker">LIVE</string>
</resources>

View File

@ -33,10 +33,10 @@ postdata="{\"tag_name\":\"${CI_COMMIT_TAG}\",\"target_commitish\":\"master\",\"n
# Generate Release
echo "Generate Release..."
echo "${postdata}" | jq
echo "${postdata}" | jq .
res=$(curl -s -X POST -H "Content-Type:application/json" -H "Authorization: token ${github_token}" https://${username}@api.github.com/repos/${repo}/releases -d "${postdata}")
echo "${res}" | jq
echo "${res}" | jq .
release_id=$(echo "${res}" | jq '.id')

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
# External environment variables
VERSION_CODE="$1"
export VERSION_NAME=${VERSION_CODE:0:1}.${VERSION_CODE:1:1}.${VERSION_CODE:2}
CHANGES=$(cat fastlane/metadata/android/en-US/changelogs/$VERSION_CODE.txt)
DATE=$(date '+%Y-%m-%d')
NEW="### Version ${VERSION_NAME} Tag: v${VERSION_NAME} (${DATE})\n${CHANGES}\n"
echo -e "${NEW}\n$(cat CHANGELOG.md)" > CHANGELOG.md

View File

@ -0,0 +1,7 @@
- X'in pip modunda arka plan sesini düzgün şekilde durdurması sağlandı (@dhk2)
- Ayarlar menüsüne arama geçmişini temizle seçeneği eklendi (@dhk2)
- Hiçbir dil seçilmediğinde tüm video dillerinin öntanımlı olması düzeltildi
- Simge kütüphanesi güncellendi
- Video oynatma için arabelleğe alma göstergesi eklendi
- 0p video sunan sunuculardaki boş video sorunları düzeltildi.
- Çeviriler güncellendi

View File

@ -0,0 +1 @@
- HLS oynatma desteği eklendi

View File

@ -0,0 +1 @@
- Video oynatmayı engelleyen yanlış model düzeltildi

View File

@ -0,0 +1,6 @@
# 1.1.0 (2021-02-01)
### Özellikler
* **dil:** Fince eklendi 02bcd74

View File

@ -0,0 +1,7 @@
- X в режимі зображення в зображенні зупиняє фоновий звук належним чином (@dhk2)
- Додавання чіткого параметра історії пошуку в меню налаштувань (@dhk2)
- Виправлено відсутність вибраної типовою мови, для всіх мов відео
- Оновлено бібліотеку піктограм
- Доданий індикатор буферизації відтворення відео
- Виправлено проблему порожніх відео на серверах, що пропонують 0p відео.
- Оновлено переклади

View File

@ -0,0 +1 @@
- Додано підтримку відтворення HLS

View File

@ -0,0 +1 @@
- Виправлено неправильну модель, що перешкоджала відтворенню відео

View File

@ -0,0 +1,6 @@
# 1.1.0 (2021-02-01)
### Функції
* **мови:** Додано фінську 02bcd74

View File

@ -0,0 +1,7 @@
- 在畫中畫模式下讓 X 正確停止背景音訊 (@dhk2)
- 設定選單中新增清除搜尋歷史紀錄的選項 (@dhk2)
- 修正未選取語言的問題,預設為所有影片語言
- 更新圖示庫
- 新增緩衝指示器到影片播放中
- 修復伺服器提供 0p 影片的空白影片問題。
- 更新翻譯

View File

@ -0,0 +1 @@
- 新增 HLS 播放支援

View File

@ -0,0 +1 @@
- 修正了會阻止影片播放的不正確模型

View File

@ -0,0 +1,6 @@
# 1.1.0 (2021-02-01)
### 功能
* **語言:** 新增芬蘭文 02bcd74