Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Edition in wrong language (Release 2) #22

Closed
Gaoyifei1011 opened this issue Jan 10, 2022 · 19 comments
Closed

Edition in wrong language (Release 2) #22

Gaoyifei1011 opened this issue Jan 10, 2022 · 19 comments
Labels
bug Something isn't working

Comments

@Gaoyifei1011
Copy link
Contributor

Translation Problems about winver uwp
Winver UWP翻译的问题

很高兴看见您和您的团队发布2.0版本并将其发布到微软商店。
Great to see you and your team release version 2.0 to the Microsoft Store.

在升级之后,我发现了一些问题。
After the upgrade, I found some problems.

1.这个版本并没有添加预览版本的过期时间和评估副本,是否您还未开发这一方面的功能或者是等待未来的版本发布?

  1. This version does not add the expiration time and evaluation copy of the preview version. Have you not developed this aspect yet or are you waiting for a future version to be released?
    屏幕截图 2022-01-10 193101
    图片

2.在您的程序里面,我看到关键字"Windows"最终是被Windows 操作系统的具体版本所替代,但与之相应的是这个关键字被替代的内容却并没有添加相应的多语言支持,比如我的电脑安装的是"Windows 11专业工作站版",最终显示成了“Windows 11 Pro for Workstations”,希望您能够在接下来的版本中添加有关这一关键字的多语言支持。
2. In your program, I see that the keyword "Windows" is eventually replaced by the specific version of the Windows operating system, but correspondingly, the content of the replaced keyword has not added corresponding multi-language support. , for example, my computer is installed with "Windows 11专业工作站版", which eventually shows "Windows 11 Pro for Workstations". I hope you can add multi-language support for this keyword in the next version.
图片
图片

@dongle-the-gadget
Copy link
Owner

dongle-the-gadget commented Jan 10, 2022

Expiration

Currently testing
image

Language issue

Release 2.0 now fetches from the registry (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName) instead of WMI. This allows faster launching and proper ARM64 support, however seems that Windows doesn't localize this text, therefore causing it to be in English.

I'm afraid that there might be nothing I could do about this as this is beyond my scope.

@dongle-the-gadget dongle-the-gadget changed the title Problems about winver uwp Translation issue in 2.0 Jan 10, 2022
@dongle-the-gadget
Copy link
Owner

I'll flag this issue as "won't fix" for now, however I'll try to see if there are anything I could do about the matter.

@dongle-the-gadget dongle-the-gadget added bug Something isn't working wontfix This will not be worked on and removed wontfix This will not be worked on labels Jan 10, 2022
@dongle-the-gadget
Copy link
Owner

Actually looking further, I could workaround that by checking the edition ID and use resource files, however this approach requires translators for existing languages, which I don't know if I would be able to gather our existing translators.

@dongle-the-gadget
Copy link
Owner

OK turns out that this is much harder than I thought as there are many more edition IDs than I expected.

@Gaoyifei1011
Copy link
Contributor Author

并且忘了说了,我记得1.X的版本仍然保留了应用执行别名“WinverUWP.EXE”和一些启动的协议,是否在2.0版本将其移除或者是忘记添加了?
And I forgot to mention that the 1.x version still retains the application execution alias "winveruwp.exe" and some startup protocols. Did you remove it in version 2.0 or forget to add it?

@dongle-the-gadget
Copy link
Owner

并且忘了说了,我记得1.X的版本仍然保留了应用执行别名“WinverUWP.EXE”和一些启动的协议,是否在2.0版本将其移除或者是忘记添加了? And I forgot to mention that the 1.x version still retains the application execution alias "winveruwp.exe" and some startup protocols. Did you remove it in version 2.0 or forget to add it?

Yeah didn't add it.

@dongle-the-gadget
Copy link
Owner

Well doesn't take much to like fix or anything, however the certification part is quite frustrating and it just finished today so wanna take a break from uploading anything to the Store today.

@Gaoyifei1011
Copy link
Contributor Author

‎好吧,事实证明,这比我想象的要难得多,因为版本ID比我预期的要多得多。‎

是的,毕竟除了Windows 包括X86,X64,ARM64这三种系统,这三种系统都有着不同的ID版本,所以能够找到所有版本的ID并做到一一对应也是有些麻烦的。
Yes, after all, there are X86,X64 and ARM64 operating systems besides Windows, all of which have different ID versions, so it is a bit of a hassle to find all versions of ids and make a one to one match.

@dongle-the-gadget
Copy link
Owner

‎好吧,事实证明,这比我想象的要难得多,因为版本ID比我预期的要多得多。‎

是的,毕竟除了Windows 包括X86,X64,ARM64这三种系统,这三种系统都有着不同的ID版本,所以能够找到所有版本的ID并做到一一对应也是有些麻烦的。 Yes, after all, there are X86,X64 and ARM64 operating systems besides Windows, all of which have different ID versions, so it is a bit of a hassle to find all versions of ids and make a one to one match.

I don't think it makes an effect on the edition IDs though since the architectures don't have their separate editions, however there are still a lot of editions.

@dongle-the-gadget
Copy link
Owner

dongle-the-gadget commented Jan 11, 2022

And it's basically impossible to grasp all editions (and filter out the unnecessary ones) as there has been no up to date list about them.

@dongle-the-gadget
Copy link
Owner

Here's the most up to date list of unfiltered EditionIDs:

        Undefined = 0x00000000,
        Ultimate = 0x00000001,
        HomeBasic = 0x00000002,
        HomePremium = 0x00000003,
        Enterprise = 0x00000004,
        HomeBasicN = 0x00000005,
        Business = 0x00000006,
        StandardServer = 0x00000007,
        DatacenterServer = 0x00000008,
        SmallBusinessServer = 0x00000009,
        EnterpriseServer = 0x0000000A,
        Starter = 0x0000000B,
        DatacenterServerCore = 0x0000000C,
        StandardServerCore = 0x0000000D,
        EnterpriseServerCore = 0x0000000E,
        EnterpriseServerIA64 = 0x0000000F,
        BusinessN = 0x00000010,
        WebServer = 0x00000011,
        ClusterServer = 0x00000012,
        HomeServer = 0x00000013,
        StorageExpressServer = 0x00000014,
        StorageStandardServer = 0x00000015,
        StorageWorkgroupServer = 0x00000016,
        StorageEnterpriseServer = 0x00000017,
        ServerForSmallBusiness = 0x00000018,
        SmallBusinessServerPremium = 0x00000019,
        HomePremiumN = 0x0000001A,
        EnterpriseN = 0x0000001B,
        UltimateN = 0x0000001C,
        WebServerCore = 0x0000001D,
        MediumBusinessServerManagement = 0x0000001E,
        MediumBusinessServerSecurity = 0x0000001F,
        MediumBusinessServerMessaging = 0x00000020,
        ServerFoundation = 0x00000021,
        HomePremiumServer = 0x00000022,
        ServerForSmallBusinessV = 0x00000023,
        StandardServerV = 0x00000024,
        DatacenterServerV = 0x00000025,
        EnterpriseServerV = 0x00000026,
        DatacenterServerCoreV = 0x00000027,
        StandardServerCoreV = 0x00000028,
        EnterpriseServerCoreV = 0x00000029,
        HyperV = 0x0000002A,
        StorageExpressServerCore = 0x0000002B,
        StorageServerStandardCore = 0x0000002C,
        StorageWorkgroupServerCore = 0x0000002D,
        StorageEnterpriseServerCore = 0x0000002E,
        StarterN = 0x0000002F,
        Professional = 0x00000030,
        ProfessionalN = 0x00000031,
        SBSolutionServer = 0x00000032,
        ServerForSBSolutions = 0x00000033,
        StandardServerSolutions = 0x00000034,
        StandardServerSolutionsCore = 0x00000035,
        SBSolutionServerEM = 0x00000036,
        ServerForSBSolutionsEM = 0x00000037,
        SolutionEmbeddedServer = 0x00000038,
        SolutionEmbeddedServerCore = 0x00000039,
        ProfessionalEmbedded = 0x0000003A,
        EssentialBusinessServerMGMT = 0x0000003B,
        EssentialBusinessServerADDL = 0x0000003C,
        EssentialBusinessServerMGMTSVC = 0x0000003D,
        EssentialBusinessServerADDLSVC = 0x0000003E,
        SmallBusinessServerPremiumCore = 0x0000003F,
        ClusterServerV = 0x00000040,
        Embedded = 0x00000041,
        StarterE = 0x00000042,
        HomeBasicE = 0x00000043,
        HomePremiumE = 0x00000044,
        ProfessionalE = 0x00000045,
        EnterpriseE = 0x00000046,
        UltimateE = 0x00000047,
        EnterpriseEvaluation = 0x00000048,
        Unknown49,
        Prerelease = 0x0000004A,
        Unknown4B,
        MultipointStandardServer = 0x0000004C,
        MultipointPremiumServer = 0x0000004D,
        Unknown4E = 0x0000004E,
        StandardEvaluationServer = 0x0000004F,
        DatacenterEvaluationServer = 0x00000050,
        PrereleaseARM = 0x00000051,
        PrereleaseN = 0x00000052,
        Unknown53,
        EnterpriseNEvaluation = 0x00000054,
        EmbeddedAutomotive = 0x00000055,
        EmbeddedIndustryA = 0x00000056,
        ThinPC = 0x00000057,
        EmbeddedA = 0x00000058,
        EmbeddedIndustry = 0x00000059,
        EmbeddedE = 0x0000005A,
        EmbeddedIndustryE = 0x0000005B,
        EmbeddedIndustryAE = 0x0000005C,
        Unknown5D,
        Unknown5E,
        StorageWorkgroupEvaluationServer = 0x0000005F,
        StorageStandardEvaluationServer = 0x00000060,
        CoreARM = 0x00000061,
        CoreN = 0x00000062,
        CoreCountrySpecific = 0x00000063,
        CoreSingleLanguage = 0x00000064,
        Core = 0x00000065,
        Unknown66,
        ProfessionalWMC = 0x00000067,
        MobileCore = 0x00000068,
        EmbeddedIndustryEval = 0x00000069,
        EmbeddedIndustryEEval = 0x0000006A,
        EmbeddedEval = 0x0000006B,
        EmbeddedEEval = 0x0000006C,
        NanoServer = 0x0000006D,
        CloudStorageServer = 0x0000006E,
        CoreConnected = 0x0000006F,
        ProfessionalStudent = 0x00000070,
        CoreConnectedN = 0x00000071,
        ProfessionalStudentN = 0x00000072,
        CoreConnectedSingleLanguage = 0x00000073,
        CoreConnectedCountrySpecific = 0x00000074,
        ConnectedCAR = 0x00000075,
        IndustryHandheld = 0x00000076,
        PPIPro = 0x00000077,
        ARM64Server = 0x00000078,
        Education = 0x00000079,
        EducationN = 0x0000007A,
        IoTUAP = 0x0000007B,
        CloudHostInfrastructureServer = 0x0000007C,
        EnterpriseS = 0x0000007D,
        EnterpriseSN = 0x0000007E,
        ProfessionalS = 0x0000007F,
        ProfessionalSN = 0x00000080,
        EnterpriseSEvaluation = 0x00000081,
        EnterpriseSNEvaluation = 0x00000082,
        Unknown83,
        Unknown84,
        Unknown85,
        Unknown86,
        Holographic = 0x00000087,
        HolographicBusiness = 0x00000088,
        Unknown89 = 0x00000089,
        ProSingleLanguage = 0x0000008A,
        ProChina = 0x0000008B,
        EnterpriseSubscription = 0x0000008C,
        EnterpriseSubscriptionN = 0x0000008D,
        Unknown8E,
        DatacenterNanoServer = 0x0000008F,
        StandardNanoServer = 0x00000090,
        DatacenterAServerCore = 0x00000091,
        StandardAServerCore = 0x00000092,
        DatacenterWSServerCore = 0x00000093,
        StandardWSServerCore = 0x00000094,
        UtilityVM = 0x00000095,
        Unknown96,
        Unknown97,
        Unknown98,
        Unknown99,
        Unknown9A,
        Unknown9B,
        Unknown9C,
        Unknown9D,
        Unknown9E,
        DatacenterEvaluationServerCore = 0x0000009F,
        StandardEvaluationServerCore = 0x000000A0,
        ProWorkstation = 0x000000A1,
        ProWorkstationN = 0x000000A2,
        UnknownA3,
        ProForEducation = 0x000000A4,
        ProForEducationN = 0x000000A5,
        UnknownA6,
        UnknownA7,
        AzureServerCore = 0x000000A8,
        AzureNanoServer = 0x000000A9,
        UnknownAA = 0x000000AA,
        EnterpriseG = 0x000000AB,
        EnterpriseGN = 0x000000AC,
        UnknownAD,
        UnknownAE,
        ServerRDSH = 0x000000AF,
        UnknownB0,
        UnknownB1,
        Cloud = 0x000000B2,
        CloudN = 0x000000B3,
        HubOS = 0x000000B4,
        UnknownB5,
        OneCoreUpdateOS = 0x000000B6,
        CloudE = 0x000000B7,
        Andromeda = 0x000000B8,
        IoTOS = 0x000000B9,
        CloudEN = 0x000000BA,
        IoTEdgeOS = 0x000000BB,
        IoTEnterprise = 0x000000BC,
        Lite = 0x000000BD,
        UnknownBE,
        IoTEnterpriseS = 0x000000BF,
        XboxSystemOS = 0x000000C0,
        XboxNativeOS = 0x000000C1,
        XboxGameOS = 0x000000C2,
        XboxERAOS = 0x000000C3,
        XboxDurangoHostOS = 0x000000C4,
        XboxScarlettHostOS = 0x000000C5,
        AzureStackHCIServerCore = 0x00000196,
        TurbineServer = 0x00000197

@dongle-the-gadget dongle-the-gadget changed the title Translation issue in 2.0 Edition in wrong language (Release 2) Jan 11, 2022
@dongle-the-gadget
Copy link
Owner

dongle-the-gadget commented Jan 11, 2022

@Gaoyifei1011 OK so I found out that I could use winbrand.dll in an UWP app, which might localize the edition correctly.
I haven't tested it in WACK though, which is a huge deal, because if my app fails WACK, it might be blocked from being uploaded to the Microsoft Store.

Anyway screenshot of the API working (this is code in a separate project as I am not near the PC I used for WinverUWP development) (text in English, but seems to return the same result as 1.x):
image

@Gaoyifei1011
Copy link
Contributor Author

@Gaoyifei1011 OK so I found out that I could use winbrand.dll in an UWP app, which might localize the edition correctly. I haven't tested it in WACK though, which is a huge deal, because if my app fails WACK, it might be blocked from being uploaded to the Microsoft Store.

Anyway screenshot of the API working (this is code in a separate project as I am not near the PC I used for WinverUWP development) (text in English, but seems to return the same result as 1.x): image

关于这个,我刚才使用Resource Hacker查看了一下,这次估计应该会显示正确的信息了。
I just checked this out using Resource Hacker, and this time it should show the correct information.
在我的电脑中,C:\Windows\system32\zh-cn\shell32.dll.mui中存放了"%WINDOWS_LONG%"变量,也就是你图片中显示的内容,应该在最终的显示中就能够显示出正确的名称了。但是我不太确定这个"%WINDOWS_LONG%"变量是否会在不同的语言下显示正确的名称,所以可能需要测试一下。
On my computer, C:\Windows\system32\zh-cn\shell32.dll.mui has the "%WINDOWS_LONG%" variable, which is the content displayed in your image, and should show the correct name in the final display. But I'm not sure if the "%WINDOWS_LONG%" variable will display the correct name in different languages, so I might need to test it.
并且我发现微软在不同语言下的shell32.dll.mui中已经存放了不同语言的信息,所以我觉得这是一个更好的方法直接使用微软自己定义的信息内容,不需要其他人翻译就能够多语言支持。(这是我个人的一个看法)
And I found that Microsoft has stored information of different languages in shell32.dll.mui in different languages, so I think it is a better way to directly use the information content defined by Microsoft itself, which can be supported in multiple languages without translation by others. (This is my personal opinion)
屏幕截图 2022-01-12 002229
屏幕截图 2022-01-12 002138

@dongle-the-gadget
Copy link
Owner

The only major hiccup now is whether WACK and MS Store would allow me to use this stuff, since this DLL isn't present in any API sets.

@dongle-the-gadget
Copy link
Owner

@Gaoyifei1011 unfortunately using winbrand.dll causes the app to fail WACK.

@dongle-the-gadget
Copy link
Owner

Another status update: I worked around that fail by just using LoadLibraryW and GetProcAddress instead of DllImport.

@Gaoyifei1011
Copy link
Contributor Author

And it's basically impossible to grasp all editions (and filter out the unnecessary ones) as there has been no up to date list about them.

不仅如此,当微软又发布了一个更新的,且从未见过的操作系统ID时,这个应用就不能及时的显示出操作系统的具体信息了。
Not only that, but when Microsoft released an updated, never-before-seen operating system ID, the application failed to display operating system information in a timely manner.

@Gaoyifei1011
Copy link
Contributor Author

@Gaoyifei1011 unfortunately using winbrand.dll causes the app to fail WACK.

额......这是一个很糟糕的结果。
e... This is a very bad result.

@dongle-the-gadget
Copy link
Owner

dongle-the-gadget commented Jan 12, 2022

@Gaoyifei1011 unfortunately using winbrand.dll causes the app to fail WACK.

额......这是一个很糟糕的结果。 e... This is a very bad result.

  1. WACK is pretty much an essential test for all UWP apps waiting for Store submissions, as it determines whether you can submit your app to the Microsoft Store. While some tests aren't actually used, there are still tests they will check your app against. If the app fails one of those, the package fails certification.
  2. Managed to workaround it anyway

    Another status update: I worked around that fail by just using LoadLibraryW and GetProcAddress instead of DllImport.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants